summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDanny Baumann <dannybaumann@web.de>2014-07-21 15:14:39 +0200
committerDanny Baumann <dannybaumann@web.de>2014-07-24 14:22:14 +0200
commitbbe6b8465c0ea54c13a1e32e37bad765da27ed9f (patch)
tree46814f34cd393991289518a526d45fe6cbde3856 /src
parent26127dc6f12f8e3cd0df01aae0b8565e4823cc49 (diff)
downloadpackages_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.java18
-rw-r--r--src/com/android/incallui/CallButtonPresenter.java22
-rw-r--r--src/com/android/incallui/CallCardPresenter.java2
-rw-r--r--src/com/android/incallui/InCallActivity.java27
-rw-r--r--src/com/android/incallui/InCallPresenter.java23
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;