Merge "Don't wakeup from the pickup gesture when kg is occluded" into sc-qpr1-dev

This commit is contained in:
Beverly Tai
2021-09-16 16:54:43 +00:00
committed by Android (Google) Code Review
10 changed files with 121 additions and 31 deletions

View File

@@ -39,7 +39,6 @@ import android.hardware.fingerprint.IUdfpsOverlayController;
import android.hardware.fingerprint.IUdfpsOverlayControllerCallback; import android.hardware.fingerprint.IUdfpsOverlayControllerCallback;
import android.media.AudioAttributes; import android.media.AudioAttributes;
import android.os.Handler; import android.os.Handler;
import android.os.Looper;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.Process; import android.os.Process;
import android.os.RemoteException; import android.os.RemoteException;
@@ -63,7 +62,6 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.doze.DozeReceiver; import com.android.systemui.doze.DozeReceiver;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -71,6 +69,7 @@ import com.android.systemui.statusbar.LockscreenShadeTransitionController;
import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.DelayableExecutor;
@@ -117,9 +116,7 @@ public class UdfpsController implements DozeReceiver {
@NonNull private final StatusBarKeyguardViewManager mKeyguardViewManager; @NonNull private final StatusBarKeyguardViewManager mKeyguardViewManager;
@NonNull private final DumpManager mDumpManager; @NonNull private final DumpManager mDumpManager;
@NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@NonNull private final KeyguardViewMediator mKeyguardViewMediator;
@Nullable private final Vibrator mVibrator; @Nullable private final Vibrator mVibrator;
@NonNull private final Handler mMainHandler;
@NonNull private final FalsingManager mFalsingManager; @NonNull private final FalsingManager mFalsingManager;
@NonNull private final PowerManager mPowerManager; @NonNull private final PowerManager mPowerManager;
@NonNull private final AccessibilityManager mAccessibilityManager; @NonNull private final AccessibilityManager mAccessibilityManager;
@@ -128,6 +125,8 @@ public class UdfpsController implements DozeReceiver {
@NonNull private final KeyguardBypassController mKeyguardBypassController; @NonNull private final KeyguardBypassController mKeyguardBypassController;
@NonNull private final ConfigurationController mConfigurationController; @NonNull private final ConfigurationController mConfigurationController;
@NonNull private final SystemClock mSystemClock; @NonNull private final SystemClock mSystemClock;
@NonNull private final UnlockedScreenOffAnimationController
mUnlockedScreenOffAnimationController;
@VisibleForTesting @NonNull final BiometricOrientationEventListener mOrientationListener; @VisibleForTesting @NonNull final BiometricOrientationEventListener mOrientationListener;
// Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple
// sensors, this, in addition to a lot of the code here, will be updated. // sensors, this, in addition to a lot of the code here, will be updated.
@@ -517,7 +516,6 @@ public class UdfpsController implements DozeReceiver {
@NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager, @NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
@NonNull DumpManager dumpManager, @NonNull DumpManager dumpManager,
@NonNull KeyguardUpdateMonitor keyguardUpdateMonitor, @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
@NonNull KeyguardViewMediator keyguardViewMediator,
@NonNull FalsingManager falsingManager, @NonNull FalsingManager falsingManager,
@NonNull PowerManager powerManager, @NonNull PowerManager powerManager,
@NonNull AccessibilityManager accessibilityManager, @NonNull AccessibilityManager accessibilityManager,
@@ -531,11 +529,11 @@ public class UdfpsController implements DozeReceiver {
@NonNull DisplayManager displayManager, @NonNull DisplayManager displayManager,
@Main Handler mainHandler, @Main Handler mainHandler,
@NonNull ConfigurationController configurationController, @NonNull ConfigurationController configurationController,
@NonNull SystemClock systemClock) { @NonNull SystemClock systemClock,
@NonNull UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) {
mContext = context; mContext = context;
mExecution = execution; mExecution = execution;
// TODO (b/185124905): inject main handler and vibrator once done prototyping // TODO (b/185124905): inject main handler and vibrator once done prototyping
mMainHandler = new Handler(Looper.getMainLooper());
mVibrator = vibrator; mVibrator = vibrator;
mInflater = inflater; mInflater = inflater;
// The fingerprint manager is queried for UDFPS before this class is constructed, so the // The fingerprint manager is queried for UDFPS before this class is constructed, so the
@@ -549,7 +547,6 @@ public class UdfpsController implements DozeReceiver {
mKeyguardViewManager = statusBarKeyguardViewManager; mKeyguardViewManager = statusBarKeyguardViewManager;
mDumpManager = dumpManager; mDumpManager = dumpManager;
mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mKeyguardViewMediator = keyguardViewMediator;
mFalsingManager = falsingManager; mFalsingManager = falsingManager;
mPowerManager = powerManager; mPowerManager = powerManager;
mAccessibilityManager = accessibilityManager; mAccessibilityManager = accessibilityManager;
@@ -568,6 +565,7 @@ public class UdfpsController implements DozeReceiver {
mKeyguardBypassController = keyguardBypassController; mKeyguardBypassController = keyguardBypassController;
mConfigurationController = configurationController; mConfigurationController = configurationController;
mSystemClock = systemClock; mSystemClock = systemClock;
mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController;
mSensorProps = findFirstUdfps(); mSensorProps = findFirstUdfps();
// At least one UDFPS sensor exists // At least one UDFPS sensor exists
@@ -790,13 +788,12 @@ public class UdfpsController implements DozeReceiver {
mStatusBar, mStatusBar,
mKeyguardViewManager, mKeyguardViewManager,
mKeyguardUpdateMonitor, mKeyguardUpdateMonitor,
mFgExecutor,
mDumpManager, mDumpManager,
mKeyguardViewMediator,
mLockscreenShadeTransitionController, mLockscreenShadeTransitionController,
mConfigurationController, mConfigurationController,
mSystemClock, mSystemClock,
mKeyguardStateController, mKeyguardStateController,
mUnlockedScreenOffAnimationController,
this this
); );
case IUdfpsOverlayController.REASON_AUTH_BP: case IUdfpsOverlayController.REASON_AUTH_BP:

View File

@@ -26,16 +26,15 @@ import android.view.MotionEvent;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.LockscreenShadeTransitionController;
import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.KeyguardBouncer; import com.android.systemui.statusbar.phone.KeyguardBouncer;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.time.SystemClock; import com.android.systemui.util.time.SystemClock;
import java.io.FileDescriptor; import java.io.FileDescriptor;
@@ -48,13 +47,13 @@ import java.io.PrintWriter;
public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<UdfpsKeyguardView> { public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<UdfpsKeyguardView> {
@NonNull private final StatusBarKeyguardViewManager mKeyguardViewManager; @NonNull private final StatusBarKeyguardViewManager mKeyguardViewManager;
@NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@NonNull private final DelayableExecutor mExecutor;
@NonNull private final KeyguardViewMediator mKeyguardViewMediator;
@NonNull private final LockscreenShadeTransitionController mLockScreenShadeTransitionController; @NonNull private final LockscreenShadeTransitionController mLockScreenShadeTransitionController;
@NonNull private final ConfigurationController mConfigurationController; @NonNull private final ConfigurationController mConfigurationController;
@NonNull private final SystemClock mSystemClock; @NonNull private final SystemClock mSystemClock;
@NonNull private final KeyguardStateController mKeyguardStateController; @NonNull private final KeyguardStateController mKeyguardStateController;
@NonNull private final UdfpsController mUdfpsController; @NonNull private final UdfpsController mUdfpsController;
@NonNull private final UnlockedScreenOffAnimationController
mUnlockedScreenOffAnimationController;
private boolean mShowingUdfpsBouncer; private boolean mShowingUdfpsBouncer;
private boolean mUdfpsRequested; private boolean mUdfpsRequested;
@@ -81,24 +80,22 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
@NonNull StatusBar statusBar, @NonNull StatusBar statusBar,
@NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager, @NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
@NonNull KeyguardUpdateMonitor keyguardUpdateMonitor, @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
@NonNull DelayableExecutor mainDelayableExecutor,
@NonNull DumpManager dumpManager, @NonNull DumpManager dumpManager,
@NonNull KeyguardViewMediator keyguardViewMediator,
@NonNull LockscreenShadeTransitionController transitionController, @NonNull LockscreenShadeTransitionController transitionController,
@NonNull ConfigurationController configurationController, @NonNull ConfigurationController configurationController,
@NonNull SystemClock systemClock, @NonNull SystemClock systemClock,
@NonNull KeyguardStateController keyguardStateController, @NonNull KeyguardStateController keyguardStateController,
@NonNull UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
@NonNull UdfpsController udfpsController) { @NonNull UdfpsController udfpsController) {
super(view, statusBarStateController, statusBar, dumpManager); super(view, statusBarStateController, statusBar, dumpManager);
mKeyguardViewManager = statusBarKeyguardViewManager; mKeyguardViewManager = statusBarKeyguardViewManager;
mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mExecutor = mainDelayableExecutor;
mKeyguardViewMediator = keyguardViewMediator;
mLockScreenShadeTransitionController = transitionController; mLockScreenShadeTransitionController = transitionController;
mConfigurationController = configurationController; mConfigurationController = configurationController;
mSystemClock = systemClock; mSystemClock = systemClock;
mKeyguardStateController = keyguardStateController; mKeyguardStateController = keyguardStateController;
mUdfpsController = udfpsController; mUdfpsController = udfpsController;
mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController;
} }
@Override @Override
@@ -135,6 +132,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
mKeyguardViewManager.setAlternateAuthInterceptor(mAlternateAuthInterceptor); mKeyguardViewManager.setAlternateAuthInterceptor(mAlternateAuthInterceptor);
mLockScreenShadeTransitionController.setUdfpsKeyguardViewController(this); mLockScreenShadeTransitionController.setUdfpsKeyguardViewController(this);
mUnlockedScreenOffAnimationController.addCallback(mUnlockedScreenOffCallback);
} }
@Override @Override
@@ -151,6 +149,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
if (mLockScreenShadeTransitionController.getUdfpsKeyguardViewController() == this) { if (mLockScreenShadeTransitionController.getUdfpsKeyguardViewController() == this) {
mLockScreenShadeTransitionController.setUdfpsKeyguardViewController(null); mLockScreenShadeTransitionController.setUdfpsKeyguardViewController(null);
} }
mUnlockedScreenOffAnimationController.removeCallback(mUnlockedScreenOffCallback);
} }
@Override @Override
@@ -423,4 +422,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
updatePauseAuth(); updatePauseAuth();
} }
}; };
private final UnlockedScreenOffAnimationController.Callback mUnlockedScreenOffCallback =
(linear, eased) -> mStateListener.onDozeAmountChanged(linear, eased);
} }

