Merge "Don't wakeup from the pickup gesture when kg is occluded" into sc-qpr1-dev
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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,7 +250,21 @@ 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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user