diff options
author | Yorke Lee <yorkelee@google.com> | 2014-12-09 15:34:57 -0800 |
---|---|---|
committer | Yorke Lee <yorkelee@google.com> | 2014-12-10 09:58:35 -0800 |
commit | 3a6424b38ead8de2a446b5d10d65c10f61c51be7 (patch) | |
tree | 9f55e224046dfacc0d65139610a2435e7916e006 /InCallUI | |
parent | c14bf4ad56d336b792b637a9cfb5b27064eaa2ca (diff) |
Show error dialogs in InCallUI
* Show InCallActivity for state IN_CALL as well to ensure that
error dialogs are shown
* Override pending transitions in CircularRevealActivity
to avoid animation jank when starting new call from launcher
* Don't override disconnect cause in onCallRemoved
* Track service unbinding and binding in InCallPresenter. An
unbound service means InCallActivity will not be shown.
Bug: 18675781
Change-Id: I6a34091dba13c730e5b69bfef50c2dda8224803a
Diffstat (limited to 'InCallUI')
4 files changed, 37 insertions, 11 deletions
diff --git a/InCallUI/src/com/android/incallui/CallList.java b/InCallUI/src/com/android/incallui/CallList.java index 0bbebe5b1..db43b1657 100644 --- a/InCallUI/src/com/android/incallui/CallList.java +++ b/InCallUI/src/com/android/incallui/CallList.java @@ -82,8 +82,6 @@ public class CallList implements InCallPhoneListener { public void onCallRemoved(Phone phone, android.telecom.Call telecommCall) { if (mCallByTelecommCall.containsKey(telecommCall)) { Call call = mCallByTelecommCall.get(telecommCall); - call.setState(Call.State.DISCONNECTED); - call.setDisconnectCause(new DisconnectCause(DisconnectCause.UNKNOWN)); if (updateCallInMap(call)) { Log.w(this, "Removing call not previously disconnected " + call.getId()); } @@ -420,7 +418,6 @@ public class CallList implements InCallPhoneListener { if (call.getState() == Call.State.DISCONNECTED) { // update existing (but do not add!!) disconnected calls if (mCallById.containsKey(call.getId())) { - // For disconnected calls, we want to keep them alive for a few seconds so that the // UI has a chance to display anything it needs when a call is disconnected. diff --git a/InCallUI/src/com/android/incallui/CircularRevealActivity.java b/InCallUI/src/com/android/incallui/CircularRevealActivity.java index ce6b33d31..7a9b7ccbf 100644 --- a/InCallUI/src/com/android/incallui/CircularRevealActivity.java +++ b/InCallUI/src/com/android/incallui/CircularRevealActivity.java @@ -51,13 +51,13 @@ public class CircularRevealActivity extends Activity { @Override public void onReceive(Context context, Intent intent) { clearDisplay(); - finish(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + overridePendingTransition(0, 0); setContentView(R.layout.outgoing_call_animation); final Point touchPoint = getIntent().getParcelableExtra(TouchPointManager.TOUCH_POINT); final MaterialPalette palette = getIntent().getParcelableExtra(EXTRA_THEME_COLORS); @@ -67,6 +67,9 @@ public class CircularRevealActivity extends Activity { @Override protected void onStart() { super.onStart(); + if (!InCallPresenter.getInstance().isServiceBound()) { + clearDisplay(); + } final IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_CLEAR_DISPLAY); LocalBroadcastManager.getInstance(this).registerReceiver(mClearDisplayReceiver, filter); @@ -133,6 +136,7 @@ public class CircularRevealActivity extends Activity { private void clearDisplay() { getWindow().getDecorView().setVisibility(View.INVISIBLE); + finish(); } @Override diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java index a12e5ea6f..898772e64 100644 --- a/InCallUI/src/com/android/incallui/InCallPresenter.java +++ b/InCallUI/src/com/android/incallui/InCallPresenter.java @@ -166,6 +166,11 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener { private boolean mShowDialpadOnStart = false; + /** + * Whether or not InCallService is bound to Telecom. + */ + private boolean mServiceBound = false; + private Phone mPhone; private Handler mHandler = new Handler(); @@ -914,11 +919,12 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener { // This is different from the incoming call sequence because we do not need to shock the // user with a top-level notification. Just show the call UI normally. final boolean mainUiNotVisible = !isShowingInCallUi() || !getCallCardFragmentVisible(); - final boolean showCallUi = InCallState.OUTGOING == newState && mainUiNotVisible; + boolean showCallUi = InCallState.OUTGOING == newState && mainUiNotVisible; - // TODO: Can we be suddenly in a call without it having been in the outgoing or incoming - // state? I havent seen that but if it can happen, the code below should be enabled. - // showCallUi |= (InCallState.INCALL && !isActivityStarted()); + // Direct transition from PENDING_OUTGOING -> INCALL means that there was an error in the + // outgoing call process, so the UI should be brought up to show an error dialog. + showCallUi |= (InCallState.PENDING_OUTGOING == mInCallState + && InCallState.INCALL == newState && !isActivityStarted()); // The only time that we have an instance of mInCallActivity and it isn't started is // when it is being destroyed. In that case, lets avoid bringing up another instance of @@ -1087,10 +1093,24 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener { mShowDialpadOnStart = false; } }); - + } else if (!mServiceBound) { + CircularRevealActivity.sendClearDisplayBroadcast(mContext); + return; } } + public void onServiceBind() { + mServiceBound = true; + } + + public void onServiceUnbind() { + mServiceBound = false; + } + + public boolean isServiceBound() { + return mServiceBound; + } + public void maybeStartRevealAnimation(Intent intent) { if (intent == null || mInCallActivity != null) { return; diff --git a/InCallUI/src/com/android/incallui/InCallServiceImpl.java b/InCallUI/src/com/android/incallui/InCallServiceImpl.java index d413370e6..17f4e174d 100644 --- a/InCallUI/src/com/android/incallui/InCallServiceImpl.java +++ b/InCallUI/src/com/android/incallui/InCallServiceImpl.java @@ -57,9 +57,14 @@ public class InCallServiceImpl extends InCallService { getApplicationContext(), CallList.getInstance(), AudioModeProvider.getInstance()); - + InCallPresenter.getInstance().onServiceBind(); InCallPresenter.getInstance().maybeStartRevealAnimation(intent); - return super.onBind(intent); } + + @Override + public boolean onUnbind(Intent intent) { + InCallPresenter.getInstance().onServiceUnbind(); + return super.onUnbind(intent); + } } |