Extract SysUi state management out of OverviewProxyService
Move all sysUi state flag handling into a
separate class.
fixes: 138601608
Test: atest SysUiStateFlagsContainerTest
Checked that callbacks were being sent in
OPS, EdgeHandler and in Launcher codebase via
debugger.
Change-Id: Ie8f7ef2e647db88d244af1062eb95dbb69a46919
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index 59270a0..f9452e2 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -41,6 +41,7 @@
import com.android.systemui.fragments.FragmentService;
import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.keyguard.WakefulnessLifecycle;
+import com.android.systemui.model.SysUiState;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.FalsingManager;
@@ -304,6 +305,7 @@
@Inject Lazy<ChannelEditorDialogController> mChannelEditorDialogController;
@Inject Lazy<INotificationManager> mINotificationManager;
@Inject Lazy<FalsingManager> mFalsingManager;
+ @Inject Lazy<SysUiState> mSysUiStateFlagsContainer;
@Inject
public Dependency() {
@@ -482,6 +484,7 @@
mProviders.put(ChannelEditorDialogController.class, mChannelEditorDialogController::get);
mProviders.put(INotificationManager.class, mINotificationManager::get);
mProviders.put(FalsingManager.class, mFalsingManager::get);
+ mProviders.put(SysUiState.class, mSysUiStateFlagsContainer::get);
// TODO(b/118592525): to support multi-display , we start to add something which is
// per-display, while others may be global. I think it's time to add
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
index 3ce8a4b..b67d7df 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
@@ -30,6 +30,7 @@
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.keyguard.DismissCallbackRegistry;
+import com.android.systemui.model.SysUiState;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.KeyguardIndicationController;
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/SystemUIModule.java
index edd2463..5d103eb 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIModule.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.content.pm.PackageManager;
+import com.android.systemui.model.SysUiState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.KeyguardLiftController;
import com.android.systemui.util.AsyncSensorManager;
@@ -47,4 +48,11 @@
}
return new KeyguardLiftController(context, statusBarStateController, asyncSensorManager);
}
+
+
+ @Singleton
+ @Provides
+ static SysUiState provideSysUiState() {
+ return new SysUiState();
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleLikeHomeBehavior.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleLikeHomeBehavior.java
index 6cf2034..763315d 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleLikeHomeBehavior.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleLikeHomeBehavior.java
@@ -22,8 +22,8 @@
import com.android.systemui.Dependency;
import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController;
+import com.android.systemui.model.SysUiState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.shared.system.QuickStepContract;
import java.io.PrintWriter;
@@ -41,15 +41,11 @@
handleDozingChanged(isDozing);
}
};
- private final OverviewProxyService.OverviewProxyListener mOverviewProxyListener =
- new OverviewProxyService.OverviewProxyListener() {
- @Override
- public void onSystemUiStateChanged(int sysuiStateFlags) {
- handleSystemUiStateChange(sysuiStateFlags);
- }
- };
+
+ private final SysUiState.SysUiStateCallback mSysUiStateCallback =
+ this::handleSystemUiStateChange;
private final StatusBarStateController mStatusBarStateController;
- private final OverviewProxyService mOverviewProxyService;
+ private final SysUiState mSysUiFlagContainer;
private boolean mIsDozing;
private boolean mIsHomeHandleHiding;
@@ -58,7 +54,7 @@
AssistHandleLikeHomeBehavior() {
mStatusBarStateController = Dependency.get(StatusBarStateController.class);
- mOverviewProxyService = Dependency.get(OverviewProxyService.class);
+ mSysUiFlagContainer = Dependency.get(SysUiState.class);
}
@Override
@@ -66,14 +62,14 @@
mAssistHandleCallbacks = callbacks;
mIsDozing = mStatusBarStateController.isDozing();
mStatusBarStateController.addCallback(mStatusBarStateListener);
- mOverviewProxyService.addCallback(mOverviewProxyListener);
+ mSysUiFlagContainer.addCallback(mSysUiStateCallback);
callbackForCurrentState();
}
@Override
public void onModeDeactivated() {
mAssistHandleCallbacks = null;
- mOverviewProxyService.removeCallback(mOverviewProxyListener);
+ mSysUiFlagContainer.removeCallback(mSysUiStateCallback);
}
private static boolean isHomeHandleHiding(int sysuiStateFlags) {
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java
index f9ddeae..1e20b99 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java
@@ -32,6 +32,7 @@
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.systemui.Dependency;
import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController;
+import com.android.systemui.model.SysUiState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.shared.system.ActivityManagerWrapper;
@@ -107,12 +108,10 @@
public void onOverviewShown(boolean fromHome) {
handleOverviewShown();
}
-
- @Override
- public void onSystemUiStateChanged(int sysuiStateFlags) {
- handleSystemUiStateChanged(sysuiStateFlags);
- }
};
+
+ private final SysUiState.SysUiStateCallback mSysUiStateCallback =
+ this::handleSystemUiStateChanged;
private final BroadcastReceiver mDefaultHomeBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -127,6 +126,7 @@
private final StatusBarStateController mStatusBarStateController;
private final ActivityManagerWrapper mActivityManagerWrapper;
private final OverviewProxyService mOverviewProxyService;
+ private final SysUiState mSysUiFlagContainer;
private boolean mOnLockscreen;
private boolean mIsDozing;
@@ -154,6 +154,7 @@
mStatusBarStateController = Dependency.get(StatusBarStateController.class);
mActivityManagerWrapper = ActivityManagerWrapper.getInstance();
mOverviewProxyService = Dependency.get(OverviewProxyService.class);
+ mSysUiFlagContainer = Dependency.get(SysUiState.class);
mDefaultHomeIntentFilter = new IntentFilter();
for (String action : DEFAULT_HOME_CHANGE_ACTIONS) {
mDefaultHomeIntentFilter.addAction(action);
@@ -174,6 +175,7 @@
mRunningTaskId = runningTaskInfo == null ? 0 : runningTaskInfo.taskId;
mActivityManagerWrapper.registerTaskStackListener(mTaskStackChangeListener);
mOverviewProxyService.addCallback(mOverviewProxyListener);
+ mSysUiFlagContainer.addCallback(mSysUiStateCallback);
mLearningTimeElapsed = Settings.Secure.getLong(
context.getContentResolver(), LEARNING_TIME_ELAPSED_KEY, /* default = */ 0);
@@ -199,6 +201,7 @@
mStatusBarStateController.removeCallback(mStatusBarStateListener);
mActivityManagerWrapper.unregisterTaskStackListener(mTaskStackChangeListener);
mOverviewProxyService.removeCallback(mOverviewProxyListener);
+ mSysUiFlagContainer.removeCallback(mSysUiStateCallback);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/model/SysUiState.java b/packages/SystemUI/src/com/android/systemui/model/SysUiState.java
new file mode 100644
index 0000000..029ab43
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/model/SysUiState.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.model;
+
+import static android.view.Display.DEFAULT_DISPLAY;
+
+import android.annotation.NonNull;
+
+import com.android.systemui.Dumpable;
+import com.android.systemui.shared.system.QuickStepContract;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Singleton;
+
+/**
+ * Contains sysUi state flags and notifies registered
+ * listeners whenever changes happen.
+ */
+@Singleton
+public class SysUiState implements Dumpable {
+
+ private @QuickStepContract.SystemUiStateFlags int mFlags;
+ private final List<SysUiStateCallback> mCallbacks = new ArrayList<>();
+ private int mFlagsToSet = 0;
+ private int mFlagsToClear = 0;
+
+ /**
+ * Add listener to be notified of changes made to SysUI state.
+ * The callback will also be called as part of this function.
+ */
+ public void addCallback(@NonNull SysUiStateCallback callback) {
+ mCallbacks.add(callback);
+ callback.onSystemUiStateChanged(mFlags);
+ }
+
+ /** Callback will no longer receive events on state change */
+ public void removeCallback(@NonNull SysUiStateCallback callback) {
+ mCallbacks.remove(callback);
+ }
+
+ /** Methods to this call can be chained together before calling {@link #commitUpdate(int)}. */
+ public SysUiState setFlag(int flag, boolean enabled) {
+ if (enabled) {
+ mFlagsToSet |= flag;
+ } else {
+ mFlagsToClear |= flag;
+ }
+ return this;
+ }
+
+ /** Call to save all the flags updated from {@link #setFlag(int, boolean)}. */
+ public void commitUpdate(int displayId) {
+ updateFlags(displayId);
+ mFlagsToSet = 0;
+ mFlagsToClear = 0;
+ }
+
+ private void updateFlags(int displayId) {
+ if (displayId != DEFAULT_DISPLAY) {
+ // Ignore non-default displays for now
+ return;
+ }
+
+ int newState = mFlags;
+ newState |= mFlagsToSet;
+ newState &= ~mFlagsToClear;
+ notifyAndSetSystemUiStateChanged(newState, mFlags);
+ }
+
+ /** Notify all those who are registered that the state has changed. */
+ private void notifyAndSetSystemUiStateChanged(int newFlags, int oldFlags) {
+ if (newFlags != oldFlags) {
+ mCallbacks.forEach(callback -> callback.onSystemUiStateChanged(newFlags));
+ mFlags = newFlags;
+ }
+ }
+
+ @Override
+ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ pw.println("SysUiState state:");
+ pw.print(" mSysUiStateFlags="); pw.println(mFlags);
+ pw.println(" " + QuickStepContract.getSystemUiStateString(mFlags));
+ pw.print(" backGestureDisabled=");
+ pw.println(QuickStepContract.isBackGestureDisabled(mFlags));
+ pw.print(" assistantGestureDisabled=");
+ pw.println(QuickStepContract.isAssistantGestureDisabled(mFlags));
+ }
+
+ /** Callback to be notified whenever system UI state flags are changed. */
+ public interface SysUiStateCallback{
+ /** To be called when any SysUiStateFlag gets updated */
+ void onSystemUiStateChanged(@QuickStepContract.SystemUiStateFlags int sysUiFlags);
+ }
+}
+
+
diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
index 16f0b15..9268ee0 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
@@ -17,7 +17,6 @@
package com.android.systemui.recents;
import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY;
-import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.MotionEvent.ACTION_CANCEL;
import static android.view.MotionEvent.ACTION_DOWN;
import static android.view.MotionEvent.ACTION_UP;
@@ -58,12 +57,12 @@
import com.android.internal.policy.ScreenDecorationsUtils;
import com.android.systemui.Dumpable;
import com.android.systemui.SysUiServiceProvider;
+import com.android.systemui.model.SysUiState;
import com.android.systemui.recents.OverviewProxyService.OverviewProxyListener;
import com.android.systemui.shared.recents.IOverviewProxy;
import com.android.systemui.shared.recents.ISystemUiProxy;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.QuickStepContract;
-import com.android.systemui.shared.system.QuickStepContract.SystemUiStateFlags;
import com.android.systemui.stackdivider.Divider;
import com.android.systemui.statusbar.NavigationBarController;
import com.android.systemui.statusbar.phone.NavigationBarFragment;
@@ -101,6 +100,7 @@
private static final long MAX_BACKOFF_MILLIS = 10 * 60 * 1000;
private final Context mContext;
+ private SysUiState mSysUiState;
private final Handler mHandler;
private final NavigationBarController mNavBarController;
private final StatusBarWindowController mStatusBarWinController;
@@ -114,7 +114,6 @@
private IOverviewProxy mOverviewProxy;
private int mConnectionBackoffAttempts;
- private @SystemUiStateFlags int mSysUiStateFlags;
private boolean mBound;
private boolean mIsEnabled;
private int mCurrentBoundedUserId = -1;
@@ -464,7 +463,8 @@
@Inject
public OverviewProxyService(Context context, DeviceProvisionedController provisionController,
NavigationBarController navBarController, NavigationModeController navModeController,
- StatusBarWindowController statusBarWinController) {
+ StatusBarWindowController statusBarWinController,
+ SysUiState sysUiState) {
mContext = context;
mHandler = new Handler();
mNavBarController = navBarController;
@@ -478,6 +478,8 @@
mWindowCornerRadius = ScreenDecorationsUtils.getWindowCornerRadius(mContext.getResources());
mSupportsRoundedCornersOnWindows = ScreenDecorationsUtils
.supportsRoundedCornersOnWindows(mContext.getResources());
+ mSysUiState = sysUiState;
+ mSysUiState.addCallback(this::notifySystemUiStateFlags);
// Assumes device always starts with back button until launcher tells it that it does not
mNavBarButtonAlpha = 1.0f;
@@ -512,36 +514,12 @@
}
}
- public void setSystemUiStateFlag(int flag, boolean enabled, int displayId) {
- if (displayId != DEFAULT_DISPLAY) {
- // Ignore non-default displays for now
- return;
- }
-
- int newState = mSysUiStateFlags;
- if (enabled) {
- newState |= flag;
- } else {
- newState &= ~flag;
- }
- if (mSysUiStateFlags != newState) {
- mSysUiStateFlags = newState;
- notifySystemUiStateChanged(mSysUiStateFlags);
- notifySystemUiStateFlags(mSysUiStateFlags);
- }
- }
-
- public int getSystemUiStateFlags() {
- return mSysUiStateFlags;
- }
-
private void updateSystemUiStateFlags() {
final NavigationBarFragment navBarFragment =
mNavBarController.getDefaultNavigationBarFragment();
final NavigationBarView navBarView =
mNavBarController.getNavigationBarView(mContext.getDisplayId());
- mSysUiStateFlags = 0;
if (navBarFragment != null) {
navBarFragment.updateSystemUiStateFlags(-1);
}
@@ -552,7 +530,6 @@
if (mStatusBarWinController != null) {
mStatusBarWinController.notifyStateChangedCallbacks();
}
- notifySystemUiStateFlags(mSysUiStateFlags);
}
private void notifySystemUiStateFlags(int flags) {
@@ -568,11 +545,13 @@
private void onStatusBarStateChanged(boolean keyguardShowing, boolean keyguardOccluded,
boolean bouncerShowing) {
int displayId = mContext.getDisplayId();
- setSystemUiStateFlag(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING,
- keyguardShowing && !keyguardOccluded, displayId);
- setSystemUiStateFlag(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED,
- keyguardShowing && keyguardOccluded, displayId);
- setSystemUiStateFlag(SYSUI_STATE_BOUNCER_SHOWING, bouncerShowing, displayId);
+
+ mSysUiState.setFlag(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING,
+ keyguardShowing && !keyguardOccluded)
+ .setFlag(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED,
+ keyguardShowing && keyguardOccluded)
+ .setFlag(SYSUI_STATE_BOUNCER_SHOWING, bouncerShowing)
+ .commitUpdate(displayId);
}
/**
@@ -665,7 +644,6 @@
mConnectionCallbacks.add(listener);
listener.onConnectionChanged(mOverviewProxy != null);
listener.onNavBarButtonAlphaChanged(mNavBarButtonAlpha, false);
- listener.onSystemUiStateChanged(mSysUiStateFlags);
}
@Override
@@ -736,12 +714,6 @@
}
}
- private void notifySystemUiStateChanged(int sysuiStateFlags) {
- for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) {
- mConnectionCallbacks.get(i).onSystemUiStateChanged(sysuiStateFlags);
- }
- }
-
private void notifyStartAssistant(Bundle bundle) {
for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) {
mConnectionCallbacks.get(i).startAssistant(bundle);
@@ -782,12 +754,7 @@
pw.print(" quickStepIntent="); pw.println(mQuickStepIntent);
pw.print(" quickStepIntentResolved="); pw.println(isEnabled());
- pw.print(" mSysUiStateFlags="); pw.println(mSysUiStateFlags);
- pw.println(" " + QuickStepContract.getSystemUiStateString(mSysUiStateFlags));
- pw.print(" backGestureDisabled=");
- pw.println(QuickStepContract.isBackGestureDisabled(mSysUiStateFlags));
- pw.print(" assistantGestureDisabled=");
- pw.println(QuickStepContract.isAssistantGestureDisabled(mSysUiStateFlags));
+ mSysUiState.dump(fd, pw, args);
pw.print(" mInputFocusTransferStarted="); pw.println(mInputFocusTransferStarted);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
index 3314e67..575b559 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
@@ -55,6 +55,7 @@
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.bubbles.BubbleController;
+import com.android.systemui.model.SysUiState;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.shared.system.WindowManagerWrapper;
@@ -166,8 +167,10 @@
private RegionSamplingHelper mRegionSamplingHelper;
private int mLeftInset;
private int mRightInset;
+ private int mSysUiFlags;
- public EdgeBackGestureHandler(Context context, OverviewProxyService overviewProxyService) {
+ public EdgeBackGestureHandler(Context context, OverviewProxyService overviewProxyService,
+ SysUiState sysUiFlagContainer) {
final Resources res = context.getResources();
mContext = context;
mDisplayId = context.getDisplayId();
@@ -186,6 +189,7 @@
mMinArrowPosition = res.getDimensionPixelSize(R.dimen.navigation_edge_arrow_min_y);
mFingerOffset = res.getDimensionPixelSize(R.dimen.navigation_edge_finger_offset);
updateCurrentUserResources(res);
+ sysUiFlagContainer.addCallback(sysUiFlags -> mSysUiFlags = sysUiFlags);
}
public void updateCurrentUserResources(Resources res) {
@@ -352,10 +356,9 @@
if (action == MotionEvent.ACTION_DOWN) {
// Verify if this is in within the touch region and we aren't in immersive mode, and
// either the bouncer is showing or the notification panel is hidden
- int stateFlags = mOverviewProxyService.getSystemUiStateFlags();
mIsOnLeftEdge = ev.getX() <= mEdgeWidth + mLeftInset;
mInRejectedExclusion = false;
- mAllowGesture = !QuickStepContract.isBackGestureDisabled(stateFlags)
+ mAllowGesture = !QuickStepContract.isBackGestureDisabled(mSysUiFlags)
&& isWithinTouchRegion((int) ev.getX(), (int) ev.getY());
if (mAllowGesture) {
mEdgePanelLp.gravity = mIsOnLeftEdge
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
index 5d3f3ac..2b8c86b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
@@ -91,6 +91,7 @@
import com.android.systemui.assist.AssistManager;
import com.android.systemui.fragments.FragmentHostManager;
import com.android.systemui.fragments.FragmentHostManager.FragmentListener;
+import com.android.systemui.model.SysUiState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.recents.Recents;
@@ -134,6 +135,7 @@
private final AccessibilityManagerWrapper mAccessibilityManagerWrapper;
protected final AssistManager mAssistManager;
+ private SysUiState mSysUiFlagsContainer;
private final MetricsLogger mMetricsLogger;
private final DeviceProvisionedController mDeviceProvisionedController;
private final StatusBarStateController mStatusBarStateController;
@@ -245,12 +247,14 @@
DeviceProvisionedController deviceProvisionedController, MetricsLogger metricsLogger,
AssistManager assistManager, OverviewProxyService overviewProxyService,
NavigationModeController navigationModeController,
- StatusBarStateController statusBarStateController) {
+ StatusBarStateController statusBarStateController,
+ SysUiState sysUiFlagsContainer) {
mAccessibilityManagerWrapper = accessibilityManagerWrapper;
mDeviceProvisionedController = deviceProvisionedController;
mStatusBarStateController = statusBarStateController;
mMetricsLogger = metricsLogger;
mAssistManager = assistManager;
+ mSysUiFlagsContainer = sysUiFlagsContainer;
mAssistantAvailable = mAssistManager.getAssistInfoForUser(UserHandle.USER_CURRENT) != null;
mOverviewProxyService = overviewProxyService;
mNavBarMode = navigationModeController.addListener(this);
@@ -884,12 +888,11 @@
}
boolean clickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_CLICKABLE) != 0;
boolean longClickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE) != 0;
- mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_A11Y_BUTTON_CLICKABLE,
- clickable, mDisplayId);
- mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE,
- longClickable, mDisplayId);
- mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_NAV_BAR_HIDDEN,
- !isNavBarWindowVisible(), mDisplayId);
+
+ mSysUiFlagsContainer.setFlag(SYSUI_STATE_A11Y_BUTTON_CLICKABLE, clickable)
+ .setFlag(SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE, longClickable)
+ .setFlag(SYSUI_STATE_NAV_BAR_HIDDEN, !isNavBarWindowVisible())
+ .commitUpdate(mDisplayId);
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 3485f23..fa4812d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -68,6 +68,7 @@
import com.android.systemui.R;
import com.android.systemui.SysUiServiceProvider;
import com.android.systemui.assist.AssistManager;
+import com.android.systemui.model.SysUiState;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.recents.Recents;
import com.android.systemui.recents.RecentsOnboarding;
@@ -92,6 +93,7 @@
final static boolean ALTERNATE_CAR_MODE_UI = false;
private final RegionSamplingHelper mRegionSamplingHelper;
private final int mNavColorSampleMargin;
+ private final SysUiState mSysUiFlagContainer;
View mCurrentView = null;
private View mVertical;
@@ -266,6 +268,7 @@
mNavBarMode = Dependency.get(NavigationModeController.class).addListener(this);
boolean isGesturalMode = isGesturalMode(mNavBarMode);
+ mSysUiFlagContainer = Dependency.get(SysUiState.class);
// Set up the context group of buttons
mContextualButtonGroup = new ContextualButtonGroup(R.id.menu_container);
final ContextualButton imeSwitcherButton = new ContextualButton(R.id.ime_switcher,
@@ -307,11 +310,10 @@
mButtonDispatchers.put(R.id.menu_container, mContextualButtonGroup);
mDeadZone = new DeadZone(this);
- mNavColorSampleMargin =
- getResources()
+ mNavColorSampleMargin = getResources()
.getDimensionPixelSize(R.dimen.navigation_handle_sample_horizontal_margin);
-
- mEdgeBackGestureHandler = new EdgeBackGestureHandler(context, mOverviewProxyService);
+ mEdgeBackGestureHandler =
+ new EdgeBackGestureHandler(context, mOverviewProxyService, mSysUiFlagContainer);
mRegionSamplingHelper = new RegionSamplingHelper(this,
new RegionSamplingHelper.SamplingCallback() {
@Override
@@ -745,23 +747,26 @@
public void updateDisabledSystemUiStateFlags() {
int displayId = mContext.getDisplayId();
- mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_SCREEN_PINNING,
- ActivityManagerWrapper.getInstance().isScreenPinningActive(), displayId);
- mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_OVERVIEW_DISABLED,
- (mDisabledFlags & View.STATUS_BAR_DISABLE_RECENT) != 0, displayId);
- mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_HOME_DISABLED,
- (mDisabledFlags & View.STATUS_BAR_DISABLE_HOME) != 0, displayId);
- mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_SEARCH_DISABLED,
- (mDisabledFlags & View.STATUS_BAR_DISABLE_SEARCH) != 0, displayId);
+
+ mSysUiFlagContainer.setFlag(SYSUI_STATE_SCREEN_PINNING,
+ ActivityManagerWrapper.getInstance().isScreenPinningActive())
+ .setFlag(SYSUI_STATE_OVERVIEW_DISABLED,
+ (mDisabledFlags & View.STATUS_BAR_DISABLE_RECENT) != 0)
+ .setFlag(SYSUI_STATE_HOME_DISABLED,
+ (mDisabledFlags & View.STATUS_BAR_DISABLE_HOME) != 0)
+ .setFlag(SYSUI_STATE_SEARCH_DISABLED,
+ (mDisabledFlags & View.STATUS_BAR_DISABLE_SEARCH) != 0)
+ .commitUpdate(displayId);
}
public void updatePanelSystemUiStateFlags() {
int displayId = mContext.getDisplayId();
if (mPanelView != null) {
- mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED,
- mPanelView.isFullyExpanded() && !mPanelView.isInSettings(), displayId);
- mOverviewProxyService.setSystemUiStateFlag(SYSUI_STATE_QUICK_SETTINGS_EXPANDED,
- mPanelView.isInSettings(), displayId);
+ mSysUiFlagContainer.setFlag(SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED,
+ mPanelView.isFullyExpanded() && !mPanelView.isInSettings())
+ .setFlag(SYSUI_STATE_QUICK_SETTINGS_EXPANDED,
+ mPanelView.isInSettings())
+ .commitUpdate(displayId);
}
}