diff options
14 files changed, 123 insertions, 78 deletions
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index de3984756416..ff737a4f9fb8 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -58,8 +58,6 @@ import static android.view.inputmethod.Flags.FLAG_CONNECTIONLESS_HANDWRITING; import static android.view.inputmethod.Flags.ctrlShiftShortcut; import static android.view.inputmethod.Flags.predictiveBackIme; -import static java.lang.annotation.RetentionPolicy.SOURCE; - import android.annotation.AnyThread; import android.annotation.CallSuper; import android.annotation.DrawableRes; @@ -500,36 +498,53 @@ public class InputMethodService extends AbstractInputMethodService { public static final int BACK_DISPOSITION_ADJUST_NOTHING = 3; /** - * Enum flag to be used for {@link #setBackDisposition(int)}. + * The disposition mode that indicates the expected affordance for the back button. * * @hide */ - @Retention(SOURCE) - @IntDef(value = {BACK_DISPOSITION_DEFAULT, BACK_DISPOSITION_WILL_NOT_DISMISS, - BACK_DISPOSITION_WILL_DISMISS, BACK_DISPOSITION_ADJUST_NOTHING}, - prefix = "BACK_DISPOSITION_") + @IntDef(prefix = { "BACK_DISPOSITION_" }, value = { + BACK_DISPOSITION_DEFAULT, + BACK_DISPOSITION_WILL_NOT_DISMISS, + BACK_DISPOSITION_WILL_DISMISS, + BACK_DISPOSITION_ADJUST_NOTHING, + }) + @Retention(RetentionPolicy.SOURCE) public @interface BackDispositionMode {} /** + * The IME is active, and ready to accept touch/key events. It may or may not be visible. + * * @hide - * The IME is active. It may or may not be visible. */ - public static final int IME_ACTIVE = 0x1; + public static final int IME_ACTIVE = 1 << 0; /** - * @hide * The IME is perceptibly visible to the user. + * + * @hide */ - public static final int IME_VISIBLE = 0x2; + public static final int IME_VISIBLE = 1 << 1; /** - * @hide * The IME is visible, but not yet perceptible to the user (e.g. fading in) * by {@link android.view.WindowInsetsController}. * * @see InputMethodManager#reportPerceptible + * @hide + */ + public static final int IME_VISIBLE_IMPERCEPTIBLE = 1 << 2; + + /** + * The IME window visibility state. + * + * @hide */ - public static final int IME_VISIBLE_IMPERCEPTIBLE = 0x4; + @IntDef(flag = true, prefix = { "IME_" }, value = { + IME_ACTIVE, + IME_VISIBLE, + IME_VISIBLE_IMPERCEPTIBLE, + }) + public @interface ImeWindowVisibility {} // Min and max values for back disposition. private static final int BACK_DISPOSITION_MIN = BACK_DISPOSITION_DEFAULT; @@ -1342,7 +1357,8 @@ public class InputMethodService extends AbstractInputMethodService { mImeSurfaceRemoverRunnable = null; } - private void setImeWindowStatus(int visibilityFlags, int backDisposition) { + private void setImeWindowStatus(@ImeWindowVisibility int visibilityFlags, + @BackDispositionMode int backDisposition) { mPrivOps.setImeWindowStatusAsync(visibilityFlags, backDisposition); } @@ -3301,7 +3317,7 @@ public class InputMethodService extends AbstractInputMethodService { ImeTracker.forLogging().onProgress(statsToken, ImeTracker.PHASE_IME_HIDE_WINDOW); ImeTracing.getInstance().triggerServiceDump("InputMethodService#hideWindow", mDumper, null /* icProto */); - setImeWindowStatus(0, mBackDisposition); + setImeWindowStatus(0 /* visibilityFlags */, mBackDisposition); if (android.view.inputmethod.Flags.refactorInsetsController()) { // The ImeInsetsSourceProvider need the statsToken when dispatching the control. We // send the token here, so that another request in the provider can be cancelled. @@ -4476,6 +4492,7 @@ public class InputMethodService extends AbstractInputMethodService { }; } + @ImeWindowVisibility private int mapToImeWindowStatus() { return IME_ACTIVE | (isInputViewShown() ? IME_VISIBLE : 0); diff --git a/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java b/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java index 921363c3e5af..b009c99dc9e3 100644 --- a/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java +++ b/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java @@ -20,6 +20,8 @@ import android.annotation.AnyThread; import android.annotation.DrawableRes; import android.annotation.NonNull; import android.annotation.Nullable; +import android.inputmethodservice.InputMethodService.BackDispositionMode; +import android.inputmethodservice.InputMethodService.ImeWindowVisibility; import android.net.Uri; import android.os.IBinder; import android.os.RemoteException; @@ -106,13 +108,10 @@ public final class InputMethodPrivilegedOperations { * * @param vis visibility flags * @param backDisposition disposition flags - * @see android.inputmethodservice.InputMethodService#IME_ACTIVE - * @see android.inputmethodservice.InputMethodService#IME_VISIBLE - * @see android.inputmethodservice.InputMethodService#BACK_DISPOSITION_DEFAULT - * @see android.inputmethodservice.InputMethodService#BACK_DISPOSITION_ADJUST_NOTHING */ @AnyThread - public void setImeWindowStatusAsync(int vis, int backDisposition) { + public void setImeWindowStatusAsync(@ImeWindowVisibility int vis, + @BackDispositionMode int backDisposition) { final IInputMethodPrivilegedOperations ops = mOps.getAndWarnIfNull(); if (ops == null) { return; diff --git a/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java b/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java index 7240aff022d4..3adc6b20ecb1 100644 --- a/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java +++ b/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java @@ -16,6 +16,8 @@ package com.android.internal.statusbar; +import android.inputmethodservice.InputMethodService.BackDispositionMode; +import android.inputmethodservice.InputMethodService.ImeWindowVisibility; import android.os.Parcel; import android.os.Parcelable; import android.util.ArrayMap; @@ -30,7 +32,9 @@ public final class RegisterStatusBarResult implements Parcelable { public final int mDisabledFlags1; // switch[0] public final int mAppearance; // switch[1] public final AppearanceRegion[] mAppearanceRegions; // switch[2] + @ImeWindowVisibility public final int mImeWindowVis; // switch[3] + @BackDispositionMode public final int mImeBackDisposition; // switch[4] public final boolean mShowImeSwitcher; // switch[5] public final int mDisabledFlags2; // switch[6] @@ -42,10 +46,11 @@ public final class RegisterStatusBarResult implements Parcelable { public final LetterboxDetails[] mLetterboxDetails; public RegisterStatusBarResult(ArrayMap<String, StatusBarIcon> icons, int disabledFlags1, - int appearance, AppearanceRegion[] appearanceRegions, int imeWindowVis, - int imeBackDisposition, boolean showImeSwitcher, int disabledFlags2, - boolean navbarColorManagedByIme, int behavior, int requestedVisibleTypes, - String packageName, int transientBarTypes, LetterboxDetails[] letterboxDetails) { + int appearance, AppearanceRegion[] appearanceRegions, + @ImeWindowVisibility int imeWindowVis, @BackDispositionMode int imeBackDisposition, + boolean showImeSwitcher, int disabledFlags2, boolean navbarColorManagedByIme, + int behavior, int requestedVisibleTypes, String packageName, int transientBarTypes, + LetterboxDetails[] letterboxDetails) { mIcons = new ArrayMap<>(icons); mDisabledFlags1 = disabledFlags1; mAppearance = appearance; diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java index 68d2eb358105..41ad4373455e 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java @@ -26,6 +26,7 @@ import android.content.res.Resources; import android.graphics.Color; import android.graphics.Rect; import android.inputmethodservice.InputMethodService; +import android.inputmethodservice.InputMethodService.BackDispositionMode; import android.os.Build; import android.os.Handler; import android.os.Message; @@ -105,8 +106,8 @@ public class Utilities { * @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) { + public static int calculateBackDispositionHints(int oldHints, + @BackDispositionMode int backDisposition, boolean imeShown, boolean showImeSwitcher) { int hints = oldHints; switch (backDisposition) { case InputMethodService.BACK_DISPOSITION_DEFAULT: diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java index 13a786a623dd..ac878c2d698d 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java @@ -38,6 +38,7 @@ import android.content.Context; import android.content.res.Configuration; import android.database.ContentObserver; import android.inputmethodservice.InputMethodService; +import android.inputmethodservice.InputMethodService.ImeWindowVisibility; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -516,7 +517,7 @@ public final class NavBarHelper implements * @return Whether the IME is shown on top of the screen given the {@code vis} flag of * {@link InputMethodService} and the keyguard states. */ - public boolean isImeShown(int vis) { + public boolean isImeShown(@ImeWindowVisibility int vis) { View shadeWindowView = mNotificationShadeWindowController.getWindowRootView(); boolean isKeyguardShowing = mKeyguardStateController.isShowing(); boolean imeVisibleOnShade = shadeWindowView != null && shadeWindowView.isAttachedToWindow() diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java index 15b1e4de878a..cb0bb4abb423 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java @@ -42,6 +42,8 @@ import android.content.Context; import android.graphics.Rect; import android.hardware.display.DisplayManager; import android.inputmethodservice.InputMethodService; +import android.inputmethodservice.InputMethodService.BackDispositionMode; +import android.inputmethodservice.InputMethodService.ImeWindowVisibility; import android.os.RemoteException; import android.os.Trace; import android.util.Log; @@ -424,8 +426,8 @@ public class TaskbarDelegate implements CommandQueue.Callbacks, } @Override - public void setImeWindowStatus(int displayId, int vis, int backDisposition, - boolean showImeSwitcher) { + public void setImeWindowStatus(int displayId, @ImeWindowVisibility int vis, + @BackDispositionMode int backDisposition, boolean showImeSwitcher) { boolean imeShown = mNavBarHelper.isImeShown(vis); if (!imeShown) { // Count imperceptible changes as visible so we transition taskbar out quickly. diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java index e895d83758f7..c706c3e97c96 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java @@ -68,6 +68,8 @@ import android.graphics.Point; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Region; +import android.inputmethodservice.InputMethodService.BackDispositionMode; +import android.inputmethodservice.InputMethodService.ImeWindowVisibility; import android.os.Binder; import android.os.Bundle; import android.os.Handler; @@ -1098,8 +1100,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements // ----- CommandQueue Callbacks ----- @Override - public void setImeWindowStatus(int displayId, int vis, int backDisposition, - boolean showImeSwitcher) { + public void setImeWindowStatus(int displayId, @ImeWindowVisibility int vis, + @BackDispositionMode int backDisposition, boolean showImeSwitcher) { if (displayId != mDisplayId) { return; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java index 50be6dcaa678..a1477b57a22a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java @@ -37,6 +37,7 @@ import android.hardware.biometrics.IBiometricSysuiReceiver; import android.hardware.biometrics.PromptInfo; import android.hardware.fingerprint.IUdfpsRefreshRateRequestCallback; import android.inputmethodservice.InputMethodService.BackDispositionMode; +import android.inputmethodservice.InputMethodService.ImeWindowVisibility; import android.media.INearbyMediaDevicesProvider; import android.media.MediaRoute2Info; import android.os.Binder; @@ -257,10 +258,10 @@ public class CommandQueue extends IStatusBar.Stub implements * * @param displayId The id of the display to notify. * @param vis IME visibility. - * @param backDisposition Disposition mode of back button. It should be one of below flags: + * @param backDisposition Disposition mode of back button. * @param showImeSwitcher {@code true} to show IME switch button. */ - default void setImeWindowStatus(int displayId, int vis, + default void setImeWindowStatus(int displayId, @ImeWindowVisibility int vis, @BackDispositionMode int backDisposition, boolean showImeSwitcher) { } default void showRecentApps(boolean triggeredFromAltTab) { } default void hideRecentApps(boolean triggeredFromAltTab, boolean triggeredFromHomeKey) { } @@ -743,8 +744,8 @@ public class CommandQueue extends IStatusBar.Stub implements } @Override - public void setImeWindowStatus(int displayId, int vis, int backDisposition, - boolean showImeSwitcher) { + public void setImeWindowStatus(int displayId, @ImeWindowVisibility int vis, + @BackDispositionMode int backDisposition, boolean showImeSwitcher) { synchronized (mLock) { mHandler.removeMessages(MSG_SHOW_IME_BUTTON); SomeArgs args = SomeArgs.obtain(); @@ -1205,8 +1206,8 @@ public class CommandQueue extends IStatusBar.Stub implements } } - private void handleShowImeButton(int displayId, int vis, int backDisposition, - boolean showImeSwitcher) { + private void handleShowImeButton(int displayId, @ImeWindowVisibility int vis, + @BackDispositionMode int backDisposition, boolean showImeSwitcher) { if (displayId == INVALID_DISPLAY) return; boolean isConcurrentMultiUserModeEnabled = UserManager.isVisibleBackgroundUsersEnabled() diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java index 9ca0591f9c5b..50efc21f50fc 100644 --- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java +++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java @@ -34,6 +34,8 @@ import android.content.pm.UserInfo; import android.content.res.Configuration; import android.graphics.Rect; import android.inputmethodservice.InputMethodService; +import android.inputmethodservice.InputMethodService.BackDispositionMode; +import android.inputmethodservice.InputMethodService.ImeWindowVisibility; import android.util.Log; import android.view.Display; import android.view.KeyEvent; @@ -378,8 +380,8 @@ public final class WMShell implements } @Override - public void setImeWindowStatus(int displayId, int vis, int backDisposition, - boolean showImeSwitcher) { + public void setImeWindowStatus(int displayId, @ImeWindowVisibility int vis, + @BackDispositionMode int backDisposition, boolean showImeSwitcher) { if (displayId == mDisplayTracker.getDefaultDisplayId() && (vis & InputMethodService.IME_VISIBLE) != 0) { oneHanded.stopOneHanded( diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java index 6916bbde0153..d10ea1f02367 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java @@ -15,7 +15,9 @@ package com.android.systemui.statusbar; import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE; +import static android.inputmethodservice.InputMethodService.BACK_DISPOSITION_ADJUST_NOTHING; import static android.inputmethodservice.InputMethodService.BACK_DISPOSITION_DEFAULT; +import static android.inputmethodservice.InputMethodService.IME_ACTIVE; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.WindowInsetsController.BEHAVIOR_DEFAULT; @@ -194,9 +196,11 @@ public class CommandQueueTest extends SysuiTestCase { @Test public void testShowImeButton() { - mCommandQueue.setImeWindowStatus(DEFAULT_DISPLAY, 1, 2, true); + mCommandQueue.setImeWindowStatus(DEFAULT_DISPLAY, IME_ACTIVE, + BACK_DISPOSITION_ADJUST_NOTHING, true); waitForIdleSync(); - verify(mCallbacks).setImeWindowStatus(eq(DEFAULT_DISPLAY), eq(1), eq(2), eq(true)); + verify(mCallbacks).setImeWindowStatus(eq(DEFAULT_DISPLAY), eq(IME_ACTIVE), + eq(BACK_DISPOSITION_ADJUST_NOTHING), eq(true)); } @Test @@ -204,11 +208,13 @@ public class CommandQueueTest extends SysuiTestCase { // First show in default display to update the "last updated ime display" testShowImeButton(); - mCommandQueue.setImeWindowStatus(SECONDARY_DISPLAY, 1, 2, true); + mCommandQueue.setImeWindowStatus(SECONDARY_DISPLAY, IME_ACTIVE, + BACK_DISPOSITION_ADJUST_NOTHING, true); waitForIdleSync(); - verify(mCallbacks).setImeWindowStatus(eq(DEFAULT_DISPLAY), eq(0), + verify(mCallbacks).setImeWindowStatus(eq(DEFAULT_DISPLAY), eq(0) /* vis */, eq(BACK_DISPOSITION_DEFAULT), eq(false)); - verify(mCallbacks).setImeWindowStatus(eq(SECONDARY_DISPLAY), eq(1), eq(2), eq(true)); + verify(mCallbacks).setImeWindowStatus(eq(SECONDARY_DISPLAY), eq(IME_ACTIVE), + eq(BACK_DISPOSITION_ADJUST_NOTHING), eq(true)); } @Test diff --git a/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java b/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java index 079b7242b1f3..ec1993a9b444 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java @@ -18,6 +18,7 @@ package com.android.server.inputmethod; import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_DENIED; import static android.content.Context.DEVICE_ID_DEFAULT; +import static android.inputmethodservice.InputMethodService.BACK_DISPOSITION_DEFAULT; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.view.Display.INVALID_DISPLAY; @@ -32,6 +33,8 @@ import android.content.Intent; import android.content.ServiceConnection; import android.content.pm.PackageManagerInternal; import android.inputmethodservice.InputMethodService; +import android.inputmethodservice.InputMethodService.BackDispositionMode; +import android.inputmethodservice.InputMethodService.ImeWindowVisibility; import android.os.Binder; import android.os.IBinder; import android.os.Process; @@ -99,24 +102,16 @@ final class InputMethodBindingController { /** * A set of status bits regarding the active IME. * - * <p>This value is a combination of following two bits:</p> - * <dl> - * <dt>{@link InputMethodService#IME_ACTIVE}</dt> - * <dd> - * If this bit is ON, connected IME is ready to accept touch/key events. - * </dd> - * <dt>{@link InputMethodService#IME_VISIBLE}</dt> - * <dd> - * If this bit is ON, some of IME view, e.g. software input, candidate view, is visible. - * </dd> - * </dl> - * <em>Do not update this value outside of {@link #setImeWindowStatus(IBinder, int, int)} and - * {@link InputMethodBindingController#unbindCurrentMethod()}.</em> + * <em>Do not update this value outside of {@link #setImeWindowVis} and + * {@link InputMethodBindingController#unbindCurrentMethod}.</em> */ - @GuardedBy("ImfLock.class") private int mImeWindowVis; + @ImeWindowVisibility + @GuardedBy("ImfLock.class") + private int mImeWindowVis; + @BackDispositionMode @GuardedBy("ImfLock.class") - private int mBackDisposition = InputMethodService.BACK_DISPOSITION_DEFAULT; + private int mBackDisposition = BACK_DISPOSITION_DEFAULT; @Nullable private CountDownLatch mLatchForTesting; @@ -718,22 +713,24 @@ final class InputMethodBindingController { } @GuardedBy("ImfLock.class") - void setImeWindowVis(int imeWindowVis) { + void setImeWindowVis(@ImeWindowVisibility int imeWindowVis) { mImeWindowVis = imeWindowVis; } + @ImeWindowVisibility @GuardedBy("ImfLock.class") int getImeWindowVis() { return mImeWindowVis; } + @BackDispositionMode @GuardedBy("ImfLock.class") int getBackDisposition() { return mBackDisposition; } @GuardedBy("ImfLock.class") - void setBackDisposition(int backDisposition) { + void setBackDisposition(@BackDispositionMode int backDisposition) { mBackDisposition = backDisposition; } } diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index 8afbd56728e4..36542837e582 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -86,6 +86,8 @@ import android.content.pm.UserInfo; import android.content.res.Resources; import android.hardware.input.InputManager; import android.inputmethodservice.InputMethodService; +import android.inputmethodservice.InputMethodService.BackDispositionMode; +import android.inputmethodservice.InputMethodService.ImeWindowVisibility; import android.media.AudioManagerInternal; import android.net.Uri; import android.os.Binder; @@ -2618,7 +2620,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } @GuardedBy("ImfLock.class") - private boolean shouldShowImeSwitcherLocked(int visibility, @UserIdInt int userId) { + private boolean shouldShowImeSwitcherLocked(@ImeWindowVisibility int visibility, + @UserIdInt int userId) { if (!mShowOngoingImeSwitcherForPhones) return false; // When the IME switcher dialog is shown, the IME switcher button should be hidden. // TODO(b/305849394): Make mMenuController multi-user aware. @@ -2722,8 +2725,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @BinderThread @GuardedBy("ImfLock.class") @SuppressWarnings("deprecation") - private void setImeWindowStatusLocked(int vis, int backDisposition, - @NonNull UserData userData) { + private void setImeWindowStatusLocked(@ImeWindowVisibility int vis, + @BackDispositionMode int backDisposition, @NonNull UserData userData) { final int topFocusedDisplayId = mWindowManagerInternal.getTopFocusedDisplayId(); final int userId = userData.mUserId; @@ -2772,7 +2775,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. final int userId = resolveImeUserIdFromDisplayIdLocked(displayId); if (disableImeIcon) { final var bindingController = getInputMethodBindingController(userId); - updateSystemUiLocked(0, bindingController.getBackDisposition(), userId); + updateSystemUiLocked(0 /* vis */, bindingController.getBackDisposition(), userId); } else { updateSystemUiLocked(userId); } @@ -2787,7 +2790,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } @GuardedBy("ImfLock.class") - private void updateSystemUiLocked(int vis, int backDisposition, @UserIdInt int userId) { + private void updateSystemUiLocked(@ImeWindowVisibility int vis, + @BackDispositionMode int backDisposition, @UserIdInt int userId) { // To minimize app compat risk, ignore background users' request for single-user mode. // TODO(b/357178609): generalize the logic and remove this special rule. if (!mConcurrentMultiUserModeEnabled && userId != mCurrentImeUserId) { @@ -6812,7 +6816,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @BinderThread @Override - public void setImeWindowStatusAsync(int vis, int backDisposition) { + public void setImeWindowStatusAsync(@ImeWindowVisibility int vis, + @BackDispositionMode int backDisposition) { synchronized (ImfLock.class) { if (!calledWithValidTokenLocked(mToken, mUserData)) { return; diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java index a4a29a02f362..2faa68a9948f 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java @@ -20,6 +20,8 @@ import android.annotation.Nullable; import android.app.ITransientNotificationCallback; import android.content.ComponentName; import android.hardware.fingerprint.IUdfpsRefreshRateRequestCallback; +import android.inputmethodservice.InputMethodService.BackDispositionMode; +import android.inputmethodservice.InputMethodService.ImeWindowVisibility; import android.os.Bundle; import android.os.IBinder; import android.os.UserHandle; @@ -54,13 +56,12 @@ public interface StatusBarManagerInternal { * Used by InputMethodManagerService to notify the IME status. * * @param displayId The display to which the IME is bound to. - * @param vis Bit flags about the IME visibility. - * (e.g. {@link android.inputmethodservice.InputMethodService#IME_ACTIVE}) - * @param backDisposition Bit flags about the IME back disposition. - * (e.g. {@link android.inputmethodservice.InputMethodService#BACK_DISPOSITION_DEFAULT}) + * @param vis The IME visibility. + * @param backDisposition The IME back disposition. * @param showImeSwitcher {@code true} when the IME switcher button should be shown. */ - void setImeWindowStatus(int displayId, int vis, int backDisposition, boolean showImeSwitcher); + void setImeWindowStatus(int displayId, @ImeWindowVisibility int vis, + @BackDispositionMode int backDisposition, boolean showImeSwitcher); /** * See {@link android.app.StatusBarManager#setIcon(String, int, int, String)}. diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index c3601b3c3090..e71f9eac98d4 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -26,6 +26,7 @@ import static android.app.StatusBarManager.NAV_BAR_MODE_KIDS; import static android.app.StatusBarManager.NavBarMode; import static android.app.StatusBarManager.SessionFlags; import static android.content.pm.PackageManager.PERMISSION_GRANTED; +import static android.inputmethodservice.InputMethodService.BACK_DISPOSITION_DEFAULT; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.ViewRootImpl.CLIENT_TRANSIENT; import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY; @@ -60,6 +61,8 @@ import android.hardware.biometrics.PromptInfo; import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManager.DisplayListener; import android.hardware.fingerprint.IUdfpsRefreshRateRequestCallback; +import android.inputmethodservice.InputMethodService.BackDispositionMode; +import android.inputmethodservice.InputMethodService.ImeWindowVisibility; import android.media.INearbyMediaDevicesProvider; import android.media.MediaRoute2Info; import android.net.Uri; @@ -534,8 +537,8 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D } @Override - public void setImeWindowStatus(int displayId, int vis, int backDisposition, - boolean showImeSwitcher) { + public void setImeWindowStatus(int displayId, @ImeWindowVisibility int vis, + @BackDispositionMode int backDisposition, boolean showImeSwitcher) { StatusBarManagerService.this.setImeWindowStatus(displayId, vis, backDisposition, showImeSwitcher); } @@ -1351,8 +1354,8 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D } @Override - public void setImeWindowStatus(int displayId, final int vis, final int backDisposition, - final boolean showImeSwitcher) { + public void setImeWindowStatus(int displayId, @ImeWindowVisibility final int vis, + @BackDispositionMode final int backDisposition, final boolean showImeSwitcher) { enforceStatusBar(); if (SPEW) { @@ -1418,8 +1421,10 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D private String mPackageName = "none"; private int mDisabled1 = 0; private int mDisabled2 = 0; + @ImeWindowVisibility private int mImeWindowVis = 0; - private int mImeBackDisposition = 0; + @BackDispositionMode + private int mImeBackDisposition = BACK_DISPOSITION_DEFAULT; private boolean mShowImeSwitcher = false; private LetterboxDetails[] mLetterboxDetails = new LetterboxDetails[0]; @@ -1462,7 +1467,8 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D return mDisabled1 == disabled1 && mDisabled2 == disabled2; } - private void setImeWindowState(final int vis, final int backDisposition, + private void setImeWindowState(@ImeWindowVisibility final int vis, + @BackDispositionMode final int backDisposition, final boolean showImeSwitcher) { mImeWindowVis = vis; mImeBackDisposition = backDisposition; |