diff options
author | Santos Cordon <santoscordon@google.com> | 2013-10-08 21:38:27 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-10-08 21:38:27 +0000 |
commit | 9b41bde1ddc37162b582f839aca0a6e82e0926c2 (patch) | |
tree | a87d64d29f0cc39ed486648153175b364c85060d /InCallUI | |
parent | 12fad9b3a124fd02cbb3e0c2d49e2015803aaebc (diff) | |
parent | dc24be9ee02c1670647eef84d32e8f6457b4d8d5 (diff) |
Merge "Turn screen on for call-waiting calls" into klp-dev
Diffstat (limited to 'InCallUI')
-rw-r--r-- | InCallUI/src/com/android/incallui/InCallPresenter.java | 23 | ||||
-rw-r--r-- | InCallUI/src/com/android/incallui/ProximitySensor.java | 9 |
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 0da68efb2..5776b5630 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()). */ |