From 737b8518939add1971fcc18e1328056e030b8b83 Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Fri, 9 Aug 2019 10:35:34 -0700 Subject: [PATCH] Fix double auth issue This was a regression from a security fix b/135289187 Test: reach, auth, swipe up Test: reach, auth, ait for timeout, reach again Fixes: 138851575 Change-Id: Icd457dc79cb6f86a7cbb22a78ee80ebfbb4380a7 --- .../systemui/doze/DozeAuthRemover.java | 2 +- .../android/systemui/doze/DozeFactory.java | 5 ++++- .../android/systemui/doze/DozeMachine.java | 21 +++++++++++++++---- .../keyguard/WakefulnessLifecycle.java | 16 ++++++++++++-- .../systemui/doze/DozeMachineTest.java | 8 ++++++- 5 files changed, 43 insertions(+), 9 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeAuthRemover.java b/packages/SystemUI/src/com/android/systemui/doze/DozeAuthRemover.java index e6a9e47be71cb..e5a54b816ec63 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeAuthRemover.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeAuthRemover.java @@ -25,7 +25,7 @@ import com.android.keyguard.KeyguardUpdateMonitor; */ public class DozeAuthRemover implements DozeMachine.Part { - KeyguardUpdateMonitor mKeyguardUpdateMonitor; + private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; public DozeAuthRemover(Context context) { mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(context); diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java b/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java index 1bc7e635f9ed6..86d4a48d3d591 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java @@ -30,6 +30,7 @@ import com.android.systemui.R; import com.android.systemui.SystemUIApplication; import com.android.systemui.dock.DockManager; import com.android.systemui.plugins.FalsingManager; +import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.statusbar.phone.BiometricUnlockController; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.AsyncSensorManager; @@ -47,6 +48,7 @@ public class DozeFactory { SensorManager sensorManager = Dependency.get(AsyncSensorManager.class); AlarmManager alarmManager = context.getSystemService(AlarmManager.class); DockManager dockManager = Dependency.get(DockManager.class); + WakefulnessLifecycle wakefulnessLifecycle = Dependency.get(WakefulnessLifecycle.class); DozeHost host = getHost(dozeService); AmbientDisplayConfiguration config = new AmbientDisplayConfiguration(context); @@ -61,7 +63,8 @@ public class DozeFactory { wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded(wrappedService, params); - DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock); + DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock, + wakefulnessLifecycle); machine.setParts(new DozeMachine.Part[]{ new DozePauser(handler, machine, alarmManager, params.getPolicy()), new DozeFalsingManagerAdapter(falsingManager), diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java index 8bf2256a4f80d..93a51cc20db2a 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java @@ -24,6 +24,8 @@ import android.util.Log; import android.view.Display; import com.android.internal.util.Preconditions; +import com.android.systemui.keyguard.WakefulnessLifecycle; +import com.android.systemui.keyguard.WakefulnessLifecycle.Wakefulness; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.Assert; import com.android.systemui.util.wakelock.WakeLock; @@ -118,6 +120,7 @@ public class DozeMachine { private final Service mDozeService; private final WakeLock mWakeLock; private final AmbientDisplayConfiguration mConfig; + private final WakefulnessLifecycle mWakefulnessLifecycle; private Part[] mParts; private final ArrayList mQueuedRequests = new ArrayList<>(); @@ -126,9 +129,10 @@ public class DozeMachine { private boolean mWakeLockHeldForCurrentState = false; public DozeMachine(Service service, AmbientDisplayConfiguration config, - WakeLock wakeLock) { + WakeLock wakeLock, WakefulnessLifecycle wakefulnessLifecycle) { mDozeService = service; mConfig = config; + mWakefulnessLifecycle = wakefulnessLifecycle; mWakeLock = wakeLock; } @@ -334,9 +338,18 @@ public class DozeMachine { switch (state) { case INITIALIZED: case DOZE_PULSE_DONE: - transitionTo(mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT) - ? DozeMachine.State.DOZE_AOD : DozeMachine.State.DOZE, - DozeLog.PULSE_REASON_NONE); + final State nextState; + @Wakefulness int wakefulness = mWakefulnessLifecycle.getWakefulness(); + if (wakefulness == WakefulnessLifecycle.WAKEFULNESS_AWAKE + || wakefulness == WakefulnessLifecycle.WAKEFULNESS_WAKING) { + nextState = State.FINISH; + } else if (mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT)) { + nextState = State.DOZE_AOD; + } else { + nextState = State.DOZE; + } + + transitionTo(nextState, DozeLog.PULSE_REASON_NONE); break; default: break; diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java b/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java index 52a0214c492c2..d17f2f621ec82 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java @@ -16,12 +16,15 @@ package com.android.systemui.keyguard; +import android.annotation.IntDef; import android.os.Trace; import com.android.systemui.Dumpable; import java.io.FileDescriptor; import java.io.PrintWriter; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import javax.inject.Inject; import javax.inject.Singleton; @@ -33,6 +36,15 @@ import javax.inject.Singleton; public class WakefulnessLifecycle extends Lifecycle implements Dumpable { + @IntDef(prefix = { "WAKEFULNESS_" }, value = { + WAKEFULNESS_ASLEEP, + WAKEFULNESS_WAKING, + WAKEFULNESS_AWAKE, + WAKEFULNESS_GOING_TO_SLEEP, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface Wakefulness {} + public static final int WAKEFULNESS_ASLEEP = 0; public static final int WAKEFULNESS_WAKING = 1; public static final int WAKEFULNESS_AWAKE = 2; @@ -44,7 +56,7 @@ public class WakefulnessLifecycle extends Lifecycle