diff options
-rw-r--r-- | InCallUI/res/drawable-hdpi/picture_dialing.png | bin | 0 -> 2509 bytes | |||
-rw-r--r-- | InCallUI/res/drawable-ldrtl-hdpi/picture_dialing.png | bin | 0 -> 9815 bytes | |||
-rw-r--r-- | InCallUI/res/drawable-ldrtl-mdpi/picture_dialing.png | bin | 0 -> 7473 bytes | |||
-rw-r--r-- | InCallUI/res/drawable-ldrtl-xhdpi/picture_dialing.png | bin | 0 -> 12979 bytes | |||
-rw-r--r-- | InCallUI/res/drawable-mdpi/picture_dialing.png | bin | 0 -> 1480 bytes | |||
-rw-r--r-- | InCallUI/res/drawable-xhdpi/picture_dialing.png | bin | 0 -> 3707 bytes | |||
-rw-r--r-- | InCallUI/res/drawable-xxhdpi/picture_dialing.png | bin | 0 -> 10653 bytes | |||
-rw-r--r-- | InCallUI/src/com/android/incallui/CallButtonFragment.java | 16 | ||||
-rw-r--r-- | InCallUI/src/com/android/incallui/CallButtonPresenter.java | 32 | ||||
-rw-r--r-- | InCallUI/src/com/android/incallui/CallCardFragment.java | 26 | ||||
-rw-r--r-- | InCallUI/src/com/android/incallui/CallCardPresenter.java | 105 |
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 Binary files differnew file mode 100644 index 000000000..6311f693b --- /dev/null +++ b/InCallUI/res/drawable-hdpi/picture_dialing.png diff --git a/InCallUI/res/drawable-ldrtl-hdpi/picture_dialing.png b/InCallUI/res/drawable-ldrtl-hdpi/picture_dialing.png Binary files differnew file mode 100644 index 000000000..cb587a88c --- /dev/null +++ b/InCallUI/res/drawable-ldrtl-hdpi/picture_dialing.png diff --git a/InCallUI/res/drawable-ldrtl-mdpi/picture_dialing.png b/InCallUI/res/drawable-ldrtl-mdpi/picture_dialing.png Binary files differnew file mode 100644 index 000000000..4047b2258 --- /dev/null +++ b/InCallUI/res/drawable-ldrtl-mdpi/picture_dialing.png diff --git a/InCallUI/res/drawable-ldrtl-xhdpi/picture_dialing.png b/InCallUI/res/drawable-ldrtl-xhdpi/picture_dialing.png Binary files differnew file mode 100644 index 000000000..f167ecbe8 --- /dev/null +++ b/InCallUI/res/drawable-ldrtl-xhdpi/picture_dialing.png diff --git a/InCallUI/res/drawable-mdpi/picture_dialing.png b/InCallUI/res/drawable-mdpi/picture_dialing.png Binary files differnew file mode 100644 index 000000000..b81b6037e --- /dev/null +++ b/InCallUI/res/drawable-mdpi/picture_dialing.png diff --git a/InCallUI/res/drawable-xhdpi/picture_dialing.png b/InCallUI/res/drawable-xhdpi/picture_dialing.png Binary files differnew file mode 100644 index 000000000..792cd8efe --- /dev/null +++ b/InCallUI/res/drawable-xhdpi/picture_dialing.png diff --git a/InCallUI/res/drawable-xxhdpi/picture_dialing.png b/InCallUI/res/drawable-xxhdpi/picture_dialing.png Binary files differnew file mode 100644 index 000000000..17d45f55b --- /dev/null +++ b/InCallUI/res/drawable-xxhdpi/picture_dialing.png 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); |