Merge "AOD: Fix more flickering" into oc-dr1-dev

This commit is contained in:
TreeHugger Robot
2017-07-28 14:40:45 +00:00
committed by Android (Google) Code Review
4 changed files with 67 additions and 12 deletions

View File

@@ -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,

View File

@@ -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);

View File

@@ -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 */);

View File

@@ -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;