diff options
author | Mike Schneider <michschn@google.com> | 2023-04-03 19:44:22 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-04-03 19:44:22 +0000 |
commit | 83623aaa8eb36544cc0559fb9fffa6e87dc2e46d (patch) | |
tree | 46d046a103248e447c9d8f65f31e02d1108d7998 /packages | |
parent | 453faac20fa70700ee5c56d04afba2a57fe1c0d4 (diff) | |
parent | 543c39b886aa3a067f1fdf3635a027f28d5b2371 (diff) | |
download | base-83623aaa8eb36544cc0559fb9fffa6e87dc2e46d.tar.gz |
Merge "Change the use of ScreenLifecycle to WakefulnessLifecycle." into tm-qpr-dev
Diffstat (limited to 'packages')
3 files changed, 144 insertions, 113 deletions
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java index 56fc97054316..594736c3b8c8 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java @@ -115,28 +115,25 @@ public class QuickStepContract { public static final int SYSUI_STATE_FREEFORM_ACTIVE_IN_DESKTOP_MODE = 1 << 26; // Device dreaming state public static final int SYSUI_STATE_DEVICE_DREAMING = 1 << 27; - // Whether the screen is currently on. Note that the screen is considered on while turning on, - // but not while turning off. - public static final int SYSUI_STATE_SCREEN_ON = 1 << 28; - // Whether the screen is currently transitioning into the state indicated by - // SYSUI_STATE_SCREEN_ON. - public static final int SYSUI_STATE_SCREEN_TRANSITION = 1 << 29; + // Whether the device is currently awake (as opposed to asleep, see WakefulnessLifecycle). + // Note that the device is awake on while waking up on, but not while going to sleep. + public static final int SYSUI_STATE_AWAKE = 1 << 28; + // Whether the device is currently transitioning between awake/asleep indicated by + // SYSUI_STATE_AWAKE. + public static final int SYSUI_STATE_WAKEFULNESS_TRANSITION = 1 << 29; // The notification panel expansion fraction is > 0 public static final int SYSUI_STATE_NOTIFICATION_PANEL_VISIBLE = 1 << 30; - // Mask for SystemUiStateFlags to isolate SYSUI_STATE_SCREEN_ON and - // SYSUI_STATE_SCREEN_TRANSITION, to match SCREEN_STATE_* - public static final int SYSUI_STATE_SCREEN_STATE_MASK = - SYSUI_STATE_SCREEN_ON | SYSUI_STATE_SCREEN_TRANSITION; - // Screen is off. - public static final int SCREEN_STATE_OFF = 0; - // Screen is on. - public static final int SCREEN_STATE_ON = SYSUI_STATE_SCREEN_ON; - // Screen is still on, but transitioning to turn off. - public static final int SCREEN_STATE_TURNING_OFF = SYSUI_STATE_SCREEN_TRANSITION; - // Screen was off and is now turning on. - public static final int SCREEN_STATE_TURNING_ON = - SYSUI_STATE_SCREEN_TRANSITION | SYSUI_STATE_SCREEN_ON; + // Mask for SystemUiStateFlags to isolate SYSUI_STATE_AWAKE and + // SYSUI_STATE_WAKEFULNESS_TRANSITION, to match WAKEFULNESS_* constants + public static final int SYSUI_STATE_WAKEFULNESS_MASK = + SYSUI_STATE_AWAKE | SYSUI_STATE_WAKEFULNESS_TRANSITION; + // Mirroring the WakefulnessLifecycle#Wakefulness states + public static final int WAKEFULNESS_ASLEEP = 0; + public static final int WAKEFULNESS_AWAKE = SYSUI_STATE_AWAKE; + public static final int WAKEFULNESS_GOING_TO_SLEEP = SYSUI_STATE_WAKEFULNESS_TRANSITION; + public static final int WAKEFULNESS_WAKING = + SYSUI_STATE_WAKEFULNESS_TRANSITION | SYSUI_STATE_AWAKE; @Retention(RetentionPolicy.SOURCE) @IntDef({SYSUI_STATE_SCREEN_PINNING, @@ -167,8 +164,9 @@ public class QuickStepContract { SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING, SYSUI_STATE_FREEFORM_ACTIVE_IN_DESKTOP_MODE, SYSUI_STATE_DEVICE_DREAMING, - SYSUI_STATE_SCREEN_ON, - SYSUI_STATE_SCREEN_TRANSITION, + SYSUI_STATE_AWAKE, + SYSUI_STATE_WAKEFULNESS_TRANSITION, + SYSUI_STATE_NOTIFICATION_PANEL_VISIBLE, }) public @interface SystemUiStateFlags {} @@ -190,7 +188,7 @@ public class QuickStepContract { str.add("navbar_hidden"); } if ((flags & SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED) != 0) { - str.add("notif_visible"); + str.add("notif_expanded"); } if ((flags & SYSUI_STATE_QUICK_SETTINGS_EXPANDED) != 0) { str.add("qs_visible"); @@ -258,11 +256,14 @@ public class QuickStepContract { if ((flags & SYSUI_STATE_DEVICE_DREAMING) != 0) { str.add("device_dreaming"); } - if ((flags & SYSUI_STATE_SCREEN_TRANSITION) != 0) { - str.add("screen_transition"); + if ((flags & SYSUI_STATE_WAKEFULNESS_TRANSITION) != 0) { + str.add("wakefulness_transition"); + } + if ((flags & SYSUI_STATE_AWAKE) != 0) { + str.add("awake"); } - if ((flags & SYSUI_STATE_SCREEN_ON) != 0) { - str.add("screen_on"); + if ((flags & SYSUI_STATE_NOTIFICATION_PANEL_VISIBLE) != 0) { + str.add("notif_visible"); } return str.toString(); diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java index 75d15204dccf..4f4a2af07898 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java @@ -21,21 +21,22 @@ import static android.view.MotionEvent.ACTION_CANCEL; import static android.view.MotionEvent.ACTION_DOWN; import static android.view.MotionEvent.ACTION_UP; import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON; + import static com.android.internal.accessibility.common.ShortcutConstants.CHOOSER_PACKAGE_NAME; import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SUPPORTS_WINDOW_CORNERS; import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SYSUI_PROXY; import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_UNFOLD_ANIMATION_FORWARDER; import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_UNLOCK_ANIMATION_CONTROLLER; import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_WINDOW_CORNER_RADIUS; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_AWAKE; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BOUNCER_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_DEVICE_DOZING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_DEVICE_DREAMING; -import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_ON; -import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_TRANSITION; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_TRACING_ENABLED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_WAKEFULNESS_TRANSITION; import android.annotation.FloatRange; import android.app.ActivityTaskManager; @@ -83,6 +84,7 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.KeyguardUnlockAnimationController; import com.android.systemui.keyguard.ScreenLifecycle; +import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.model.SysUiState; import com.android.systemui.navigationbar.NavigationBar; import com.android.systemui.navigationbar.NavigationBarController; @@ -518,6 +520,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis NotificationShadeWindowController statusBarWinController, SysUiState sysUiState, UserTracker userTracker, ScreenLifecycle screenLifecycle, + WakefulnessLifecycle wakefulnessLifecycle, UiEventLogger uiEventLogger, DisplayTracker displayTracker, KeyguardUnlockAnimationController sysuiUnlockAnimationController, @@ -595,8 +598,8 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis // Listen for user setup mUserTracker.addCallback(mUserChangedCallback, mMainExecutor); - screenLifecycle.addObserver(mLifecycleObserver); - + screenLifecycle.addObserver(mScreenLifecycleObserver); + wakefulnessLifecycle.addObserver(mWakefulnessLifecycleObserver); // Connect to the service updateEnabledState(); startConnectionToCurrentUser(); @@ -861,81 +864,94 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis } } - private final ScreenLifecycle.Observer mLifecycleObserver = new ScreenLifecycle.Observer() { - /** - * Notifies the Launcher that screen turned on and ready to use - */ - @Override - public void onScreenTurnedOn() { - mSysUiState - .setFlag(SYSUI_STATE_SCREEN_ON, true) - .setFlag(SYSUI_STATE_SCREEN_TRANSITION, false) - .commitUpdate(mContext.getDisplayId()); + private final ScreenLifecycle.Observer mScreenLifecycleObserver = + new ScreenLifecycle.Observer() { + /** + * Notifies the Launcher that screen turned on and ready to use + */ + @Override + public void onScreenTurnedOn() { + try { + if (mOverviewProxy != null) { + mOverviewProxy.onScreenTurnedOn(); + } else { + Log.e(TAG_OPS, + "Failed to get overview proxy for screen turned on event."); + } + } catch (RemoteException e) { + Log.e(TAG_OPS, "Failed to call onScreenTurnedOn()", e); + } + } - try { - if (mOverviewProxy != null) { - mOverviewProxy.onScreenTurnedOn(); - } else { - Log.e(TAG_OPS, "Failed to get overview proxy for screen turned on event."); + /** + * Notifies the Launcher that screen is starting to turn on. + */ + @Override + public void onScreenTurningOff() { + try { + if (mOverviewProxy != null) { + mOverviewProxy.onScreenTurningOff(); + } else { + Log.e(TAG_OPS, + "Failed to get overview proxy for screen turning off event."); + } + } catch (RemoteException e) { + Log.e(TAG_OPS, "Failed to call onScreenTurningOff()", e); + } } - } catch (RemoteException e) { - Log.e(TAG_OPS, "Failed to call onScreenTurnedOn()", e); - } - } - /** - * Notifies the Launcher that screen turned off. - */ - @Override - public void onScreenTurnedOff() { - mSysUiState - .setFlag(SYSUI_STATE_SCREEN_ON, false) - .setFlag(SYSUI_STATE_SCREEN_TRANSITION, false) - .commitUpdate(mContext.getDisplayId()); - } + /** + * Notifies the Launcher that screen is starting to turn on. + */ + @Override + public void onScreenTurningOn() { + try { + if (mOverviewProxy != null) { + mOverviewProxy.onScreenTurningOn(); + } else { + Log.e(TAG_OPS, + "Failed to get overview proxy for screen turning on event."); + } + } catch (RemoteException e) { + Log.e(TAG_OPS, "Failed to call onScreenTurningOn()", e); + } + } + }; - /** - * Notifies the Launcher that screen is starting to turn on. - */ - @Override - public void onScreenTurningOff() { - mSysUiState - .setFlag(SYSUI_STATE_SCREEN_ON, false) - .setFlag(SYSUI_STATE_SCREEN_TRANSITION, true) - .commitUpdate(mContext.getDisplayId()); + private final WakefulnessLifecycle.Observer mWakefulnessLifecycleObserver = + new WakefulnessLifecycle.Observer() { + @Override + public void onStartedWakingUp() { + mSysUiState + .setFlag(SYSUI_STATE_AWAKE, true) + .setFlag(SYSUI_STATE_WAKEFULNESS_TRANSITION, true) + .commitUpdate(mContext.getDisplayId()); + } - try { - if (mOverviewProxy != null) { - mOverviewProxy.onScreenTurningOff(); - } else { - Log.e(TAG_OPS, "Failed to get overview proxy for screen turning off event."); + @Override + public void onFinishedWakingUp() { + mSysUiState + .setFlag(SYSUI_STATE_AWAKE, true) + .setFlag(SYSUI_STATE_WAKEFULNESS_TRANSITION, false) + .commitUpdate(mContext.getDisplayId()); } - } catch (RemoteException e) { - Log.e(TAG_OPS, "Failed to call onScreenTurningOff()", e); - } - } - /** - * Notifies the Launcher that screen is starting to turn on. - */ - @Override - public void onScreenTurningOn() { - mSysUiState - .setFlag(SYSUI_STATE_SCREEN_ON, true) - .setFlag(SYSUI_STATE_SCREEN_TRANSITION, true) - .commitUpdate(mContext.getDisplayId()); + @Override + public void onStartedGoingToSleep() { + mSysUiState + .setFlag(SYSUI_STATE_AWAKE, false) + .setFlag(SYSUI_STATE_WAKEFULNESS_TRANSITION, true) + .commitUpdate(mContext.getDisplayId()); + } - try { - if (mOverviewProxy != null) { - mOverviewProxy.onScreenTurningOn(); - } else { - Log.e(TAG_OPS, "Failed to get overview proxy for screen turning on event."); + @Override + public void onFinishedGoingToSleep() { + mSysUiState + .setFlag(SYSUI_STATE_AWAKE, false) + .setFlag(SYSUI_STATE_WAKEFULNESS_TRANSITION, false) + .commitUpdate(mContext.getDisplayId()); } - } catch (RemoteException e) { - Log.e(TAG_OPS, "Failed to call onScreenTurningOn()", e); - } - } - }; + }; void notifyToggleRecentApps() { for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/recents/OverviewProxyServiceTest.kt b/packages/SystemUI/tests/src/com/android/systemui/recents/OverviewProxyServiceTest.kt index eb7b481e5244..8cb5d31fff22 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/recents/OverviewProxyServiceTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/recents/OverviewProxyServiceTest.kt @@ -19,6 +19,7 @@ package com.android.systemui.recents import android.content.ComponentName import android.content.pm.PackageManager import android.content.pm.ResolveInfo +import android.os.PowerManager import android.testing.AndroidTestingRunner import android.testing.TestableContext import android.testing.TestableLooper @@ -30,6 +31,7 @@ import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager import com.android.systemui.keyguard.KeyguardUnlockAnimationController import com.android.systemui.keyguard.ScreenLifecycle +import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.model.SysUiState import com.android.systemui.navigationbar.NavigationBarController import com.android.systemui.navigationbar.NavigationModeController @@ -37,16 +39,17 @@ import com.android.systemui.recents.OverviewProxyService.ACTION_QUICKSTEP import com.android.systemui.settings.FakeDisplayTracker import com.android.systemui.settings.UserTracker import com.android.systemui.shared.recents.IOverviewProxy -import com.android.systemui.shared.system.QuickStepContract.SCREEN_STATE_OFF -import com.android.systemui.shared.system.QuickStepContract.SCREEN_STATE_ON -import com.android.systemui.shared.system.QuickStepContract.SCREEN_STATE_TURNING_OFF -import com.android.systemui.shared.system.QuickStepContract.SCREEN_STATE_TURNING_ON -import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_STATE_MASK +import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_WAKEFULNESS_MASK +import com.android.systemui.shared.system.QuickStepContract.WAKEFULNESS_ASLEEP +import com.android.systemui.shared.system.QuickStepContract.WAKEFULNESS_AWAKE +import com.android.systemui.shared.system.QuickStepContract.WAKEFULNESS_GOING_TO_SLEEP +import com.android.systemui.shared.system.QuickStepContract.WAKEFULNESS_WAKING import com.android.systemui.statusbar.CommandQueue import com.android.systemui.statusbar.NotificationShadeWindowController import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.unfold.progress.UnfoldTransitionProgressForwarder import com.android.systemui.util.mockito.whenever +import com.android.systemui.util.time.FakeSystemClock import com.android.wm.shell.sysui.ShellInterface import com.google.common.util.concurrent.MoreExecutors import dagger.Lazy @@ -60,6 +63,7 @@ import org.mockito.ArgumentMatchers import org.mockito.Mock import org.mockito.Mockito.any import org.mockito.Mockito.anyInt +import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.intThat import org.mockito.Mockito.mock import org.mockito.Mockito.verify @@ -75,8 +79,11 @@ class OverviewProxyServiceTest : SysuiTestCase() { private lateinit var subject: OverviewProxyService private val dumpManager = DumpManager() private val displayTracker = FakeDisplayTracker(mContext) + private val fakeSystemClock = FakeSystemClock() private val sysUiState = SysUiState(displayTracker) private val screenLifecycle = ScreenLifecycle(dumpManager) + private val wakefulnessLifecycle = + WakefulnessLifecycle(mContext, null, fakeSystemClock, dumpManager) @Mock private lateinit var overviewProxy: IOverviewProxy.Stub @Mock private lateinit var packageManager: PackageManager @@ -130,6 +137,7 @@ class OverviewProxyServiceTest : SysuiTestCase() { sysUiState, userTracker, screenLifecycle, + wakefulnessLifecycle, uiEventLogger, displayTracker, sysuiUnlockAnimationController, @@ -145,42 +153,48 @@ class OverviewProxyServiceTest : SysuiTestCase() { } @Test - fun `ScreenLifecycle - screenTurnedOn triggers SysUI state flag changes `() { - screenLifecycle.dispatchScreenTurnedOn() + fun `WakefulnessLifecycle - dispatchFinishedWakingUp sets SysUI flag to AWAKE`() { + // WakefulnessLifecycle is initialized to AWAKE initially, and won't emit a noop. + wakefulnessLifecycle.dispatchFinishedGoingToSleep() + clearInvocations(overviewProxy) + + wakefulnessLifecycle.dispatchFinishedWakingUp() verify(overviewProxy) .onSystemUiStateChanged( - intThat { it and SYSUI_STATE_SCREEN_STATE_MASK == SCREEN_STATE_ON } + intThat { it and SYSUI_STATE_WAKEFULNESS_MASK == WAKEFULNESS_AWAKE } ) } @Test - fun `ScreenLifecycle - screenTurningOn triggers SysUI state flag changes `() { - screenLifecycle.dispatchScreenTurningOn() + fun `WakefulnessLifecycle - dispatchStartedWakingUp sets SysUI flag to WAKING`() { + wakefulnessLifecycle.dispatchStartedWakingUp(PowerManager.WAKE_REASON_UNKNOWN) verify(overviewProxy) .onSystemUiStateChanged( - intThat { it and SYSUI_STATE_SCREEN_STATE_MASK == SCREEN_STATE_TURNING_ON } + intThat { it and SYSUI_STATE_WAKEFULNESS_MASK == WAKEFULNESS_WAKING } ) } @Test - fun `ScreenLifecycle - screenTurnedOff triggers SysUI state flag changes `() { - screenLifecycle.dispatchScreenTurnedOff() + fun `WakefulnessLifecycle - dispatchFinishedGoingToSleep sets SysUI flag to ASLEEP`() { + wakefulnessLifecycle.dispatchFinishedGoingToSleep() verify(overviewProxy) .onSystemUiStateChanged( - intThat { it and SYSUI_STATE_SCREEN_STATE_MASK == SCREEN_STATE_OFF } + intThat { it and SYSUI_STATE_WAKEFULNESS_MASK == WAKEFULNESS_ASLEEP } ) } @Test - fun `ScreenLifecycle - screenTurningOff triggers SysUI state flag changes `() { - screenLifecycle.dispatchScreenTurningOff() + fun `WakefulnessLifecycle - dispatchStartedGoingToSleep sets SysUI flag to GOING_TO_SLEEP`() { + wakefulnessLifecycle.dispatchStartedGoingToSleep( + PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON + ) verify(overviewProxy) .onSystemUiStateChanged( - intThat { it and SYSUI_STATE_SCREEN_STATE_MASK == SCREEN_STATE_TURNING_OFF } + intThat { it and SYSUI_STATE_WAKEFULNESS_MASK == WAKEFULNESS_GOING_TO_SLEEP } ) } } |