1 package com.android.launcher3.taskbar; 2 3 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BACK_DISABLED; 4 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BOUNCER_SHOWING; 5 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_DEVICE_DOZING; 6 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_HOME_DISABLED; 7 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED; 8 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING; 9 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED; 10 11 import android.app.KeyguardManager; 12 import android.content.BroadcastReceiver; 13 import android.content.Context; 14 import android.content.Intent; 15 import android.content.IntentFilter; 16 17 /** 18 * Controller for managing keyguard state for taskbar 19 */ 20 public class TaskbarKeyguardController { 21 22 private static final int KEYGUARD_SYSUI_FLAGS = SYSUI_STATE_BOUNCER_SHOWING | 23 SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING | SYSUI_STATE_DEVICE_DOZING | 24 SYSUI_STATE_OVERVIEW_DISABLED | SYSUI_STATE_HOME_DISABLED | 25 SYSUI_STATE_BACK_DISABLED | SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED; 26 27 private final TaskbarActivityContext mContext; 28 private int mKeyguardSysuiFlags; 29 private boolean mBouncerShowing; 30 private NavbarButtonsViewController mNavbarButtonsViewController; 31 private final KeyguardManager mKeyguardManager; 32 private boolean mIsScreenOff; 33 34 private final BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() { 35 @Override 36 public void onReceive(Context context, Intent intent) { 37 mIsScreenOff = true; 38 } 39 }; 40 TaskbarKeyguardController(TaskbarActivityContext context)41 public TaskbarKeyguardController(TaskbarActivityContext context) { 42 mContext = context; 43 mKeyguardManager = mContext.getSystemService(KeyguardManager.class); 44 } 45 init(NavbarButtonsViewController navbarButtonUIController)46 public void init(NavbarButtonsViewController navbarButtonUIController) { 47 mNavbarButtonsViewController = navbarButtonUIController; 48 mContext.registerReceiver(mScreenOffReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF)); 49 } 50 updateStateForSysuiFlags(int systemUiStateFlags)51 public void updateStateForSysuiFlags(int systemUiStateFlags) { 52 boolean bouncerShowing = (systemUiStateFlags & SYSUI_STATE_BOUNCER_SHOWING) != 0; 53 boolean keyguardShowing = (systemUiStateFlags & SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING) 54 != 0; 55 boolean keyguardOccluded = 56 (systemUiStateFlags & SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED) != 0; 57 boolean dozing = (systemUiStateFlags & SYSUI_STATE_DEVICE_DOZING) != 0; 58 59 int interestingKeyguardFlags = systemUiStateFlags & KEYGUARD_SYSUI_FLAGS; 60 if (interestingKeyguardFlags == mKeyguardSysuiFlags) { 61 return; 62 } 63 mKeyguardSysuiFlags = interestingKeyguardFlags; 64 65 mBouncerShowing = bouncerShowing; 66 67 mNavbarButtonsViewController.setKeyguardVisible(keyguardShowing || dozing, 68 keyguardOccluded); 69 updateIconsForBouncer(); 70 } 71 isScreenOff()72 public boolean isScreenOff() { 73 return mIsScreenOff; 74 } 75 setScreenOn()76 public void setScreenOn() { 77 mIsScreenOff = false; 78 } 79 80 /** 81 * Hides/shows taskbar when keyguard is up 82 */ updateIconsForBouncer()83 private void updateIconsForBouncer() { 84 boolean disableBack = (mKeyguardSysuiFlags & SYSUI_STATE_BACK_DISABLED) != 0; 85 boolean disableRecent = (mKeyguardSysuiFlags & SYSUI_STATE_OVERVIEW_DISABLED) != 0; 86 boolean disableHome = (mKeyguardSysuiFlags & SYSUI_STATE_HOME_DISABLED) != 0; 87 boolean onlyBackEnabled = !disableBack && disableRecent && disableHome; 88 89 boolean showBackForBouncer = onlyBackEnabled && 90 mKeyguardManager.isDeviceSecure() && 91 mBouncerShowing; 92 mNavbarButtonsViewController.setBackForBouncer(showBackForBouncer); 93 } 94 onDestroy()95 public void onDestroy() { 96 mContext.unregisterReceiver(mScreenOffReceiver); 97 } 98 } 99