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