diff options
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, |