• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.launcher3.taskbar;
2 
3 import static com.android.launcher3.AbstractFloatingView.TYPE_ALL;
4 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_AWAKE;
5 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BACK_DISABLED;
6 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BOUNCER_SHOWING;
7 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_DEVICE_DOZING;
8 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_DEVICE_DREAMING;
9 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_HOME_DISABLED;
10 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED;
11 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING;
12 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED;
13 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_WAKEFULNESS_MASK;
14 import static com.android.systemui.shared.system.QuickStepContract.WAKEFULNESS_ASLEEP;
15 
16 import android.app.KeyguardManager;
17 
18 import com.android.launcher3.AbstractFloatingView;
19 import com.android.systemui.shared.system.QuickStepContract;
20 
21 import java.io.PrintWriter;
22 
23 /**
24  * Controller for managing keyguard state for taskbar
25  */
26 public class TaskbarKeyguardController implements TaskbarControllers.LoggableTaskbarController {
27 
28     private static final int KEYGUARD_SYSUI_FLAGS = SYSUI_STATE_BOUNCER_SHOWING
29             | SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING | SYSUI_STATE_DEVICE_DOZING
30             | SYSUI_STATE_OVERVIEW_DISABLED | SYSUI_STATE_HOME_DISABLED
31             | SYSUI_STATE_BACK_DISABLED | SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED
32             | SYSUI_STATE_WAKEFULNESS_MASK;
33 
34     // If any of these SysUi flags (via QuickstepContract) is set, the device to be considered
35     // locked.
36     public static final int MASK_ANY_SYSUI_LOCKED = SYSUI_STATE_BOUNCER_SHOWING
37             | SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING
38             | SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED
39             | SYSUI_STATE_DEVICE_DREAMING;
40 
41     private final TaskbarActivityContext mContext;
42     private int mKeyguardSysuiFlags;
43     private boolean mBouncerShowing;
44     private NavbarButtonsViewController mNavbarButtonsViewController;
45     private final KeyguardManager mKeyguardManager;
46 
TaskbarKeyguardController(TaskbarActivityContext context)47     public TaskbarKeyguardController(TaskbarActivityContext context) {
48         mContext = context;
49         mKeyguardManager = mContext.getSystemService(KeyguardManager.class);
50     }
51 
init(NavbarButtonsViewController navbarButtonUIController)52     public void init(NavbarButtonsViewController navbarButtonUIController) {
53         mNavbarButtonsViewController = navbarButtonUIController;
54     }
55 
updateStateForSysuiFlags(int systemUiStateFlags)56     public void updateStateForSysuiFlags(int systemUiStateFlags) {
57         int interestingKeyguardFlags = systemUiStateFlags & KEYGUARD_SYSUI_FLAGS;
58         if (interestingKeyguardFlags == mKeyguardSysuiFlags) {
59             // No change in keyguard relevant flags
60             return;
61         }
62         mKeyguardSysuiFlags = interestingKeyguardFlags;
63 
64         boolean bouncerShowing = (systemUiStateFlags & SYSUI_STATE_BOUNCER_SHOWING) != 0;
65         boolean keyguardShowing = (systemUiStateFlags & SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING)
66                 != 0;
67         boolean keyguardOccluded =
68                 (systemUiStateFlags & SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED) != 0;
69         boolean dozing = (systemUiStateFlags & SYSUI_STATE_DEVICE_DOZING) != 0;
70 
71 
72         mBouncerShowing = bouncerShowing;
73 
74         mNavbarButtonsViewController.setKeyguardVisible(keyguardShowing || dozing,
75                 keyguardOccluded);
76         updateIconsForBouncer();
77 
78         boolean asleepOrGoingToSleep = (systemUiStateFlags & SYSUI_STATE_AWAKE) == 0;
79         boolean closeFloatingViews = keyguardShowing || asleepOrGoingToSleep;
80 
81         if (closeFloatingViews) {
82             // animate the closing of the views, unless the screen is already asleep.
83             boolean animateViewClosing =
84                     (systemUiStateFlags & SYSUI_STATE_WAKEFULNESS_MASK) != WAKEFULNESS_ASLEEP;
85             AbstractFloatingView.closeOpenViews(mContext, animateViewClosing, TYPE_ALL);
86         }
87     }
88 
89     /**
90      * Hides/shows taskbar when keyguard is up
91      */
updateIconsForBouncer()92     private void updateIconsForBouncer() {
93         boolean disableBack = (mKeyguardSysuiFlags & SYSUI_STATE_BACK_DISABLED) != 0;
94         boolean showBackForBouncer =
95                 !disableBack && mKeyguardManager.isDeviceSecure() && mBouncerShowing;
96         mNavbarButtonsViewController.setBackForBouncer(showBackForBouncer);
97     }
98 
99 
100     @Override
dumpLogs(String prefix, PrintWriter pw)101     public void dumpLogs(String prefix, PrintWriter pw) {
102         pw.println(prefix + "TaskbarKeyguardController:");
103 
104         pw.println(prefix + "\tmKeyguardSysuiFlags=" + QuickStepContract.getSystemUiStateString(
105                 mKeyguardSysuiFlags));
106         pw.println(prefix + "\tmBouncerShowing=" + mBouncerShowing);
107     }
108 }
109