summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI/src/com/android/systemui
diff options
context:
space:
mode:
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui')
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeLog.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java94
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java18
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java47
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java28
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java95
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java2
10 files changed, 225 insertions, 85 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
index 3f72125..9eb768c 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
@@ -244,12 +244,12 @@ public class DozeLog {
}
@Override
- public void onScreenTurnedOn() {
+ public void onStartedWakingUp() {
traceScreenOn();
}
@Override
- public void onScreenTurnedOff(int why) {
+ public void onFinishedGoingToSleep(int why) {
traceScreenOff(why);
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
index 9f21dbe..d78800f 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
@@ -132,6 +132,18 @@ public class KeyguardService extends Service {
}
@Override // Binder interface
+ public void onScreenTurnedOn() {
+ checkPermission();
+ mKeyguardViewMediator.onScreenTurnedOn();
+ }
+
+ @Override // Binder interface
+ public void onScreenTurnedOff() {
+ checkPermission();
+ mKeyguardViewMediator.onScreenTurnedOff();
+ }
+
+ @Override // Binder interface
public void setKeyguardEnabled(boolean enabled) {
checkPermission();
mKeyguardViewMediator.setKeyguardEnabled(enabled);
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 7d72dab..9f86a52 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -41,7 +41,6 @@ import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.SystemProperties;
-import android.os.Trace;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
@@ -138,7 +137,7 @@ public class KeyguardViewMediator extends SystemUI {
private static final int HIDE = 3;
private static final int RESET = 4;
private static final int VERIFY_UNLOCK = 5;
- private static final int NOTIFY_SCREEN_OFF = 6;
+ private static final int NOTIFY_FINISHED_GOING_TO_SLEEP = 6;
private static final int NOTIFY_SCREEN_TURNING_ON = 7;
private static final int KEYGUARD_DONE = 9;
private static final int KEYGUARD_DONE_DRAWING = 10;
@@ -150,6 +149,8 @@ public class KeyguardViewMediator extends SystemUI {
private static final int ON_ACTIVITY_DRAWN = 19;
private static final int KEYGUARD_DONE_PENDING_TIMEOUT = 20;
private static final int NOTIFY_STARTED_WAKING_UP = 21;
+ private static final int NOTIFY_SCREEN_TURNED_ON = 22;
+ private static final int NOTIFY_SCREEN_TURNED_OFF = 23;
/**
* The default amount of time we stay awake (used for all key input)
@@ -467,12 +468,13 @@ public class KeyguardViewMediator extends SystemUI {
mStatusBarKeyguardViewManager.notifyKeyguardAuthenticated();
}
} else {
- if (wakeAndUnlocking && unlockingWithFingerprintAllowed) {
+ if (wakeAndUnlocking && mShowing && unlockingWithFingerprintAllowed) {
mWakeAndUnlocking = true;
+ mStatusBarKeyguardViewManager.setWakeAndUnlocking();
keyguardDone(true, true);
- } else {
+ } else if (mShowing && mDeviceInteractive) {
if (wakeAndUnlocking) {
- mStatusBarKeyguardViewManager.notifyScreenWakeUpRequested();
+ mStatusBarKeyguardViewManager.notifyDeviceWakeUpRequested();
}
mStatusBarKeyguardViewManager.animateCollapsePanels(
FINGERPRINT_COLLAPSE_SPEEDUP_FACTOR);
@@ -702,7 +704,7 @@ public class KeyguardViewMediator extends SystemUI {
resetKeyguardDonePendingLocked();
mHideAnimationRun = false;
- notifyScreenOffLocked();
+ notifyFinishedGoingToSleep();
if (mPendingReset) {
resetStateLocked();
@@ -713,7 +715,7 @@ public class KeyguardViewMediator extends SystemUI {
mPendingLock = false;
}
}
- KeyguardUpdateMonitor.getInstance(mContext).dispatchScreenTurnedOff(why);
+ KeyguardUpdateMonitor.getInstance(mContext).dispatchFinishedGoingToSleep(why);
}
private void doKeyguardLaterLocked() {
@@ -778,12 +780,22 @@ public class KeyguardViewMediator extends SystemUI {
if (DEBUG) Log.d(TAG, "onStartedWakingUp, seq = " + mDelayedShowingSequence);
notifyStartedWakingUp();
}
- KeyguardUpdateMonitor.getInstance(mContext).dispatchScreenTurnedOn();
+ KeyguardUpdateMonitor.getInstance(mContext).dispatchStartedWakingUp();
maybeSendUserPresentBroadcast();
}
public void onScreenTurningOn(IKeyguardDrawnCallback callback) {
- notifyScreenOnLocked(callback);
+ notifyScreenOn(callback);
+ }
+
+ public void onScreenTurnedOn() {
+ notifyScreenTurnedOn();
+ mUpdateMonitor.dispatchScreenTurnedOn();
+ }
+
+ public void onScreenTurnedOff() {
+ notifyScreenTurnedOff();
+ mUpdateMonitor.dispatchScreenTurnedOff();
}
private void maybeSendUserPresentBroadcast() {
@@ -1101,15 +1113,9 @@ public class KeyguardViewMediator extends SystemUI {
mHandler.sendEmptyMessage(VERIFY_UNLOCK);
}
-
- /**
- * Send a message to keyguard telling it the screen just turned on.
- * @see #onScreenTurnedOff(int)
- * @see #handleNotifyScreenOff
- */
- private void notifyScreenOffLocked() {
- if (DEBUG) Log.d(TAG, "notifyScreenOffLocked");
- mHandler.sendEmptyMessage(NOTIFY_SCREEN_OFF);
+ private void notifyFinishedGoingToSleep() {
+ if (DEBUG) Log.d(TAG, "notifyFinishedGoingToSleep");
+ mHandler.sendEmptyMessage(NOTIFY_FINISHED_GOING_TO_SLEEP);
}
private void notifyStartedWakingUp() {
@@ -1117,12 +1123,24 @@ public class KeyguardViewMediator extends SystemUI {
mHandler.sendEmptyMessage(NOTIFY_STARTED_WAKING_UP);
}
- private void notifyScreenOnLocked(IKeyguardDrawnCallback callback) {
- if (DEBUG) Log.d(TAG, "notifyScreenOnLocked");
+ private void notifyScreenOn(IKeyguardDrawnCallback callback) {
+ if (DEBUG) Log.d(TAG, "notifyScreenOn");
Message msg = mHandler.obtainMessage(NOTIFY_SCREEN_TURNING_ON, callback);
mHandler.sendMessage(msg);
}
+ private void notifyScreenTurnedOn() {
+ if (DEBUG) Log.d(TAG, "notifyScreenTurnedOn");
+ Message msg = mHandler.obtainMessage(NOTIFY_SCREEN_TURNED_ON);
+ mHandler.sendMessage(msg);
+ }
+
+ private void notifyScreenTurnedOff() {
+ if (DEBUG) Log.d(TAG, "notifyScreenTurnedOff");
+ Message msg = mHandler.obtainMessage(NOTIFY_SCREEN_TURNED_OFF);
+ mHandler.sendMessage(msg);
+ }
+
/**
* Send message to keyguard telling it to show itself
* @see #handleShow
@@ -1206,12 +1224,18 @@ public class KeyguardViewMediator extends SystemUI {
case VERIFY_UNLOCK:
handleVerifyUnlock();
break;
- case NOTIFY_SCREEN_OFF:
- handleNotifyScreenOff();
+ case NOTIFY_FINISHED_GOING_TO_SLEEP:
+ handleNotifyFinishedGoingToSleep();
break;
case NOTIFY_SCREEN_TURNING_ON:
handleNotifyScreenTurningOn((IKeyguardDrawnCallback) msg.obj);
break;
+ case NOTIFY_SCREEN_TURNED_ON:
+ handleNotifyScreenTurnedOn();
+ break;
+ case NOTIFY_SCREEN_TURNED_OFF:
+ handleNotifyScreenTurnedOff();
+ break;
case NOTIFY_STARTED_WAKING_UP:
handleNotifyStartedWakingUp();
break;
@@ -1525,20 +1549,20 @@ public class KeyguardViewMediator extends SystemUI {
}
/**
- * Handle message sent by {@link #notifyScreenOffLocked()}
- * @see #NOTIFY_SCREEN_OFF
+ * Handle message sent by {@link #notifyFinishedGoingToSleep()}
+ * @see #NOTIFY_FINISHED_GOING_TO_SLEEP
*/
- private void handleNotifyScreenOff() {
+ private void handleNotifyFinishedGoingToSleep() {
synchronized (KeyguardViewMediator.this) {
- if (DEBUG) Log.d(TAG, "handleNotifyScreenOff");
- mStatusBarKeyguardViewManager.onScreenTurnedOff();
+ if (DEBUG) Log.d(TAG, "handleNotifyFinishedGoingToSleep");
+ mStatusBarKeyguardViewManager.onFinishedGoingToSleep();
}
}
private void handleNotifyStartedWakingUp() {
synchronized (KeyguardViewMediator.this) {
if (DEBUG) Log.d(TAG, "handleNotifyWakingUp");
- mStatusBarKeyguardViewManager.onScreenTurnedOn();
+ mStatusBarKeyguardViewManager.onStartedWakingUp();
}
}
@@ -1555,6 +1579,20 @@ public class KeyguardViewMediator extends SystemUI {
}
}
+ private void handleNotifyScreenTurnedOn() {
+ synchronized (this) {
+ if (DEBUG) Log.d(TAG, "handleNotifyScreenTurnedOn");
+ mStatusBarKeyguardViewManager.onScreenTurnedOn();
+ }
+ }
+
+ private void handleNotifyScreenTurnedOff() {
+ synchronized (this) {
+ if (DEBUG) Log.d(TAG, "handleNotifyScreenTurnedOff");
+ mStatusBarKeyguardViewManager.onScreenTurnedOff();
+ }
+ }
+
private void notifyDrawn(final IKeyguardDrawnCallback callback) {
try {
callback.onDrawn();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
index 7c08efc..6627360 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
@@ -634,13 +634,13 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
}
@Override
- public void onScreenTurnedOn() {
- mLockIcon.setScreenOn(true);
+ public void onStartedWakingUp() {
+ mLockIcon.setDeviceInteractive(true);
}
@Override
- public void onScreenTurnedOff(int why) {
- mLockIcon.setScreenOn(false);
+ public void onFinishedGoingToSleep(int why) {
+ mLockIcon.setDeviceInteractive(false);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java
index d93f7c2..06d2fca 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java
@@ -47,9 +47,9 @@ public class LockIcon extends KeyguardAffordanceView {
private static final int STATE_FINGERPRINT_ERROR = 4;
private int mLastState = 0;
- private boolean mLastScreenOn;
+ private boolean mLastDeviceInteractive;
private boolean mTransientFpError;
- private boolean mScreenOn;
+ private boolean mDeviceInteractive;
private final TrustDrawable mTrustDrawable;
private final UnlockMethodCache mUnlockMethodCache;
private AccessibilityController mAccessibilityController;
@@ -83,13 +83,14 @@ public class LockIcon extends KeyguardAffordanceView {
update();
}
- public void setScreenOn(boolean screenOn) {
- mScreenOn = screenOn;
+ public void setDeviceInteractive(boolean deviceInteractive) {
+ mDeviceInteractive = deviceInteractive;
update();
}
public void update() {
- boolean visible = isShown() && KeyguardUpdateMonitor.getInstance(mContext).isScreenOn();
+ boolean visible = isShown()
+ && KeyguardUpdateMonitor.getInstance(mContext).isDeviceInteractive();
if (visible) {
mTrustDrawable.start();
} else {
@@ -101,8 +102,9 @@ public class LockIcon extends KeyguardAffordanceView {
// TODO: Real icon for facelock.
int state = getState();
boolean anyFingerprintIcon = state == STATE_FINGERPRINT || state == STATE_FINGERPRINT_ERROR;
- if (state != mLastState || mScreenOn != mLastScreenOn) {
- int iconRes = getAnimationResForTransition(mLastState, state, mLastScreenOn, mScreenOn);
+ if (state != mLastState || mDeviceInteractive != mLastDeviceInteractive) {
+ int iconRes = getAnimationResForTransition(mLastState, state, mLastDeviceInteractive,
+ mDeviceInteractive);
if (iconRes == R.drawable.lockscreen_fingerprint_draw_off_animation) {
anyFingerprintIcon = true;
}
@@ -149,7 +151,7 @@ public class LockIcon extends KeyguardAffordanceView {
}
}
mLastState = state;
- mLastScreenOn = mScreenOn;
+ mLastDeviceInteractive = mDeviceInteractive;
}
// Hide trust circle when fingerprint is running.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 416fb36..ed49f39 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -91,6 +91,7 @@ public class NavigationBarView extends LinearLayout {
private OnVerticalChangedListener mOnVerticalChangedListener;
private boolean mIsLayoutRtl;
+ private boolean mLayoutTransitionsEnabled;
private class NavTransitionListener implements TransitionListener {
private boolean mBackTransitioning;
@@ -333,13 +334,6 @@ public class NavigationBarView extends LinearLayout {
if (!lt.getTransitionListeners().contains(mTransitionListener)) {
lt.addTransitionListener(mTransitionListener);
}
- if (!mScreenOn && mCurrentView != null) {
- lt.disableTransitionType(
- LayoutTransition.CHANGE_APPEARING |
- LayoutTransition.CHANGE_DISAPPEARING |
- LayoutTransition.APPEARING |
- LayoutTransition.DISAPPEARING);
- }
}
}
if (inLockTask() && disableRecent && !disableHome) {
@@ -367,6 +361,44 @@ public class NavigationBarView extends LinearLayout {
}
}
+ public void setWakeAndUnlocking(boolean wakeAndUnlocking) {
+ setUseFadingAnimations(wakeAndUnlocking);
+ setLayoutTransitionsEnabled(!wakeAndUnlocking);
+ }
+
+ private void setLayoutTransitionsEnabled(boolean enabled) {
+ mLayoutTransitionsEnabled = enabled;
+ ViewGroup navButtons = (ViewGroup) mCurrentView.findViewById(R.id.nav_buttons);
+ LayoutTransition lt = navButtons.getLayoutTransition();
+ if (enabled) {
+ lt.enableTransitionType(LayoutTransition.APPEARING);
+ lt.enableTransitionType(LayoutTransition.DISAPPEARING);
+ lt.enableTransitionType(LayoutTransition.CHANGE_APPEARING);
+ lt.enableTransitionType(LayoutTransition.CHANGE_DISAPPEARING);
+ } else {
+ lt.disableTransitionType(LayoutTransition.APPEARING);
+ lt.disableTransitionType(LayoutTransition.DISAPPEARING);
+ lt.disableTransitionType(LayoutTransition.CHANGE_APPEARING);
+ lt.disableTransitionType(LayoutTransition.CHANGE_DISAPPEARING);
+ }
+ }
+
+ private void setUseFadingAnimations(boolean useFadingAnimations) {
+ WindowManager.LayoutParams lp = (WindowManager.LayoutParams) getLayoutParams();
+ if (lp != null) {
+ boolean old = lp.windowAnimations != 0;
+ if (!old && useFadingAnimations) {
+ lp.windowAnimations = R.style.Animation_NavigationBarFadeIn;
+ } else if (old && !useFadingAnimations) {
+ lp.windowAnimations = 0;
+ } else {
+ return;
+ }
+ WindowManager wm = (WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE);
+ wm.updateViewLayout(this, lp);
+ }
+ }
+
public void setSlippery(boolean newSlippery) {
WindowManager.LayoutParams lp = (WindowManager.LayoutParams) getLayoutParams();
if (lp != null) {
@@ -425,6 +457,7 @@ public class NavigationBarView extends LinearLayout {
}
mCurrentView = mRotatedViews[rot];
mCurrentView.setVisibility(View.VISIBLE);
+ setLayoutTransitionsEnabled(mLayoutTransitionsEnabled);
getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index dfce170..86755d1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -3955,7 +3955,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mScreenOnComingFromTouch = true;
mScreenOnTouchLocation = new PointF(event.getX(), event.getY());
mNotificationPanel.setTouchDisabled(false);
- mStatusBarKeyguardViewManager.notifyScreenWakeUpRequested();
+ mStatusBarKeyguardViewManager.notifyDeviceWakeUpRequested();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
index 6816399..1a35500 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -22,11 +22,12 @@ import android.animation.PropertyValuesHolder;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Color;
+import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
-import android.view.animation.AnimationUtils;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
+import android.view.animation.PathInterpolator;
import com.android.systemui.R;
import com.android.systemui.statusbar.BackDropView;
@@ -62,6 +63,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
private boolean mDarkenWhileDragging;
private boolean mBouncerShowing;
+ private boolean mWakeAndUnlocking;
private boolean mAnimateChange;
private boolean mUpdatePending;
private boolean mExpanding;
@@ -71,7 +73,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
private Runnable mOnAnimationFinished;
private boolean mAnimationStarted;
private final Interpolator mInterpolator = new DecelerateInterpolator();
- private final Interpolator mLinearOutSlowInInterpolator;
+ private final Interpolator mKeyguardFadeOutInterpolator = new PathInterpolator(0f, 0, 0.7f, 1f);
private BackDropView mBackDropView;
private boolean mScrimSrcEnabled;
private boolean mDozing;
@@ -92,8 +94,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
mHeadsUpScrim = headsUpScrim;
final Context context = scrimBehind.getContext();
mUnlockMethodCache = UnlockMethodCache.getInstance(context);
- mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(context,
- android.R.interpolator.linear_out_slow_in);
mScrimSrcEnabled = scrimSrcEnabled;
updateHeadsUpScrim(false);
}
@@ -128,7 +128,13 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
scheduleUpdate();
}
+ public void setWakeAndUnlocking() {
+ mWakeAndUnlocking = true;
+ scheduleUpdate();
+ }
+
public void animateKeyguardFadingOut(long delay, long duration, Runnable onAnimationFinished) {
+ mWakeAndUnlocking = false;
mAnimateKeyguardFadingOut = true;
mDurationOverride = duration;
mAnimationDelay = delay;
@@ -151,8 +157,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
}
public void setDozing(boolean dozing) {
- mDozing = dozing;
- scheduleUpdate();
+ if (mDozing != dozing) {
+ mDozing = dozing;
+ scheduleUpdate();
+ }
}
public void setDozeInFrontAlpha(float alpha) {
@@ -186,6 +194,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
if (mAnimateKeyguardFadingOut || mForceHideScrims) {
setScrimInFrontColor(0f);
setScrimBehindColor(0f);
+ } else if (mWakeAndUnlocking) {
+
+ // During wake and unlock, we first hide everything behind a black scrim, which then
+ // gets faded out from animateKeyguardFadingOut.
+ setScrimInFrontColor(1f);
+ setScrimBehindColor(0f);
} else if (!mKeyguardShowing && !mBouncerShowing) {
updateScrimNormal();
setScrimInFrontColor(0);
@@ -319,7 +333,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
}
private Interpolator getInterpolator() {
- return mAnimateKeyguardFadingOut ? mLinearOutSlowInInterpolator : mInterpolator;
+ return mAnimateKeyguardFadingOut ? mKeyguardFadeOutInterpolator : mInterpolator;
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
index 6b3a59d..44aa780 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -20,6 +20,7 @@ import android.content.ComponentCallbacks2;
import android.content.Context;
import android.os.Bundle;
import android.os.SystemClock;
+import android.os.Trace;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
@@ -59,7 +60,8 @@ public class StatusBarKeyguardViewManager {
private ViewGroup mContainer;
private StatusBarWindowManager mStatusBarWindowManager;
- private boolean mScreenOn = false;
+ private boolean mDeviceInteractive = false;
+ private boolean mScreenTurnedOn;
private KeyguardBouncer mBouncer;
private boolean mShowing;
private boolean mOccluded;
@@ -69,8 +71,11 @@ public class StatusBarKeyguardViewManager {
private boolean mLastOccluded;
private boolean mLastBouncerShowing;
private boolean mLastBouncerDismissible;
+ private boolean mLastDeferScrimFadeOut;
private OnDismissAction mAfterKeyguardGoneAction;
- private boolean mScreenWillWakeUp;
+ private boolean mDeviceWillWakeUp;
+ private boolean mWakeAndUnlocking;
+ private boolean mDeferScrimFadeOut;
public StatusBarKeyguardViewManager(Context context, ViewMediatorCallback callback,
LockPatternUtils lockPatternUtils) {
@@ -155,20 +160,34 @@ public class StatusBarKeyguardViewManager {
}
}
- public void onScreenTurnedOff() {
- mScreenOn = false;
+ public void onFinishedGoingToSleep() {
+ mDeviceInteractive = false;
mPhoneStatusBar.onScreenTurnedOff();
mBouncer.onScreenTurnedOff();
}
- public void onScreenTurnedOn() {
- mScreenOn = true;
- mScreenWillWakeUp = false;
+ public void onStartedWakingUp() {
+ mDeviceInteractive = true;
+ mDeviceWillWakeUp = false;
mPhoneStatusBar.onScreenTurnedOn();
}
- public void notifyScreenWakeUpRequested() {
- mScreenWillWakeUp = !mScreenOn;
+ public void onScreenTurnedOn() {
+ mScreenTurnedOn = true;
+ mWakeAndUnlocking = false;
+ if (mDeferScrimFadeOut) {
+ mDeferScrimFadeOut = false;
+ animateScrimControllerKeyguardFadingOut(0, 200);
+ updateStates();
+ }
+ }
+
+ public void onScreenTurnedOff() {
+ mScreenTurnedOn = false;
+ }
+
+ public void notifyDeviceWakeUpRequested() {
+ mDeviceWillWakeUp = !mDeviceInteractive;
}
public void verifyUnlock() {
@@ -252,21 +271,11 @@ public class StatusBarKeyguardViewManager {
mPhoneStatusBar.setKeyguardFadingAway(startTime, delay, fadeoutDuration);
boolean staying = mPhoneStatusBar.hideKeyguard();
if (!staying) {
- if (fadeoutDuration == 0) {
- mPhoneStatusBar.finishKeyguardFadingAway();
- WindowManagerGlobal.getInstance().trimMemory(
- ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN);
+ mStatusBarWindowManager.setKeyguardFadingAway(true);
+ if (mWakeAndUnlocking && !mScreenTurnedOn) {
+ mDeferScrimFadeOut = true;
} else {
- mStatusBarWindowManager.setKeyguardFadingAway(true);
- mScrimController.animateKeyguardFadingOut(delay, fadeoutDuration, new Runnable() {
- @Override
- public void run() {
- mStatusBarWindowManager.setKeyguardFadingAway(false);
- mPhoneStatusBar.finishKeyguardFadingAway();
- WindowManagerGlobal.getInstance().trimMemory(
- ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN);
- }
- });
+ animateScrimControllerKeyguardFadingOut(delay, fadeoutDuration);
}
} else {
mScrimController.animateGoingToFullShade(delay, fadeoutDuration);
@@ -281,6 +290,23 @@ public class StatusBarKeyguardViewManager {
}
+ private void animateScrimControllerKeyguardFadingOut(long delay, long duration) {
+ Trace.asyncTraceBegin(Trace.TRACE_TAG_VIEW, "Fading out", 0);
+ mScrimController.animateKeyguardFadingOut(delay, duration, new Runnable() {
+ @Override
+ public void run() {
+ mStatusBarWindowManager.setKeyguardFadingAway(false);
+ mPhoneStatusBar.finishKeyguardFadingAway();
+ if (mPhoneStatusBar.getNavigationBarView() != null) {
+ mPhoneStatusBar.getNavigationBarView().setWakeAndUnlocking(false);
+ }
+ WindowManagerGlobal.getInstance().trimMemory(
+ ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN);
+ Trace.asyncTraceEnd(Trace.TRACE_TAG_VIEW, "Fading out", 0);
+ }
+ });
+ }
+
private void executeAfterKeyguardGoneAction() {
if (mAfterKeyguardGoneAction != null) {
mAfterKeyguardGoneAction.onDismiss();
@@ -292,7 +318,7 @@ public class StatusBarKeyguardViewManager {
* Dismisses the keyguard by going to the next screen or making it gone.
*/
public void dismiss() {
- if (mScreenOn || mScreenWillWakeUp) {
+ if (mDeviceInteractive || mDeviceWillWakeUp) {
showBouncer();
}
}
@@ -352,6 +378,7 @@ public class StatusBarKeyguardViewManager {
boolean occluded = mOccluded;
boolean bouncerShowing = mBouncer.isShowing();
boolean bouncerDismissible = !mBouncer.isFullscreenBouncer();
+ boolean deferScrimFadeOut = mDeferScrimFadeOut;
if ((bouncerDismissible || !showing) != (mLastBouncerDismissible || !mLastShowing)
|| mFirstUpdate) {
@@ -361,10 +388,15 @@ public class StatusBarKeyguardViewManager {
mContainer.setSystemUiVisibility(vis | View.STATUS_BAR_DISABLE_BACK);
}
}
- if ((!(showing && !occluded) || bouncerShowing)
- != (!(mLastShowing && !mLastOccluded) || mLastBouncerShowing) || mFirstUpdate) {
+
+ // Hide navigation bar on Keyguard but not on bouncer and also if we are deferring a scrim
+ // fade out, i.e. we are waiting for the screen to have turned on.
+ boolean navBarVisible = !deferScrimFadeOut && (!(showing && !occluded) || bouncerShowing);
+ boolean lastNavBarVisible = !mLastDeferScrimFadeOut && (!(mLastShowing && !mLastOccluded)
+ || mLastBouncerShowing);
+ if (navBarVisible != lastNavBarVisible || mFirstUpdate) {
if (mPhoneStatusBar.getNavigationBarView() != null) {
- if (!(showing && !occluded) || bouncerShowing) {
+ if (navBarVisible) {
mContainer.postOnAnimationDelayed(mMakeNavigationBarVisibleRunnable,
getNavBarShowDelay());
} else {
@@ -391,6 +423,7 @@ public class StatusBarKeyguardViewManager {
mFirstUpdate = false;
mLastShowing = showing;
mLastOccluded = occluded;
+ mLastDeferScrimFadeOut = deferScrimFadeOut;
mLastBouncerShowing = bouncerShowing;
mLastBouncerDismissible = bouncerDismissible;
@@ -450,4 +483,12 @@ public class StatusBarKeyguardViewManager {
public void notifyKeyguardAuthenticated() {
mBouncer.notifyKeyguardAuthenticated();
}
+
+ public void setWakeAndUnlocking() {
+ mWakeAndUnlocking = true;
+ mScrimController.setWakeAndUnlocking();
+ if (mPhoneStatusBar.getNavigationBarView() != null) {
+ mPhoneStatusBar.getNavigationBarView().setWakeAndUnlocking(true);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java
index c8c45e3..bd537f7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java
@@ -127,7 +127,7 @@ public class UnlockMethodCache {
}
@Override
- public void onScreenTurnedOn() {
+ public void onStartedWakingUp() {
update(false /* updateAlways */);
}