From 90f757a3a728f491f2e4c529bb41cfcab58e7040 Mon Sep 17 00:00:00 2001 From: Tracy Zhou Date: Thu, 19 Aug 2021 21:39:55 -0700 Subject: [PATCH] Hook up EdgeBackGestureHandler with TaskbarDelegate So that we don't need the presence of nav bar for back gesture for tablets Fixes: 197058461 Test: manual Change-Id: I6572f07dbaad665a03c43e70745744a2f0cf2734 --- .../NavigationBarController.java | 8 ++-- .../navigationbar/TaskbarDelegate.java | 41 +++++++++++++++++-- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java index de42730fc948d..2e7ab6e48c621 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java @@ -191,8 +191,8 @@ public class NavigationBarController implements Callbacks, mNavMode = mNavigationModeController.addListener(this); mNavigationModeController.addListener(this); mTaskbarDelegate = taskbarDelegate; - mTaskbarDelegate.setOverviewProxyService(overviewProxyService, - navigationBarA11yHelper, mSysUiFlagsContainer); + mTaskbarDelegate.setOverviewProxyService(commandQueue, overviewProxyService, + navigationBarA11yHelper, navigationModeController, sysUiFlagsContainer); mIsTablet = isTablet(mContext); mUserTracker = userTracker; } @@ -252,12 +252,10 @@ public class NavigationBarController implements Callbacks, /** @return {@code true} if taskbar is enabled, false otherwise */ private boolean initializeTaskbarIfNecessary() { if (mIsTablet) { - // Remove navigation bar when taskbar is showing, currently only for 3 button mode + // Remove navigation bar when taskbar is showing removeNavigationBar(mContext.getDisplayId()); - mCommandQueue.addCallback(mTaskbarDelegate); mTaskbarDelegate.init(mContext.getDisplayId()); } else { - mCommandQueue.removeCallback(mTaskbarDelegate); mTaskbarDelegate.destroy(); } return mIsTablet; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java index 5a04355406e5a..e0caf125084a7 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java @@ -27,13 +27,16 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_I import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SWITCHER_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED; +import android.content.Context; import android.inputmethodservice.InputMethodService; import android.os.IBinder; import android.view.InsetsVisibilities; import android.view.View; import com.android.internal.view.AppearanceRegion; +import com.android.systemui.Dependency; import com.android.systemui.model.SysUiState; +import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.shared.recents.utilities.Utilities; import com.android.systemui.statusbar.CommandQueue; @@ -42,10 +45,15 @@ import javax.inject.Inject; import javax.inject.Singleton; @Singleton -public class TaskbarDelegate implements CommandQueue.Callbacks { +public class TaskbarDelegate implements CommandQueue.Callbacks, + OverviewProxyService.OverviewProxyListener, NavigationModeController.ModeChangedListener { + private final EdgeBackGestureHandler mEdgeBackGestureHandler; + + private CommandQueue mCommandQueue; private OverviewProxyService mOverviewProxyService; private NavigationBarA11yHelper mNavigationBarA11yHelper; + private NavigationModeController mNavigationModeController; private SysUiState mSysUiState; private int mDisplayId; private int mNavigationIconHints; @@ -54,23 +62,36 @@ public class TaskbarDelegate implements CommandQueue.Callbacks { private int mDisabledFlags; @Inject - public TaskbarDelegate() { /* no-op */ } + public TaskbarDelegate(Context context) { + mEdgeBackGestureHandler = Dependency.get(EdgeBackGestureHandler.Factory.class) + .create(context); + } - public void setOverviewProxyService(OverviewProxyService overviewProxyService, + public void setOverviewProxyService(CommandQueue commandQueue, + OverviewProxyService overviewProxyService, NavigationBarA11yHelper navigationBarA11yHelper, + NavigationModeController navigationModeController, SysUiState sysUiState) { // TODO: adding this in the ctor results in a dagger dependency cycle :( + mCommandQueue = commandQueue; mOverviewProxyService = overviewProxyService; mNavigationBarA11yHelper = navigationBarA11yHelper; + mNavigationModeController = navigationModeController; mSysUiState = sysUiState; } public void destroy() { + mCommandQueue.removeCallback(this); + mOverviewProxyService.removeCallback(this); + mNavigationModeController.removeListener(this); mNavigationBarA11yHelper.removeA11yEventListener(mNavA11yEventListener); } public void init(int displayId) { mDisplayId = displayId; + mCommandQueue.addCallback(this); + mOverviewProxyService.addCallback(this); + mNavigationModeController.addListener(this); mNavigationBarA11yHelper.registerA11yEventListener(mNavA11yEventListener); // Set initial state for any listeners updateSysuiFlags(); @@ -126,4 +147,18 @@ public class TaskbarDelegate implements CommandQueue.Callbacks { InsetsVisibilities requestedVisibilities, String packageName) { mOverviewProxyService.onSystemBarAttributesChanged(displayId, behavior); } + + @Override + public void onTaskbarStatusUpdated(boolean visible, boolean stashed) { + if (visible) { + mEdgeBackGestureHandler.onNavBarAttached(); + } else { + mEdgeBackGestureHandler.onNavBarDetached(); + } + } + + @Override + public void onNavigationModeChanged(int mode) { + mEdgeBackGestureHandler.onNavigationModeChanged(mode); + } }