diff options
Diffstat (limited to 'quickstep/src/com/android/launcher3/taskbar/TaskbarKeyguardController.java')
-rw-r--r-- | quickstep/src/com/android/launcher3/taskbar/TaskbarKeyguardController.java | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarKeyguardController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarKeyguardController.java new file mode 100644 index 0000000000..5fc0695564 --- /dev/null +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarKeyguardController.java @@ -0,0 +1,98 @@ +package com.android.launcher3.taskbar; + +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BACK_DISABLED; +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_HOME_DISABLED; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED; +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 android.app.KeyguardManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +/** + * Controller for managing keyguard state for taskbar + */ +public class TaskbarKeyguardController { + + private static final int KEYGUARD_SYSUI_FLAGS = SYSUI_STATE_BOUNCER_SHOWING | + SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING | SYSUI_STATE_DEVICE_DOZING | + SYSUI_STATE_OVERVIEW_DISABLED | SYSUI_STATE_HOME_DISABLED | + SYSUI_STATE_BACK_DISABLED | SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED; + + private final TaskbarActivityContext mContext; + private int mKeyguardSysuiFlags; + private boolean mBouncerShowing; + private NavbarButtonsViewController mNavbarButtonsViewController; + private final KeyguardManager mKeyguardManager; + private boolean mIsScreenOff; + + private final BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + mIsScreenOff = true; + } + }; + + public TaskbarKeyguardController(TaskbarActivityContext context) { + mContext = context; + mKeyguardManager = mContext.getSystemService(KeyguardManager.class); + } + + public void init(NavbarButtonsViewController navbarButtonUIController) { + mNavbarButtonsViewController = navbarButtonUIController; + mContext.registerReceiver(mScreenOffReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF)); + } + + public void updateStateForSysuiFlags(int systemUiStateFlags) { + boolean bouncerShowing = (systemUiStateFlags & SYSUI_STATE_BOUNCER_SHOWING) != 0; + boolean keyguardShowing = (systemUiStateFlags & SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING) + != 0; + boolean keyguardOccluded = + (systemUiStateFlags & SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED) != 0; + boolean dozing = (systemUiStateFlags & SYSUI_STATE_DEVICE_DOZING) != 0; + + int interestingKeyguardFlags = systemUiStateFlags & KEYGUARD_SYSUI_FLAGS; + if (interestingKeyguardFlags == mKeyguardSysuiFlags) { + return; + } + mKeyguardSysuiFlags = interestingKeyguardFlags; + + mBouncerShowing = bouncerShowing; + + mNavbarButtonsViewController.setKeyguardVisible(keyguardShowing || dozing, + keyguardOccluded); + updateIconsForBouncer(); + } + + public boolean isScreenOff() { + return mIsScreenOff; + } + + public void setScreenOn() { + mIsScreenOff = false; + } + + /** + * Hides/shows taskbar when keyguard is up + */ + private void updateIconsForBouncer() { + boolean disableBack = (mKeyguardSysuiFlags & SYSUI_STATE_BACK_DISABLED) != 0; + boolean disableRecent = (mKeyguardSysuiFlags & SYSUI_STATE_OVERVIEW_DISABLED) != 0; + boolean disableHome = (mKeyguardSysuiFlags & SYSUI_STATE_HOME_DISABLED) != 0; + boolean onlyBackEnabled = !disableBack && disableRecent && disableHome; + + boolean showBackForBouncer = onlyBackEnabled && + mKeyguardManager.isDeviceSecure() && + mBouncerShowing; + mNavbarButtonsViewController.setBackForBouncer(showBackForBouncer); + } + + public void onDestroy() { + mContext.unregisterReceiver(mScreenOffReceiver); + } +} |