View File

@@ -274,6 +274,13 @@ public class DozeLog implements Dumpable {
mLogger.logPulseDropped(pulsePending, state, blocked); mLogger.logPulseDropped(pulsePending, state, blocked);
} }
/**
* Appends sensor event dropped event to logs
*/
public void traceSensorEventDropped(int sensorEvent, String reason) {
mLogger.logSensorEventDropped(sensorEvent, reason);
}
/** /**
* Appends pulse dropped event to logs * Appends pulse dropped event to logs
* @param reason why the pulse was dropped * @param reason why the pulse was dropped

View File

@@ -205,6 +205,15 @@ class DozeLogger @Inject constructor(
}) })
} }
fun logSensorEventDropped(sensorEvent: Int, reason: String) {
buffer.log(TAG, INFO, {
int1 = sensorEvent
str1 = reason
}, {
"SensorEvent [$int1] dropped, reason=$str1"
})
}
fun logPulseDropped(reason: String) { fun logPulseDropped(reason: String) {
buffer.log(TAG, INFO, { buffer.log(TAG, INFO, {
str1 = reason str1 = reason

View File

@@ -41,6 +41,7 @@ import com.android.systemui.dock.DockManager;
import com.android.systemui.doze.DozeMachine.State; import com.android.systemui.doze.DozeMachine.State;
import com.android.systemui.doze.dagger.DozeScope; import com.android.systemui.doze.dagger.DozeScope;
import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.Assert; import com.android.systemui.util.Assert;
import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.AsyncSensorManager;
@@ -92,6 +93,7 @@ public class DozeTriggers implements DozeMachine.Part {
private final BroadcastDispatcher mBroadcastDispatcher; private final BroadcastDispatcher mBroadcastDispatcher;
private final AuthController mAuthController; private final AuthController mAuthController;
private final DelayableExecutor mMainExecutor; private final DelayableExecutor mMainExecutor;
private final KeyguardStateController mKeyguardStateController;
private final UiEventLogger mUiEventLogger; private final UiEventLogger mUiEventLogger;
private long mNotificationPulseTime; private long mNotificationPulseTime;
@@ -179,7 +181,8 @@ public class DozeTriggers implements DozeMachine.Part {
DozeLog dozeLog, BroadcastDispatcher broadcastDispatcher, DozeLog dozeLog, BroadcastDispatcher broadcastDispatcher,
SecureSettings secureSettings, AuthController authController, SecureSettings secureSettings, AuthController authController,
@Main DelayableExecutor mainExecutor, @Main DelayableExecutor mainExecutor,
UiEventLogger uiEventLogger) { UiEventLogger uiEventLogger,
KeyguardStateController keyguardStateController) {
mContext = context; mContext = context;
mDozeHost = dozeHost; mDozeHost = dozeHost;
mConfig = config; mConfig = config;
@@ -198,6 +201,7 @@ public class DozeTriggers implements DozeMachine.Part {
mAuthController = authController; mAuthController = authController;
mMainExecutor = mainExecutor; mMainExecutor = mainExecutor;
mUiEventLogger = uiEventLogger; mUiEventLogger = uiEventLogger;
mKeyguardStateController = keyguardStateController;
} }
@Override @Override
@@ -294,6 +298,7 @@ public class DozeTriggers implements DozeMachine.Part {
proximityCheckThenCall((result) -> { proximityCheckThenCall((result) -> {
if (result != null && result) { if (result != null && result) {
// In pocket, drop event. // In pocket, drop event.
mDozeLog.traceSensorEventDropped(pulseReason, "prox reporting near");
return; return;
} }
if (isDoubleTap || isTap) { if (isDoubleTap || isTap) {
@@ -302,6 +307,10 @@ public class DozeTriggers implements DozeMachine.Part {
} }
gentleWakeUp(pulseReason); gentleWakeUp(pulseReason);
} else if (isPickup) { } else if (isPickup) {
if (shouldDropPickupEvent()) {
mDozeLog.traceSensorEventDropped(pulseReason, "keyguard occluded");
return;
}
gentleWakeUp(pulseReason); gentleWakeUp(pulseReason);
} else if (isUdfpsLongPress) { } else if (isUdfpsLongPress) {
final State state = mMachine.getState(); final State state = mMachine.getState();
@@ -320,7 +329,7 @@ public class DozeTriggers implements DozeMachine.Part {
}, true /* alreadyPerformedProxCheck */, pulseReason); }, true /* alreadyPerformedProxCheck */, pulseReason);
} }
if (isPickup) { if (isPickup && !shouldDropPickupEvent()) {
final long timeSinceNotification = final long timeSinceNotification =
SystemClock.elapsedRealtime() - mNotificationPulseTime; SystemClock.elapsedRealtime() - mNotificationPulseTime;
final boolean withinVibrationThreshold = final boolean withinVibrationThreshold =
@@ -329,6 +338,10 @@ public class DozeTriggers implements DozeMachine.Part {
} }
} }
private boolean shouldDropPickupEvent() {
return mKeyguardStateController.isOccluded();
}
private void gentleWakeUp(int reason) { private void gentleWakeUp(int reason) {
// Log screen wake up reason (lift/pickup, tap, double-tap) // Log screen wake up reason (lift/pickup, tap, double-tap)
Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason)) Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason))

