Start pulse fading exactly when screen is turned on
Bug: 23163299 Change-Id: I0f6d5dbfa02e455292e06a4f8f69ab68e9da2b6b
This commit is contained in:
@@ -260,12 +260,6 @@
|
||||
<!-- Doze: pulse parameter - how long does it take to fade in after a pickup? -->
|
||||
<integer name="doze_pulse_duration_in_pickup">300</integer>
|
||||
|
||||
<!-- Doze: pulse parameter - delay to wait for the screen to wake up -->
|
||||
<integer name="doze_pulse_delay_in">200</integer>
|
||||
|
||||
<!-- Doze: pulse parameter - delay to wait for the screen to wake up after a pickup -->
|
||||
<integer name="doze_pulse_delay_in_pickup">200</integer>
|
||||
|
||||
<!-- Doze: pulse parameter - once faded in, how long does it stay visible? -->
|
||||
<integer name="doze_pulse_duration_visible">3000</integer>
|
||||
|
||||
|
||||
@@ -167,13 +167,7 @@ public abstract class BaseStatusBar extends SystemUI implements
|
||||
// on-screen navigation buttons
|
||||
protected NavigationBarView mNavigationBarView = null;
|
||||
|
||||
protected Boolean mScreenOn;
|
||||
|
||||
// The second field is a bit different from the first one because it only listens to screen on/
|
||||
// screen of events from Keyguard. We need this so we don't have a race condition with the
|
||||
// broadcast. In the future, we should remove the first field altogether and rename the second
|
||||
// field.
|
||||
protected boolean mScreenOnFromKeyguard;
|
||||
protected boolean mDeviceInteractive;
|
||||
|
||||
protected boolean mVisible;
|
||||
|
||||
@@ -1619,7 +1613,7 @@ public abstract class BaseStatusBar extends SystemUI implements
|
||||
|
||||
protected void updateVisibleToUser() {
|
||||
boolean oldVisibleToUser = mVisibleToUser;
|
||||
mVisibleToUser = mVisible && mScreenOnFromKeyguard;
|
||||
mVisibleToUser = mVisible && mDeviceInteractive;
|
||||
|
||||
if (oldVisibleToUser != mVisibleToUser) {
|
||||
handleVisibleToUserChanged(mVisibleToUser);
|
||||
|
||||
@@ -50,8 +50,6 @@ public class DozeParameters {
|
||||
pw.print(" getPulseDuration(pickup=true): "); pw.println(getPulseDuration(true));
|
||||
pw.print(" getPulseInDuration(pickup=false): "); pw.println(getPulseInDuration(false));
|
||||
pw.print(" getPulseInDuration(pickup=true): "); pw.println(getPulseInDuration(true));
|
||||
pw.print(" getPulseInDelay(pickup=false): "); pw.println(getPulseInDelay(false));
|
||||
pw.print(" getPulseInDelay(pickup=true): "); pw.println(getPulseInDelay(true));
|
||||
pw.print(" getPulseInVisibleDuration(): "); pw.println(getPulseVisibleDuration());
|
||||
pw.print(" getPulseOutDuration(): "); pw.println(getPulseOutDuration());
|
||||
pw.print(" getPulseOnSigMotion(): "); pw.println(getPulseOnSigMotion());
|
||||
@@ -80,12 +78,6 @@ public class DozeParameters {
|
||||
: getInt("doze.pulse.duration.in", R.integer.doze_pulse_duration_in);
|
||||
}
|
||||
|
||||
public int getPulseInDelay(boolean pickup) {
|
||||
return pickup
|
||||
? getInt("doze.pulse.delay.in.pickup", R.integer.doze_pulse_delay_in_pickup)
|
||||
: getInt("doze.pulse.delay.in", R.integer.doze_pulse_delay_in);
|
||||
}
|
||||
|
||||
public int getPulseVisibleDuration() {
|
||||
return getInt("doze.pulse.duration.visible", R.integer.doze_pulse_duration_visible);
|
||||
}
|
||||
|
||||
@@ -100,6 +100,16 @@ public class DozeScrimController {
|
||||
mHandler.post(mPulseIn);
|
||||
}
|
||||
|
||||
public void onScreenTurnedOn() {
|
||||
if (isPulsing()) {
|
||||
final boolean pickup = mPulseReason == DozeLog.PULSE_REASON_SENSOR_PICKUP;
|
||||
startScrimAnimation(true /* inFront */, 0f,
|
||||
mDozeParameters.getPulseInDuration(pickup),
|
||||
pickup ? mPulseInInterpolatorPickup : mPulseInInterpolator,
|
||||
mPulseInFinished);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isPulsing() {
|
||||
return mPulseCallback != null;
|
||||
}
|
||||
@@ -138,12 +148,11 @@ public class DozeScrimController {
|
||||
|
||||
private void startScrimAnimation(final boolean inFront, float target, long duration,
|
||||
Interpolator interpolator) {
|
||||
startScrimAnimation(inFront, target, duration, interpolator, 0 /* delay */,
|
||||
null /* endRunnable */);
|
||||
startScrimAnimation(inFront, target, duration, interpolator, null /* endRunnable */);
|
||||
}
|
||||
|
||||
private void startScrimAnimation(final boolean inFront, float target, long duration,
|
||||
Interpolator interpolator, long delay, final Runnable endRunnable) {
|
||||
Interpolator interpolator, final Runnable endRunnable) {
|
||||
Animator current = getCurrentAnimator(inFront);
|
||||
if (current != null) {
|
||||
float currentTarget = getCurrentTarget(inFront);
|
||||
@@ -162,7 +171,6 @@ public class DozeScrimController {
|
||||
});
|
||||
anim.setInterpolator(interpolator);
|
||||
anim.setDuration(duration);
|
||||
anim.setStartDelay(delay);
|
||||
anim.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
@@ -222,12 +230,6 @@ public class DozeScrimController {
|
||||
+ DozeLog.pulseReasonToString(mPulseReason));
|
||||
if (!mDozing) return;
|
||||
DozeLog.tracePulseStart(mPulseReason);
|
||||
final boolean pickup = mPulseReason == DozeLog.PULSE_REASON_SENSOR_PICKUP;
|
||||
startScrimAnimation(true /* inFront */, 0f,
|
||||
mDozeParameters.getPulseInDuration(pickup),
|
||||
pickup ? mPulseInInterpolatorPickup : mPulseInInterpolator,
|
||||
mDozeParameters.getPulseInDelay(pickup),
|
||||
mPulseInFinished);
|
||||
|
||||
// Signal that the pulse is ready to turn the screen on and draw.
|
||||
pulseStarted();
|
||||
@@ -249,7 +251,7 @@ public class DozeScrimController {
|
||||
if (DEBUG) Log.d(TAG, "Pulse out, mDozing=" + mDozing);
|
||||
if (!mDozing) return;
|
||||
startScrimAnimation(true /* inFront */, 1f, mDozeParameters.getPulseOutDuration(),
|
||||
mPulseOutInterpolator, 0 /* delay */, mPulseOutFinished);
|
||||
mPulseOutInterpolator, mPulseOutFinished);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -918,7 +918,7 @@ public class NotificationPanelView extends PanelView implements
|
||||
}
|
||||
|
||||
private int getFalsingThreshold() {
|
||||
float factor = mStatusBar.isScreenOnComingFromTouch() ? 1.5f : 1.0f;
|
||||
float factor = mStatusBar.isWakeUpComingFromTouch() ? 1.5f : 1.0f;
|
||||
return (int) (mQsFalsingThreshold * factor);
|
||||
}
|
||||
|
||||
@@ -2075,7 +2075,7 @@ public class NotificationPanelView extends PanelView implements
|
||||
|
||||
@Override
|
||||
public float getAffordanceFalsingFactor() {
|
||||
return mStatusBar.isScreenOnComingFromTouch() ? 1.5f : 1.0f;
|
||||
return mStatusBar.isWakeUpComingFromTouch() ? 1.5f : 1.0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -382,7 +382,7 @@ public abstract class PanelView extends FrameLayout {
|
||||
|| forceCancel;
|
||||
DozeLog.traceFling(expand, mTouchAboveFalsingThreshold,
|
||||
mStatusBar.isFalsingThresholdNeeded(),
|
||||
mStatusBar.isScreenOnComingFromTouch());
|
||||
mStatusBar.isWakeUpComingFromTouch());
|
||||
// Log collapse gesture if on lock screen.
|
||||
if (!expand && mStatusBar.getBarState() == StatusBarState.KEYGUARD) {
|
||||
float displayDensity = mStatusBar.getDisplayDensity();
|
||||
@@ -411,7 +411,7 @@ public abstract class PanelView extends FrameLayout {
|
||||
}
|
||||
|
||||
private int getFalsingThreshold() {
|
||||
float factor = mStatusBar.isScreenOnComingFromTouch() ? 1.5f : 1.0f;
|
||||
float factor = mStatusBar.isWakeUpComingFromTouch() ? 1.5f : 1.0f;
|
||||
return (int) (mUnlockFalsingThreshold * factor);
|
||||
}
|
||||
|
||||
|
||||
@@ -282,8 +282,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
private StatusBarWindowManager mStatusBarWindowManager;
|
||||
private UnlockMethodCache mUnlockMethodCache;
|
||||
private DozeServiceHost mDozeServiceHost;
|
||||
private boolean mScreenOnComingFromTouch;
|
||||
private PointF mScreenOnTouchLocation;
|
||||
private boolean mWakeUpComingFromTouch;
|
||||
private PointF mWakeUpTouchLocation;
|
||||
|
||||
int mPixelFormat;
|
||||
Object mQueueLock = new Object();
|
||||
@@ -1913,8 +1913,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
return mNotificationPanel.isQsExpanded();
|
||||
}
|
||||
|
||||
public boolean isScreenOnComingFromTouch() {
|
||||
return mScreenOnComingFromTouch;
|
||||
public boolean isWakeUpComingFromTouch() {
|
||||
return mWakeUpComingFromTouch;
|
||||
}
|
||||
|
||||
public boolean isFalsingThresholdNeeded() {
|
||||
@@ -2474,7 +2474,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
private void checkBarMode(int mode, int windowState, BarTransitions transitions,
|
||||
boolean noAnimation) {
|
||||
final boolean powerSave = mBatteryController.isPowerSave();
|
||||
final boolean anim = !noAnimation && (mScreenOn == null || mScreenOn)
|
||||
final boolean anim = !noAnimation && mDeviceInteractive
|
||||
&& windowState != WINDOW_STATE_HIDDEN && !powerSave;
|
||||
if (powerSave && getBarState() == StatusBarState.SHADE) {
|
||||
mode = MODE_WARNING;
|
||||
@@ -2882,14 +2882,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
}
|
||||
}
|
||||
else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
|
||||
mScreenOn = false;
|
||||
notifyNavigationBarScreenOn(false);
|
||||
notifyHeadsUpScreenOff();
|
||||
finishBarAnimations();
|
||||
resetUserExpandedStates();
|
||||
}
|
||||
else if (Intent.ACTION_SCREEN_ON.equals(action)) {
|
||||
mScreenOn = true;
|
||||
notifyNavigationBarScreenOn(true);
|
||||
}
|
||||
}
|
||||
@@ -3343,7 +3341,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
mHandler.removeMessages(MSG_LAUNCH_TRANSITION_TIMEOUT);
|
||||
setBarState(StatusBarState.KEYGUARD);
|
||||
updateKeyguardState(false /* goingToFullShade */, false /* fromShadeLocked */);
|
||||
if (!mScreenOnFromKeyguard) {
|
||||
if (!mDeviceInteractive) {
|
||||
|
||||
// If the screen is off already, we need to disable touch events because these might
|
||||
// collapse the panel after we expanded it, and thus we would end up with a blank
|
||||
@@ -3563,7 +3561,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
private void updateDozingState() {
|
||||
boolean animate = !mDozing && mDozeScrimController.isPulsing();
|
||||
mNotificationPanel.setDozing(mDozing, animate);
|
||||
mStackScroller.setDark(mDozing, animate, mScreenOnTouchLocation);
|
||||
mStackScroller.setDark(mDozing, animate, mWakeUpTouchLocation);
|
||||
mScrimController.setDozing(mDozing);
|
||||
mDozeScrimController.setDozing(mDozing, animate);
|
||||
}
|
||||
@@ -3616,7 +3614,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
}
|
||||
|
||||
public boolean onSpacePressed() {
|
||||
if (mScreenOn != null && mScreenOn
|
||||
if (mDeviceInteractive
|
||||
&& (mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED)) {
|
||||
animateCollapsePanels(
|
||||
CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL /* flags */, true /* force */);
|
||||
@@ -3826,16 +3824,16 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
disable(mDisabledUnmodified1, mDisabledUnmodified2, true /* animate */);
|
||||
}
|
||||
|
||||
public void onScreenTurnedOff() {
|
||||
mScreenOnFromKeyguard = false;
|
||||
mScreenOnComingFromTouch = false;
|
||||
mScreenOnTouchLocation = null;
|
||||
public void onFinishedGoingToSleep() {
|
||||
mDeviceInteractive = false;
|
||||
mWakeUpComingFromTouch = false;
|
||||
mWakeUpTouchLocation = null;
|
||||
mStackScroller.setAnimationsEnabled(false);
|
||||
updateVisibleToUser();
|
||||
}
|
||||
|
||||
public void onScreenTurnedOn() {
|
||||
mScreenOnFromKeyguard = true;
|
||||
public void onStartedWakingUp() {
|
||||
mDeviceInteractive = true;
|
||||
mStackScroller.setAnimationsEnabled(true);
|
||||
mNotificationPanel.setTouchDisabled(false);
|
||||
updateVisibleToUser();
|
||||
@@ -3845,6 +3843,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
mNotificationPanel.onScreenTurningOn();
|
||||
}
|
||||
|
||||
public void onScreenTurnedOn() {
|
||||
mDozeScrimController.onScreenTurnedOn();
|
||||
}
|
||||
|
||||
/**
|
||||
* This handles long-press of both back and recents. They are
|
||||
* handled together to capture them both being long-pressed
|
||||
@@ -3959,8 +3961,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
if (mDozing && mDozeScrimController.isPulsing()) {
|
||||
PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
|
||||
pm.wakeUp(time, "com.android.systemui:NODOZE");
|
||||
mScreenOnComingFromTouch = true;
|
||||
mScreenOnTouchLocation = new PointF(event.getX(), event.getY());
|
||||
mWakeUpComingFromTouch = true;
|
||||
mWakeUpTouchLocation = new PointF(event.getX(), event.getY());
|
||||
mNotificationPanel.setTouchDisabled(false);
|
||||
mStatusBarKeyguardViewManager.notifyDeviceWakeUpRequested();
|
||||
}
|
||||
|
||||
@@ -162,14 +162,14 @@ public class StatusBarKeyguardViewManager {
|
||||
|
||||
public void onFinishedGoingToSleep() {
|
||||
mDeviceInteractive = false;
|
||||
mPhoneStatusBar.onScreenTurnedOff();
|
||||
mPhoneStatusBar.onFinishedGoingToSleep();
|
||||
mBouncer.onScreenTurnedOff();
|
||||
}
|
||||
|
||||
public void onStartedWakingUp() {
|
||||
mDeviceInteractive = true;
|
||||
mDeviceWillWakeUp = false;
|
||||
mPhoneStatusBar.onScreenTurnedOn();
|
||||
mPhoneStatusBar.onStartedWakingUp();
|
||||
}
|
||||
|
||||
public void onScreenTurningOn() {
|
||||
@@ -184,6 +184,7 @@ public class StatusBarKeyguardViewManager {
|
||||
animateScrimControllerKeyguardFadingOut(0, 200);
|
||||
updateStates();
|
||||
}
|
||||
mPhoneStatusBar.onScreenTurnedOn();
|
||||
}
|
||||
|
||||
public void onScreenTurnedOff() {
|
||||
|
||||
@@ -653,7 +653,7 @@ public class NotificationStackScrollLayout extends ViewGroup
|
||||
|
||||
@Override
|
||||
public float getFalsingThresholdFactor() {
|
||||
return mPhoneStatusBar.isScreenOnComingFromTouch() ? 1.5f : 1.0f;
|
||||
return mPhoneStatusBar.isWakeUpComingFromTouch() ? 1.5f : 1.0f;
|
||||
}
|
||||
|
||||
public View getChildAtPosition(MotionEvent ev) {
|
||||
|
||||
Reference in New Issue
Block a user