summaryrefslogtreecommitdiff
path: root/java/com/android/incallui/CallButtonPresenter.java
diff options
context:
space:
mode:
authortwyen <twyen@google.com>2017-10-10 12:15:08 -0700
committerEric Erfanian <erfanian@google.com>2017-10-11 07:06:24 -0700
commit00623aa60a7908b0709df38632cfa576cb15e33e (patch)
tree35bbae5a10d673a11eec6f20954305bc2eb9aa4f /java/com/android/incallui/CallButtonPresenter.java
parent7b96fb1690255f13591edba01770d2d82c197194 (diff)
Implement SIM swapping
When the call is still ringing, a new button is added to allow to user to call with the other SIM. A background worker will be created to hang up the phone and redial with the other SIM. The in call UI will be prevented from ending during the process. Video: https://drive.google.com/a/google.com/file/d/0B2eYBUUznfyTSl9MdXQ0V1ZzQkE/view?usp=sharing UX has not been finalized, the icon and position are just placeholder. Bug: 64215256 Test: SwapSimWorkerTest PiperOrigin-RevId: 171715715 Change-Id: Idb3f486e9fc9a45d4c5e244af2d7d91b075bf0f2
Diffstat (limited to 'java/com/android/incallui/CallButtonPresenter.java')
-rw-r--r--java/com/android/incallui/CallButtonPresenter.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java
index bd5bb78c9..b3fb97fad 100644
--- a/java/com/android/incallui/CallButtonPresenter.java
+++ b/java/com/android/incallui/CallButtonPresenter.java
@@ -22,11 +22,14 @@ import android.os.Trace;
import android.support.v4.app.Fragment;
import android.support.v4.os.UserManagerCompat;
import android.telecom.CallAudioState;
+import android.telecom.PhoneAccountHandle;
import com.android.contacts.common.compat.CallCompat;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
+import com.android.dialer.telecom.TelecomUtil;
import com.android.incallui.InCallCameraManager.Listener;
import com.android.incallui.InCallPresenter.CanAddCallListener;
import com.android.incallui.InCallPresenter.InCallDetailsListener;
@@ -42,6 +45,7 @@ import com.android.incallui.call.TelecomAdapter;
import com.android.incallui.incall.protocol.InCallButtonIds;
import com.android.incallui.incall.protocol.InCallButtonUi;
import com.android.incallui.incall.protocol.InCallButtonUiDelegate;
+import com.android.incallui.multisim.SwapSimWorker;
import com.android.incallui.videotech.utils.VideoUtils;
/** Logic for call buttons. */
@@ -63,6 +67,7 @@ public class CallButtonPresenter
private boolean mAutomaticallyMuted = false;
private boolean mPreviousMuteState = false;
private boolean isInCallButtonUiReady;
+ private PhoneAccountHandle mOtherAccount;
public CallButtonPresenter(Context context) {
mContext = context.getApplicationContext();
@@ -310,6 +315,23 @@ public class CallButtonPresenter
mInCallButtonUi.showAudioRouteSelector();
}
+ @Override
+ public void swapSimClicked() {
+ LogUtil.enterBlock("CallButtonPresenter.swapSimClicked");
+ SwapSimWorker worker =
+ new SwapSimWorker(
+ getContext(),
+ mCall,
+ InCallPresenter.getInstance().getCallList(),
+ mOtherAccount,
+ InCallPresenter.getInstance().acquireInCallUiLock("swapSim"));
+ DialerExecutorComponent.get(getContext())
+ .dialerExecutorFactory()
+ .createNonUiTaskBuilder(worker)
+ .build()
+ .executeParallel(null);
+ }
+
/**
* Switches the camera between the front-facing and back-facing camera.
*
@@ -409,6 +431,7 @@ public class CallButtonPresenter
*
* @param call The active call.
*/
+ @SuppressWarnings("MissingPermission")
private void updateButtonsState(DialerCall call) {
LogUtil.v("CallButtonPresenter.updateButtonsState", "");
final boolean isVideo = call.isVideoCall();
@@ -439,11 +462,15 @@ public class CallButtonPresenter
&& call.getState() != DialerCall.State.DIALING
&& call.getState() != DialerCall.State.CONNECTING;
+ mOtherAccount = TelecomUtil.getOtherAccount(getContext(), call.getAccountHandle());
+ boolean showSwapSim = mOtherAccount != null && DialerCall.State.isDialing(call.getState());
+
mInCallButtonUi.showButton(InCallButtonIds.BUTTON_AUDIO, true);
mInCallButtonUi.showButton(InCallButtonIds.BUTTON_SWAP, showSwap);
mInCallButtonUi.showButton(InCallButtonIds.BUTTON_HOLD, showHold);
mInCallButtonUi.setHold(isCallOnHold);
mInCallButtonUi.showButton(InCallButtonIds.BUTTON_MUTE, showMute);
+ mInCallButtonUi.showButton(InCallButtonIds.BUTTON_SWAP_SIM, showSwapSim);
mInCallButtonUi.showButton(InCallButtonIds.BUTTON_ADD_CALL, true);
mInCallButtonUi.enableButton(InCallButtonIds.BUTTON_ADD_CALL, showAddCall);
mInCallButtonUi.showButton(InCallButtonIds.BUTTON_UPGRADE_TO_VIDEO, showUpgradeToVideo);
@@ -532,4 +559,5 @@ public class CallButtonPresenter
}
return null;
}
+
}