Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 308b7849 authored by Mike Schneider's avatar Mike Schneider
Browse files

Do not perform invisible transitions while the screen is off.

This change caches whether launcher was active at the time of the screen
off, and assumes this last state when the screen is actually off.

While trying to understand the code, I renamed a couple class-internal
methods and flags, plus added comments. If they are not accurate, its
due to a misunderstanding on my part, and I will gladly revisit and
check whether all the assumptions I made still hold.

Bug: 261418621
Test: manually

Change-Id: I2ad25caf478100781a063c356c5fd2d20d3e1917
Merged-In: I2ad25caf478100781a063c356c5fd2d20d3e1917
parent 56e660c6
Loading
Loading
Loading
Loading
+8 −12
Original line number Diff line number Diff line
@@ -84,7 +84,6 @@ public class LauncherTaskbarUIController extends TaskbarUIController {
            };

    // Initialized in init.
    private TaskbarKeyguardController mKeyguardController;
    private final TaskbarLauncherStateController
            mTaskbarLauncherStateController = new TaskbarLauncherStateController();

@@ -99,11 +98,12 @@ public class LauncherTaskbarUIController extends TaskbarUIController {
        mTaskbarLauncherStateController.init(mControllers, mLauncher);

        mLauncher.setTaskbarUIController(this);
        mKeyguardController = taskbarControllers.taskbarKeyguardController;

        onLauncherResumedOrPaused(mLauncher.hasBeenResumed(), true /* fromInit */);

        onStashedInAppChanged(mLauncher.getDeviceProfile());
        mTaskbarLauncherStateController.onChangeScreenState(
                mControllers.getSharedState().sysuiStateFlags, true /* fromInit */);
        mLauncher.addOnDeviceProfileChangeListener(mOnDeviceProfileChangeListener);
    }

