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

Commit a9001493 authored by Winson Chung's avatar Winson Chung
Browse files

4/ Keep EdgeBackGestureHandler state across nav/taskbar changes

- Don't update the edge back handler state when switching between nav
  and taskbar (since the nav mode doesn't change and a bar still exists
  across the change)

Bug: 219035565
Test: atest NavBarHelperTests
Test: atest SystemUITests
Change-Id: If930d8950e5cc19eb8d6e86f01b676c1acabbe2b
parent 81d1f12f
Loading
Loading
Loading
Loading
+15 −0
Original line number Original line Diff line number Diff line
@@ -63,6 +63,7 @@ import com.android.systemui.accessibility.SystemActions;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.settings.UserTracker;
@@ -98,6 +99,7 @@ public final class NavBarHelper implements
        OverviewProxyService.OverviewProxyListener, NavigationModeController.ModeChangedListener,
        OverviewProxyService.OverviewProxyListener, NavigationModeController.ModeChangedListener,
        Dumpable, CommandQueue.Callbacks {
        Dumpable, CommandQueue.Callbacks {
    private static final String TAG = NavBarHelper.class.getSimpleName();
    private static final String TAG = NavBarHelper.class.getSimpleName();

    private final Handler mHandler = new Handler(Looper.getMainLooper());
    private final Handler mHandler = new Handler(Looper.getMainLooper());
    private final AccessibilityManager mAccessibilityManager;
    private final AccessibilityManager mAccessibilityManager;
    private final Lazy<AssistManager> mAssistManagerLazy;
    private final Lazy<AssistManager> mAssistManagerLazy;
@@ -111,6 +113,7 @@ public final class NavBarHelper implements
    private final Context mContext;
    private final Context mContext;
    private final CommandQueue mCommandQueue;
    private final CommandQueue mCommandQueue;
    private final ContentResolver mContentResolver;
    private final ContentResolver mContentResolver;
    private final EdgeBackGestureHandler mEdgeBackGestureHandler;
    private final IWindowManager mWm;
    private final IWindowManager mWm;
    private final int mDefaultDisplayId;
    private final int mDefaultDisplayId;
    private boolean mAssistantAvailable;
    private boolean mAssistantAvailable;
@@ -175,6 +178,7 @@ public final class NavBarHelper implements
            Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
            Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
            KeyguardStateController keyguardStateController,
            KeyguardStateController keyguardStateController,
            NavigationModeController navigationModeController,
            NavigationModeController navigationModeController,
            EdgeBackGestureHandler.Factory edgeBackGestureHandlerFactory,
            IWindowManager wm,
            IWindowManager wm,
            UserTracker userTracker,
            UserTracker userTracker,
            DisplayTracker displayTracker,
            DisplayTracker displayTracker,
@@ -193,6 +197,7 @@ public final class NavBarHelper implements
        mAccessibilityButtonTargetsObserver = accessibilityButtonTargetsObserver;
        mAccessibilityButtonTargetsObserver = accessibilityButtonTargetsObserver;
        mWm = wm;
        mWm = wm;
        mDefaultDisplayId = displayTracker.getDefaultDisplayId();
        mDefaultDisplayId = displayTracker.getDefaultDisplayId();
        mEdgeBackGestureHandler = edgeBackGestureHandlerFactory.create(context);


        mNavBarMode = navigationModeController.addListener(this);
        mNavBarMode = navigationModeController.addListener(this);
        mCommandQueue.addCallback(this);
        mCommandQueue.addCallback(this);
@@ -242,6 +247,9 @@ public final class NavBarHelper implements
        } catch (Exception e) {
        } catch (Exception e) {
            Log.w(TAG, "Failed to register wallpaper visibility listener", e);
            Log.w(TAG, "Failed to register wallpaper visibility listener", e);
        }
        }

        // Attach the back handler only when the first bar is registered
        mEdgeBackGestureHandler.onNavBarAttached();
    }
    }


    /**
    /**
@@ -270,6 +278,9 @@ public final class NavBarHelper implements
        } catch (Exception e) {
        } catch (Exception e) {
            Log.w(TAG, "Failed to register wallpaper visibility listener", e);
            Log.w(TAG, "Failed to register wallpaper visibility listener", e);
        }
        }

        // No more bars, detach the back handler for now
        mEdgeBackGestureHandler.onNavBarDetached();
    }
    }


    /**
    /**
@@ -429,6 +440,10 @@ public final class NavBarHelper implements
        return mLongPressHomeEnabled;
        return mLongPressHomeEnabled;
    }
    }


    public EdgeBackGestureHandler getEdgeBackGestureHandler() {
        return mEdgeBackGestureHandler;
    }

    @Override
    @Override
    public void startAssistant(Bundle bundle) {
    public void startAssistant(Bundle bundle) {
        mAssistManagerLazy.get().startAssist(bundle);
        mAssistManagerLazy.get().startAssist(bundle);
+3 −3
Original line number Original line Diff line number Diff line
@@ -208,7 +208,6 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
    private final Optional<Recents> mRecentsOptional;
    private final Optional<Recents> mRecentsOptional;
    private final DeviceConfigProxy mDeviceConfigProxy;
    private final DeviceConfigProxy mDeviceConfigProxy;
    private final NavigationBarTransitions mNavigationBarTransitions;
    private final NavigationBarTransitions mNavigationBarTransitions;
    private final EdgeBackGestureHandler mEdgeBackGestureHandler;
    private final Optional<BackAnimation> mBackAnimation;
    private final Optional<BackAnimation> mBackAnimation;
    private final Handler mHandler;
    private final Handler mHandler;
    private final UiEventLogger mUiEventLogger;
    private final UiEventLogger mUiEventLogger;
@@ -220,6 +219,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
    private final DisplayTracker mDisplayTracker;
    private final DisplayTracker mDisplayTracker;
    private final RegionSamplingHelper mRegionSamplingHelper;
    private final RegionSamplingHelper mRegionSamplingHelper;
    private final int mNavColorSampleMargin;
    private final int mNavColorSampleMargin;
    private EdgeBackGestureHandler mEdgeBackGestureHandler;
    private NavigationBarFrame mFrame;
    private NavigationBarFrame mFrame;


    private @WindowVisibleState int mNavigationBarWindowState = WINDOW_STATE_SHOWING;
    private @WindowVisibleState int mNavigationBarWindowState = WINDOW_STATE_SHOWING;
@@ -557,7 +557,6 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
            DeadZone deadZone,
            DeadZone deadZone,
            DeviceConfigProxy deviceConfigProxy,
            DeviceConfigProxy deviceConfigProxy,
            NavigationBarTransitions navigationBarTransitions,
            NavigationBarTransitions navigationBarTransitions,
            EdgeBackGestureHandler edgeBackGestureHandler,
            Optional<BackAnimation> backAnimation,
            Optional<BackAnimation> backAnimation,
            UserContextProvider userContextProvider,
            UserContextProvider userContextProvider,
            WakefulnessLifecycle wakefulnessLifecycle,
            WakefulnessLifecycle wakefulnessLifecycle,
@@ -587,7 +586,6 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
        mDeadZone = deadZone;
        mDeadZone = deadZone;
        mDeviceConfigProxy = deviceConfigProxy;
        mDeviceConfigProxy = deviceConfigProxy;
        mNavigationBarTransitions = navigationBarTransitions;
        mNavigationBarTransitions = navigationBarTransitions;
        mEdgeBackGestureHandler = edgeBackGestureHandler;
        mBackAnimation = backAnimation;
        mBackAnimation = backAnimation;
        mHandler = mainHandler;
        mHandler = mainHandler;
        mUiEventLogger = uiEventLogger;
        mUiEventLogger = uiEventLogger;
@@ -603,6 +601,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
        mWakefulnessLifecycle = wakefulnessLifecycle;
        mWakefulnessLifecycle = wakefulnessLifecycle;
        mTaskStackChangeListeners = taskStackChangeListeners;
        mTaskStackChangeListeners = taskStackChangeListeners;
        mDisplayTracker = displayTracker;
        mDisplayTracker = displayTracker;
        mEdgeBackGestureHandler = navBarHelper.getEdgeBackGestureHandler();


        mNavColorSampleMargin = getResources()
        mNavColorSampleMargin = getResources()
                .getDimensionPixelSize(R.dimen.navigation_handle_sample_horizontal_margin);
                .getDimensionPixelSize(R.dimen.navigation_handle_sample_horizontal_margin);
@@ -722,6 +721,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
        mCommandQueue.removeCallback(this);
        mCommandQueue.removeCallback(this);
        mWindowManager.removeViewImmediate(mView.getRootView());
        mWindowManager.removeViewImmediate(mView.getRootView());
        mNavigationModeController.removeListener(mModeChangedListener);
        mNavigationModeController.removeListener(mModeChangedListener);
        mEdgeBackGestureHandler.setStateChangeCallback(null);


        mNavBarHelper.removeNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
        mNavBarHelper.removeNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
        mNotificationShadeDepthController.removeListener(mDepthListener);
        mNotificationShadeDepthController.removeListener(mDepthListener);
+0 −5
Original line number Original line Diff line number Diff line
@@ -1093,9 +1093,6 @@ public class NavigationBarView extends FrameLayout {
    @Override
    @Override
    protected void onAttachedToWindow() {
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        super.onAttachedToWindow();
        // This needs to happen first as it can changed the enabled state which can affect whether
        // the back button is visible
        mEdgeBackGestureHandler.onNavBarAttached();
        requestApplyInsets();
        requestApplyInsets();
        reorient();
        reorient();
        if (mRotationButtonController != null) {
        if (mRotationButtonController != null) {
@@ -1115,8 +1112,6 @@ public class NavigationBarView extends FrameLayout {
            mFloatingRotationButton.hide();
            mFloatingRotationButton.hide();
            mRotationButtonController.unregisterListeners();
            mRotationButtonController.unregisterListeners();
        }
        }

        mEdgeBackGestureHandler.onNavBarDetached();
    }
    }


    void dump(PrintWriter pw) {
    void dump(PrintWriter pw) {
+5 −6
Original line number Original line Diff line number Diff line
@@ -93,7 +93,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
        Dumpable {
        Dumpable {
    private static final String TAG = TaskbarDelegate.class.getSimpleName();
    private static final String TAG = TaskbarDelegate.class.getSimpleName();


    private final EdgeBackGestureHandler mEdgeBackGestureHandler;
    private EdgeBackGestureHandler mEdgeBackGestureHandler;
    private final LightBarTransitionsController.Factory mLightBarTransitionsControllerFactory;
    private final LightBarTransitionsController.Factory mLightBarTransitionsControllerFactory;
    private boolean mInitialized;
    private boolean mInitialized;
    private CommandQueue mCommandQueue;
    private CommandQueue mCommandQueue;
@@ -171,15 +171,15 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
    private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
    private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
    @Inject
    @Inject
    public TaskbarDelegate(Context context,
    public TaskbarDelegate(Context context,
            EdgeBackGestureHandler.Factory edgeBackGestureHandlerFactory,
            LightBarTransitionsController.Factory lightBarTransitionsControllerFactory,
            LightBarTransitionsController.Factory lightBarTransitionsControllerFactory,
            StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
            StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
        mLightBarTransitionsControllerFactory = lightBarTransitionsControllerFactory;
        mLightBarTransitionsControllerFactory = lightBarTransitionsControllerFactory;
        mEdgeBackGestureHandler = edgeBackGestureHandlerFactory.create(context);


        mContext = context;
        mContext = context;
        mDisplayManager = mContext.getSystemService(DisplayManager.class);
        mDisplayManager = mContext.getSystemService(DisplayManager.class);
        mPipListener = mEdgeBackGestureHandler::setPipStashExclusionBounds;
        mPipListener = (bounds) -> {
            mEdgeBackGestureHandler.setPipStashExclusionBounds(bounds);
        };
        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
        mStatusBarKeyguardViewManager.setTaskbarDelegate(this);
        mStatusBarKeyguardViewManager.setTaskbarDelegate(this);
    }
    }
@@ -207,6 +207,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
        mBackAnimation = backAnimation;
        mBackAnimation = backAnimation;
        mLightBarTransitionsController = createLightBarTransitionsController();
        mLightBarTransitionsController = createLightBarTransitionsController();
        mTaskStackChangeListeners = taskStackChangeListeners;
        mTaskStackChangeListeners = taskStackChangeListeners;
        mEdgeBackGestureHandler = navBarHelper.getEdgeBackGestureHandler();
    }
    }


    // Separated into a method to keep setDependencies() clean/readable.
    // Separated into a method to keep setDependencies() clean/readable.
@@ -239,7 +240,6 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
        mOverviewProxyService.addCallback(this);
        mOverviewProxyService.addCallback(this);
        onNavigationModeChanged(mNavigationModeController.addListener(this));
        onNavigationModeChanged(mNavigationModeController.addListener(this));
        mNavBarHelper.registerNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
        mNavBarHelper.registerNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
        mEdgeBackGestureHandler.onNavBarAttached();
        // Initialize component callback
        // Initialize component callback
        Display display = mDisplayManager.getDisplay(displayId);
        Display display = mDisplayManager.getDisplay(displayId);
        mWindowContext = mContext.createWindowContext(display, TYPE_APPLICATION, null);
        mWindowContext = mContext.createWindowContext(display, TYPE_APPLICATION, null);
@@ -263,7 +263,6 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
        mOverviewProxyService.removeCallback(this);
        mOverviewProxyService.removeCallback(this);
        mNavigationModeController.removeListener(this);
        mNavigationModeController.removeListener(this);
        mNavBarHelper.removeNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
        mNavBarHelper.removeNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
        mEdgeBackGestureHandler.onNavBarDetached();
        mScreenPinningNotify = null;
        mScreenPinningNotify = null;
        mWindowContext = null;
        mWindowContext = null;
        mAutoHideController.setNavigationBar(null);
        mAutoHideController.setNavigationBar(null);
+2 −2
Original line number Original line Diff line number Diff line
@@ -453,7 +453,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
    }
    }


    /**
    /**
     * @see NavigationBarView#onAttachedToWindow()
     * Called when the nav/task bar is attached.
     */
     */
    public void onNavBarAttached() {
    public void onNavBarAttached() {
        mIsAttached = true;
        mIsAttached = true;
@@ -465,7 +465,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack
    }
    }


    /**
    /**
     * @see NavigationBarView#onDetachedFromWindow()
     * Called when the nav/task bar is detached.
     */
     */
    public void onNavBarDetached() {
    public void onNavBarDetached() {
        mIsAttached = false;
        mIsAttached = false;
Loading