Merge "AOD: Fix more flickering" into oc-dr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
f2c8a24f56
@@ -40,6 +40,8 @@ import com.android.systemui.statusbar.phone.StatusBarIconController;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
import com.android.systemui.volume.VolumeDialogControllerImpl;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* Class factory to provide customizable SystemUI components.
|
||||
*/
|
||||
@@ -84,8 +86,10 @@ public class SystemUIFactory {
|
||||
|
||||
public ScrimController createScrimController(LightBarController lightBarController,
|
||||
ScrimView scrimBehind, ScrimView scrimInFront, View headsUpScrim,
|
||||
LockscreenWallpaper lockscreenWallpaper) {
|
||||
return new ScrimController(lightBarController, scrimBehind, scrimInFront, headsUpScrim);
|
||||
LockscreenWallpaper lockscreenWallpaper,
|
||||
Consumer<Boolean> scrimVisibleListener) {
|
||||
return new ScrimController(lightBarController, scrimBehind, scrimInFront, headsUpScrim,
|
||||
scrimVisibleListener);
|
||||
}
|
||||
|
||||
public NotificationIconAreaController createNotificationIconAreaController(Context context,
|
||||
|
||||
@@ -25,6 +25,7 @@ import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Trace;
|
||||
import android.util.MathUtils;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -46,6 +47,8 @@ import com.android.systemui.statusbar.ScrimView;
|
||||
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
|
||||
import com.android.systemui.statusbar.stack.ViewState;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* Controls both the scrim behind the notifications and in front of the notifications (when a
|
||||
* security method gets shown).
|
||||
@@ -125,12 +128,16 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
|
||||
private boolean mWakingUpFromAodInProgress;
|
||||
/** Wake up from AOD transition is animating; need to reset when animation finishes */
|
||||
private boolean mWakingUpFromAodAnimationRunning;
|
||||
private boolean mScrimsVisble;
|
||||
private final Consumer<Boolean> mScrimVisibleListener;
|
||||
|
||||
public ScrimController(LightBarController lightBarController, ScrimView scrimBehind,
|
||||
ScrimView scrimInFront, View headsUpScrim) {
|
||||
ScrimView scrimInFront, View headsUpScrim,
|
||||
Consumer<Boolean> scrimVisibleListener) {
|
||||
mScrimBehind = scrimBehind;
|
||||
mScrimInFront = scrimInFront;
|
||||
mHeadsUpScrim = headsUpScrim;
|
||||
mScrimVisibleListener = scrimVisibleListener;
|
||||
final Context context = scrimBehind.getContext();
|
||||
mUnlockMethodCache = UnlockMethodCache.getInstance(context);
|
||||
mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(context);
|
||||
@@ -192,7 +199,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
|
||||
scheduleUpdate();
|
||||
}
|
||||
|
||||
/** Prepares the wakeUpFromAod animation (while turning on screen); Forces black scrims. */
|
||||
public void prepareWakeUpFromAod() {
|
||||
if (mWakingUpFromAodInProgress) {
|
||||
return;
|
||||
}
|
||||
mWakingUpFromAodInProgress = true;
|
||||
mWakingUpFromAodStarting = true;
|
||||
mAnimateChange = false;
|
||||
@@ -200,10 +211,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
|
||||
onPreDraw();
|
||||
}
|
||||
|
||||
/** Starts the wakeUpFromAod animation (once screen is on); animate to transparent scrims. */
|
||||
public void wakeUpFromAod() {
|
||||
if (mWakeAndUnlocking || mAnimateKeyguardFadingOut) {
|
||||
// Wake and unlocking has a separate transition that must not be interfered with.
|
||||
mWakingUpFromAodStarting = false;
|
||||
mWakingUpFromAodInProgress = false;
|
||||
return;
|
||||
}
|
||||
if (mWakingUpFromAodStarting) {
|
||||
@@ -218,6 +231,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
|
||||
mWakeAndUnlocking = true;
|
||||
mAnimatingDozeUnlock = true;
|
||||
mWakingUpFromAodStarting = false;
|
||||
mWakingUpFromAodInProgress = false;
|
||||
scheduleUpdate();
|
||||
}
|
||||
|
||||
@@ -328,7 +342,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
|
||||
}
|
||||
|
||||
protected void updateScrims() {
|
||||
|
||||
// Make sure we have the right gradients
|
||||
if (mNeedsDrawableColorUpdate) {
|
||||
mNeedsDrawableColorUpdate = false;
|
||||
@@ -359,13 +372,24 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
|
||||
setScrimInFrontAlpha(1f);
|
||||
setScrimBehindAlpha(0f);
|
||||
}
|
||||
} else if (!mKeyguardShowing && !mBouncerShowing) {
|
||||
} else if (!mKeyguardShowing && !mBouncerShowing && !mWakingUpFromAodStarting) {
|
||||
updateScrimNormal();
|
||||
setScrimInFrontAlpha(0);
|
||||
} else {
|
||||
updateScrimKeyguard();
|
||||
}
|
||||
mAnimateChange = false;
|
||||
dispatchScrimsVisible();
|
||||
}
|
||||
|
||||
private void dispatchScrimsVisible() {
|
||||
boolean scrimsVisible = mScrimBehind.getViewAlpha() > 0 || mScrimInFront.getViewAlpha() > 0;
|
||||
|
||||
if (mScrimsVisble != scrimsVisible) {
|
||||
mScrimsVisble = scrimsVisible;
|
||||
|
||||
mScrimVisibleListener.accept(scrimsVisible);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateScrimKeyguard() {
|
||||
@@ -457,6 +481,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
|
||||
alpha = Math.max(0, Math.min(1.0f, alpha));
|
||||
scrimView.setViewAlpha(alpha);
|
||||
|
||||
Trace.traceCounter(Trace.TRACE_TAG_APP,
|
||||
scrim == mScrimInFront ? "front_scrim_alpha" : "back_scrim_alpha",
|
||||
(int) (alpha * 255));
|
||||
|
||||
int dozeTint = Color.TRANSPARENT;
|
||||
|
||||
boolean dozing = mAnimatingDozeUnlock || mDozing;
|
||||
@@ -464,6 +492,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
|
||||
if (dozing || frontScrimDozing && scrim == mScrimInFront) {
|
||||
dozeTint = Color.BLACK;
|
||||
}
|
||||
Trace.traceCounter(Trace.TRACE_TAG_APP,
|
||||
scrim == mScrimInFront ? "front_scrim_tint" : "back_scrim_tint",
|
||||
dozeTint == Color.BLACK ? 1 : 0);
|
||||
|
||||
scrimView.setTint(dozeTint);
|
||||
} else {
|
||||
scrim.setAlpha(alpha1);
|
||||
@@ -477,6 +509,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
|
||||
float alpha = (float) animation.getAnimatedValue();
|
||||
setCurrentScrimAlpha(scrim, alpha);
|
||||
updateScrimColor(scrim);
|
||||
dispatchScrimsVisible();
|
||||
});
|
||||
anim.setInterpolator(getInterpolator());
|
||||
anim.setStartDelay(mAnimationDelay);
|
||||
|
||||
@@ -1132,7 +1132,12 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
ScrimView scrimInFront = (ScrimView) mStatusBarWindow.findViewById(R.id.scrim_in_front);
|
||||
View headsUpScrim = mStatusBarWindow.findViewById(R.id.heads_up_scrim);
|
||||
mScrimController = SystemUIFactory.getInstance().createScrimController(mLightBarController,
|
||||
scrimBehind, scrimInFront, headsUpScrim, mLockscreenWallpaper);
|
||||
scrimBehind, scrimInFront, headsUpScrim, mLockscreenWallpaper,
|
||||
scrimsVisible -> {
|
||||
if (mStatusBarWindowManager != null) {
|
||||
mStatusBarWindowManager.setScrimsVisible(scrimsVisible);
|
||||
}
|
||||
});
|
||||
if (mScrimSrcModeEnabled) {
|
||||
Runnable runnable = new Runnable() {
|
||||
@Override
|
||||
@@ -5171,6 +5176,9 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
mStackScroller.setAnimationsEnabled(true);
|
||||
mVisualStabilityManager.setScreenOn(true);
|
||||
mNotificationPanel.setTouchDisabled(false);
|
||||
|
||||
maybePrepareWakeUpFromAod();
|
||||
|
||||
mDozeServiceHost.stopDozing();
|
||||
updateVisibleToUser();
|
||||
updateIsKeyguard();
|
||||
@@ -5183,11 +5191,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
mFalsingManager.onScreenTurningOn();
|
||||
mNotificationPanel.onScreenTurningOn();
|
||||
|
||||
int wakefulness = mWakefulnessLifecycle.getWakefulness();
|
||||
if (mDozing && (wakefulness == WAKEFULNESS_WAKING
|
||||
|| wakefulness == WAKEFULNESS_ASLEEP) && !isPulsing()) {
|
||||
mScrimController.prepareWakeUpFromAod();
|
||||
}
|
||||
maybePrepareWakeUpFromAod();
|
||||
|
||||
if (mLaunchCameraOnScreenTurningOn) {
|
||||
mNotificationPanel.launchCamera(false, mLastCameraLaunchSource);
|
||||
@@ -5216,6 +5220,14 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
return mWakefulnessLifecycle.getWakefulness();
|
||||
}
|
||||
|
||||
private void maybePrepareWakeUpFromAod() {
|
||||
int wakefulness = mWakefulnessLifecycle.getWakefulness();
|
||||
if (mDozing && (wakefulness == WAKEFULNESS_WAKING
|
||||
|| wakefulness == WAKEFULNESS_ASLEEP) && !isPulsing()) {
|
||||
mScrimController.prepareWakeUpFromAod();
|
||||
}
|
||||
}
|
||||
|
||||
private void vibrateForCameraGesture() {
|
||||
// Make sure to pass -1 for repeat so VibratorService doesn't stop us when going to sleep.
|
||||
mVibrator.vibrate(mCameraLaunchGestureVibePattern, -1 /* repeat */);
|
||||
|
||||
@@ -186,7 +186,7 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D
|
||||
private boolean isExpanded(State state) {
|
||||
return !state.forceCollapsed && (state.isKeyguardShowingAndNotOccluded()
|
||||
|| state.panelVisible || state.keyguardFadingAway || state.bouncerShowing
|
||||
|| state.headsUpShowing);
|
||||
|| state.headsUpShowing || state.scrimsVisible);
|
||||
}
|
||||
|
||||
private void applyFitsSystemWindows(State state) {
|
||||
@@ -325,6 +325,11 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D
|
||||
apply(mCurrentState);
|
||||
}
|
||||
|
||||
public void setScrimsVisible(boolean scrimsVisible) {
|
||||
mCurrentState.scrimsVisible = scrimsVisible;
|
||||
apply(mCurrentState);
|
||||
}
|
||||
|
||||
public void setHeadsUpShowing(boolean showing) {
|
||||
mCurrentState.headsUpShowing = showing;
|
||||
apply(mCurrentState);
|
||||
@@ -426,6 +431,7 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D
|
||||
boolean remoteInputActive;
|
||||
boolean forcePluginOpen;
|
||||
boolean dozing;
|
||||
boolean scrimsVisible;
|
||||
|
||||
private boolean isKeyguardShowingAndNotOccluded() {
|
||||
return keyguardShowing && !keyguardOccluded;
|
||||
|
||||
Reference in New Issue
Block a user