summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSantos Cordon <santoscordon@google.com>2013-09-16 04:12:53 -0700
committerSantos Cordon <santoscordon@google.com>2013-09-17 09:57:26 -0700
commit812c0e88d5d86c29e4942f9a1010a95cce789657 (patch)
tree8821cfb61cefc7f7eec1047c1a7ffc16b3e4d9c7
parenteabe3abaf927f4f730e2c743364d63b85b9480be (diff)
Outgoing/Conference UI changes for Cdma support
Changes: - rename Cdma* to Generic* in code - Stop showing "manage conference" for generic_conference cases - Show simple "merge" button for generic_conference cases - Add generic icon/name label for generic conference calls - Do not submit a contact info request for any conference call sincle they always display generic information (this also fixed some jank of the image flipping back and forth between generic and normal conference call).o bug:10769004 Change-Id: I379895612614483f7f3ea6fef493796ea855743b
-rw-r--r--InCallUI/res/drawable-hdpi/picture_dialing.pngbin0 -> 2509 bytes
-rw-r--r--InCallUI/res/drawable-ldrtl-hdpi/picture_dialing.pngbin0 -> 9815 bytes
-rw-r--r--InCallUI/res/drawable-ldrtl-mdpi/picture_dialing.pngbin0 -> 7473 bytes
-rw-r--r--InCallUI/res/drawable-ldrtl-xhdpi/picture_dialing.pngbin0 -> 12979 bytes
-rw-r--r--InCallUI/res/drawable-mdpi/picture_dialing.pngbin0 -> 1480 bytes
-rw-r--r--InCallUI/res/drawable-xhdpi/picture_dialing.pngbin0 -> 3707 bytes
-rw-r--r--InCallUI/res/drawable-xxhdpi/picture_dialing.pngbin0 -> 10653 bytes
-rw-r--r--InCallUI/src/com/android/incallui/CallButtonFragment.java16
-rw-r--r--InCallUI/src/com/android/incallui/CallButtonPresenter.java32
-rw-r--r--InCallUI/src/com/android/incallui/CallCardFragment.java26
-rw-r--r--InCallUI/src/com/android/incallui/CallCardPresenter.java105
11 files changed, 107 insertions, 72 deletions
diff --git a/InCallUI/res/drawable-hdpi/picture_dialing.png b/InCallUI/res/drawable-hdpi/picture_dialing.png
new file mode 100644
index 000000000..6311f693b
--- /dev/null
+++ b/InCallUI/res/drawable-hdpi/picture_dialing.png
Binary files differ
diff --git a/InCallUI/res/drawable-ldrtl-hdpi/picture_dialing.png b/InCallUI/res/drawable-ldrtl-hdpi/picture_dialing.png
new file mode 100644
index 000000000..cb587a88c
--- /dev/null
+++ b/InCallUI/res/drawable-ldrtl-hdpi/picture_dialing.png
Binary files differ
diff --git a/InCallUI/res/drawable-ldrtl-mdpi/picture_dialing.png b/InCallUI/res/drawable-ldrtl-mdpi/picture_dialing.png
new file mode 100644
index 000000000..4047b2258
--- /dev/null
+++ b/InCallUI/res/drawable-ldrtl-mdpi/picture_dialing.png
Binary files differ
diff --git a/InCallUI/res/drawable-ldrtl-xhdpi/picture_dialing.png b/InCallUI/res/drawable-ldrtl-xhdpi/picture_dialing.png
new file mode 100644
index 000000000..f167ecbe8
--- /dev/null
+++ b/InCallUI/res/drawable-ldrtl-xhdpi/picture_dialing.png
Binary files differ
diff --git a/InCallUI/res/drawable-mdpi/picture_dialing.png b/InCallUI/res/drawable-mdpi/picture_dialing.png
new file mode 100644
index 000000000..b81b6037e
--- /dev/null
+++ b/InCallUI/res/drawable-mdpi/picture_dialing.png
Binary files differ
diff --git a/InCallUI/res/drawable-xhdpi/picture_dialing.png b/InCallUI/res/drawable-xhdpi/picture_dialing.png
new file mode 100644
index 000000000..792cd8efe
--- /dev/null
+++ b/InCallUI/res/drawable-xhdpi/picture_dialing.png
Binary files differ
diff --git a/InCallUI/res/drawable-xxhdpi/picture_dialing.png b/InCallUI/res/drawable-xxhdpi/picture_dialing.png
new file mode 100644
index 000000000..17d45f55b
--- /dev/null
+++ b/InCallUI/res/drawable-xxhdpi/picture_dialing.png
Binary files differ
diff --git a/InCallUI/src/com/android/incallui/CallButtonFragment.java b/InCallUI/src/com/android/incallui/CallButtonFragment.java
index e53a34726..f79ed40f6 100644
--- a/InCallUI/src/com/android/incallui/CallButtonFragment.java
+++ b/InCallUI/src/com/android/incallui/CallButtonFragment.java
@@ -55,7 +55,7 @@ public class CallButtonFragment
private View mEndCallButton;
private View mExtraRowButton;
private View mManageConferenceButton;
- private View mCDMAMergeButton;
+ private View mGenericMergeButton;
@Override
CallButtonPresenter createPresenter() {
@@ -88,7 +88,13 @@ public class CallButtonFragment
getPresenter().manageConferenceButtonClicked();
}
});
- mCDMAMergeButton = parent.findViewById(R.id.cdmaMergeButton);
+ mGenericMergeButton = parent.findViewById(R.id.cdmaMergeButton);
+ mGenericMergeButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ getPresenter().mergeClicked();
+ }
+ });
mEndCallButton = parent.findViewById(R.id.endButton);
mEndCallButton.setOnClickListener(new View.OnClickListener() {
@@ -502,14 +508,14 @@ public class CallButtonFragment
public void showManageConferenceCallButton() {
mExtraRowButton.setVisibility(View.VISIBLE);
mManageConferenceButton.setVisibility(View.VISIBLE);
- mCDMAMergeButton.setVisibility(View.GONE);
+ mGenericMergeButton.setVisibility(View.GONE);
}
@Override
- public void showCDMAMergeButton() {
+ public void showGenericMergeButton() {
mExtraRowButton.setVisibility(View.VISIBLE);
mManageConferenceButton.setVisibility(View.GONE);
- mCDMAMergeButton.setVisibility(View.VISIBLE);
+ mGenericMergeButton.setVisibility(View.VISIBLE);
}
@Override
diff --git a/InCallUI/src/com/android/incallui/CallButtonPresenter.java b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
index 6b05ff5c7..db9876897 100644
--- a/InCallUI/src/com/android/incallui/CallButtonPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
@@ -226,8 +226,12 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
final boolean canMerge = call.can(Capabilities.MERGE_CALLS);
final boolean canAdd = call.can(Capabilities.ADD_CALL);
+ final boolean isGenericConference = call.can(Capabilities.GENERIC_CONFERENCE);
- if (canMerge) {
+ final boolean showGenericMerge = isGenericConference && canMerge;
+ final boolean showMerge = !isGenericConference && canMerge;
+
+ if (showMerge) {
ui.showMerge(true);
ui.showAddCall(false);
} else {
@@ -258,20 +262,18 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
//
// - "Manage conference" (used only on GSM devices)
// - "Merge" button (used only on CDMA devices)
- // TODO(klp) Add cdma merge button
- final boolean showCdmaMerge = false;
-// (phoneType == PhoneConstants.PHONE_TYPE_CDMA) && inCallControlState.canMerge;
- final boolean showExtraButtonRow =
- (showCdmaMerge || call.isConferenceCall()) && !getUi().isDialpadVisible();
+
+ final boolean showManageConference = (call.isConferenceCall() && !isGenericConference);
+ final boolean showExtraButtonRow = (showGenericMerge || showManageConference) &&
+ !getUi().isDialpadVisible();
+
+ Log.i(this, "isGeneric: " + isGenericConference);
+ Log.i(this, "showManageConference : " + showManageConference);
+ Log.i(this, "showGenericMerge: " + showGenericMerge);
if (showExtraButtonRow) {
- // Need to set up mCdmaMergeButton and mManageConferenceButton if this is the first
- // time they're visible.
- // TODO(klp) add cdma merge button
-// if (mCdmaMergeButton == null) {
-// setupExtraButtons();
-// }
-// mCdmaMergeButton.setVisibility(showCdmaMerge ? View.VISIBLE : View.GONE);
- if (call.isConferenceCall()) {
+ if (showGenericMerge) {
+ getUi().showGenericMergeButton();
+ } else if (showManageConference) {
getUi().showManageConferenceCallButton();
}
} else {
@@ -296,7 +298,7 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
void setAudio(int mode);
void setSupportedAudio(int mask);
void showManageConferenceCallButton();
- void showCDMAMergeButton();
+ void showGenericMergeButton();
void hideExtraRow();
void displayManageConferencePanel(boolean on);
}
diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index af3705a06..49ee786cd 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -168,12 +168,12 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
@Override
public void setPrimary(String number, String name, boolean nameIsNumber, String label,
- Drawable photo, boolean isConference, boolean isSipCall) {
+ Drawable photo, boolean isConference, boolean isGeneric, boolean isSipCall) {
Log.d(this, "Setting primary call");
if (isConference) {
- name = getView().getResources().getString(R.string.card_title_conf_call);
- photo = getView().getResources().getDrawable(R.drawable.picture_conference);
+ name = getConferenceString(isGeneric);
+ photo = getConferencePhoto(isGeneric);
nameIsNumber = false;
}
@@ -192,12 +192,12 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
@Override
public void setSecondary(boolean show, String name, boolean nameIsNumber, String label,
- Drawable photo, boolean isConference) {
+ Drawable photo, boolean isConference, boolean isGeneric) {
if (show) {
if (isConference) {
- name = getView().getResources().getString(R.string.card_title_conf_call);
- photo = getView().getResources().getDrawable(R.drawable.picture_conference);
+ name = getConferenceString(isGeneric);
+ photo = getConferencePhoto(isGeneric);
nameIsNumber = false;
}
@@ -316,10 +316,22 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
AnimationUtils.Fade.show(view);
} else {
AnimationUtils.startCrossFade(view, current, photo);
- mPhoto.setVisibility(View.VISIBLE);
+ view.setVisibility(View.VISIBLE);
}
}
+ private String getConferenceString(boolean isGeneric) {
+ Log.v(this, "isGenericString: " + isGeneric);
+ final int resId = isGeneric ? R.string.card_title_in_call : R.string.card_title_conf_call;
+ return getView().getResources().getString(resId);
+ }
+
+ private Drawable getConferencePhoto(boolean isGeneric) {
+ Log.v(this, "isGenericPhoto: " + isGeneric);
+ final int resId = isGeneric ? R.drawable.picture_dialing : R.drawable.picture_conference;
+ return getView().getResources().getDrawable(resId);
+ }
+
private void setBluetoothOn(boolean onOff) {
// Also, display a special icon (alongside the "Incoming call"
// label) if there's an incoming call and audio will be routed
diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java
index 12c14e8ce..1830f054c 100644
--- a/InCallUI/src/com/android/incallui/CallCardPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java
@@ -33,6 +33,7 @@ import com.android.incallui.InCallPresenter.InCallStateListener;
import com.android.incallui.InCallPresenter.IncomingCallListener;
import com.android.services.telephony.common.AudioMode;
import com.android.services.telephony.common.Call;
+import com.android.services.telephony.common.Call.Capabilities;
import com.android.services.telephony.common.CallIdentification;
import com.google.common.base.Preconditions;
@@ -74,15 +75,13 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
final CallIdentification identification = call.getIdentification();
- // TODO(klp): Logic to determine which ui field get what data resides in
- // contactInfoCache.
- // It needs to be moved so it can be re-used.
- mPrimaryContactInfo = ContactInfoCache.buildCacheEntryFromCall(mContext, identification,
- call.getState() == Call.State.INCOMING);
-
// start processing lookups right away.
- startContactInfoSearch(identification, true, call.isConferenceCall(),
- call.getState() == Call.State.INCOMING);
+ if (!call.isConferenceCall()) {
+ startContactInfoSearch(identification, true,
+ call.getState() == Call.State.INCOMING);
+ } else {
+ updateContactEntry(null, true, true);
+ }
}
}
@@ -150,35 +149,31 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
Log.d(this, "Primary call: " + primary);
Log.d(this, "Secondary call: " + secondary);
- if (primary != null) {
- if (mPrimary == null || mPrimary.getCallId() != primary.getCallId()) {
- // primary call has changed
- mPrimaryContactInfo = ContactInfoCache.buildCacheEntryFromCall(mContext,
- primary.getIdentification(), primary.getState() == Call.State.INCOMING);
- updatePrimaryDisplayInfo(mPrimaryContactInfo, isConference(primary));
- startContactInfoSearch(primary.getIdentification(), true,
- primary.isConferenceCall(), primary.getState() == Call.State.INCOMING);
- }
+ final boolean primaryChanged = !areCallsSame(mPrimary, primary);
+ final boolean secondaryChanged = !areCallsSame(mSecondary, secondary);
+ mSecondary = secondary;
+ mPrimary = primary;
+
+ if (primaryChanged && mPrimary != null) {
+ // primary call has changed
+ mPrimaryContactInfo = ContactInfoCache.buildCacheEntryFromCall(mContext,
+ mPrimary.getIdentification(), mPrimary.getState() == Call.State.INCOMING);
+ updatePrimaryDisplayInfo(mPrimaryContactInfo, isConference(mPrimary));
+ maybeStartSearch(mPrimary, true);
}
- if (secondary == null) {
+ if (mSecondary == null) {
// Secondary call may have ended. Update the ui.
mSecondaryContactInfo = null;
updateSecondaryDisplayInfo(false);
- } else {
- if (mSecondary == null || mSecondary.getCallId() != secondary.getCallId()) {
- // secondary call has changed
- mSecondaryContactInfo = ContactInfoCache.buildCacheEntryFromCall(mContext,
- secondary.getIdentification(), secondary.getState() == Call.State.INCOMING);
- updateSecondaryDisplayInfo(secondary.isConferenceCall());
- startContactInfoSearch(secondary.getIdentification(), false,
- secondary.isConferenceCall(), secondary.getState() == Call.State.INCOMING);
- }
+ } else if (secondaryChanged) {
+ // secondary call has changed
+ mSecondaryContactInfo = ContactInfoCache.buildCacheEntryFromCall(mContext,
+ mSecondary.getIdentification(), mSecondary.getState() == Call.State.INCOMING);
+ updateSecondaryDisplayInfo(mSecondary.isConferenceCall());
+ maybeStartSearch(mSecondary, false);
}
- mPrimary = primary;
- mSecondary = secondary;
-
// Start/Stop the call time update timer
if (mPrimary != null && mPrimary.getState() == Call.State.ACTIVE) {
Log.d(this, "Starting the calltime timer");
@@ -233,18 +228,36 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
}
}
+ private boolean areCallsSame(Call call1, Call call2) {
+ if (call1 == null && call2 == null) {
+ return true;
+ } else if (call1 == null || call2 == null) {
+ return false;
+ }
+
+ // otherwise compare call Ids
+ return call1.getCallId() == call2.getCallId();
+ }
+
+ private void maybeStartSearch(Call call, boolean isPrimary) {
+ // no need to start search for conference calls which show generic info.
+ if (call != null && !call.isConferenceCall()) {
+ startContactInfoSearch(call.getIdentification(), isPrimary,
+ call.getState() == Call.State.INCOMING);
+ }
+ }
+
/**
* Starts a query for more contact data for the save primary and secondary calls.
*/
private void startContactInfoSearch(final CallIdentification identification,
- final boolean isPrimary, final boolean isConference, boolean isIncoming) {
-
+ final boolean isPrimary, boolean isIncoming) {
final ContactInfoCache cache = ContactInfoCache.getInstance(mContext);
cache.findInfo(identification, isIncoming, new ContactInfoCacheCallback() {
@Override
public void onContactInfoComplete(int callId, ContactCacheEntry entry) {
- updateContactEntry(entry, isPrimary, isConference);
+ updateContactEntry(entry, isPrimary, false);
if (entry.name != null) {
Log.d(TAG, "Contact found: " + entry);
}
@@ -266,11 +279,12 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
});
}
- private boolean isConference(Call call) {
- if (call == null) {
- return false;
- }
- return call.isConferenceCall();
+ private static boolean isConference(Call call) {
+ return call != null && call.isConferenceCall();
+ }
+
+ private static boolean isGenericConference(Call call) {
+ return call != null && call.can(Capabilities.GENERIC_CONFERENCE);
}
private void updateContactEntry(ContactCacheEntry entry, boolean isPrimary,
@@ -332,15 +346,15 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
return;
}
+ final boolean isGenericConf = isGenericConference(mPrimary);
if (entry != null) {
final String name = getNameForCall(entry);
final String number = getNumberForCall(entry);
final boolean nameIsNumber = name != null && name.equals(entry.number);
ui.setPrimary(number, name, nameIsNumber, entry.label,
- entry.photo, isConference, entry.isSipCall);
+ entry.photo, isConference, isGenericConf, entry.isSipCall);
} else {
- // reset to nothing (like at end of call)
- ui.setPrimary(null, null, false, null, null, false, false);
+ ui.setPrimary(null, null, false, null, null, isConference, isGenericConf, false);
}
}
@@ -352,6 +366,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
return;
}
+ final boolean isGenericConf = isGenericConference(mSecondary);
if (mSecondaryContactInfo != null) {
Log.d(TAG, "updateSecondaryDisplayInfo() " + mSecondaryContactInfo);
final String nameForCall = getNameForCall(mSecondaryContactInfo);
@@ -359,10 +374,10 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
final boolean nameIsNumber = nameForCall != null && nameForCall.equals(
mSecondaryContactInfo.number);
ui.setSecondary(true, nameForCall, nameIsNumber, mSecondaryContactInfo.label,
- mSecondaryContactInfo.photo, isConference);
+ mSecondaryContactInfo.photo, isConference, isGenericConf);
} else {
// reset to nothing so that it starts off blank next time we use it.
- ui.setSecondary(false, null, false, null, null, false);
+ ui.setSecondary(false, null, false, null, null, isConference, isGenericConf);
}
}
@@ -436,9 +451,9 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
public interface CallCardUi extends Ui {
void setVisible(boolean on);
void setPrimary(String number, String name, boolean nameIsNumber, String label,
- Drawable photo, boolean isConference, boolean isSipCall);
+ Drawable photo, boolean isConference, boolean isGeneric, boolean isSipCall);
void setSecondary(boolean show, String name, boolean nameIsNumber, String label,
- Drawable photo, boolean isConference);
+ Drawable photo, boolean isConference, boolean isGeneric);
void setSecondaryImage(Drawable image);
void setCallState(int state, Call.DisconnectCause cause, boolean bluetoothOn,
String gatewayLabel, String gatewayNumber);