diff options
author | Danny Baumann <dannybaumann@web.de> | 2014-07-21 15:14:39 +0200 |
---|---|---|
committer | Danny Baumann <dannybaumann@web.de> | 2014-07-24 14:22:14 +0200 |
commit | bbe6b8465c0ea54c13a1e32e37bad765da27ed9f (patch) | |
tree | 46814f34cd393991289518a526d45fe6cbde3856 /src | |
parent | 26127dc6f12f8e3cd0df01aae0b8565e4823cc49 (diff) | |
download | packages_apps_InCallUI-bbe6b8465c0ea54c13a1e32e37bad765da27ed9f.tar.gz packages_apps_InCallUI-bbe6b8465c0ea54c13a1e32e37bad765da27ed9f.tar.bz2 packages_apps_InCallUI-bbe6b8465c0ea54c13a1e32e37bad765da27ed9f.zip |
Avoid layout changes on call disconnection.
This avoids showing the call buttons when an incoming call is
disconnected remotely while still ringing, which in turn avoids an ugly
transition when using the full screen caller photo.
Change-Id: If69bce271303ea43dca64925aba895dd3b5b5611
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/incallui/AnswerFragment.java | 18 | ||||
-rw-r--r-- | src/com/android/incallui/CallButtonPresenter.java | 22 | ||||
-rw-r--r-- | src/com/android/incallui/CallCardPresenter.java | 2 | ||||
-rw-r--r-- | src/com/android/incallui/InCallActivity.java | 27 | ||||
-rw-r--r-- | src/com/android/incallui/InCallPresenter.java | 23 |
5 files changed, 56 insertions, 36 deletions
diff --git a/src/com/android/incallui/AnswerFragment.java b/src/com/android/incallui/AnswerFragment.java index 9df8f373..4302920d 100644 --- a/src/com/android/incallui/AnswerFragment.java +++ b/src/com/android/incallui/AnswerFragment.java @@ -102,14 +102,6 @@ public class AnswerFragment extends BaseFragment<AnswerPresenter, AnswerPresente super.onDestroyView(); } - public void setUseTranslucentNavigationBar(boolean useTranslucent) { - mUseTranslucentNavBar = useTranslucent; - View v = getView(); - if (v != null) { - updateNavBarTranslucency(v.getVisibility() == View.VISIBLE); - } - } - @Override public void showAnswerUi(boolean show) { getView().setVisibility(show ? View.VISIBLE : View.GONE); @@ -120,16 +112,6 @@ public class AnswerFragment extends BaseFragment<AnswerPresenter, AnswerPresente } else { mGlowpad.stopPing(); } - updateNavBarTranslucency(show); - } - - private void updateNavBarTranslucency(boolean enable) { - final Window window = getActivity().getWindow(); - if (enable && mUseTranslucentNavBar) { - window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); - } else { - window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); - } } @Override diff --git a/src/com/android/incallui/CallButtonPresenter.java b/src/com/android/incallui/CallButtonPresenter.java index 0c622a41..5762e7a4 100644 --- a/src/com/android/incallui/CallButtonPresenter.java +++ b/src/com/android/incallui/CallButtonPresenter.java @@ -47,8 +47,10 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto private boolean mShowGenericMerge = false; private boolean mShowManageConference = false; + private boolean mShowButtonsIfIdle = true; private InCallState mPreviousState = null; + private InCallState mStateBeforeDisconnect = null; public CallButtonPresenter() { } @@ -77,6 +79,9 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto @Override public void onStateChange(InCallState state, CallList callList) { + if (state == InCallState.DISCONNECTING && mPreviousState != InCallState.DISCONNECTING) { + mStateBeforeDisconnect = mPreviousState; + } if (state == InCallState.OUTGOING) { mCall = callList.getOutgoingCall(); @@ -247,6 +252,10 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto updateExtraButtonRow(); } + public void setShowButtonsIfIdle(boolean showIfIdle) { + mShowButtonsIfIdle = showIfIdle; + } + public void modifyCallButtonClicked() { Call call = CallList.getInstance().getActiveCall(); if (call != null) { @@ -262,8 +271,19 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto final boolean isEnabled = state.isConnectingOrConnected() && !state.isIncoming() && call != null; + final boolean isVisible; + + if (state.isIncoming()) { + isVisible = false; + } else if (mShowButtonsIfIdle || state.isConnectingOrConnected()) { + isVisible = true; + } else { // DISCONNECTING, NO_CALLS + // Keep UI visible in case it was visible before, don't cause + // unneccessary layout changes + isVisible = mStateBeforeDisconnect == InCallState.INCALL; + } - ui.setEnabled(isEnabled, !state.isIncoming()); + ui.setEnabled(isEnabled, isVisible); Log.d(this, "Updating call UI for call: ", call); diff --git a/src/com/android/incallui/CallCardPresenter.java b/src/com/android/incallui/CallCardPresenter.java index 0708a020..608be80e 100644 --- a/src/com/android/incallui/CallCardPresenter.java +++ b/src/com/android/incallui/CallCardPresenter.java @@ -148,7 +148,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> // getCallToDisplay doesn't go through outgoing or incoming calls. It will return the // highest priority call to display as the secondary call. secondary = getCallToDisplay(callList, null, true); - } else if (state == InCallState.INCALL) { + } else if (state == InCallState.INCALL || state == InCallState.DISCONNECTING) { primary = getCallToDisplay(callList, null, false); secondary = getCallToDisplay(callList, primary, true); } diff --git a/src/com/android/incallui/InCallActivity.java b/src/com/android/incallui/InCallActivity.java index bd96b99e..56ad26da 100644 --- a/src/com/android/incallui/InCallActivity.java +++ b/src/com/android/incallui/InCallActivity.java @@ -72,6 +72,8 @@ public class InCallActivity extends Activity { private boolean mShowDialpadRequested; private boolean mConferenceManagerShown; + private boolean mUseFullScreenCallerPhoto; + // This enum maps to Phone.SuppService defined in telephony private enum SuppService { UNKNOWN, SWITCH, SEPARATE, TRANSFER, CONFERENCE, REJECT, HANGUP; @@ -507,15 +509,21 @@ public class InCallActivity extends Activity { } } - private void updateSystemBarTranslucency() { - final boolean doTranslucency = !mConferenceManagerShown; + public void updateSystemBarTranslucency() { + int flags = 0; final Window window = getWindow(); + final InCallPresenter.InCallState inCallState = + InCallPresenter.getInstance().getInCallState(); - if (doTranslucency) { - window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - } else { - window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + if (!mConferenceManagerShown) { + flags |= WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; + } + if (mUseFullScreenCallerPhoto && inCallState == InCallPresenter.InCallState.INCOMING) { + flags |= WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION; } + + window.setFlags(flags, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | + WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); window.getDecorView().requestFitSystemWindows(); } @@ -819,10 +827,11 @@ public class InCallActivity extends Activity { int incomingCallStyle = Settings.System.getInt(getContentResolver(), Settings.System.INCOMING_CALL_STYLE, Settings.System.INCOMING_CALL_STYLE_FULLSCREEN_PHOTO); - boolean useFullscreenCallerPhoto = + mUseFullScreenCallerPhoto = incomingCallStyle == Settings.System.INCOMING_CALL_STYLE_FULLSCREEN_PHOTO; - mCallButtonFragment.setHideMode(useFullscreenCallerPhoto ? View.GONE : View.INVISIBLE); - mAnswerFragment.setUseTranslucentNavigationBar(useFullscreenCallerPhoto); + mCallButtonFragment.setHideMode(mUseFullScreenCallerPhoto ? View.GONE : View.INVISIBLE); + mCallButtonFragment.getPresenter().setShowButtonsIfIdle(!mUseFullScreenCallerPhoto); + updateSystemBarTranslucency(); } private void log(String msg) { diff --git a/src/com/android/incallui/InCallPresenter.java b/src/com/android/incallui/InCallPresenter.java index 92f2cb5d..5204d22b 100644 --- a/src/com/android/incallui/InCallPresenter.java +++ b/src/com/android/incallui/InCallPresenter.java @@ -355,11 +355,16 @@ public class InCallPresenter implements CallList.Listener { listener.onStateChange(mInCallState, callList); } - if (MSimTelephonyManager.getDefault().getMultiSimConfiguration() - == MSimTelephonyManager.MultiSimVariants.DSDA && (mInCallActivity != null)) { - mInCallActivity.updateDsdaTab(); - } if (isActivityStarted()) { + MSimTelephonyManager tm = MSimTelephonyManager.getDefault(); + + if (tm.getMultiSimConfiguration() == MSimTelephonyManager.MultiSimVariants.DSDA) { + mInCallActivity.updateDsdaTab(); + } + if (newState != InCallState.DISCONNECTING) { + mInCallActivity.updateSystemBarTranslucency(); + } + final boolean hasCall = callList.getActiveOrBackgroundCall() != null || callList.getOutgoingCall() != null; mInCallActivity.dismissKeyguard(hasCall); @@ -427,10 +432,11 @@ public class InCallPresenter implements CallList.Listener { } else if (callList.getOutgoingCall() != null) { newState = InCallState.OUTGOING; } else if (callList.getActiveCall() != null || - callList.getBackgroundCall() != null || - callList.getDisconnectedCall() != null || - callList.getDisconnectingCall() != null) { + callList.getBackgroundCall() != null) { newState = InCallState.INCALL; + } else if (callList.getDisconnectedCall() != null || + callList.getDisconnectingCall() != null) { + newState = InCallState.DISCONNECTING; } return newState; @@ -892,6 +898,9 @@ public class InCallPresenter implements CallList.Listener { // In-call experience is showing INCALL, + // Like in-call, but without a connected call + DISCONNECTING, + // User is dialing out OUTGOING; |