From c2e31eb49ac522be4b766d28276142a01e83f4cc Mon Sep 17 00:00:00 2001 From: Vaibhav Devmurari Date: Fri, 10 Mar 2023 11:50:25 +0000 Subject: [PATCH] Fix: Security exception in case of work profile Test: manual Bug: 272522906 Change-Id: I9057e793641950e2ad903404d591b4e517e91e38 --- .../com/android/server/input/KeyboardLayoutManager.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/input/KeyboardLayoutManager.java b/services/core/java/com/android/server/input/KeyboardLayoutManager.java index f873a1b867d2e..4d4a87e186645 100644 --- a/services/core/java/com/android/server/input/KeyboardLayoutManager.java +++ b/services/core/java/com/android/server/input/KeyboardLayoutManager.java @@ -65,6 +65,7 @@ import com.android.internal.inputmethod.InputMethodSubtypeHandle; import com.android.internal.messages.nano.SystemMessageProto; import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.util.XmlUtils; +import com.android.server.inputmethod.InputMethodManagerInternal; import libcore.io.Streams; @@ -1226,9 +1227,15 @@ final class KeyboardLayoutManager implements InputManager.InputDeviceListener { mContext.getSystemService(UserManager.class)); InputMethodManager inputMethodManager = Objects.requireNonNull( mContext.getSystemService(InputMethodManager.class)); + // Need to use InputMethodManagerInternal to call getEnabledInputMethodListAsUser() + // instead of using InputMethodManager which uses enforceCallingPermissions() that + // breaks when we are calling the method for work profile user ID since it doesn't check + // self permissions. + InputMethodManagerInternal inputMethodManagerInternal = InputMethodManagerInternal.get(); for (UserHandle userHandle : userManager.getUserHandles(true /* excludeDying */)) { int userId = userHandle.getIdentifier(); - for (InputMethodInfo imeInfo : inputMethodManager.getEnabledInputMethodListAsUser( + for (InputMethodInfo imeInfo : + inputMethodManagerInternal.getEnabledInputMethodListAsUser( userId)) { for (InputMethodSubtype imeSubtype : inputMethodManager.getEnabledInputMethodSubtypeList(