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

Commit f5c87d81 authored by Toni Barzic's avatar Toni Barzic Committed by Android (Google) Code Review
Browse files

Merge "Always reload AccessibiiltyInputFilter on user switch"

parents 4d4b9fd7 94ce2109
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -45,28 +45,28 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
    /**
     * Flag for enabling the screen magnification feature.
     *
     * @see #setEnabledFeatures(int)
     * @see #setUserAndEnabledFeatures(int, int)
     */
    static final int FLAG_FEATURE_SCREEN_MAGNIFIER = 0x00000001;

    /**
     * Flag for enabling the touch exploration feature.
     *
     * @see #setEnabledFeatures(int)
     * @see #setUserAndEnabledFeatures(int, int)
     */
    static final int FLAG_FEATURE_TOUCH_EXPLORATION = 0x00000002;

    /**
     * Flag for enabling the filtering key events feature.
     *
     * @see #setEnabledFeatures(int)
     * @see #setUserAndEnabledFeatures(int, int)
     */
    static final int FLAG_FEATURE_FILTER_KEY_EVENTS = 0x00000004;

    /**
     * Flag for enabling "Automatically click on mouse stop" feature.
     *
     * @see #setEnabledFeatures(int)
     * @see #setUserAndEnabledFeatures(int, int)
     */
    static final int FLAG_FEATURE_AUTOCLICK = 0x00000008;

@@ -97,6 +97,8 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo

    private boolean mInstalled;

    private int mUserId;

    private int mEnabledFeatures;

    private TouchExplorer mTouchExplorer;
