summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavan Kumar Tatavarthi <ctpavan@codeaurora.org>2013-02-15 12:01:51 -0800
committerSteve Kondik <shade@chemlab.org>2014-03-03 02:39:45 -0800
commit9f95938d15b77174ad1bdc376e2ee2507516303b (patch)
tree7d07b756624b681f25e34bd92967723b593e140d
parented85570cffca5b1593fea4eced6cae8b17736f1c (diff)
downloadandroid_packages_apps_Dialer-9f95938d15b77174ad1bdc376e2ee2507516303b.tar.gz
android_packages_apps_Dialer-9f95938d15b77174ad1bdc376e2ee2507516303b.tar.bz2
android_packages_apps_Dialer-9f95938d15b77174ad1bdc376e2ee2507516303b.zip
IMS: Dialer app changes for IMS
IMS Conference URI UI changes 1. Add a new button for initiating conference URI call in the Dial screen. 2. Send a intent for the conference call with a extra to indicate the call type as conference CRs-Fixed: 455241 Enable visibility of digits container for adding call 1. When a call is active, the user goes to home screen and presses the phone button and then chooses add call. The recipients box is not visible as the visibility of digits container is not VISIBLE. In this change, the visibility of digits container is set to VISBILE. CRs-Fixed: 486790 Change-Id: Id0131d5063e2c95647a6f956d0d1a39128fba940 CRs-Fixed: 582011
-rw-r--r--res/drawable-hdpi/ic_add_group_holo_dark.pngbin0 -> 2230 bytes
-rwxr-xr-xres/drawable-hdpi/ic_dialpad_holo_dark.pngbin0 -> 1389 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_add_group_holo_dark.pngbin0 -> 6870 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_add_group_holo_dark.pngbin0 -> 5697 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_add_group_holo_dark.pngbin0 -> 8294 bytes
-rw-r--r--res/drawable-mdpi/ic_add_group_holo_dark.pngbin0 -> 1441 bytes
-rwxr-xr-xres/drawable-mdpi/ic_dialpad_holo_dark.pngbin0 -> 1095 bytes
-rw-r--r--res/drawable-xhdpi/ic_add_group_holo_dark.pngbin0 -> 3181 bytes
-rwxr-xr-xres/drawable-xhdpi/ic_dialpad_holo_dark.pngbin0 -> 1439 bytes
-rw-r--r--res/drawable/dialpad_background.xml19
-rw-r--r--res/layout/dialpad_fragment.xml57
-rw-r--r--res/values/strings.xml5
-rw-r--r--src/com/android/dialer/dialpad/DialpadFragment.java176
13 files changed, 236 insertions, 21 deletions
diff --git a/res/drawable-hdpi/ic_add_group_holo_dark.png b/res/drawable-hdpi/ic_add_group_holo_dark.png
new file mode 100644
index 000000000..6d46ccffb
--- /dev/null
+++ b/res/drawable-hdpi/ic_add_group_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialpad_holo_dark.png b/res/drawable-hdpi/ic_dialpad_holo_dark.png
new file mode 100755
index 000000000..a0ab6c453
--- /dev/null
+++ b/res/drawable-hdpi/ic_dialpad_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_add_group_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_add_group_holo_dark.png
new file mode 100644
index 000000000..54f247ad1
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_add_group_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_add_group_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_add_group_holo_dark.png
new file mode 100644
index 000000000..a984b568b
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_add_group_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_add_group_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_add_group_holo_dark.png
new file mode 100644
index 000000000..3688e466b
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_add_group_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_add_group_holo_dark.png b/res/drawable-mdpi/ic_add_group_holo_dark.png
new file mode 100644
index 000000000..a676ab886
--- /dev/null
+++ b/res/drawable-mdpi/ic_add_group_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_dialpad_holo_dark.png b/res/drawable-mdpi/ic_dialpad_holo_dark.png
new file mode 100755
index 000000000..b57fcf344
--- /dev/null
+++ b/res/drawable-mdpi/ic_dialpad_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_add_group_holo_dark.png b/res/drawable-xhdpi/ic_add_group_holo_dark.png
new file mode 100644
index 000000000..85924aba4
--- /dev/null
+++ b/res/drawable-xhdpi/ic_add_group_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialpad_holo_dark.png b/res/drawable-xhdpi/ic_dialpad_holo_dark.png
new file mode 100755
index 000000000..f9a002c79
--- /dev/null
+++ b/res/drawable-xhdpi/ic_dialpad_holo_dark.png
Binary files differ
diff --git a/res/drawable/dialpad_background.xml b/res/drawable/dialpad_background.xml
new file mode 100644
index 000000000..0e31f5eac
--- /dev/null
+++ b/res/drawable/dialpad_background.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/dial_background_texture"
+ android:tileMode="repeat" />
diff --git a/res/layout/dialpad_fragment.xml b/res/layout/dialpad_fragment.xml
index dca9bad68..08cc97aca 100644
--- a/res/layout/dialpad_fragment.xml
+++ b/res/layout/dialpad_fragment.xml
@@ -71,6 +71,24 @@
android:background="?android:attr/selectableItemBackground"
android:contentDescription="@string/description_delete_button"
android:src="@drawable/ic_dial_action_delete" />
+
+ <!-- recipients replaces digits and deleteButton when
+ dial conference controls are made visible. -->
+ <EditText
+ android:id="@+id/recipients"
+ android:layout_width="0dip"
+ android:layout_height="match_parent"
+ android:layout_gravity="center"
+ android:layout_marginLeft="8dip"
+ android:layout_weight="1"
+ android:autoText="true"
+ android:background="@android:color/transparent"
+ android:hint="@string/to_hint"
+ android:maxLength="2000"
+ android:maxLines="3"
+ android:minHeight="48dip"
+ android:textColor="?android:attr/textColorPrimary"
+ android:textSize="16sp" />
</LinearLayout>
<!-- Keypad section -->
@@ -78,13 +96,35 @@
<View style="@style/DialpadHorizontalSeparator"/>
- <LinearLayout
+ <!-- dialpadStub values are copied from dialpad.xml. dialpadStub replaces dialpad when
+ dial conference controls are made visible. -->
+ <View
+ android:id="@+id/dialpadStub"
+ android:layout_width="match_parent"
+ android:layout_height="0px"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="@dimen/dialpad_vertical_margin"
+ android:layout_weight="@integer/dialpad_layout_weight_dialpad"
+ android:background="@drawable/dialpad_background"
+ android:paddingBottom="10dip"
+ android:paddingLeft="5dip"
+ android:paddingRight="5dip" />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dialpad_vertical_margin"
+ android:background="#66000000" />
+
+ <TableLayout
android:id="@+id/dialButtonContainer"
android:layout_width="match_parent"
android:layout_height="@dimen/fake_action_bar_height"
android:layout_gravity="center_horizontal"
android:background="@color/dialpad_call_button_color"
android:layoutDirection="locale">
+ <TableRow
+ android:layout_height="match_parent"
+ android:layout_weight="1">
<ImageButton
android:id="@+id/call_history_on_dialpad_button"
android:layout_height="match_parent"
@@ -111,7 +151,20 @@
android:background="@drawable/btn_call"
android:src="@drawable/ic_menu_overflow_lt"
android:contentDescription="@string/action_menu_overflow_description" />
- </LinearLayout>
+ <!-- src for image for the button will be changed dynamically in the code.
+ See DialpadFragment.-->
+ <ImageButton
+ android:id="@+id/dialConferenceButton"
+ android:layout_width="0dip"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:layout_gravity="center"
+ android:state_enabled="false"
+ android:background="@drawable/btn_call"
+ android:contentDescription="@string/description_dial_button"
+ android:src="@drawable/ic_add_group_holo_dark" />
+ </TableRow>
+ </TableLayout>
<!-- "Dialpad chooser" UI, shown only when the user brings up the
Dialer while a call is already in progress.
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 55cdea4de..c151dafba 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -632,7 +632,6 @@
[CHAR LIMIT=NONE]
-->
<string name="contact_tooltip">Tap image to see all numbers or press and hold to reorder</string>
-
- <!-- Content description for dismiss button on badge. [CHAR LIMIT=NONE] -->
- <string name="description_dismiss">Dismiss</string>
+ <string name="dial_conference">Dial conference</string>
+ <string name="to_hint">1111:to;sip:abby@example.com:bcc;sip:bill@example.com:cc;</string>
</resources>
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 6ddf99378..65b6a9d70 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -71,6 +71,7 @@ import android.view.ViewTreeObserver.OnPreDrawListener;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
+import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
@@ -92,6 +93,7 @@ import com.android.dialer.database.DialerDatabaseHelper;
import com.android.dialer.interactions.PhoneNumberInteraction;
import com.android.dialer.util.OrientationUtil;
import com.android.internal.telephony.ITelephony;
+import com.android.internal.telephony.TelephonyProperties;
import com.android.phone.common.CallLogAsync;
import com.android.phone.common.HapticFeedback;
import com.google.common.annotations.VisibleForTesting;
@@ -204,6 +206,9 @@ public class DialpadFragment extends Fragment
private View mDigitsContainer;
private EditText mDigits;
+ private EditText mRecipients;
+ private View mDialpadStub;
+
/** Remembers if we need to clear digits field when the screen is completely gone. */
private boolean mClearDigitsOnStop;
@@ -220,6 +225,7 @@ public class DialpadFragment extends Fragment
private View mDialButtonContainer;
private View mDialButton;
+ private ImageButton mDialConferenceButton;
private ListView mDialpadChooser;
private DialpadChooserAdapter mDialpadChooserAdapter;
@@ -245,6 +251,10 @@ public class DialpadFragment extends Fragment
/** Identifier for the "Add Call" intent extra. */
private static final String ADD_CALL_MODE_KEY = "add_call_mode";
+ /** Identifier for the "Add Participant" intent extra. */
+ private static final String ADD_PARTICIPANT_KEY = "add_participant";
+ private boolean mAddParticipant = false;
+
/**
* Identifier for intent extra for sending an empty Flash message for
* CDMA networks. This message is used by the network to simulate a
@@ -258,6 +268,9 @@ public class DialpadFragment extends Fragment
private static final String EXTRA_SEND_EMPTY_FLASH
= "com.android.phone.extra.SEND_EMPTY_FLASH";
+ public static final String EXTRA_DIAL_CONFERENCE_URI =
+ "org.codeaurora.extra.DIAL_CONFERENCE_URI";
+
private String mCurrentCountryIso;
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
@@ -275,11 +288,23 @@ public class DialpadFragment extends Fragment
// Note there's a race condition in the UI here: the
// dialpad chooser could conceivably disappear (on its
// own) at the exact moment the user was trying to select
- // one of the choices, which would be confusing. (But at
+ // one of the choices, which would be confusing. (But at
// least that's better than leaving the dialpad chooser
// onscreen, but useless...)
showDialpadChooser(false);
}
+
+ if (state == TelephonyManager.CALL_STATE_IDLE) {
+ // No existing calls, conference can be originated.
+ // Note that when there is on going call, add call should not show dial
+ // conference button since normal dialpad should be used.
+ // Check if ImsPhone is created, if so enable the conference button.
+ if (isCallOnImsEnabled()) {
+ // Note, phone app still need to check if UI option to "Use Ims Always"
+ // is checked upon receiving dial request.
+ mDialConferenceButton.setVisibility(View.VISIBLE);
+ }
+ }
}
};
@@ -415,6 +440,18 @@ public class DialpadFragment extends Fragment
mDigits.setOnLongClickListener(this);
mDigits.addTextChangedListener(this);
PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(getActivity(), mDigits);
+
+ mRecipients = (EditText) fragmentView.findViewById(R.id.recipients);
+ if (mRecipients != null) {
+ mRecipients.setVisibility(View.GONE);
+ mRecipients.addTextChangedListener(this);
+ }
+
+ mDialpadStub = fragmentView.findViewById(R.id.dialpadStub);
+ if (mDialpadStub != null) {
+ mDialpadStub.setVisibility(View.GONE);
+ }
+
// Check for the presence of the keypad
View oneButton = fragmentView.findViewById(R.id.one);
if (oneButton != null) {
@@ -430,6 +467,18 @@ public class DialpadFragment extends Fragment
mDialButton = null;
}
+ mDialConferenceButton = (ImageButton) fragmentView.findViewById(R.id.dialConferenceButton);
+ if (isCallOnImsEnabled()) {
+ if (mDialConferenceButton != null) {
+ mDialConferenceButton.setOnClickListener(this);
+ mDialConferenceButton.setOnLongClickListener(this);
+ }
+ } else {
+ if (mDialConferenceButton != null) {
+ mDialConferenceButton.setVisibility(View.GONE);
+ }
+ }
+
mDelete = fragmentView.findViewById(R.id.deleteButton);
if (mDelete != null) {
mDelete.setOnClickListener(this);
@@ -604,11 +653,28 @@ public class DialpadFragment extends Fragment
}
}
+ } else {
+ mAddParticipant = intent.getBooleanExtra(ADD_PARTICIPANT_KEY, false);
+ if (isCallOnImsEnabled()) {
+ // for IMS AddParticipant feature add call, show normal
+ // dialpad with dial conference button.
+ mDialConferenceButton.setVisibility(View.VISIBLE);
+ } else {
+ // for add call, show normal dialpad without dial conference
+ // button.
+ mDialConferenceButton.setVisibility(View.GONE);
+ }
}
+ Log.d(TAG, "mAddParticipant = " + mAddParticipant);
showDialpadChooser(needToShowDialpadChooser);
setStartedFromNewIntent(false);
}
+ private boolean isCallOnImsEnabled() {
+ return (SystemProperties.getBoolean(
+ TelephonyProperties.CALLS_ON_IMS_ENABLED_PROPERTY, false));
+ }
+
public void setStartedFromNewIntent(boolean value) {
mStartedFromNewIntent = value;
}
@@ -1009,6 +1075,10 @@ public class DialpadFragment extends Fragment
}
return;
}
+ case R.id.dialConferenceButton: {
+ dialConferenceButtonPressed();
+ return;
+ }
default: {
Log.wtf(TAG, "Unexpected onClick() event from: " + view);
return;
@@ -1180,11 +1250,20 @@ public class DialpadFragment extends Fragment
* case described above).
*/
public void dialButtonPressed() {
- if (isDigitsEmpty()) { // No number entered.
+ boolean isDigitsShown = mDigits.isShown();
+ final String number = (isDigitsShown) ? mDigits.getText().toString() :
+ mRecipients.getText().toString().trim();
+
+ if (isDigitsShown && isDigitsEmpty()) { // No number entered.
handleDialButtonClickWithEmptyDigits();
+ } else if (!isDigitsShown && number.isEmpty()) {
+ // mRecipients must be empty
+ // TODO add support for conference URI in last number dialed
+ // use ErrorDialogFragment instead? also see android.app.AlertDialog
+ android.widget.Toast.makeText(getActivity(),
+ "Error: Cannot dial. Please provide conference recipients.",
+ android.widget.Toast.LENGTH_SHORT).show();
} else {
- final String number = mDigits.getText().toString();
-
// "persist.radio.otaspdial" is a temporary hack needed for one carrier's automated
// test equipment.
// TODO: clean it up.
@@ -1200,11 +1279,20 @@ public class DialpadFragment extends Fragment
}
// Clear the digits just in case.
- mDigits.getText().clear();
+ if (isDigitsShown) {
+ mDigits.getText().clear();
+ } else {
+ mRecipients.getText().clear();
+ }
} else {
final Intent intent = CallUtil.getCallIntent(number,
(getActivity() instanceof DialtactsActivity ?
((DialtactsActivity) getActivity()).getCallOrigin() : null));
+ if (!isDigitsShown) {
+ // must be dial conference add extra
+ intent.putExtra(EXTRA_DIAL_CONFERENCE_URI, true);
+ }
+ intent.putExtra(ADD_PARTICIPANT_KEY, mAddParticipant);
startActivity(intent);
hideAndClearDialpad();
}
@@ -1220,6 +1308,13 @@ public class DialpadFragment extends Fragment
((DialtactsActivity) getActivity()).getCallOrigin() : null;
}
+ public void dialConferenceButtonPressed() {
+ // show dial conference screen if it is not shown
+ // If it is already shown, show normal dial screen
+ boolean show = (mRecipients != null) ? !mRecipients.isShown() : false;
+ showDialConference(show);
+ }
+
private void handleDialButtonClickWithEmptyDigits() {
if (phoneIsCdma() && phoneIsOffhook()) {
// This is really CDMA specific. On GSM is it possible
@@ -1336,7 +1431,8 @@ public class DialpadFragment extends Fragment
* of the regular Dialer UI
*/
private void showDialpadChooser(boolean enabled) {
- // Check if onCreateView() is already called by checking one of View objects.
+ // Check if onCreateView() is already called by checking one of View
+ // objects.
if (!isLayoutReady()) {
return;
}
@@ -1346,33 +1442,75 @@ public class DialpadFragment extends Fragment
if (mDigitsContainer != null) {
mDigitsContainer.setVisibility(View.GONE);
} else {
- // mDigits is not enclosed by the container. Make the digits field itself gone.
+ // mDigits is not enclosed by the container. Make the digits
+ // field itself gone.
mDigits.setVisibility(View.GONE);
+ if (mDelete != null) mDelete.setVisibility(View.GONE);
+ if (mRecipients != null) mRecipients.setVisibility(View.GONE);
}
+ if (mDialpadStub != null) mDialpadStub.setVisibility(View.GONE);
if (mDialpad != null) mDialpad.setVisibility(View.GONE);
if (mDialButtonContainer != null) mDialButtonContainer.setVisibility(View.GONE);
mDialpadChooser.setVisibility(View.VISIBLE);
// Instantiate the DialpadChooserAdapter and hook it up to the
- // ListView. We do this only once.
+ // ListView. We do this only once.
if (mDialpadChooserAdapter == null) {
mDialpadChooserAdapter = new DialpadChooserAdapter(getActivity());
}
mDialpadChooser.setAdapter(mDialpadChooserAdapter);
} else {
// Log.i(TAG, "Displaying normal Dialer UI.");
- if (mDigitsContainer != null) {
- mDigitsContainer.setVisibility(View.VISIBLE);
- } else {
- mDigits.setVisibility(View.VISIBLE);
+ showDialConference(false);
+ if (mDialButtonContainer != null) {
+ mDialButtonContainer.setVisibility(View.VISIBLE);
}
- if (mDialpad != null) mDialpad.setVisibility(View.VISIBLE);
- if (mDialButtonContainer != null) mDialButtonContainer.setVisibility(View.VISIBLE);
mDialpadChooser.setVisibility(View.GONE);
}
}
+ private void showDialConference(boolean enabled) {
+ // Check if onCreateView() is already called by checking one of View
+ // objects.
+ if (!isLayoutReady()) {
+ return;
+ }
+ Log.d(TAG, "showDialConference " + enabled);
+
+ /*
+ * if enabled is true then pick child views that should be
+ * visible/invisible when dialpad is choosen from conference dial button
+ * if enabled is false then pick child views that should be
+ * visible/invisible when dialpad is choosen from other buttons
+ */
+
+ // viewable when choosen through conference button
+ int conferenceButtonVisibility = (enabled ? View.VISIBLE : View.GONE);
+ // not viewable when choosen through conference button
+ int nonConferenceButtonVisibility = (enabled ? View.GONE : View.VISIBLE);
+
+ // change the image visibility of the button
+ if (mRecipients != null) mRecipients.setVisibility(conferenceButtonVisibility);
+ if (mDialpadStub != null) mDialpadStub.setVisibility(conferenceButtonVisibility);
+ if (mDigitsContainer != null) mDigitsContainer.setVisibility(nonConferenceButtonVisibility);
+ if (mDigits != null) mDigits.setVisibility(nonConferenceButtonVisibility);
+ if (mDelete != null) mDelete.setVisibility(nonConferenceButtonVisibility);
+ if (mDialpad != null) mDialpad.setVisibility(nonConferenceButtonVisibility);
+ if (mDialConferenceButton != null) {
+ /*
+ * If dial conference view is shown, button should show dialpad
+ * image. Pressing the button again will return to normal dialpad
+ * view.
+ * If normal dialpad view is shown, button should show dial
+ * conference image. Pressing the button again will show dial
+ * conference view
+ */
+ mDialConferenceButton.setImageResource(enabled ? R.drawable.ic_dialpad_holo_dark
+ : R.drawable.ic_add_group_holo_dark);
+ }
+ }
+
/**
* @return true if we're currently showing the "dialpad chooser" UI.
*/
@@ -1629,8 +1767,14 @@ public class DialpadFragment extends Fragment
// Enable the Dial button if some digits have
// been entered, or if there is a last dialed number
// that could be redialed.
- mDialButton.setEnabled(digitsNotEmpty ||
- !TextUtils.isEmpty(mLastNumberDialed));
+ if(mRecipients.getVisibility() != View.VISIBLE) {
+ mDialButton.setEnabled(digitsNotEmpty ||
+ !TextUtils.isEmpty(mLastNumberDialed));
+ } else {
+ mDialButton.setEnabled(digitsNotEmpty ||
+ !TextUtils.isEmpty(mLastNumberDialed) ||
+ mRecipients.getText().length() > 0);
+ }
}
}
mDelete.setEnabled(digitsNotEmpty);