diff options
| author | twyen <twyen@google.com> | 2017-10-10 12:15:08 -0700 |
|---|---|---|
| committer | Eric Erfanian <erfanian@google.com> | 2017-10-11 07:06:24 -0700 |
| commit | 00623aa60a7908b0709df38632cfa576cb15e33e (patch) | |
| tree | 35bbae5a10d673a11eec6f20954305bc2eb9aa4f /java/com/android/incallui/CallButtonPresenter.java | |
| parent | 7b96fb1690255f13591edba01770d2d82c197194 (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.java | 28 |
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; } + } |
