Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1dd7a063 authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

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
parent 10b858c3
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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 {
+15 −0
Original line number Diff line number Diff line
@@ -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;
        }
    };

    /**
+2 −6
Original line number Diff line number Diff line
@@ -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,