summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSantos Cordon <santoscordon@google.com>2013-10-08 12:00:20 -0700
committerSantos Cordon <santoscordon@google.com>2013-10-08 12:07:59 -0700
commitdc24be9ee02c1670647eef84d32e8f6457b4d8d5 (patch)
treecff83b16ffc484e47aaaf41acd70263685c1afa1
parentbd3bc76a7a620b95a8aa7970c99031ecb37f12ea (diff)
Turn screen on for call-waiting calls
Normal incoming calls get the screen powered on through the window flag FLAG_TURN_SCREEN_ON. However, this only works when the window is being created or sent to foreground. But for call-waiting cases where the screen is off and in-call is in foreground, the screen remains off since the flag is not triggered. Solution is to look for the case where the screen is off and the new incoming call is a call-waiting call...and in that case finish() the activity and create it again. Since the screen is off, there is no concern over jank from bouncing the activity. bug:11031245 Change-Id: Ic0c206d57c9d1ce5beebff49a07c7877f6d1a423
-rw-r--r--InCallUI/src/com/android/incallui/InCallPresenter.java23
-rw-r--r--InCallUI/src/com/android/incallui/ProximitySensor.java9
2 files changed, 31 insertions, 1 deletions
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index 4b3893994..1b9f60cc2 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -568,7 +568,7 @@ public class InCallPresenter implements CallList.Listener {
if (isActivityStarted()) {
mInCallActivity.dismissPendingDialogs();
}
- mStatusBarNotifier.updateNotificationAndLaunchIncomingCallUi(newState, mCallList);
+ startUi(newState);
} else if (newState == InCallState.NO_CALLS) {
// The new state is the no calls state. Tear everything down.
attemptFinishActivity();
@@ -577,6 +577,27 @@ public class InCallPresenter implements CallList.Listener {
return newState;
}
+ private void startUi(InCallState inCallState) {
+ final Call incomingCall = mCallList.getIncomingCall();
+ final boolean isCallWaiting = (incomingCall != null &&
+ incomingCall.getState() == Call.State.CALL_WAITING);
+
+ // If the screen is off, we need to make sure it gets turned on for incoming calls.
+ // This normally works just fine thanks to FLAG_TURN_SCREEN_ON but that only works
+ // when the activity is first created. Therefore, to ensure the screen is turned on
+ // for the call waiting case, we finish() the current activity and start a new one.
+ // There should be no jank from this since the screen is already off and will remain so
+ // until our new activity is up.
+ if (mProximitySensor.isScreenReallyOff() && isCallWaiting) {
+ if (isActivityStarted()) {
+ mInCallActivity.finish();
+ }
+ mInCallActivity = null;
+ }
+
+ mStatusBarNotifier.updateNotificationAndLaunchIncomingCallUi(inCallState, mCallList);
+ }
+
/**
* Checks to see if both the UI is gone and the service is disconnected. If so, tear it all
* down.
diff --git a/InCallUI/src/com/android/incallui/ProximitySensor.java b/InCallUI/src/com/android/incallui/ProximitySensor.java
index 2210a38a8..727b923e7 100644
--- a/InCallUI/src/com/android/incallui/ProximitySensor.java
+++ b/InCallUI/src/com/android/incallui/ProximitySensor.java
@@ -154,6 +154,15 @@ public class ProximitySensor implements AccelerometerListener.OrientationListene
}
/**
+ * TODO: There is no way to determine if a screen is off due to proximity or if it is
+ * legitimately off, but if ever we can do that in the future, it would be useful here.
+ * Until then, this function will simply return true of the screen is off.
+ */
+ public boolean isScreenReallyOff() {
+ return !mPowerManager.isScreenOn();
+ }
+
+ /**
* @return true if this device supports the "proximity sensor
* auto-lock" feature while in-call (see updateProximitySensorMode()).
*/