| package com.android.launcher3.taskbar; |
| |
| import static com.android.launcher3.AbstractFloatingView.TYPE_ALL; |
| 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 com.android.launcher3.AbstractFloatingView; |
| import com.android.launcher3.util.ScreenOnTracker; |
| import com.android.launcher3.util.ScreenOnTracker.ScreenOnListener; |
| import com.android.systemui.shared.system.QuickStepContract; |
| |
| import java.io.PrintWriter; |
| |
| /** |
| * Controller for managing keyguard state for taskbar |
| */ |
| public class TaskbarKeyguardController implements TaskbarControllers.LoggableTaskbarController { |
| |
| 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 ScreenOnListener mScreenOnListener; |
| private final TaskbarActivityContext mContext; |
| private int mKeyguardSysuiFlags; |
| private boolean mBouncerShowing; |
| private NavbarButtonsViewController mNavbarButtonsViewController; |
| private final KeyguardManager mKeyguardManager; |
| private boolean mIsScreenOff; |
| |
| public TaskbarKeyguardController(TaskbarActivityContext context) { |
| mContext = context; |
| mScreenOnListener = isOn -> { |
| if (!isOn) { |
| mIsScreenOff = true; |
| AbstractFloatingView.closeOpenViews(mContext, false, TYPE_ALL); |
| } |
| }; |
| mKeyguardManager = mContext.getSystemService(KeyguardManager.class); |
| } |
| |
| public void init(NavbarButtonsViewController navbarButtonUIController) { |
| mNavbarButtonsViewController = navbarButtonUIController; |
| ScreenOnTracker.INSTANCE.get(mContext).addListener(mScreenOnListener); |
| } |
| |
| 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(); |
| |
| if (keyguardShowing) { |
| AbstractFloatingView.closeOpenViews(mContext, true, TYPE_ALL); |
| } |
| } |
| |
| 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() { |
| ScreenOnTracker.INSTANCE.get(mContext).removeListener(mScreenOnListener); |
| } |
| |
| @Override |
| public void dumpLogs(String prefix, PrintWriter pw) { |
| pw.println(prefix + "TaskbarKeyguardController:"); |
| |
| pw.println(prefix + "\tmKeyguardSysuiFlags=" + QuickStepContract.getSystemUiStateString( |
| mKeyguardSysuiFlags)); |
| pw.println(prefix + "\tmBouncerShowing=" + mBouncerShowing); |
| pw.println(prefix + "\tmIsScreenOff=" + mIsScreenOff); |
| } |
| } |