Merge "Do not animate wallpaper when wakeAndUnlock" into qt-r1-dev

This commit is contained in:
TreeHugger Robot
2019-07-18 05:26:16 +00:00
committed by Android (Google) Code Review
5 changed files with 51 additions and 5 deletions

View File

@@ -30,6 +30,7 @@ import com.android.systemui.R;
import com.android.systemui.SystemUIApplication;
import com.android.systemui.classifier.FalsingManagerFactory;
import com.android.systemui.dock.DockManager;
import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.util.AsyncSensorManager;
import com.android.systemui.util.wakelock.DelayedWakeLock;
@@ -70,7 +71,7 @@ public class DozeFactory {
new DozeScreenState(wrappedService, handler, params, wakeLock),
createDozeScreenBrightness(context, wrappedService, sensorManager, host, params,
handler),
new DozeWallpaperState(context),
new DozeWallpaperState(context, getBiometricUnlockController(dozeService)),
new DozeDockHandler(context, machine, host, config, handler, dockManager),
new DozeAuthRemover(dozeService)
});
@@ -108,4 +109,10 @@ public class DozeFactory {
final SystemUIApplication app = (SystemUIApplication) appCandidate;
return app.getComponent(DozeHost.class);
}
public static BiometricUnlockController getBiometricUnlockController(DozeService service) {
Application appCandidate = service.getApplication();
final SystemUIApplication app = (SystemUIApplication) appCandidate;
return app.getComponent(BiometricUnlockController.class);
}
}

View File

@@ -24,6 +24,7 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.DozeParameters;
import java.io.PrintWriter;
@@ -38,18 +39,22 @@ public class DozeWallpaperState implements DozeMachine.Part {
private final IWallpaperManager mWallpaperManagerService;
private final DozeParameters mDozeParameters;
private final BiometricUnlockController mBiometricUnlockController;
private boolean mIsAmbientMode;
public DozeWallpaperState(Context context) {
public DozeWallpaperState(Context context,
BiometricUnlockController biometricUnlockController) {
this(IWallpaperManager.Stub.asInterface(
ServiceManager.getService(Context.WALLPAPER_SERVICE)),
biometricUnlockController,
DozeParameters.getInstance(context));
}
@VisibleForTesting
DozeWallpaperState(IWallpaperManager wallpaperManagerService,
DozeParameters parameters) {
BiometricUnlockController biometricUnlockController, DozeParameters parameters) {
mWallpaperManagerService = wallpaperManagerService;
mBiometricUnlockController = biometricUnlockController;
mDozeParameters = parameters;
}
@@ -76,7 +81,9 @@ public class DozeWallpaperState implements DozeMachine.Part {
} else {
boolean wakingUpFromPulse = oldState == DozeMachine.State.DOZE_PULSING
&& newState == DozeMachine.State.FINISH;
animated = !mDozeParameters.getDisplayNeedsBlanking() || wakingUpFromPulse;
boolean fastDisplay = !mDozeParameters.getDisplayNeedsBlanking();
animated = (fastDisplay && !mBiometricUnlockController.unlockedByWakeAndUnlock())
|| wakingUpFromPulse;
}
if (isAmbientMode != mIsAmbientMode) {

View File

@@ -141,6 +141,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback {
private BiometricSourceType mPendingAuthenticatedBioSourceType = null;
private boolean mPendingShowBouncer;
private boolean mHasScreenTurnedOnSinceAuthenticating;
private boolean mFadedAwayAfterWakeAndUnlock;
private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class);
@@ -368,6 +369,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback {
@Override
public void onStartedGoingToSleep(int why) {
resetMode();
mFadedAwayAfterWakeAndUnlock = false;
mPendingAuthenticatedUserId = -1;
mPendingAuthenticatedBioSourceType = null;
}
@@ -513,6 +515,9 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback {
}
public void finishKeyguardFadingAway() {
if (isWakeAndUnlock()) {
mFadedAwayAfterWakeAndUnlock = true;
}
resetMode();
}
@@ -562,6 +567,14 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback {
|| mMode == MODE_WAKE_AND_UNLOCK_FROM_DREAM;
}
/**
* Successful authentication with fingerprint, face, or iris that wakes up the device.
* This will return {@code true} even after the keyguard fades away.
*/
public boolean unlockedByWakeAndUnlock() {
return isWakeAndUnlock() || mFadedAwayAfterWakeAndUnlock;
}
/**
* Successful authentication with fingerprint, face, or iris when the screen was either
* on or off.

View File

@@ -1230,6 +1230,7 @@ public class StatusBar extends SystemUI implements DemoMode,
mDozeScrimController, keyguardViewMediator,
mScrimController, this, UnlockMethodCache.getInstance(mContext),
new Handler(), mKeyguardUpdateMonitor, mKeyguardBypassController);
putComponent(BiometricUnlockController.class, mBiometricUnlockController);
mStatusBarKeyguardViewManager = keyguardViewMediator.registerStatusBar(this,
getBouncerContainer(), mNotificationPanel, mBiometricUnlockController,
mStatusBarWindow.findViewById(R.id.lock_icon_container), mStackScroller,

View File

@@ -18,6 +18,7 @@ package com.android.systemui.doze;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -29,6 +30,7 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.DozeParameters;
import org.junit.Before;
@@ -44,12 +46,14 @@ public class DozeWallpaperStateTest extends SysuiTestCase {
private DozeWallpaperState mDozeWallpaperState;
@Mock IWallpaperManager mIWallpaperManager;
@Mock BiometricUnlockController mBiometricUnlockController;
@Mock DozeParameters mDozeParameters;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mDozeWallpaperState = new DozeWallpaperState(mIWallpaperManager, mDozeParameters);
mDozeWallpaperState = new DozeWallpaperState(mIWallpaperManager, mBiometricUnlockController,
mDozeParameters);
}
@Test
@@ -101,6 +105,20 @@ public class DozeWallpaperStateTest extends SysuiTestCase {
verify(mIWallpaperManager).setInAmbientMode(eq(false), eq(0L));
}
@Test
public void testDoesNotAnimate_whenWakeAndUnlock() throws RemoteException {
// Pre-conditions
when(mDozeParameters.getAlwaysOn()).thenReturn(true);
when(mBiometricUnlockController.unlockedByWakeAndUnlock()).thenReturn(true);
mDozeWallpaperState.transitionTo(DozeMachine.State.UNINITIALIZED,
DozeMachine.State.DOZE_AOD);
clearInvocations(mIWallpaperManager);
mDozeWallpaperState.transitionTo(DozeMachine.State.DOZE_AOD, DozeMachine.State.FINISH);
verify(mIWallpaperManager).setInAmbientMode(eq(false), eq(0L));
}
@Test
public void testTransitionTo_requestPulseIsAmbientMode() throws RemoteException {
mDozeWallpaperState.transitionTo(DozeMachine.State.DOZE,