@@ -121,7 +121,7 @@ public class LauncherTaskbarUIController extends TaskbarUIController {
    @Override
    protected boolean isTaskbarTouchable() {
        return !(mTaskbarLauncherStateController.isAnimatingToLauncher()
                && mTaskbarLauncherStateController.goingToAlignedLauncherState());
                && mTaskbarLauncherStateController.isTaskbarAlignedWithHotseat());
    }

    public void setShouldDelayLauncherStateAnim(boolean shouldDelayLauncherStateAnim) {
@@ -169,15 +169,6 @@ public class LauncherTaskbarUIController extends TaskbarUIController {
    @Nullable
    private Animator onLauncherResumedOrPaused(
            boolean isResumed, boolean fromInit, boolean startAnimation, int duration) {
        if (mKeyguardController.isScreenOff()) {
            if (!isResumed) {
                return null;
            } else {
                // Resuming implicitly means device unlocked
                mKeyguardController.setScreenOn();
            }
        }

        if (ENABLE_SHELL_TRANSITIONS && isResumed
                && !mLauncher.getStateManager().getState().isTaskbarAlignedWithHotseat(mLauncher)) {
            // Launcher is resumed, but in a state where taskbar is still independent, so
@@ -328,6 +319,11 @@ public class LauncherTaskbarUIController extends TaskbarUIController {
        mTaskbarLauncherStateController.applyState();
    }

    @Override
    public void onChangeScreenState(int screenState) {
        mTaskbarLauncherStateController.onChangeScreenState(screenState, false /* fromInit */);
    }

    @Override
    public boolean isIconAlignedWithHotseat() {
        return mTaskbarLauncherStateController.isIconAlignedWithHotseat();
+4 −1
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import static com.android.launcher3.taskbar.TaskbarManager.FLAG_HIDE_NAVBAR_WIND
import static com.android.launcher3.testing.shared.ResourceUtils.getBoolByName;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_STATE_MASK;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING;

import android.animation.AnimatorSet;
@@ -56,7 +57,6 @@ import android.view.Gravity;
import android.view.RoundedCorner;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.widget.FrameLayout;
import android.widget.Toast;

@@ -578,6 +578,9 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
        mControllers.taskbarForceVisibleImmersiveController.updateSysuiFlags(systemUiStateFlags);
        mControllers.voiceInteractionWindowController.setIsVoiceInteractionWindowVisible(
                (systemUiStateFlags & SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING) != 0, fromInit);

        mControllers.uiController.onChangeScreenState(
                systemUiStateFlags & SYSUI_STATE_SCREEN_STATE_MASK);
    }

    /**
+0 −1
Original line number Diff line number Diff line
@@ -209,7 +209,6 @@ public class TaskbarControllers {
        uiController.onDestroy();
        rotationButtonController.onDestroy();
        taskbarDragLayerController.onDestroy();
        taskbarKeyguardController.onDestroy();
        taskbarUnfoldAnimationController.onDestroy();
        taskbarViewController.onDestroy();
        stashedHandleViewController.onDestroy();
+23 −34
Original line number Diff line number Diff line
package com.android.launcher3.taskbar;

import static com.android.launcher3.AbstractFloatingView.TYPE_ALL;
import static com.android.systemui.shared.system.QuickStepContract.SCREEN_STATE_OFF;
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_SCREEN_ON;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_STATE_MASK;
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;
@@ -23,36 +24,35 @@ import java.io.PrintWriter;
 */
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 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
            | SYSUI_STATE_SCREEN_STATE_MASK;

    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) {
        int interestingKeyguardFlags = systemUiStateFlags & KEYGUARD_SYSUI_FLAGS;
        if (interestingKeyguardFlags == mKeyguardSysuiFlags) {
            // No change in keyguard relevant flags
            return;
        }
        mKeyguardSysuiFlags = interestingKeyguardFlags;

        boolean bouncerShowing = (systemUiStateFlags & SYSUI_STATE_BOUNCER_SHOWING) != 0;
        boolean keyguardShowing = (systemUiStateFlags & SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING)
                != 0;
@@ -60,11 +60,6 @@ public class TaskbarKeyguardController implements TaskbarControllers.LoggableTas
                (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;

@@ -72,17 +67,15 @@ public class TaskbarKeyguardController implements TaskbarControllers.LoggableTas
                keyguardOccluded);
        updateIconsForBouncer();

        if (keyguardShowing) {
            AbstractFloatingView.closeOpenViews(mContext, true, TYPE_ALL);
        }
    }
        boolean screenOffOrTransitioningOff = (systemUiStateFlags & SYSUI_STATE_SCREEN_ON) == 0;
        boolean closeFloatingViews = keyguardShowing || screenOffOrTransitioningOff;

    public boolean isScreenOff() {
        return mIsScreenOff;
        if (closeFloatingViews) {
            // animate the closing of the views, unless the screen is already fully turned off.
            boolean animateViewClosing =
                    (systemUiStateFlags & SYSUI_STATE_SCREEN_STATE_MASK) != SCREEN_STATE_OFF;
            AbstractFloatingView.closeOpenViews(mContext, animateViewClosing, TYPE_ALL);
        }

    public void setScreenOn() {
        mIsScreenOff = false;
    }

    /**
@@ -95,9 +88,6 @@ public class TaskbarKeyguardController implements TaskbarControllers.LoggableTas
        mNavbarButtonsViewController.setBackForBouncer(showBackForBouncer);
    }

    public void onDestroy() {
        ScreenOnTracker.INSTANCE.get(mContext).removeListener(mScreenOnListener);
    }

    @Override
    public void dumpLogs(String prefix, PrintWriter pw) {
@@ -106,6 +96,5 @@ public class TaskbarKeyguardController implements TaskbarControllers.LoggableTas
        pw.println(prefix + "\tmKeyguardSysuiFlags=" + QuickStepContract.getSystemUiStateString(
                mKeyguardSysuiFlags));
        pw.println(prefix + "\tmBouncerShowing=" + mBouncerShowing);
        pw.println(prefix + "\tmIsScreenOff=" + mIsScreenOff);
    }
}
+131 −61

File changed.

Preview size limit exceeded, changes collapsed.

Loading