Merge "Add API to allow launcher to suspend AutoHideController" into sc-v2-dev
This commit is contained in:
@@ -143,5 +143,12 @@ interface ISystemUiProxy {
|
|||||||
/** Notifies when taskbar status updated */
|
/** Notifies when taskbar status updated */
|
||||||
oneway void notifyTaskbarStatus(boolean visible, boolean stashed) = 47;
|
oneway void notifyTaskbarStatus(boolean visible, boolean stashed) = 47;
|
||||||
|
|
||||||
// Next id = 48
|
/**
|
||||||
|
* Notifies sysui when taskbar requests autoHide to stop auto-hiding
|
||||||
|
* If called to suspend, caller is also responsible for calling this method to un-suspend
|
||||||
|
* @param suspend should be true to stop auto-hide, false to resume normal behavior
|
||||||
|
*/
|
||||||
|
oneway void notifyTaskbarAutohideSuspend(boolean suspend) = 48;
|
||||||
|
|
||||||
|
// Next id = 49
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ import com.android.systemui.statusbar.CommandQueue;
|
|||||||
import com.android.systemui.statusbar.CommandQueue.Callbacks;
|
import com.android.systemui.statusbar.CommandQueue.Callbacks;
|
||||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||||
|
import com.android.systemui.statusbar.phone.AutoHideController;
|
||||||
import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
|
import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
|
||||||
import com.android.systemui.statusbar.phone.ShadeController;
|
import com.android.systemui.statusbar.phone.ShadeController;
|
||||||
import com.android.systemui.statusbar.phone.StatusBar;
|
import com.android.systemui.statusbar.phone.StatusBar;
|
||||||
@@ -160,7 +161,8 @@ public class NavigationBarController implements
|
|||||||
NavigationBarA11yHelper navigationBarA11yHelper,
|
NavigationBarA11yHelper navigationBarA11yHelper,
|
||||||
TaskbarDelegate taskbarDelegate,
|
TaskbarDelegate taskbarDelegate,
|
||||||
UserTracker userTracker,
|
UserTracker userTracker,
|
||||||
DumpManager dumpManager) {
|
DumpManager dumpManager,
|
||||||
|
AutoHideController autoHideController) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mWindowManager = windowManager;
|
mWindowManager = windowManager;
|
||||||
mAssistManagerLazy = assistManagerLazy;
|
mAssistManagerLazy = assistManagerLazy;
|
||||||
@@ -194,9 +196,9 @@ public class NavigationBarController implements
|
|||||||
mNavMode = mNavigationModeController.addListener(this);
|
mNavMode = mNavigationModeController.addListener(this);
|
||||||
mNavigationModeController.addListener(this);
|
mNavigationModeController.addListener(this);
|
||||||
mTaskbarDelegate = taskbarDelegate;
|
mTaskbarDelegate = taskbarDelegate;
|
||||||
mTaskbarDelegate.setOverviewProxyService(commandQueue, overviewProxyService,
|
mTaskbarDelegate.setDependencies(commandQueue, overviewProxyService,
|
||||||
navigationBarA11yHelper, navigationModeController, sysUiFlagsContainer,
|
navigationBarA11yHelper, navigationModeController, sysUiFlagsContainer,
|
||||||
dumpManager);
|
dumpManager, autoHideController);
|
||||||
mIsTablet = isTablet(mContext);
|
mIsTablet = isTablet(mContext);
|
||||||
mUserTracker = userTracker;
|
mUserTracker = userTracker;
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ package com.android.systemui.navigationbar;
|
|||||||
import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT;
|
import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT;
|
||||||
import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SHOWN;
|
import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SHOWN;
|
||||||
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
|
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
|
||||||
|
import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
|
||||||
|
import static android.view.InsetsState.containsType;
|
||||||
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
|
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
|
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
|
||||||
|
|
||||||
@@ -57,7 +59,9 @@ import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler;
|
|||||||
import com.android.systemui.recents.OverviewProxyService;
|
import com.android.systemui.recents.OverviewProxyService;
|
||||||
import com.android.systemui.shared.recents.utilities.Utilities;
|
import com.android.systemui.shared.recents.utilities.Utilities;
|
||||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||||
|
import com.android.systemui.statusbar.AutoHideUiElement;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
|
import com.android.systemui.statusbar.phone.AutoHideController;
|
||||||
|
|
||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
@@ -77,6 +81,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
private NavigationBarA11yHelper mNavigationBarA11yHelper;
|
private NavigationBarA11yHelper mNavigationBarA11yHelper;
|
||||||
private NavigationModeController mNavigationModeController;
|
private NavigationModeController mNavigationModeController;
|
||||||
private SysUiState mSysUiState;
|
private SysUiState mSysUiState;
|
||||||
|
private AutoHideController mAutoHideController;
|
||||||
private int mDisplayId;
|
private int mDisplayId;
|
||||||
private int mNavigationIconHints;
|
private int mNavigationIconHints;
|
||||||
private final NavigationBarA11yHelper.NavA11yEventListener mNavA11yEventListener =
|
private final NavigationBarA11yHelper.NavA11yEventListener mNavA11yEventListener =
|
||||||
@@ -87,6 +92,28 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final DisplayManager mDisplayManager;
|
private final DisplayManager mDisplayManager;
|
||||||
private Context mWindowContext;
|
private Context mWindowContext;
|
||||||
|
/**
|
||||||
|
* Tracks the system calls for when taskbar should transiently show or hide so we can return
|
||||||
|
* this value in {@link AutoHideUiElement#isVisible()} below.
|
||||||
|
*
|
||||||
|
* This also gets set by {@link #onTaskbarAutohideSuspend(boolean)} to force show the transient
|
||||||
|
* taskbar if launcher has requested to suspend auto-hide behavior.
|
||||||
|
*/
|
||||||
|
private boolean mTaskbarTransientShowing;
|
||||||
|
private final AutoHideUiElement mAutoHideUiElement = new AutoHideUiElement() {
|
||||||
|
@Override
|
||||||
|
public void synchronizeState() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVisible() {
|
||||||
|
return mTaskbarTransientShowing;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void hide() {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public TaskbarDelegate(Context context) {
|
public TaskbarDelegate(Context context) {
|
||||||
@@ -96,11 +123,12 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
mDisplayManager = mContext.getSystemService(DisplayManager.class);
|
mDisplayManager = mContext.getSystemService(DisplayManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOverviewProxyService(CommandQueue commandQueue,
|
public void setDependencies(CommandQueue commandQueue,
|
||||||
OverviewProxyService overviewProxyService,
|
OverviewProxyService overviewProxyService,
|
||||||
NavigationBarA11yHelper navigationBarA11yHelper,
|
NavigationBarA11yHelper navigationBarA11yHelper,
|
||||||
NavigationModeController navigationModeController,
|
NavigationModeController navigationModeController,
|
||||||
SysUiState sysUiState, DumpManager dumpManager) {
|
SysUiState sysUiState, DumpManager dumpManager,
|
||||||
|
AutoHideController autoHideController) {
|
||||||
// TODO: adding this in the ctor results in a dagger dependency cycle :(
|
// TODO: adding this in the ctor results in a dagger dependency cycle :(
|
||||||
mCommandQueue = commandQueue;
|
mCommandQueue = commandQueue;
|
||||||
mOverviewProxyService = overviewProxyService;
|
mOverviewProxyService = overviewProxyService;
|
||||||
@@ -108,18 +136,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
mNavigationModeController = navigationModeController;
|
mNavigationModeController = navigationModeController;
|
||||||
mSysUiState = sysUiState;
|
mSysUiState = sysUiState;
|
||||||
dumpManager.registerDumpable(this);
|
dumpManager.registerDumpable(this);
|
||||||
}
|
mAutoHideController = autoHideController;
|
||||||
|
|
||||||
public void destroy() {
|
|
||||||
mCommandQueue.removeCallback(this);
|
|
||||||
mOverviewProxyService.removeCallback(this);
|
|
||||||
mNavigationModeController.removeListener(this);
|
|
||||||
mNavigationBarA11yHelper.removeA11yEventListener(mNavA11yEventListener);
|
|
||||||
mEdgeBackGestureHandler.onNavBarDetached();
|
|
||||||
if (mWindowContext != null) {
|
|
||||||
mWindowContext.unregisterComponentCallbacks(this);
|
|
||||||
mWindowContext = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init(int displayId) {
|
public void init(int displayId) {
|
||||||
@@ -136,6 +153,20 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
mWindowContext.registerComponentCallbacks(this);
|
mWindowContext.registerComponentCallbacks(this);
|
||||||
// Set initial state for any listeners
|
// Set initial state for any listeners
|
||||||
updateSysuiFlags();
|
updateSysuiFlags();
|
||||||
|
mAutoHideController.setNavigationBar(mAutoHideUiElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void destroy() {
|
||||||
|
mCommandQueue.removeCallback(this);
|
||||||
|
mOverviewProxyService.removeCallback(this);
|
||||||
|
mNavigationModeController.removeListener(this);
|
||||||
|
mNavigationBarA11yHelper.removeA11yEventListener(mNavA11yEventListener);
|
||||||
|
mEdgeBackGestureHandler.onNavBarDetached();
|
||||||
|
if (mWindowContext != null) {
|
||||||
|
mWindowContext.unregisterComponentCallbacks(this);
|
||||||
|
mWindowContext = null;
|
||||||
|
}
|
||||||
|
mAutoHideController.setNavigationBar(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSysuiFlags() {
|
private void updateSysuiFlags() {
|
||||||
@@ -208,6 +239,38 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showTransient(int displayId, int[] types) {
|
||||||
|
if (displayId != mDisplayId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!containsType(types, ITYPE_NAVIGATION_BAR)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mTaskbarTransientShowing = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void abortTransient(int displayId, int[] types) {
|
||||||
|
if (displayId != mDisplayId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!containsType(types, ITYPE_NAVIGATION_BAR)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mTaskbarTransientShowing = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTaskbarAutohideSuspend(boolean suspend) {
|
||||||
|
mTaskbarTransientShowing = suspend;
|
||||||
|
if (suspend) {
|
||||||
|
mAutoHideController.suspendAutoHide();
|
||||||
|
} else {
|
||||||
|
mAutoHideController.resumeSuspendedAutoHide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNavigationModeChanged(int mode) {
|
public void onNavigationModeChanged(int mode) {
|
||||||
mEdgeBackGestureHandler.onNavigationModeChanged(mode);
|
mEdgeBackGestureHandler.onNavigationModeChanged(mode);
|
||||||
@@ -236,6 +299,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
pw.println(" mDisabledFlags=" + mDisabledFlags);
|
pw.println(" mDisabledFlags=" + mDisabledFlags);
|
||||||
pw.println(" mTaskBarWindowState=" + mTaskBarWindowState);
|
pw.println(" mTaskBarWindowState=" + mTaskBarWindowState);
|
||||||
pw.println(" mBehavior=" + mBehavior);
|
pw.println(" mBehavior=" + mBehavior);
|
||||||
|
pw.println(" mTaskbarTransientShowing=" + mTaskbarTransientShowing);
|
||||||
mEdgeBackGestureHandler.dump(pw);
|
mEdgeBackGestureHandler.dump(pw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -248,6 +248,12 @@ public class OverviewProxyService extends CurrentUserTracker implements
|
|||||||
onTaskbarStatusUpdated(visible, stashed));
|
onTaskbarStatusUpdated(visible, stashed));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notifyTaskbarAutohideSuspend(boolean suspend) {
|
||||||
|
verifyCallerAndClearCallingIdentityPostMain("notifyTaskbarAutohideSuspend", () ->
|
||||||
|
onTaskbarAutohideSuspend(suspend));
|
||||||
|
}
|
||||||
|
|
||||||
private boolean sendEvent(int action, int code) {
|
private boolean sendEvent(int action, int code) {
|
||||||
long when = SystemClock.uptimeMillis();
|
long when = SystemClock.uptimeMillis();
|
||||||
final KeyEvent ev = new KeyEvent(when, when, action, code, 0 /* repeat */,
|
final KeyEvent ev = new KeyEvent(when, when, action, code, 0 /* repeat */,
|
||||||
@@ -818,6 +824,12 @@ public class OverviewProxyService extends CurrentUserTracker implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onTaskbarAutohideSuspend(boolean suspend) {
|
||||||
|
for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) {
|
||||||
|
mConnectionCallbacks.get(i).onTaskbarAutohideSuspend(suspend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void notifyConnectionChanged() {
|
private void notifyConnectionChanged() {
|
||||||
for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) {
|
for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) {
|
||||||
mConnectionCallbacks.get(i).onConnectionChanged(mOverviewProxy != null);
|
mConnectionCallbacks.get(i).onConnectionChanged(mOverviewProxy != null);
|
||||||
@@ -1000,6 +1012,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
|
|||||||
default void onNavBarButtonAlphaChanged(float alpha, boolean animate) {}
|
default void onNavBarButtonAlphaChanged(float alpha, boolean animate) {}
|
||||||
default void onHomeRotationEnabled(boolean enabled) {}
|
default void onHomeRotationEnabled(boolean enabled) {}
|
||||||
default void onTaskbarStatusUpdated(boolean visible, boolean stashed) {}
|
default void onTaskbarStatusUpdated(boolean visible, boolean stashed) {}
|
||||||
|
default void onTaskbarAutohideSuspend(boolean suspend) {}
|
||||||
default void onSystemUiStateChanged(int sysuiStateFlags) {}
|
default void onSystemUiStateChanged(int sysuiStateFlags) {}
|
||||||
default void onAssistantProgress(@FloatRange(from = 0.0, to = 1.0) float progress) {}
|
default void onAssistantProgress(@FloatRange(from = 0.0, to = 1.0) float progress) {}
|
||||||
default void onAssistantGestureCompletion(float velocity) {}
|
default void onAssistantGestureCompletion(float velocity) {}
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ public class AutoHideController {
|
|||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
|
|
||||||
private AutoHideUiElement mStatusBar;
|
private AutoHideUiElement mStatusBar;
|
||||||
|
/** For tablets, this will represent the Taskbar */
|
||||||
private AutoHideUiElement mNavigationBar;
|
private AutoHideUiElement mNavigationBar;
|
||||||
private int mDisplayId;
|
private int mDisplayId;
|
||||||
|
|
||||||
@@ -89,7 +90,7 @@ public class AutoHideController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void resumeSuspendedAutoHide() {
|
public void resumeSuspendedAutoHide() {
|
||||||
if (mAutoHideSuspended) {
|
if (mAutoHideSuspended) {
|
||||||
scheduleAutoHide();
|
scheduleAutoHide();
|
||||||
Runnable checkBarModesRunnable = getCheckBarModesRunnable();
|
Runnable checkBarModesRunnable = getCheckBarModesRunnable();
|
||||||
@@ -99,7 +100,7 @@ public class AutoHideController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void suspendAutoHide() {
|
public void suspendAutoHide() {
|
||||||
mHandler.removeCallbacks(mAutoHide);
|
mHandler.removeCallbacks(mAutoHide);
|
||||||
Runnable checkBarModesRunnable = getCheckBarModesRunnable();
|
Runnable checkBarModesRunnable = getCheckBarModesRunnable();
|
||||||
if (checkBarModesRunnable != null) {
|
if (checkBarModesRunnable != null) {
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ import com.android.systemui.settings.UserTracker;
|
|||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||||
|
import com.android.systemui.statusbar.phone.AutoHideController;
|
||||||
import com.android.systemui.statusbar.phone.ShadeController;
|
import com.android.systemui.statusbar.phone.ShadeController;
|
||||||
import com.android.systemui.statusbar.phone.StatusBar;
|
import com.android.systemui.statusbar.phone.StatusBar;
|
||||||
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
||||||
@@ -118,7 +119,8 @@ public class NavigationBarControllerTest extends SysuiTestCase {
|
|||||||
mock(NavigationBarA11yHelper.class),
|
mock(NavigationBarA11yHelper.class),
|
||||||
mock(TaskbarDelegate.class),
|
mock(TaskbarDelegate.class),
|
||||||
mock(UserTracker.class),
|
mock(UserTracker.class),
|
||||||
mock(DumpManager.class)));
|
mock(DumpManager.class),
|
||||||
|
mock(AutoHideController.class)));
|
||||||
initializeNavigationBars();
|
initializeNavigationBars();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user