summaryrefslogtreecommitdiff
path: root/java/com/android/incallui/CallCardPresenter.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/incallui/CallCardPresenter.java')
-rw-r--r--java/com/android/incallui/CallCardPresenter.java138
1 files changed, 66 insertions, 72 deletions
diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java
index c2b99c1d1..653b51aa5 100644
--- a/java/com/android/incallui/CallCardPresenter.java
+++ b/java/com/android/incallui/CallCardPresenter.java
@@ -28,6 +28,7 @@ import android.graphics.drawable.Drawable;
import android.hardware.display.DisplayManager;
import android.os.BatteryManager;
import android.os.Handler;
+import android.os.Trace;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
@@ -44,16 +45,14 @@ import com.android.contacts.common.ContactsUtils;
import com.android.contacts.common.preference.ContactsPreferences;
import com.android.contacts.common.util.ContactDisplayUtils;
import com.android.dialer.common.Assert;
-import com.android.dialer.common.ConfigProviderBindings;
import com.android.dialer.common.LogUtil;
import com.android.dialer.compat.ActivityCompat;
-import com.android.dialer.enrichedcall.EnrichedCallComponent;
-import com.android.dialer.enrichedcall.EnrichedCallManager;
-import com.android.dialer.enrichedcall.Session;
+import com.android.dialer.configprovider.ConfigProviderBindings;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.multimedia.MultimediaData;
import com.android.dialer.oem.MotorolaUtils;
+import com.android.dialer.postcall.PostCall;
import com.android.incallui.ContactInfoCache.ContactCacheEntry;
import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback;
import com.android.incallui.InCallPresenter.InCallDetailsListener;
@@ -63,6 +62,7 @@ import com.android.incallui.InCallPresenter.InCallStateListener;
import com.android.incallui.InCallPresenter.IncomingCallListener;
import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
+import com.android.incallui.call.DialerCall.State;
import com.android.incallui.call.DialerCallListener;
import com.android.incallui.calllocation.CallLocation;
import com.android.incallui.calllocation.CallLocationComponent;
@@ -70,6 +70,7 @@ import com.android.incallui.incall.protocol.ContactPhotoType;
import com.android.incallui.incall.protocol.InCallScreen;
import com.android.incallui.incall.protocol.InCallScreenDelegate;
import com.android.incallui.incall.protocol.PrimaryCallState;
+import com.android.incallui.incall.protocol.PrimaryCallState.ButtonState;
import com.android.incallui.incall.protocol.PrimaryInfo;
import com.android.incallui.incall.protocol.SecondaryInfo;
import com.android.incallui.videotech.utils.SessionModificationState;
@@ -85,8 +86,7 @@ public class CallCardPresenter
InCallDetailsListener,
InCallEventListener,
InCallScreenDelegate,
- DialerCallListener,
- EnrichedCallManager.StateChangedListener {
+ DialerCallListener {
/**
* Amount of time to wait before sending an announcement via the accessibility manager. When the
@@ -249,8 +249,10 @@ public class CallCardPresenter
@Override
public void onStateChange(InCallState oldState, InCallState newState, CallList callList) {
- LogUtil.v("CallCardPresenter.onStateChange", "" + newState);
+ Trace.beginSection("CallCardPresenter.onStateChange");
+ LogUtil.v("CallCardPresenter.onStateChange", "oldState: %s, newState: %s", oldState, newState);
if (mInCallScreen == null) {
+ Trace.endSection();
return;
}
@@ -347,6 +349,7 @@ public class CallCardPresenter
callState != DialerCall.State.INCOMING /* animate */);
maybeSendAccessibilityEvent(oldState, newState, primaryChanged);
+ Trace.endSection();
}
@Override
@@ -376,6 +379,12 @@ public class CallCardPresenter
@Override
public void onInternationalCallOnWifi() {}
+ @Override
+ public void onEnrichedCallSessionUpdate() {
+ LogUtil.enterBlock("CallCardPresenter.onEnrichedCallSessionUpdate");
+ updatePrimaryDisplayInfo();
+ }
+
/** Handles a change to the child number by refreshing the primary call info. */
@Override
public void onDialerCallChildNumberChange() {
@@ -418,12 +427,6 @@ public class CallCardPresenter
updatePrimaryCallState();
}
- @Override
- public void onEnrichedCallStateChanged() {
- LogUtil.enterBlock("CallCardPresenter.onEnrichedCallStateChanged");
- updatePrimaryDisplayInfo();
- }
-
private boolean shouldRefreshPrimaryInfo(boolean primaryChanged) {
if (mPrimary == null) {
return false;
@@ -475,7 +478,11 @@ public class CallCardPresenter
mPrimary.getConnectTimeMillis(),
CallerInfoUtils.isVoiceMailNumber(mContext, mPrimary),
mPrimary.isRemotelyHeld(),
- isBusiness));
+ isBusiness,
+ supports2ndCallOnHold(),
+ getSwapToSecondaryButtonState(),
+ mPrimary.isAssistedDialed(),
+ null));
InCallActivity activity =
(InCallActivity) (mInCallScreen.getInCallScreenFragment().getActivity());
@@ -485,6 +492,16 @@ public class CallCardPresenter
}
}
+ private @ButtonState int getSwapToSecondaryButtonState() {
+ if (mSecondary == null) {
+ return ButtonState.NOT_SUPPORT;
+ }
+ if (mPrimary.getState() == State.ACTIVE) {
+ return ButtonState.ENABLED;
+ }
+ return ButtonState.DISABLED;
+ }
+
/** Only show the conference call button if we can manage the conference. */
private void maybeShowManageConferenceCallButton() {
getUi().showManageConferenceCallButton(shouldShowManageConference());
@@ -505,6 +522,15 @@ public class CallCardPresenter
&& !mIsFullscreen;
}
+ private boolean supports2ndCallOnHold() {
+ DialerCall firstCall = CallList.getInstance().getActiveOrBackgroundCall();
+ DialerCall incomingCall = CallList.getInstance().getIncomingCall();
+ if (firstCall != null && incomingCall != null && firstCall != incomingCall) {
+ return incomingCall.can(Details.CAPABILITY_HOLD);
+ }
+ return true;
+ }
+
@Override
public void onCallStateButtonClicked() {
Intent broadcastIntent = Bindings.get(mContext).getCallStateButtonBroadcastIntent(mContext);
@@ -528,11 +554,6 @@ public class CallCardPresenter
InCallPresenter.getInstance().onShrinkAnimationComplete();
}
- @Override
- public Drawable getDefaultContactPhotoDrawable() {
- return ContactInfoCache.getInstance(mContext).getDefaultContactPhotoDrawable();
- }
-
private void maybeStartSearch(DialerCall call, boolean isPrimary) {
// no need to start search for conference calls which show generic info.
if (call != null && !call.isConferenceCall()) {
@@ -564,8 +585,8 @@ public class CallCardPresenter
if (call != null) {
call.getLogState().contactLookupResult = entry.contactLookupResult;
}
- if (entry.contactUri != null) {
- CallerInfoUtils.sendViewNotification(mContext, entry.contactUri);
+ if (entry.lookupUri != null) {
+ CallerInfoUtils.sendViewNotification(mContext, entry.lookupUri);
}
}
@@ -666,26 +687,8 @@ public class CallCardPresenter
boolean hasWorkCallProperty = mPrimary.hasProperty(PROPERTY_ENTERPRISE_CALL);
MultimediaData multimediaData = null;
- if (mPrimary.getNumber() != null) {
- EnrichedCallManager manager = EnrichedCallComponent.get(mContext).getEnrichedCallManager();
-
- EnrichedCallManager.Filter filter;
- if (mPrimary.isIncoming()) {
- filter = manager.createIncomingCallComposerFilter();
- } else {
- filter = manager.createOutgoingCallComposerFilter();
- }
-
- Session enrichedCallSession =
- manager.getSession(mPrimary.getUniqueCallId(), mPrimary.getNumber(), filter);
-
- mPrimary.setEnrichedCallSession(enrichedCallSession);
- mPrimary.setEnrichedCallCapabilities(manager.getCapabilities(mPrimary.getNumber()));
-
- if (enrichedCallSession != null) {
- enrichedCallSession.setUniqueDialerCallId(mPrimary.getUniqueCallId());
- multimediaData = enrichedCallSession.getMultimediaData();
- }
+ if (mPrimary.getEnrichedCallSession() != null) {
+ multimediaData = mPrimary.getEnrichedCallSession().getMultimediaData();
}
if (mPrimary.isConferenceCall()) {
@@ -696,7 +699,8 @@ public class CallCardPresenter
mInCallScreen.setPrimary(
new PrimaryInfo(
null /* number */,
- getConferenceString(mPrimary),
+ CallerInfoUtils.getConferenceString(
+ mContext, mPrimary.hasProperty(Details.PROPERTY_GENERIC_CONFERENCE)),
false /* nameIsNumber */,
null /* location */,
null /* label */,
@@ -710,6 +714,7 @@ public class CallCardPresenter
shouldShowLocation(),
null /* contactInfoLookupKey */,
null /* enrichedCallMultimediaData */,
+ true /* showInCallButtonGrid */,
mPrimary.getNumberPresentation()));
} else if (mPrimaryContactInfo != null) {
LogUtil.v(
@@ -757,6 +762,7 @@ public class CallCardPresenter
shouldShowLocation(),
mPrimaryContactInfo.lookupKey,
multimediaData,
+ true /* showInCallButtonGrid */,
mPrimary.getNumberPresentation()));
} else {
// Clear the primary display info.
@@ -876,11 +882,20 @@ public class CallCardPresenter
return;
}
+ if (mSecondary.isMergeInProcess()) {
+ LogUtil.i(
+ "CallCardPresenter.updateSecondaryDisplayInfo",
+ "secondary call is merge in process, clearing info");
+ mInCallScreen.setSecondary(SecondaryInfo.createEmptySecondaryInfo(mIsFullscreen));
+ return;
+ }
+
if (mSecondary.isConferenceCall()) {
mInCallScreen.setSecondary(
new SecondaryInfo(
true /* show */,
- getConferenceString(mSecondary),
+ CallerInfoUtils.getConferenceString(
+ mContext, mSecondary.hasProperty(Details.PROPERTY_GENERIC_CONFERENCE)),
false /* nameIsNumber */,
null /* label */,
mSecondary.getCallProviderLabel(),
@@ -972,7 +987,7 @@ public class CallCardPresenter
}
/** Gets the name to display for the call. */
- String getNameForCall(ContactCacheEntry contactInfo) {
+ private String getNameForCall(ContactCacheEntry contactInfo) {
String preferredName =
ContactDisplayUtils.getPreferredDisplayName(
contactInfo.namePrimary, contactInfo.nameAlternative, mContactsPreferences);
@@ -982,19 +997,6 @@ public class CallCardPresenter
return preferredName;
}
- /** Gets the number to display for a call. */
- String getNumberForCall(ContactCacheEntry contactInfo) {
- // If the name is empty, we use the number for the name...so don't show a second
- // number in the number field
- String preferredName =
- ContactDisplayUtils.getPreferredDisplayName(
- contactInfo.namePrimary, contactInfo.nameAlternative, mContactsPreferences);
- if (TextUtils.isEmpty(preferredName)) {
- return contactInfo.location;
- }
- return contactInfo.number;
- }
-
@Override
public void onSecondaryInfoClicked() {
if (mSecondary == null) {
@@ -1004,6 +1006,11 @@ public class CallCardPresenter
return;
}
+ Logger.get(mContext)
+ .logCallImpression(
+ DialerImpression.Type.IN_CALL_SWAP_SECONDARY_BUTTON_PRESSED,
+ mPrimary.getUniqueCallId(),
+ mPrimary.getTimeAddedMs());
LogUtil.i(
"CallCardPresenter.onSecondaryInfoClicked", "swapping call to foreground: " + mSecondary);
mSecondary.unhold();
@@ -1015,6 +1022,7 @@ public class CallCardPresenter
if (mPrimary != null) {
mPrimary.disconnect();
}
+ PostCall.onDisconnectPressed(mContext);
}
/**
@@ -1035,15 +1043,6 @@ public class CallCardPresenter
return mPrimary != null && mPrimary.getState() == DialerCall.State.ACTIVE;
}
- private String getConferenceString(DialerCall call) {
- boolean isGenericConference = call.hasProperty(Details.PROPERTY_GENERIC_CONFERENCE);
- LogUtil.v("CallCardPresenter.getConferenceString", "" + isGenericConference);
-
- final int resId =
- isGenericConference ? R.string.generic_conference_call_name : R.string.conference_call_name;
- return mContext.getResources().getString(resId);
- }
-
private boolean shouldShowEndCallButton(DialerCall primary, int callState) {
if (primary == null) {
return false;
@@ -1063,7 +1062,6 @@ public class CallCardPresenter
@Override
public void onInCallScreenResumed() {
- EnrichedCallComponent.get(mContext).getEnrichedCallManager().registerStateChangedListener(this);
updatePrimaryDisplayInfo();
if (shouldSendAccessibilityEvent) {
@@ -1072,11 +1070,7 @@ public class CallCardPresenter
}
@Override
- public void onInCallScreenPaused() {
- EnrichedCallComponent.get(mContext)
- .getEnrichedCallManager()
- .unregisterStateChangedListener(this);
- }
+ public void onInCallScreenPaused() {}
static boolean sendAccessibilityEvent(Context context, InCallScreen inCallScreen) {
AccessibilityManager am =