Remove overload ImeVisibilityApplier#applyImeVisibility
Removed the overloaded method to prevent callers to mismatch the
integer parameters. Callers must now specify the reason when
applying IME visibility.
Fix: 350101939
Test: presubmit
Test: atest DefaultImeVisibilityApplierTest
Flag: EXEMPT refactor
Change-Id: Ibbcaedd3263d7d5f01b0a55089ec0edd5bc00570
diff --git a/services/core/java/com/android/server/inputmethod/DefaultImeVisibilityApplier.java b/services/core/java/com/android/server/inputmethod/DefaultImeVisibilityApplier.java
index aa4b338..aab3374 100644
--- a/services/core/java/com/android/server/inputmethod/DefaultImeVisibilityApplier.java
+++ b/services/core/java/com/android/server/inputmethod/DefaultImeVisibilityApplier.java
@@ -141,14 +141,7 @@
@GuardedBy("ImfLock.class")
@Override
- public void applyImeVisibility(IBinder windowToken, @NonNull ImeTracker.Token statsToken,
- @ImeVisibilityStateComputer.VisibilityState int state, @UserIdInt int userId) {
- applyImeVisibility(windowToken, statsToken, state,
- SoftInputShowHideReason.NOT_SET /* ignore reason */, userId);
- }
-
- @GuardedBy("ImfLock.class")
- void applyImeVisibility(IBinder windowToken, @Nullable ImeTracker.Token statsToken,
+ public void applyImeVisibility(IBinder windowToken, @Nullable ImeTracker.Token statsToken,
@ImeVisibilityStateComputer.VisibilityState int state,
@SoftInputShowHideReason int reason, @UserIdInt int userId) {
final var bindingController = mService.getInputMethodBindingController(userId);
diff --git a/services/core/java/com/android/server/inputmethod/ImeVisibilityApplier.java b/services/core/java/com/android/server/inputmethod/ImeVisibilityApplier.java
index c1069f2..b693a66 100644
--- a/services/core/java/com/android/server/inputmethod/ImeVisibilityApplier.java
+++ b/services/core/java/com/android/server/inputmethod/ImeVisibilityApplier.java
@@ -67,10 +67,12 @@
* @param windowToken the token of a window for applying the IME visibility
* @param statsToken the token tracking the current IME request
* @param state the new IME visibility state for the applier to handle
+ * @param reason the reason why the input window is visible or hidden
* @param userId the target user when applying the IME visibility state
*/
default void applyImeVisibility(IBinder windowToken, @NonNull ImeTracker.Token statsToken,
- @ImeVisibilityStateComputer.VisibilityState int state, @UserIdInt int userId) {
+ @ImeVisibilityStateComputer.VisibilityState int state,
+ @SoftInputShowHideReason int reason, @UserIdInt int userId) {
}
/**
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 3c74b23..2242d4f 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -1878,7 +1878,8 @@
final var statsToken = createStatsTokenForFocusedClient(false /* show */,
SoftInputShowHideReason.UNBIND_CURRENT_METHOD, userId);
mVisibilityApplier.applyImeVisibility(userData.mImeBindingState.mFocusedWindow,
- statsToken, STATE_HIDE_IME, userId);
+ statsToken, STATE_HIDE_IME, SoftInputShowHideReason.NOT_SET /* ignore reason */,
+ userId);
}
}
@@ -4669,7 +4670,8 @@
windowToken, userId);
mVisibilityApplier.applyImeVisibility(requestToken, statsToken,
setVisible ? ImeVisibilityStateComputer.STATE_SHOW_IME
- : ImeVisibilityStateComputer.STATE_HIDE_IME, userId);
+ : ImeVisibilityStateComputer.STATE_HIDE_IME,
+ SoftInputShowHideReason.NOT_SET /* ignore reason */, userId);
}
} finally {
Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java
index 9acebf7..f8e196e 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java
@@ -50,6 +50,7 @@
import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.internal.inputmethod.InputBindResult;
+import com.android.internal.inputmethod.SoftInputShowHideReason;
import com.android.internal.inputmethod.StartInputFlags;
import com.android.internal.inputmethod.StartInputReason;
@@ -106,7 +107,7 @@
assertThrows(IllegalArgumentException.class, () -> {
synchronized (ImfLock.class) {
mVisibilityApplier.applyImeVisibility(mWindowToken, ImeTracker.Token.empty(),
- STATE_INVALID, mUserId);
+ STATE_INVALID, eq(SoftInputShowHideReason.NOT_SET), mUserId);
}
});
}
@@ -116,7 +117,7 @@
final var statsToken = ImeTracker.Token.empty();
synchronized (ImfLock.class) {
mVisibilityApplier.applyImeVisibility(mWindowToken, statsToken, STATE_SHOW_IME,
- mUserId);
+ eq(SoftInputShowHideReason.NOT_SET), mUserId);
}
verify(mMockWindowManagerInternal).showImePostLayout(eq(mWindowToken), eq(statsToken));
}
@@ -126,7 +127,7 @@
final var statsToken = ImeTracker.Token.empty();
synchronized (ImfLock.class) {
mVisibilityApplier.applyImeVisibility(mWindowToken, statsToken, STATE_HIDE_IME,
- mUserId);
+ eq(SoftInputShowHideReason.NOT_SET), mUserId);
}
verify(mMockWindowManagerInternal).hideIme(eq(mWindowToken), anyInt() /* displayId */,
eq(statsToken));
@@ -137,7 +138,7 @@
mInputMethodManagerService.mImeWindowVis = IME_ACTIVE;
synchronized (ImfLock.class) {
mVisibilityApplier.applyImeVisibility(mWindowToken, ImeTracker.Token.empty(),
- STATE_HIDE_IME_EXPLICIT, mUserId);
+ STATE_HIDE_IME_EXPLICIT, eq(SoftInputShowHideReason.NOT_SET), mUserId);
}
verifyHideSoftInput(true, true);
}
@@ -147,7 +148,7 @@
mInputMethodManagerService.mImeWindowVis = IME_ACTIVE;
synchronized (ImfLock.class) {
mVisibilityApplier.applyImeVisibility(mWindowToken, ImeTracker.Token.empty(),
- STATE_HIDE_IME_NOT_ALWAYS, mUserId);
+ STATE_HIDE_IME_NOT_ALWAYS, eq(SoftInputShowHideReason.NOT_SET), mUserId);
}
verifyHideSoftInput(true, true);
}
@@ -156,7 +157,7 @@
public void testApplyImeVisibility_showImeImplicit() throws Exception {
synchronized (ImfLock.class) {
mVisibilityApplier.applyImeVisibility(mWindowToken, ImeTracker.Token.empty(),
- STATE_SHOW_IME_IMPLICIT, mUserId);
+ STATE_SHOW_IME_IMPLICIT, eq(SoftInputShowHideReason.NOT_SET), mUserId);
}
verifyShowSoftInput(true, true, 0 /* showFlags */);
}
@@ -177,7 +178,7 @@
// Verify hideIme will apply the expected displayId when the default IME
// visibility applier app STATE_HIDE_IME.
mVisibilityApplier.applyImeVisibility(mWindowToken, statsToken, STATE_HIDE_IME,
- mUserId);
+ eq(SoftInputShowHideReason.NOT_SET), mUserId);
verify(mInputMethodManagerService.mWindowManagerInternal).hideIme(
eq(mWindowToken), eq(displayIdToShowIme), eq(statsToken));
}
@@ -224,7 +225,8 @@
// the IME hidden state.
// The unbind will cancel the previous stats token, and create a new one internally.
verify(mVisibilityApplier).applyImeVisibility(
- eq(mWindowToken), any(), eq(STATE_HIDE_IME), eq(mUserId) /* userId */);
+ eq(mWindowToken), any(), eq(STATE_HIDE_IME),
+ eq(SoftInputShowHideReason.NOT_SET), eq(mUserId) /* userId */);
verify(mInputMethodManagerService.mWindowManagerInternal).hideIme(
eq(mWindowToken), eq(displayIdToShowIme), and(not(eq(statsToken)), notNull()));
}