summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yohei Yukawa <yukawa@google.com> 2022-10-03 18:04:31 -0700
committer Yohei Yukawa <yukawa@google.com> 2022-10-03 18:04:31 -0700
commit1dd7a063838d88092bb25915f795d353fe100cfe (patch)
tree515a5004b0b2599bb0ba0350ad4f524592a40dba
parent10b858c39fc86568c656532462941af590c2a9e7 (diff)
Add AccessibilityManagerInternal#isTouchExplorationEnabled()
This is a follow up CL to our previous CL [1], which added a method invocation of AccessibilityManager#isTouchExplorationEnabled() from InputMethodManagerService. The issue is that it is not clear about which user we are querying. In order to avoid future confusions, it would make much more sense if we have a more dedicated internal method in AccessibilityManagerInternal as we planned. Bug: 207007377 Fix: 219056452 Test: presubmit Change-Id: I99a1b6706c51709e82ca31449753b35919e7247c
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java8
-rw-r--r--services/core/java/com/android/server/AccessibilityManagerInternal.java15
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java8
3 files changed, 25 insertions, 6 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index f17f8f7bd7e4..482947098cdb 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -49,6 +49,7 @@ import android.accessibilityservice.TouchInteractionController;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
+import android.annotation.UserIdInt;
import android.app.ActivityOptions;
import android.app.AlertDialog;
import android.app.PendingIntent;
@@ -359,6 +360,13 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
EditorInfo editorInfo, boolean restarting) {
mService.scheduleStartInput(remoteAccessibilityInputConnection, editorInfo, restarting);
}
+
+ @Override
+ public boolean isTouchExplorationEnabled(@UserIdInt int userId) {
+ synchronized (mService.mLock) {
+ return mService.getUserStateLocked(userId).isTouchExplorationEnabledLocked();
+ }
+ }
}
public static final class Lifecycle extends SystemService {
diff --git a/services/core/java/com/android/server/AccessibilityManagerInternal.java b/services/core/java/com/android/server/AccessibilityManagerInternal.java
index 6ca32af8c3cb..faa45ca558a3 100644
--- a/services/core/java/com/android/server/AccessibilityManagerInternal.java
+++ b/services/core/java/com/android/server/AccessibilityManagerInternal.java
@@ -17,6 +17,7 @@
package com.android.server;
import android.annotation.NonNull;
+import android.annotation.UserIdInt;
import android.util.ArraySet;
import android.util.SparseArray;
import android.view.inputmethod.EditorInfo;
@@ -49,6 +50,15 @@ public abstract class AccessibilityManagerInternal {
IRemoteAccessibilityInputConnection remoteAccessibilityInputConnection,
EditorInfo editorInfo, boolean restarting);
+ /**
+ * Queries whether touch-exploration mode is enabled or not for the specified user.
+ *
+ * @param userId User ID to be queried about.
+ * @return {@code true} if touch-exploration mode is enabled.
+ * @see android.view.accessibility.AccessibilityManager#isTouchExplorationEnabled()
+ */
+ public abstract boolean isTouchExplorationEnabled(@UserIdInt int userId);
+
private static final AccessibilityManagerInternal NOP = new AccessibilityManagerInternal() {
@Override
public void setImeSessionEnabled(SparseArray<IAccessibilityInputMethodSession> sessions,
@@ -71,6 +81,11 @@ public abstract class AccessibilityManagerInternal {
public void startInput(IRemoteAccessibilityInputConnection remoteAccessibility,
EditorInfo editorInfo, boolean restarting) {
}
+
+ @Override
+ public boolean isTouchExplorationEnabled(int userId) {
+ return false;
+ }
};
/**
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 31e0693ed47c..0033ff845346 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -138,7 +138,6 @@ import android.view.WindowManager;
import android.view.WindowManager.DisplayImePolicy;
import android.view.WindowManager.LayoutParams;
import android.view.WindowManager.LayoutParams.SoftInputModeFlags;
-import android.view.accessibility.AccessibilityManager;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputBinding;
import android.view.inputmethod.InputConnection;
@@ -316,9 +315,6 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
@NonNull private final InputMethodBindingController mBindingController;
@NonNull private final AutofillSuggestionsController mAutofillController;
- // TODO(b/219056452): Use AccessibilityManagerInternal instead.
- private final AccessibilityManager mAccessibilityManager;
-
/**
* Cache the result of {@code LocalServices.getService(AudioManagerInternal.class)}.
*
@@ -1740,7 +1736,6 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
mAppOpsManager = mContext.getSystemService(AppOpsManager.class);
mUserManager = mContext.getSystemService(UserManager.class);
mUserManagerInternal = LocalServices.getService(UserManagerInternal.class);
- mAccessibilityManager = AccessibilityManager.getInstance(context);
mHasFeature = context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_INPUT_METHODS);
@@ -5484,7 +5479,8 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
public void onCreateInlineSuggestionsRequest(@UserIdInt int userId,
InlineSuggestionsRequestInfo requestInfo, IInlineSuggestionsRequestCallback cb) {
// Get the device global touch exploration state before lock to avoid deadlock.
- boolean touchExplorationEnabled = mAccessibilityManager.isTouchExplorationEnabled();
+ final boolean touchExplorationEnabled = AccessibilityManagerInternal.get()
+ .isTouchExplorationEnabled(userId);
synchronized (ImfLock.class) {
mAutofillController.onCreateInlineSuggestionsRequest(userId, requestInfo, cb,