Loading packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl +3 −10 Original line number Diff line number Diff line Loading @@ -76,25 +76,18 @@ oneway interface IOverviewProxy { */ void onSplitScreenSecondaryBoundsChanged(in Rect bounds, in Rect insets) = 17; /** * Sent when IME status changes */ void onImeWindowStatusChanged(int displayId, IBinder token, int vis, int backDisposition, boolean showImeSwitcher) = 18; /** * Sent when suggested rotation button could be shown */ void onRotationProposal(int rotation, boolean isValid) = 19; void onRotationProposal(int rotation, boolean isValid) = 18; /** * Sent when disable flags change */ void disable(int displayId, int state1, int state2, boolean animate) = 20; void disable(int displayId, int state1, int state2, boolean animate) = 19; /** * Sent when behavior changes. See WindowInsetsController#@Behavior */ void onSystemBarAttributesChanged(int displayId, int behavior) = 21; void onSystemBarAttributesChanged(int displayId, int behavior) = 20; } packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java +34 −1 Original line number Diff line number Diff line Loading @@ -16,11 +16,14 @@ package com.android.systemui.shared.recents.utilities; import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT; import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SHOWN; import android.graphics.Color; import android.inputmethodservice.InputMethodService; import android.os.Handler; import android.os.Message; import android.view.Surface; import android.view.View; /* Common code */ public class Utilities { Loading Loading @@ -77,4 +80,34 @@ public class Utilities { public static float clamp(float value, float min, float max) { return Math.max(min, Math.min(max, value)); } /** * @return updated set of flags from InputMethodService based off {@param oldHints} * Leaves original hints unmodified */ public static int calculateBackDispositionHints(int oldHints, int backDisposition, boolean imeShown, boolean showImeSwitcher) { int hints = oldHints; switch (backDisposition) { case InputMethodService.BACK_DISPOSITION_DEFAULT: case InputMethodService.BACK_DISPOSITION_WILL_NOT_DISMISS: case InputMethodService.BACK_DISPOSITION_WILL_DISMISS: if (imeShown) { hints |= NAVIGATION_HINT_BACK_ALT; } else { hints &= ~NAVIGATION_HINT_BACK_ALT; } break; case InputMethodService.BACK_DISPOSITION_ADJUST_NOTHING: hints &= ~NAVIGATION_HINT_BACK_ALT; break; } if (showImeSwitcher) { hints |= NAVIGATION_HINT_IME_SHOWN; } else { hints &= ~NAVIGATION_HINT_IME_SHOWN; } return hints; } } packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java +5 −1 Original line number Diff line number Diff line Loading @@ -112,6 +112,8 @@ public class QuickStepContract { public static final int SYSUI_STATE_IME_SHOWING = 1 << 18; // The window magnification is overlapped with system gesture insets at the bottom. public static final int SYSUI_STATE_MAGNIFICATION_OVERLAP = 1 << 19; // ImeSwitcher is showing public static final int SYSUI_STATE_IME_SWITCHER_SHOWING = 1 << 20; @Retention(RetentionPolicy.SOURCE) @IntDef({SYSUI_STATE_SCREEN_PINNING, Loading @@ -133,7 +135,8 @@ public class QuickStepContract { SYSUI_STATE_ONE_HANDED_ACTIVE, SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY, SYSUI_STATE_IME_SHOWING, SYSUI_STATE_MAGNIFICATION_OVERLAP SYSUI_STATE_MAGNIFICATION_OVERLAP, SYSUI_STATE_IME_SWITCHER_SHOWING }) public @interface SystemUiStateFlags {} Loading Loading @@ -162,6 +165,7 @@ public class QuickStepContract { ? "allow_gesture" : ""); str.add((flags & SYSUI_STATE_IME_SHOWING) != 0 ? "ime_visible" : ""); str.add((flags & SYSUI_STATE_MAGNIFICATION_OVERLAP) != 0 ? "magnification_overlap" : ""); str.add((flags & SYSUI_STATE_IME_SWITCHER_SHOWING) != 0 ? "ime_switcher_showing" : ""); return str.toString(); } Loading packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java +5 −2 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ import com.android.systemui.doze.AlwaysOnDisplayPolicy; import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.KeyguardViewMediator; import com.android.systemui.model.SysUiState; import com.android.systemui.navigationbar.NavigationBarA11yHelper; import com.android.systemui.navigationbar.NavigationBarController; import com.android.systemui.navigationbar.NavigationBarOverlayController; import com.android.systemui.navigationbar.NavigationModeController; Loading Loading @@ -231,7 +232,8 @@ public class DependencyProvider { @Main Handler mainHandler, UiEventLogger uiEventLogger, NavigationBarOverlayController navBarOverlayController, ConfigurationController configurationController) { ConfigurationController configurationController, NavigationBarA11yHelper navigationBarA11yHelper) { return new NavigationBarController(context, windowManager, assistManagerLazy, Loading @@ -256,7 +258,8 @@ public class DependencyProvider { mainHandler, uiEventLogger, navBarOverlayController, configurationController); configurationController, navigationBarA11yHelper); } /** */ Loading packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +19 −87 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SWITCHER_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT; Loading @@ -54,9 +55,7 @@ import static com.android.systemui.statusbar.phone.BarTransitions.TransitionMode import static com.android.systemui.statusbar.phone.StatusBar.DEBUG_WINDOW_STATE; import static com.android.systemui.statusbar.phone.StatusBar.dumpBarTransitions; import android.accessibilityservice.AccessibilityServiceInfo; import android.annotation.IdRes; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityTaskManager; import android.app.IActivityTaskManager; Loading Loading @@ -101,7 +100,6 @@ import android.view.WindowInsetsController.Behavior; import android.view.WindowManager; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener; import android.view.inputmethod.InputMethodManager; import androidx.annotation.VisibleForTesting; Loading Loading @@ -129,6 +127,7 @@ import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.recents.Recents; import com.android.systemui.shared.recents.utilities.Utilities; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.statusbar.AutoHideUiElement; Loading @@ -149,7 +148,6 @@ import com.android.wm.shell.legacysplitscreen.LegacySplitScreen; import com.android.wm.shell.pip.Pip; import java.io.PrintWriter; import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.function.Consumer; Loading @@ -160,8 +158,7 @@ import dagger.Lazy; * Contains logic for a navigation bar view. */ public class NavigationBar implements View.OnAttachStateChangeListener, Callbacks, NavigationModeController.ModeChangedListener, AccessibilityButtonModeObserver.ModeChangedListener { Callbacks, NavigationModeController.ModeChangedListener { public static final String TAG = "NavigationBar"; private static final boolean DEBUG = false; Loading @@ -178,7 +175,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener, private final Context mContext; private final WindowManager mWindowManager; private final AccessibilityManager mAccessibilityManager; private final AccessibilityManagerWrapper mAccessibilityManagerWrapper; private final DeviceProvisionedController mDeviceProvisionedController; private final StatusBarStateController mStatusBarStateController; private final MetricsLogger mMetricsLogger; Loading @@ -199,6 +195,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, private final Handler mHandler; private final NavigationBarOverlayController mNavbarOverlayController; private final UiEventLogger mUiEventLogger; private final NavigationBarA11yHelper mNavigationBarA11yHelper; private Bundle mSavedState; private NavigationBarView mNavigationBarView; Loading Loading @@ -232,7 +229,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener, private boolean mTransientShown; private int mNavBarMode = NAV_BAR_MODE_3BUTTON; private int mA11yBtnMode; private LightBarController mLightBarController; private AutoHideController mAutoHideController; Loading Loading @@ -459,11 +455,11 @@ public class NavigationBar implements View.OnAttachStateChangeListener, SystemActions systemActions, @Main Handler mainHandler, NavigationBarOverlayController navbarOverlayController, UiEventLogger uiEventLogger) { UiEventLogger uiEventLogger, NavigationBarA11yHelper navigationBarA11yHelper) { mContext = context; mWindowManager = windowManager; mAccessibilityManager = accessibilityManager; mAccessibilityManagerWrapper = accessibilityManagerWrapper; mDeviceProvisionedController = deviceProvisionedController; mStatusBarStateController = statusBarStateController; mMetricsLogger = metricsLogger; Loading @@ -484,10 +480,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mHandler = mainHandler; mNavbarOverlayController = navbarOverlayController; mUiEventLogger = uiEventLogger; mNavigationBarA11yHelper = navigationBarA11yHelper; mNavBarMode = mNavigationModeController.addListener(this); mAccessibilityButtonModeObserver.addListener(this); mA11yBtnMode = mAccessibilityButtonModeObserver.getCurrentAccessibilityButtonMode(); } public NavigationBarView getView() { Loading Loading @@ -578,9 +572,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mContext.getSystemService(WindowManager.class).removeViewImmediate( mNavigationBarView.getRootView()); mNavigationModeController.removeListener(this); mAccessibilityButtonModeObserver.removeListener(this); mAccessibilityManagerWrapper.removeCallback(mAccessibilityListener); mNavigationBarA11yHelper.removeA11yEventListener(mAccessibilityListener); mContentResolver.unregisterContentObserver(mAssistContentObserver); mDeviceProvisionedController.removeCallback(mUserSetupListener); Loading @@ -601,7 +594,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mNavigationBarView.setWindowVisible(isNavBarWindowVisible()); mNavigationBarView.setBehavior(mBehavior); mAccessibilityManagerWrapper.addCallback(mAccessibilityListener); mNavigationBarA11yHelper.registerA11yEventListener(mAccessibilityListener); mSplitScreenOptional.ifPresent(mNavigationBarView::registerDockedListener); mPipOptional.ifPresent(mNavigationBarView::registerPipExclusionBoundsChangeListener); Loading Loading @@ -861,26 +854,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener, return; } boolean imeShown = (vis & InputMethodService.IME_VISIBLE) != 0; int hints = mNavigationIconHints; switch (backDisposition) { case InputMethodService.BACK_DISPOSITION_DEFAULT: case InputMethodService.BACK_DISPOSITION_WILL_NOT_DISMISS: case InputMethodService.BACK_DISPOSITION_WILL_DISMISS: if (imeShown) { hints |= NAVIGATION_HINT_BACK_ALT; } else { hints &= ~NAVIGATION_HINT_BACK_ALT; } break; case InputMethodService.BACK_DISPOSITION_ADJUST_NOTHING: hints &= ~NAVIGATION_HINT_BACK_ALT; break; } if (showImeSwitcher) { hints |= NAVIGATION_HINT_IME_SHOWN; } else { hints &= ~NAVIGATION_HINT_IME_SHOWN; } int hints = Utilities.calculateBackDispositionHints(mNavigationIconHints, backDisposition, imeShown, showImeSwitcher); if (hints == mNavigationIconHints) return; mNavigationIconHints = hints; Loading Loading @@ -1140,7 +1115,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, ButtonDispatcher accessibilityButton = mNavigationBarView.getAccessibilityButton(); accessibilityButton.setOnClickListener(this::onAccessibilityClick); accessibilityButton.setOnLongClickListener(this::onAccessibilityLongClick); updateAccessibilityServicesState(mAccessibilityManager); updateAccessibilityServicesState(); ButtonDispatcher imeSwitcherButton = mNavigationBarView.getImeSwitchButton(); imeSwitcherButton.setOnClickListener(this::onImeSwitcherClick); Loading Loading @@ -1361,9 +1336,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener, return true; } void updateAccessibilityServicesState(AccessibilityManager accessibilityManager) { boolean[] feedbackEnabled = new boolean[1]; int a11yFlags = getA11yButtonState(feedbackEnabled); void updateAccessibilityServicesState() { int a11yFlags = mNavigationBarA11yHelper.getA11yButtonState(); boolean clickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_CLICKABLE) != 0; boolean longClickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE) != 0; Loading @@ -1381,7 +1355,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, public void updateSystemUiStateFlags(int a11yFlags) { if (a11yFlags < 0) { a11yFlags = getA11yButtonState(null); a11yFlags = mNavigationBarA11yHelper.getA11yButtonState(); } boolean clickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_CLICKABLE) != 0; boolean longClickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE) != 0; Loading @@ -1391,6 +1365,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener, .setFlag(SYSUI_STATE_NAV_BAR_HIDDEN, !isNavBarWindowVisible()) .setFlag(SYSUI_STATE_IME_SHOWING, (mNavigationIconHints & NAVIGATION_HINT_BACK_ALT) != 0) .setFlag(SYSUI_STATE_IME_SWITCHER_SHOWING, (mNavigationIconHints & NAVIGATION_HINT_IME_SHOWN) != 0) .setFlag(SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY, allowSystemGestureIgnoringBarVisibility()) .commitUpdate(mDisplayId); Loading @@ -1406,44 +1382,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener, } } /** * Returns the system UI flags corresponding the the current accessibility button state * * @param outFeedbackEnabled if non-null, sets it to true if accessibility feedback is enabled. */ public int getA11yButtonState(@Nullable boolean[] outFeedbackEnabled) { boolean feedbackEnabled = false; // AccessibilityManagerService resolves services for the current user since the local // AccessibilityManager is created from a Context with the INTERACT_ACROSS_USERS permission final List<AccessibilityServiceInfo> services = mAccessibilityManager.getEnabledAccessibilityServiceList( AccessibilityServiceInfo.FEEDBACK_ALL_MASK); final List<String> a11yButtonTargets = mAccessibilityManager.getAccessibilityShortcutTargets( AccessibilityManager.ACCESSIBILITY_BUTTON); final int requestingServices = a11yButtonTargets.size(); for (int i = services.size() - 1; i >= 0; --i) { AccessibilityServiceInfo info = services.get(i); if (info.feedbackType != 0 && info.feedbackType != AccessibilityServiceInfo.FEEDBACK_GENERIC) { feedbackEnabled = true; } } if (outFeedbackEnabled != null) { outFeedbackEnabled[0] = feedbackEnabled; } // If accessibility button is floating menu mode, click and long click state should be // disabled. if (mA11yBtnMode == ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU) { return 0; } return (requestingServices >= 1 ? SYSUI_STATE_A11Y_BUTTON_CLICKABLE : 0) | (requestingServices >= 2 ? SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE : 0); } private void updateAssistantEntrypoints() { mAssistantAvailable = mAssistManagerLazy.get() .getAssistInfoForUser(UserHandle.USER_CURRENT) != null; Loading Loading @@ -1543,12 +1481,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener, } } @Override public void onAccessibilityButtonModeChanged(int mode) { mA11yBtnMode = mode; updateAccessibilityServicesState(mAccessibilityManager); } public void disableAnimationsDuringHide(long delay) { mNavigationBarView.setLayoutTransitionsEnabled(false); mHandler.postDelayed(mEnableLayoutTransitions, Loading @@ -1573,7 +1505,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mNavigationBarView.getBarTransitions().finishAnimations(); } private final AccessibilityServicesStateChangeListener mAccessibilityListener = private final NavigationBarA11yHelper.NavA11yEventListener mAccessibilityListener = this::updateAccessibilityServicesState; private boolean canShowSecondaryHandle() { Loading Loading @@ -1604,7 +1536,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, } if (Intent.ACTION_USER_SWITCHED.equals(action)) { // The accessibility settings may be different for the new user updateAccessibilityServicesState(mAccessibilityManager); updateAccessibilityServicesState(); } } }; Loading Loading
packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl +3 −10 Original line number Diff line number Diff line Loading @@ -76,25 +76,18 @@ oneway interface IOverviewProxy { */ void onSplitScreenSecondaryBoundsChanged(in Rect bounds, in Rect insets) = 17; /** * Sent when IME status changes */ void onImeWindowStatusChanged(int displayId, IBinder token, int vis, int backDisposition, boolean showImeSwitcher) = 18; /** * Sent when suggested rotation button could be shown */ void onRotationProposal(int rotation, boolean isValid) = 19; void onRotationProposal(int rotation, boolean isValid) = 18; /** * Sent when disable flags change */ void disable(int displayId, int state1, int state2, boolean animate) = 20; void disable(int displayId, int state1, int state2, boolean animate) = 19; /** * Sent when behavior changes. See WindowInsetsController#@Behavior */ void onSystemBarAttributesChanged(int displayId, int behavior) = 21; void onSystemBarAttributesChanged(int displayId, int behavior) = 20; }
packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java +34 −1 Original line number Diff line number Diff line Loading @@ -16,11 +16,14 @@ package com.android.systemui.shared.recents.utilities; import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT; import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SHOWN; import android.graphics.Color; import android.inputmethodservice.InputMethodService; import android.os.Handler; import android.os.Message; import android.view.Surface; import android.view.View; /* Common code */ public class Utilities { Loading Loading @@ -77,4 +80,34 @@ public class Utilities { public static float clamp(float value, float min, float max) { return Math.max(min, Math.min(max, value)); } /** * @return updated set of flags from InputMethodService based off {@param oldHints} * Leaves original hints unmodified */ public static int calculateBackDispositionHints(int oldHints, int backDisposition, boolean imeShown, boolean showImeSwitcher) { int hints = oldHints; switch (backDisposition) { case InputMethodService.BACK_DISPOSITION_DEFAULT: case InputMethodService.BACK_DISPOSITION_WILL_NOT_DISMISS: case InputMethodService.BACK_DISPOSITION_WILL_DISMISS: if (imeShown) { hints |= NAVIGATION_HINT_BACK_ALT; } else { hints &= ~NAVIGATION_HINT_BACK_ALT; } break; case InputMethodService.BACK_DISPOSITION_ADJUST_NOTHING: hints &= ~NAVIGATION_HINT_BACK_ALT; break; } if (showImeSwitcher) { hints |= NAVIGATION_HINT_IME_SHOWN; } else { hints &= ~NAVIGATION_HINT_IME_SHOWN; } return hints; } }
packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java +5 −1 Original line number Diff line number Diff line Loading @@ -112,6 +112,8 @@ public class QuickStepContract { public static final int SYSUI_STATE_IME_SHOWING = 1 << 18; // The window magnification is overlapped with system gesture insets at the bottom. public static final int SYSUI_STATE_MAGNIFICATION_OVERLAP = 1 << 19; // ImeSwitcher is showing public static final int SYSUI_STATE_IME_SWITCHER_SHOWING = 1 << 20; @Retention(RetentionPolicy.SOURCE) @IntDef({SYSUI_STATE_SCREEN_PINNING, Loading @@ -133,7 +135,8 @@ public class QuickStepContract { SYSUI_STATE_ONE_HANDED_ACTIVE, SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY, SYSUI_STATE_IME_SHOWING, SYSUI_STATE_MAGNIFICATION_OVERLAP SYSUI_STATE_MAGNIFICATION_OVERLAP, SYSUI_STATE_IME_SWITCHER_SHOWING }) public @interface SystemUiStateFlags {} Loading Loading @@ -162,6 +165,7 @@ public class QuickStepContract { ? "allow_gesture" : ""); str.add((flags & SYSUI_STATE_IME_SHOWING) != 0 ? "ime_visible" : ""); str.add((flags & SYSUI_STATE_MAGNIFICATION_OVERLAP) != 0 ? "magnification_overlap" : ""); str.add((flags & SYSUI_STATE_IME_SWITCHER_SHOWING) != 0 ? "ime_switcher_showing" : ""); return str.toString(); } Loading
packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java +5 −2 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ import com.android.systemui.doze.AlwaysOnDisplayPolicy; import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.KeyguardViewMediator; import com.android.systemui.model.SysUiState; import com.android.systemui.navigationbar.NavigationBarA11yHelper; import com.android.systemui.navigationbar.NavigationBarController; import com.android.systemui.navigationbar.NavigationBarOverlayController; import com.android.systemui.navigationbar.NavigationModeController; Loading Loading @@ -231,7 +232,8 @@ public class DependencyProvider { @Main Handler mainHandler, UiEventLogger uiEventLogger, NavigationBarOverlayController navBarOverlayController, ConfigurationController configurationController) { ConfigurationController configurationController, NavigationBarA11yHelper navigationBarA11yHelper) { return new NavigationBarController(context, windowManager, assistManagerLazy, Loading @@ -256,7 +258,8 @@ public class DependencyProvider { mainHandler, uiEventLogger, navBarOverlayController, configurationController); configurationController, navigationBarA11yHelper); } /** */ Loading
packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +19 −87 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SWITCHER_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT; Loading @@ -54,9 +55,7 @@ import static com.android.systemui.statusbar.phone.BarTransitions.TransitionMode import static com.android.systemui.statusbar.phone.StatusBar.DEBUG_WINDOW_STATE; import static com.android.systemui.statusbar.phone.StatusBar.dumpBarTransitions; import android.accessibilityservice.AccessibilityServiceInfo; import android.annotation.IdRes; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityTaskManager; import android.app.IActivityTaskManager; Loading Loading @@ -101,7 +100,6 @@ import android.view.WindowInsetsController.Behavior; import android.view.WindowManager; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener; import android.view.inputmethod.InputMethodManager; import androidx.annotation.VisibleForTesting; Loading Loading @@ -129,6 +127,7 @@ import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.recents.Recents; import com.android.systemui.shared.recents.utilities.Utilities; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.statusbar.AutoHideUiElement; Loading @@ -149,7 +148,6 @@ import com.android.wm.shell.legacysplitscreen.LegacySplitScreen; import com.android.wm.shell.pip.Pip; import java.io.PrintWriter; import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.function.Consumer; Loading @@ -160,8 +158,7 @@ import dagger.Lazy; * Contains logic for a navigation bar view. */ public class NavigationBar implements View.OnAttachStateChangeListener, Callbacks, NavigationModeController.ModeChangedListener, AccessibilityButtonModeObserver.ModeChangedListener { Callbacks, NavigationModeController.ModeChangedListener { public static final String TAG = "NavigationBar"; private static final boolean DEBUG = false; Loading @@ -178,7 +175,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener, private final Context mContext; private final WindowManager mWindowManager; private final AccessibilityManager mAccessibilityManager; private final AccessibilityManagerWrapper mAccessibilityManagerWrapper; private final DeviceProvisionedController mDeviceProvisionedController; private final StatusBarStateController mStatusBarStateController; private final MetricsLogger mMetricsLogger; Loading @@ -199,6 +195,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, private final Handler mHandler; private final NavigationBarOverlayController mNavbarOverlayController; private final UiEventLogger mUiEventLogger; private final NavigationBarA11yHelper mNavigationBarA11yHelper; private Bundle mSavedState; private NavigationBarView mNavigationBarView; Loading Loading @@ -232,7 +229,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener, private boolean mTransientShown; private int mNavBarMode = NAV_BAR_MODE_3BUTTON; private int mA11yBtnMode; private LightBarController mLightBarController; private AutoHideController mAutoHideController; Loading Loading @@ -459,11 +455,11 @@ public class NavigationBar implements View.OnAttachStateChangeListener, SystemActions systemActions, @Main Handler mainHandler, NavigationBarOverlayController navbarOverlayController, UiEventLogger uiEventLogger) { UiEventLogger uiEventLogger, NavigationBarA11yHelper navigationBarA11yHelper) { mContext = context; mWindowManager = windowManager; mAccessibilityManager = accessibilityManager; mAccessibilityManagerWrapper = accessibilityManagerWrapper; mDeviceProvisionedController = deviceProvisionedController; mStatusBarStateController = statusBarStateController; mMetricsLogger = metricsLogger; Loading @@ -484,10 +480,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mHandler = mainHandler; mNavbarOverlayController = navbarOverlayController; mUiEventLogger = uiEventLogger; mNavigationBarA11yHelper = navigationBarA11yHelper; mNavBarMode = mNavigationModeController.addListener(this); mAccessibilityButtonModeObserver.addListener(this); mA11yBtnMode = mAccessibilityButtonModeObserver.getCurrentAccessibilityButtonMode(); } public NavigationBarView getView() { Loading Loading @@ -578,9 +572,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mContext.getSystemService(WindowManager.class).removeViewImmediate( mNavigationBarView.getRootView()); mNavigationModeController.removeListener(this); mAccessibilityButtonModeObserver.removeListener(this); mAccessibilityManagerWrapper.removeCallback(mAccessibilityListener); mNavigationBarA11yHelper.removeA11yEventListener(mAccessibilityListener); mContentResolver.unregisterContentObserver(mAssistContentObserver); mDeviceProvisionedController.removeCallback(mUserSetupListener); Loading @@ -601,7 +594,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mNavigationBarView.setWindowVisible(isNavBarWindowVisible()); mNavigationBarView.setBehavior(mBehavior); mAccessibilityManagerWrapper.addCallback(mAccessibilityListener); mNavigationBarA11yHelper.registerA11yEventListener(mAccessibilityListener); mSplitScreenOptional.ifPresent(mNavigationBarView::registerDockedListener); mPipOptional.ifPresent(mNavigationBarView::registerPipExclusionBoundsChangeListener); Loading Loading @@ -861,26 +854,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener, return; } boolean imeShown = (vis & InputMethodService.IME_VISIBLE) != 0; int hints = mNavigationIconHints; switch (backDisposition) { case InputMethodService.BACK_DISPOSITION_DEFAULT: case InputMethodService.BACK_DISPOSITION_WILL_NOT_DISMISS: case InputMethodService.BACK_DISPOSITION_WILL_DISMISS: if (imeShown) { hints |= NAVIGATION_HINT_BACK_ALT; } else { hints &= ~NAVIGATION_HINT_BACK_ALT; } break; case InputMethodService.BACK_DISPOSITION_ADJUST_NOTHING: hints &= ~NAVIGATION_HINT_BACK_ALT; break; } if (showImeSwitcher) { hints |= NAVIGATION_HINT_IME_SHOWN; } else { hints &= ~NAVIGATION_HINT_IME_SHOWN; } int hints = Utilities.calculateBackDispositionHints(mNavigationIconHints, backDisposition, imeShown, showImeSwitcher); if (hints == mNavigationIconHints) return; mNavigationIconHints = hints; Loading Loading @@ -1140,7 +1115,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, ButtonDispatcher accessibilityButton = mNavigationBarView.getAccessibilityButton(); accessibilityButton.setOnClickListener(this::onAccessibilityClick); accessibilityButton.setOnLongClickListener(this::onAccessibilityLongClick); updateAccessibilityServicesState(mAccessibilityManager); updateAccessibilityServicesState(); ButtonDispatcher imeSwitcherButton = mNavigationBarView.getImeSwitchButton(); imeSwitcherButton.setOnClickListener(this::onImeSwitcherClick); Loading Loading @@ -1361,9 +1336,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener, return true; } void updateAccessibilityServicesState(AccessibilityManager accessibilityManager) { boolean[] feedbackEnabled = new boolean[1]; int a11yFlags = getA11yButtonState(feedbackEnabled); void updateAccessibilityServicesState() { int a11yFlags = mNavigationBarA11yHelper.getA11yButtonState(); boolean clickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_CLICKABLE) != 0; boolean longClickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE) != 0; Loading @@ -1381,7 +1355,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, public void updateSystemUiStateFlags(int a11yFlags) { if (a11yFlags < 0) { a11yFlags = getA11yButtonState(null); a11yFlags = mNavigationBarA11yHelper.getA11yButtonState(); } boolean clickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_CLICKABLE) != 0; boolean longClickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE) != 0; Loading @@ -1391,6 +1365,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener, .setFlag(SYSUI_STATE_NAV_BAR_HIDDEN, !isNavBarWindowVisible()) .setFlag(SYSUI_STATE_IME_SHOWING, (mNavigationIconHints & NAVIGATION_HINT_BACK_ALT) != 0) .setFlag(SYSUI_STATE_IME_SWITCHER_SHOWING, (mNavigationIconHints & NAVIGATION_HINT_IME_SHOWN) != 0) .setFlag(SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY, allowSystemGestureIgnoringBarVisibility()) .commitUpdate(mDisplayId); Loading @@ -1406,44 +1382,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener, } } /** * Returns the system UI flags corresponding the the current accessibility button state * * @param outFeedbackEnabled if non-null, sets it to true if accessibility feedback is enabled. */ public int getA11yButtonState(@Nullable boolean[] outFeedbackEnabled) { boolean feedbackEnabled = false; // AccessibilityManagerService resolves services for the current user since the local // AccessibilityManager is created from a Context with the INTERACT_ACROSS_USERS permission final List<AccessibilityServiceInfo> services = mAccessibilityManager.getEnabledAccessibilityServiceList( AccessibilityServiceInfo.FEEDBACK_ALL_MASK); final List<String> a11yButtonTargets = mAccessibilityManager.getAccessibilityShortcutTargets( AccessibilityManager.ACCESSIBILITY_BUTTON); final int requestingServices = a11yButtonTargets.size(); for (int i = services.size() - 1; i >= 0; --i) { AccessibilityServiceInfo info = services.get(i); if (info.feedbackType != 0 && info.feedbackType != AccessibilityServiceInfo.FEEDBACK_GENERIC) { feedbackEnabled = true; } } if (outFeedbackEnabled != null) { outFeedbackEnabled[0] = feedbackEnabled; } // If accessibility button is floating menu mode, click and long click state should be // disabled. if (mA11yBtnMode == ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU) { return 0; } return (requestingServices >= 1 ? SYSUI_STATE_A11Y_BUTTON_CLICKABLE : 0) | (requestingServices >= 2 ? SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE : 0); } private void updateAssistantEntrypoints() { mAssistantAvailable = mAssistManagerLazy.get() .getAssistInfoForUser(UserHandle.USER_CURRENT) != null; Loading Loading @@ -1543,12 +1481,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener, } } @Override public void onAccessibilityButtonModeChanged(int mode) { mA11yBtnMode = mode; updateAccessibilityServicesState(mAccessibilityManager); } public void disableAnimationsDuringHide(long delay) { mNavigationBarView.setLayoutTransitionsEnabled(false); mHandler.postDelayed(mEnableLayoutTransitions, Loading @@ -1573,7 +1505,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mNavigationBarView.getBarTransitions().finishAnimations(); } private final AccessibilityServicesStateChangeListener mAccessibilityListener = private final NavigationBarA11yHelper.NavA11yEventListener mAccessibilityListener = this::updateAccessibilityServicesState; private boolean canShowSecondaryHandle() { Loading Loading @@ -1604,7 +1536,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, } if (Intent.ACTION_USER_SWITCHED.equals(action)) { // The accessibility settings may be different for the new user updateAccessibilityServicesState(mAccessibilityManager); updateAccessibilityServicesState(); } } }; Loading