Loading services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +22 −0 Original line number Diff line number Diff line Loading @@ -1355,6 +1355,17 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } updateFromSettingsLocked(true, newUserId); // Special workaround for b/356879517. // KeyboardLayoutManager still expects onInputMethodSubtypeChangedForKeyboardLayoutMapping // to be called back upon IME user switching, while we are actively deprecating the concept // of "current IME user" at b/350386877. // TODO(b/356879517): Come up with a way to avoid this special handling. if (newUserData.mSubtypeForKeyboardLayoutMapping != null) { final var subtypeHandleAndSubtype = newUserData.mSubtypeForKeyboardLayoutMapping; mInputManagerInternal.onInputMethodSubtypeChangedForKeyboardLayoutMapping( newUserId, subtypeHandleAndSubtype.first, subtypeHandleAndSubtype.second); } if (initialUserSwitch) { InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed( getPackageManagerForUser(mContext, newUserId), Loading Loading @@ -2938,6 +2949,17 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. ? subtype : null; final InputMethodSubtypeHandle newSubtypeHandle = normalizedSubtype != null ? InputMethodSubtypeHandle.of(imi, normalizedSubtype) : null; final var userData = getUserData(userId); // A workaround for b/356879517. KeyboardLayoutManager has relied on an implementation // detail that IMMS triggers this callback only for the current IME user. // TODO(b/357663774): Figure out how to better handle this scenario. userData.mSubtypeForKeyboardLayoutMapping = Pair.create(newSubtypeHandle, normalizedSubtype); if (userId != mCurrentUserId) { return; } mInputManagerInternal.onInputMethodSubtypeChangedForKeyboardLayoutMapping( userId, newSubtypeHandle, normalizedSubtype); } Loading services/core/java/com/android/server/inputmethod/UserData.java +13 −0 Original line number Diff line number Diff line Loading @@ -19,14 +19,17 @@ package com.android.server.inputmethod; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.util.Pair; import android.util.SparseArray; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.ImeTracker; import android.view.inputmethod.InputMethodSubtype; import android.window.ImeOnBackInvokedDispatcher; import com.android.internal.annotations.GuardedBy; import com.android.internal.inputmethod.IRemoteAccessibilityInputConnection; import com.android.internal.inputmethod.IRemoteInputConnection; import com.android.internal.inputmethod.InputMethodSubtypeHandle; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; Loading Loading @@ -148,6 +151,16 @@ final class UserData { @NonNull String mLastEnabledInputMethodsStr = ""; /** * A temporary solution to Bug 356879517, where we need to emulate the previous single-user mode * behavior for KeyboardLayoutManager. * * <p>TODO(b/357663774): Remove this workaround</p> */ @GuardedBy("ImfLock.class") @Nullable Pair<InputMethodSubtypeHandle, InputMethodSubtype> mSubtypeForKeyboardLayoutMapping; /** * {@code true} when the IME is responsible for drawing the navigation bar and its buttons. */ Loading Loading
services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +22 −0 Original line number Diff line number Diff line Loading @@ -1355,6 +1355,17 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } updateFromSettingsLocked(true, newUserId); // Special workaround for b/356879517. // KeyboardLayoutManager still expects onInputMethodSubtypeChangedForKeyboardLayoutMapping // to be called back upon IME user switching, while we are actively deprecating the concept // of "current IME user" at b/350386877. // TODO(b/356879517): Come up with a way to avoid this special handling. if (newUserData.mSubtypeForKeyboardLayoutMapping != null) { final var subtypeHandleAndSubtype = newUserData.mSubtypeForKeyboardLayoutMapping; mInputManagerInternal.onInputMethodSubtypeChangedForKeyboardLayoutMapping( newUserId, subtypeHandleAndSubtype.first, subtypeHandleAndSubtype.second); } if (initialUserSwitch) { InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed( getPackageManagerForUser(mContext, newUserId), Loading Loading @@ -2938,6 +2949,17 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. ? subtype : null; final InputMethodSubtypeHandle newSubtypeHandle = normalizedSubtype != null ? InputMethodSubtypeHandle.of(imi, normalizedSubtype) : null; final var userData = getUserData(userId); // A workaround for b/356879517. KeyboardLayoutManager has relied on an implementation // detail that IMMS triggers this callback only for the current IME user. // TODO(b/357663774): Figure out how to better handle this scenario. userData.mSubtypeForKeyboardLayoutMapping = Pair.create(newSubtypeHandle, normalizedSubtype); if (userId != mCurrentUserId) { return; } mInputManagerInternal.onInputMethodSubtypeChangedForKeyboardLayoutMapping( userId, newSubtypeHandle, normalizedSubtype); } Loading
services/core/java/com/android/server/inputmethod/UserData.java +13 −0 Original line number Diff line number Diff line Loading @@ -19,14 +19,17 @@ package com.android.server.inputmethod; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.util.Pair; import android.util.SparseArray; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.ImeTracker; import android.view.inputmethod.InputMethodSubtype; import android.window.ImeOnBackInvokedDispatcher; import com.android.internal.annotations.GuardedBy; import com.android.internal.inputmethod.IRemoteAccessibilityInputConnection; import com.android.internal.inputmethod.IRemoteInputConnection; import com.android.internal.inputmethod.InputMethodSubtypeHandle; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; Loading Loading @@ -148,6 +151,16 @@ final class UserData { @NonNull String mLastEnabledInputMethodsStr = ""; /** * A temporary solution to Bug 356879517, where we need to emulate the previous single-user mode * behavior for KeyboardLayoutManager. * * <p>TODO(b/357663774): Remove this workaround</p> */ @GuardedBy("ImfLock.class") @Nullable Pair<InputMethodSubtypeHandle, InputMethodSubtype> mSubtypeForKeyboardLayoutMapping; /** * {@code true} when the IME is responsible for drawing the navigation bar and its buttons. */ Loading