Loading services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +8 −0 Original line number Original line Diff line number Diff line Loading @@ -49,6 +49,7 @@ import android.accessibilityservice.TouchInteractionController; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.RequiresPermission; import android.annotation.UserIdInt; import android.app.ActivityOptions; import android.app.ActivityOptions; import android.app.AlertDialog; import android.app.AlertDialog; import android.app.PendingIntent; import android.app.PendingIntent; Loading Loading @@ -359,6 +360,13 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub EditorInfo editorInfo, boolean restarting) { EditorInfo editorInfo, boolean restarting) { mService.scheduleStartInput(remoteAccessibilityInputConnection, editorInfo, 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 { public static final class Lifecycle extends SystemService { Loading services/core/java/com/android/server/AccessibilityManagerInternal.java +15 −0 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.server; package com.android.server; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.UserIdInt; import android.util.ArraySet; import android.util.ArraySet; import android.util.SparseArray; import android.util.SparseArray; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo; Loading Loading @@ -49,6 +50,15 @@ public abstract class AccessibilityManagerInternal { IRemoteAccessibilityInputConnection remoteAccessibilityInputConnection, IRemoteAccessibilityInputConnection remoteAccessibilityInputConnection, EditorInfo editorInfo, boolean restarting); 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() { private static final AccessibilityManagerInternal NOP = new AccessibilityManagerInternal() { @Override @Override public void setImeSessionEnabled(SparseArray<IAccessibilityInputMethodSession> sessions, public void setImeSessionEnabled(SparseArray<IAccessibilityInputMethodSession> sessions, Loading @@ -71,6 +81,11 @@ public abstract class AccessibilityManagerInternal { public void startInput(IRemoteAccessibilityInputConnection remoteAccessibility, public void startInput(IRemoteAccessibilityInputConnection remoteAccessibility, EditorInfo editorInfo, boolean restarting) { EditorInfo editorInfo, boolean restarting) { } } @Override public boolean isTouchExplorationEnabled(int userId) { return false; } }; }; /** /** Loading services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +2 −6 Original line number Original line Diff line number Diff line Loading @@ -137,7 +137,6 @@ import android.view.WindowManager; import android.view.WindowManager.DisplayImePolicy; import android.view.WindowManager.DisplayImePolicy; import android.view.WindowManager.LayoutParams; import android.view.WindowManager.LayoutParams; import android.view.WindowManager.LayoutParams.SoftInputModeFlags; import android.view.WindowManager.LayoutParams.SoftInputModeFlags; import android.view.accessibility.AccessibilityManager; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputBinding; import android.view.inputmethod.InputBinding; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputConnection; Loading Loading @@ -312,9 +311,6 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub @NonNull private final InputMethodBindingController mBindingController; @NonNull private final InputMethodBindingController mBindingController; @NonNull private final AutofillSuggestionsController mAutofillController; @NonNull private final AutofillSuggestionsController mAutofillController; // TODO(b/219056452): Use AccessibilityManagerInternal instead. private final AccessibilityManager mAccessibilityManager; /** /** * Cache the result of {@code LocalServices.getService(AudioManagerInternal.class)}. * Cache the result of {@code LocalServices.getService(AudioManagerInternal.class)}. * * Loading Loading @@ -1734,7 +1730,6 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class); mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class); mUserManager = mContext.getSystemService(UserManager.class); mUserManager = mContext.getSystemService(UserManager.class); mUserManagerInternal = LocalServices.getService(UserManagerInternal.class); mUserManagerInternal = LocalServices.getService(UserManagerInternal.class); mAccessibilityManager = AccessibilityManager.getInstance(context); mHasFeature = context.getPackageManager().hasSystemFeature( mHasFeature = context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_INPUT_METHODS); PackageManager.FEATURE_INPUT_METHODS); Loading Loading @@ -5469,7 +5464,8 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub public void onCreateInlineSuggestionsRequest(@UserIdInt int userId, public void onCreateInlineSuggestionsRequest(@UserIdInt int userId, InlineSuggestionsRequestInfo requestInfo, IInlineSuggestionsRequestCallback cb) { InlineSuggestionsRequestInfo requestInfo, IInlineSuggestionsRequestCallback cb) { // Get the device global touch exploration state before lock to avoid deadlock. // 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) { synchronized (ImfLock.class) { mAutofillController.onCreateInlineSuggestionsRequest(userId, requestInfo, cb, mAutofillController.onCreateInlineSuggestionsRequest(userId, requestInfo, cb, Loading Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +8 −0 Original line number Original line Diff line number Diff line Loading @@ -49,6 +49,7 @@ import android.accessibilityservice.TouchInteractionController; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.RequiresPermission; import android.annotation.UserIdInt; import android.app.ActivityOptions; import android.app.ActivityOptions; import android.app.AlertDialog; import android.app.AlertDialog; import android.app.PendingIntent; import android.app.PendingIntent; Loading Loading @@ -359,6 +360,13 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub EditorInfo editorInfo, boolean restarting) { EditorInfo editorInfo, boolean restarting) { mService.scheduleStartInput(remoteAccessibilityInputConnection, editorInfo, 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 { public static final class Lifecycle extends SystemService { Loading
services/core/java/com/android/server/AccessibilityManagerInternal.java +15 −0 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.server; package com.android.server; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.UserIdInt; import android.util.ArraySet; import android.util.ArraySet; import android.util.SparseArray; import android.util.SparseArray; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo; Loading Loading @@ -49,6 +50,15 @@ public abstract class AccessibilityManagerInternal { IRemoteAccessibilityInputConnection remoteAccessibilityInputConnection, IRemoteAccessibilityInputConnection remoteAccessibilityInputConnection, EditorInfo editorInfo, boolean restarting); 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() { private static final AccessibilityManagerInternal NOP = new AccessibilityManagerInternal() { @Override @Override public void setImeSessionEnabled(SparseArray<IAccessibilityInputMethodSession> sessions, public void setImeSessionEnabled(SparseArray<IAccessibilityInputMethodSession> sessions, Loading @@ -71,6 +81,11 @@ public abstract class AccessibilityManagerInternal { public void startInput(IRemoteAccessibilityInputConnection remoteAccessibility, public void startInput(IRemoteAccessibilityInputConnection remoteAccessibility, EditorInfo editorInfo, boolean restarting) { EditorInfo editorInfo, boolean restarting) { } } @Override public boolean isTouchExplorationEnabled(int userId) { return false; } }; }; /** /** Loading
services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +2 −6 Original line number Original line Diff line number Diff line Loading @@ -137,7 +137,6 @@ import android.view.WindowManager; import android.view.WindowManager.DisplayImePolicy; import android.view.WindowManager.DisplayImePolicy; import android.view.WindowManager.LayoutParams; import android.view.WindowManager.LayoutParams; import android.view.WindowManager.LayoutParams.SoftInputModeFlags; import android.view.WindowManager.LayoutParams.SoftInputModeFlags; import android.view.accessibility.AccessibilityManager; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputBinding; import android.view.inputmethod.InputBinding; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputConnection; Loading Loading @@ -312,9 +311,6 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub @NonNull private final InputMethodBindingController mBindingController; @NonNull private final InputMethodBindingController mBindingController; @NonNull private final AutofillSuggestionsController mAutofillController; @NonNull private final AutofillSuggestionsController mAutofillController; // TODO(b/219056452): Use AccessibilityManagerInternal instead. private final AccessibilityManager mAccessibilityManager; /** /** * Cache the result of {@code LocalServices.getService(AudioManagerInternal.class)}. * Cache the result of {@code LocalServices.getService(AudioManagerInternal.class)}. * * Loading Loading @@ -1734,7 +1730,6 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class); mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class); mUserManager = mContext.getSystemService(UserManager.class); mUserManager = mContext.getSystemService(UserManager.class); mUserManagerInternal = LocalServices.getService(UserManagerInternal.class); mUserManagerInternal = LocalServices.getService(UserManagerInternal.class); mAccessibilityManager = AccessibilityManager.getInstance(context); mHasFeature = context.getPackageManager().hasSystemFeature( mHasFeature = context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_INPUT_METHODS); PackageManager.FEATURE_INPUT_METHODS); Loading Loading @@ -5469,7 +5464,8 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub public void onCreateInlineSuggestionsRequest(@UserIdInt int userId, public void onCreateInlineSuggestionsRequest(@UserIdInt int userId, InlineSuggestionsRequestInfo requestInfo, IInlineSuggestionsRequestCallback cb) { InlineSuggestionsRequestInfo requestInfo, IInlineSuggestionsRequestCallback cb) { // Get the device global touch exploration state before lock to avoid deadlock. // 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) { synchronized (ImfLock.class) { mAutofillController.onCreateInlineSuggestionsRequest(userId, requestInfo, cb, mAutofillController.onCreateInlineSuggestionsRequest(userId, requestInfo, cb, Loading