Clarify required permission in IMM#getInputMethodListAsUser()

This is a follow up CL to our previous CL [1], which exposed

  InputMethodManager#getInputMethodListAsUser(int userId) [2]

as an @TestApi.

One thing to clarify is that INTERACT_ACROSS_USERS_FULL permission is
required when and only when "userId" is different from the one of the
calling process.  To make it clear, this CL adds "conditional = true"
like other @RequiresPermission usages in InputMethodManager.

This is just about (Test) API annotation.  There must be no observable
behavior change.

 [1]: I4b73d9374d7a2ce4c9dfc48682a43d5d48b39042
      ec8b1449f2
 [2]: I5b50b5fe143c74c87b331bda3e5bcc4d6248436e
      d20eef826c

Bug: 256239860
Test: presubmit
Change-Id: I14867e528d4292f1f8713b1d9b491fc5ed6c1abb
This commit is contained in:
Yohei Yukawa
2022-11-01 13:08:35 -07:00
parent cba800ef2f
commit 05e924b2ab
3 changed files with 6 additions and 2 deletions

View File

@@ -3159,7 +3159,7 @@ package android.view.inputmethod {
public final class InputMethodManager {
method @RequiresPermission(android.Manifest.permission.TEST_INPUT_METHOD) public void addVirtualStylusIdForTestSession();
method public int getDisplayId();
method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public java.util.List<android.view.inputmethod.InputMethodInfo> getInputMethodListAsUser(int);
method @NonNull @RequiresPermission(value=android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, conditional=true) public java.util.List<android.view.inputmethod.InputMethodInfo> getInputMethodListAsUser(int);
method public boolean hasActiveInputConnection(@Nullable android.view.View);
method @RequiresPermission(android.Manifest.permission.TEST_INPUT_METHOD) public boolean isInputMethodPickerShown();
method @RequiresPermission(android.Manifest.permission.TEST_INPUT_METHOD) public void setStylusWindowIdleTimeoutForTest(long);

View File

@@ -212,6 +212,7 @@ final class IInputMethodManagerGlobalInvoker {
@AnyThread
@NonNull
@RequiresPermission(value = Manifest.permission.INTERACT_ACROSS_USERS_FULL, conditional = true)
static List<InputMethodInfo> getInputMethodList(@UserIdInt int userId,
@DirectBootAwareness int directBootAwareness) {
final IInputMethodManager service = getService();

View File

@@ -1549,13 +1549,16 @@ public final class InputMethodManager {
/**
* Returns the list of installed input methods for the specified user.
*
* <p>{@link Manifest.permission#INTERACT_ACROSS_USERS_FULL} is required when and only when
* {@code userId} is different from the user id of the current process.</p>
*
* @param userId user ID to query
* @return {@link List} of {@link InputMethodInfo}.
* @hide
*/
@TestApi
@RequiresPermission(INTERACT_ACROSS_USERS_FULL)
@NonNull
@RequiresPermission(value = Manifest.permission.INTERACT_ACROSS_USERS_FULL, conditional = true)
public List<InputMethodInfo> getInputMethodListAsUser(@UserIdInt int userId) {
return IInputMethodManagerGlobalInvoker.getInputMethodList(userId,
DirectBootAwareness.AUTO);