@@ -327,13 +329,14 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
        /* do nothing */
    }

    void setEnabledFeatures(int enabledFeatures) {
        if (mEnabledFeatures == enabledFeatures) {
    void setUserAndEnabledFeatures(int userId, int enabledFeatures) {
        if (mEnabledFeatures == enabledFeatures && mUserId == userId) {
            return;
        }
        if (mInstalled) {
            disableFeatures();
        }
        mUserId = userId;
        mEnabledFeatures = enabledFeatures;
        if (mInstalled) {
            enableFeatures();
@@ -350,7 +353,7 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
        resetStreamState();

        if ((mEnabledFeatures & FLAG_FEATURE_AUTOCLICK) != 0) {
            mAutoclickController = new AutoclickController(mContext);
            mAutoclickController = new AutoclickController(mContext, mUserId);
            addFirstEventHandler(mAutoclickController);
        }

@@ -360,7 +363,7 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
        }

        if ((mEnabledFeatures & FLAG_FEATURE_SCREEN_MAGNIFIER) != 0) {
            mScreenMagnifier = new ScreenMagnifier(mContext,
            mScreenMagnifier = new ScreenMagnifier(mContext, mUserId,
                    Display.DEFAULT_DISPLAY, mAms);
            addFirstEventHandler(mScreenMagnifier);
        }
@@ -386,7 +389,7 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
        mEventHandler = handler;
    }

    void disableFeatures() {
    private void disableFeatures() {
        if (mAutoclickController != null) {
            mAutoclickController.onDestroy();
            mAutoclickController = null;
+2 −2
Original line number Diff line number Diff line
@@ -1296,11 +1296,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
                    inputFilter = mInputFilter;
                    setInputFilter = true;
                }
                mInputFilter.setEnabledFeatures(flags);
                mInputFilter.setUserAndEnabledFeatures(userState.mUserId, flags);
            } else {
                if (mHasInputFilter) {
                    mHasInputFilter = false;
                    mInputFilter.disableFeatures();
                    mInputFilter.setUserAndEnabledFeatures(userState.mUserId, 0);
                    inputFilter = null;
                    setInputFilter = true;
                }
+12 −7
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ import android.view.accessibility.AccessibilityEvent;
 *
 * It is expected that each instance will receive mouse events from a single mouse device. User of
 * the class should handle cases where multiple mouse devices are present.
 *
 * Each instance is associated to a single user (and it does not handle user switch itself).
 */
public class AutoclickController implements EventStreamTransformation {

@@ -60,13 +62,15 @@ public class AutoclickController implements EventStreamTransformation {

    private EventStreamTransformation mNext;
    private final Context mContext;
    private final int mUserId;

    // Lazily created on the first mouse motion event.
    private ClickScheduler mClickScheduler;
    private ClickDelayObserver mClickDelayObserver;

    public AutoclickController(Context context) {
    public AutoclickController(Context context, int userId) {
        mContext = context;
        mUserId = userId;
    }

    @Override
@@ -75,7 +79,7 @@ public class AutoclickController implements EventStreamTransformation {
            if (mClickScheduler == null) {
                Handler handler = new Handler(mContext.getMainLooper());
                mClickScheduler = new ClickScheduler(handler, DEFAULT_CLICK_DELAY_MS);
                mClickDelayObserver = new ClickDelayObserver(handler);
                mClickDelayObserver = new ClickDelayObserver(mUserId, handler);
                mClickDelayObserver.start(mContext.getContentResolver(), mClickScheduler);
            }

@@ -168,9 +172,11 @@ public class AutoclickController implements EventStreamTransformation {

        private ContentResolver mContentResolver;
        private ClickScheduler mClickScheduler;
        private final int mUserId;

        public ClickDelayObserver(Handler handler) {
        public ClickDelayObserver(int userId, Handler handler) {
            super(handler);
            mUserId = userId;
        }

        /**
@@ -199,7 +205,7 @@ public class AutoclickController implements EventStreamTransformation {
            mContentResolver = contentResolver;
            mClickScheduler = clickScheduler;
            mContentResolver.registerContentObserver(mAutoclickDelaySettingUri, false, this,
                    UserHandle.USER_ALL);
                    mUserId);

            // Initialize mClickScheduler's initial delay value.
            onChange(true, mAutoclickDelaySettingUri);
@@ -222,10 +228,9 @@ public class AutoclickController implements EventStreamTransformation {
        @Override
        public void onChange(boolean selfChange, Uri uri) {
            if (mAutoclickDelaySettingUri.equals(uri)) {
                // TODO: Plumb current user id down to here and use getIntForUser.
                int delay = Settings.Secure.getInt(
                int delay = Settings.Secure.getIntForUser(
                        mContentResolver, Settings.Secure.ACCESSIBILITY_AUTOCLICK_DELAY,
                        DEFAULT_CLICK_DELAY_MS);
                        DEFAULT_CLICK_DELAY_MS, mUserId);
                mClickScheduler.updateDelay(delay);
            }
        }
+9 −5
Original line number Diff line number Diff line
@@ -137,6 +137,8 @@ public final class ScreenMagnifier implements WindowManagerInternal.Magnificatio

    private final AccessibilityManagerService mAms;

    private final int mUserId;

    private final int mTapTimeSlop = ViewConfiguration.getJumpTapTimeout();
    private final int mMultiTapTimeSlop;
    private final int mTapDistanceSlop;
@@ -188,8 +190,10 @@ public final class ScreenMagnifier implements WindowManagerInternal.Magnificatio
        }
    };

    public ScreenMagnifier(Context context, int displayId, AccessibilityManagerService service) {
    public ScreenMagnifier(Context context, int userId, int displayId,
            AccessibilityManagerService service) {
        mContext = context;
        mUserId = userId;
        mWindowManager = LocalServices.getService(WindowManagerInternal.class);
        mAms = service;

@@ -882,17 +886,17 @@ public final class ScreenMagnifier implements WindowManagerInternal.Magnificatio
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... params) {
                Settings.Secure.putFloat(mContext.getContentResolver(),
                        Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, scale);
                Settings.Secure.putFloatForUser(mContext.getContentResolver(),
                        Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, scale, mUserId);
                return null;
            }
        }.execute();
    }

    private float getPersistedScale() {
        return Settings.Secure.getFloat(mContext.getContentResolver(),
        return Settings.Secure.getFloatForUser(mContext.getContentResolver(),
                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
                DEFAULT_MAGNIFICATION_SCALE);
                DEFAULT_MAGNIFICATION_SCALE, mUserId);
    }

    private static boolean isScreenMagnificationAutoUpdateEnabled(Context context) {