View File

@@ -8,13 +8,13 @@ import android.content.res.Configuration
import android.database.ContentObserver import android.database.ContentObserver
import android.os.Handler import android.os.Handler
import android.provider.Settings import android.provider.Settings
import com.android.systemui.statusbar.StatusBarState
import android.view.View import android.view.View
import com.android.systemui.animation.Interpolators import com.android.systemui.animation.Interpolators
import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.KeyguardViewMediator import com.android.systemui.keyguard.KeyguardViewMediator
import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.statusbar.LightRevealScrim import com.android.systemui.statusbar.LightRevealScrim
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.StatusBarStateControllerImpl import com.android.systemui.statusbar.StatusBarStateControllerImpl
import com.android.systemui.statusbar.notification.AnimatableProperty import com.android.systemui.statusbar.notification.AnimatableProperty
import com.android.systemui.statusbar.notification.PropertyAnimator import com.android.systemui.statusbar.notification.PropertyAnimator
@@ -61,6 +61,7 @@ class UnlockedScreenOffAnimationController @Inject constructor(
private var shouldAnimateInKeyguard = false private var shouldAnimateInKeyguard = false
private var lightRevealAnimationPlaying = false private var lightRevealAnimationPlaying = false
private var aodUiAnimationPlaying = false private var aodUiAnimationPlaying = false
private var callbacks = HashSet<Callback>()
/** /**
* The result of our decision whether to play the screen off animation in * The result of our decision whether to play the screen off animation in
@@ -72,11 +73,17 @@ class UnlockedScreenOffAnimationController @Inject constructor(
private val lightRevealAnimator = ValueAnimator.ofFloat(1f, 0f).apply { private val lightRevealAnimator = ValueAnimator.ofFloat(1f, 0f).apply {
duration = LIGHT_REVEAL_ANIMATION_DURATION duration = LIGHT_REVEAL_ANIMATION_DURATION
interpolator = Interpolators.LINEAR interpolator = Interpolators.LINEAR
addUpdateListener { lightRevealScrim.revealAmount = it.animatedValue as Float } addUpdateListener {
lightRevealScrim.revealAmount = it.animatedValue as Float
sendUnlockedScreenOffProgressUpdate(
1f - (it.animatedFraction as Float),
1f - (it.animatedValue as Float))
}
addListener(object : AnimatorListenerAdapter() { addListener(object : AnimatorListenerAdapter() {
override fun onAnimationCancel(animation: Animator?) { override fun onAnimationCancel(animation: Animator?) {
lightRevealScrim.revealAmount = 1f lightRevealScrim.revealAmount = 1f
lightRevealAnimationPlaying = false lightRevealAnimationPlaying = false
sendUnlockedScreenOffProgressUpdate(0f, 0f)
} }
override fun onAnimationEnd(animation: Animator?) { override fun onAnimationEnd(animation: Animator?) {
@@ -243,6 +250,20 @@ class UnlockedScreenOffAnimationController @Inject constructor(
return true return true
} }
fun addCallback(callback: Callback) {
callbacks.add(callback)
}
fun removeCallback(callback: Callback) {
callbacks.remove(callback)
}
fun sendUnlockedScreenOffProgressUpdate(linear: Float, eased: Float) {
callbacks.forEach {
it.onUnlockedScreenOffProgressUpdate(linear, eased)
}
}
/** /**
* Whether we're doing the light reveal animation or we're done with that and animating in the * Whether we're doing the light reveal animation or we're done with that and animating in the
* AOD UI. * AOD UI.
@@ -262,4 +283,8 @@ class UnlockedScreenOffAnimationController @Inject constructor(
fun isScreenOffLightRevealAnimationPlaying(): Boolean { fun isScreenOffLightRevealAnimationPlaying(): Boolean {
return lightRevealAnimationPlaying return lightRevealAnimationPlaying
} }
interface Callback {
fun onUnlockedScreenOffProgressUpdate(linear: Float, eased: Float)
}
} }

View File

@@ -219,6 +219,12 @@ public class WalletActivity extends LifecycleActivity implements
mKeyguardViewManager.requestFace(false); mKeyguardViewManager.requestFace(false);
} }
@Override
protected void onStop() {
super.onStop();
finish();
}
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.wallet_activity_options_menu, menu); getMenuInflater().inflate(R.menu.wallet_activity_options_menu, menu);

View File

@@ -57,7 +57,6 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -65,6 +64,7 @@ import com.android.systemui.statusbar.LockscreenShadeTransitionController;
import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.concurrency.Execution; import com.android.systemui.util.concurrency.Execution;
@@ -123,8 +123,6 @@ public class UdfpsControllerTest extends SysuiTestCase {
@Mock @Mock
private KeyguardUpdateMonitor mKeyguardUpdateMonitor; private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@Mock @Mock
private KeyguardViewMediator mKeyguardViewMediator;
@Mock
private IUdfpsOverlayControllerCallback mUdfpsOverlayControllerCallback; private IUdfpsOverlayControllerCallback mUdfpsOverlayControllerCallback;
@Mock @Mock
private FalsingManager mFalsingManager; private FalsingManager mFalsingManager;
@@ -152,6 +150,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
private ConfigurationController mConfigurationController; private ConfigurationController mConfigurationController;
@Mock @Mock
private SystemClock mSystemClock; private SystemClock mSystemClock;
@Mock
private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
private FakeExecutor mFgExecutor; private FakeExecutor mFgExecutor;
@@ -221,7 +221,6 @@ public class UdfpsControllerTest extends SysuiTestCase {
mStatusBarKeyguardViewManager, mStatusBarKeyguardViewManager,
mDumpManager, mDumpManager,
mKeyguardUpdateMonitor, mKeyguardUpdateMonitor,
mKeyguardViewMediator,
mFalsingManager, mFalsingManager,
mPowerManager, mPowerManager,
mAccessibilityManager, mAccessibilityManager,
@@ -235,7 +234,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
mDisplayManager, mDisplayManager,
mHandler, mHandler,
mConfigurationController, mConfigurationController,
mSystemClock); mSystemClock,
mUnlockedScreenOffAnimationController);
verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture()); verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture());
mOverlayController = mOverlayCaptor.getValue(); mOverlayController = mOverlayCaptor.getValue();
verify(mScreenLifecycle).addObserver(mScreenObserverCaptor.capture()); verify(mScreenLifecycle).addObserver(mScreenObserverCaptor.capture());

View File

@@ -43,6 +43,7 @@ import com.android.systemui.statusbar.LockscreenShadeTransitionController;
import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.DelayableExecutor;
@@ -89,6 +90,8 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
@Mock @Mock
private ConfigurationController mConfigurationController; private ConfigurationController mConfigurationController;
@Mock @Mock
private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
@Mock
private UdfpsController mUdfpsController; private UdfpsController mUdfpsController;
private FakeSystemClock mSystemClock = new FakeSystemClock(); private FakeSystemClock mSystemClock = new FakeSystemClock();
@@ -121,13 +124,12 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
mStatusBar, mStatusBar,
mStatusBarKeyguardViewManager, mStatusBarKeyguardViewManager,
mKeyguardUpdateMonitor, mKeyguardUpdateMonitor,
mExecutor,
mDumpManager, mDumpManager,
mKeyguardViewMediator,
mLockscreenShadeTransitionController, mLockscreenShadeTransitionController,
mConfigurationController, mConfigurationController,
mSystemClock, mSystemClock,
mKeyguardStateController, mKeyguardStateController,
mUnlockedScreenOffAnimationController,
mUdfpsController); mUdfpsController);
} }

View File

@@ -45,6 +45,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManager;
import com.android.systemui.doze.DozeTriggers.DozingUpdateUiEvent; import com.android.systemui.doze.DozeTriggers.DozingUpdateUiEvent;
import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.concurrency.FakeThreadFactory; import com.android.systemui.util.concurrency.FakeThreadFactory;
import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.AsyncSensorManager;
@@ -83,6 +84,8 @@ public class DozeTriggersTest extends SysuiTestCase {
private AuthController mAuthController; private AuthController mAuthController;
@Mock @Mock
private UiEventLogger mUiEventLogger; private UiEventLogger mUiEventLogger;
@Mock
private KeyguardStateController mKeyguardStateController;
private DozeTriggers mTriggers; private DozeTriggers mTriggers;
private FakeSensorManager mSensors; private FakeSensorManager mSensors;
@@ -114,7 +117,7 @@ public class DozeTriggersTest extends SysuiTestCase {
mTriggers = new DozeTriggers(mContext, mHost, config, dozeParameters, mTriggers = new DozeTriggers(mContext, mHost, config, dozeParameters,
asyncSensorManager, wakeLock, mDockManager, mProximitySensor, asyncSensorManager, wakeLock, mDockManager, mProximitySensor,
mProximityCheck, mock(DozeLog.class), mBroadcastDispatcher, new FakeSettings(), mProximityCheck, mock(DozeLog.class), mBroadcastDispatcher, new FakeSettings(),
mAuthController, mExecutor, mUiEventLogger); mAuthController, mExecutor, mUiEventLogger, mKeyguardStateController);
mTriggers.setDozeMachine(mMachine); mTriggers.setDozeMachine(mMachine);
waitForSensorManager(); waitForSensorManager();
} }
@@ -216,6 +219,32 @@ public class DozeTriggersTest extends SysuiTestCase {
verify(mUiEventLogger).log(DozingUpdateUiEvent.DOZING_UPDATE_QUICK_PICKUP); verify(mUiEventLogger).log(DozingUpdateUiEvent.DOZING_UPDATE_QUICK_PICKUP);
} }
@Test
public void testPickupGesture() {
// GIVEN device is in doze (screen blank, but running doze sensors)
when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE);
// WHEN the pick up gesture is triggered and keyguard isn't occluded
when(mKeyguardStateController.isOccluded()).thenReturn(false);
mTriggers.onSensor(DozeLog.REASON_SENSOR_PICKUP, 100, 100, null);
// THEN wakeup
verify(mMachine).wakeUp();
}
@Test
public void testPickupGestureDroppedKeyguardOccluded() {
// GIVEN device is in doze (screen blank, but running doze sensors)
when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE);
// WHEN the pick up gesture is triggered and keyguard IS occluded
when(mKeyguardStateController.isOccluded()).thenReturn(true);
mTriggers.onSensor(DozeLog.REASON_SENSOR_PICKUP, 100, 100, null);
// THEN never wakeup
verify(mMachine, never()).wakeUp();
}
@Test @Test
public void testOnSensor_Fingerprint() { public void testOnSensor_Fingerprint() {
// GIVEN dozing state // GIVEN dozing state