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

Commit 9e95fb4e authored by Aaron Liu's avatar Aaron Liu Committed by Android (Google) Code Review
Browse files

Merge "[User Switcher] Remove falsing check for a11y." into tm-qpr-dev

parents 46ee7672 e2bdfdad
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ import com.android.settingslib.Utils;
import com.android.systemui.Gefingerpoken;
import com.android.systemui.R;
import com.android.systemui.animation.Interpolators;
import com.android.systemui.classifier.FalsingA11yDelegate;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.shared.system.SysUiStatsLog;
import com.android.systemui.statusbar.policy.BaseUserSwitcherAdapter;
@@ -136,6 +137,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
    private GlobalSettings mGlobalSettings;
    private FalsingManager mFalsingManager;
    private UserSwitcherController mUserSwitcherController;
    private FalsingA11yDelegate mFalsingA11yDelegate;
    private AlertDialog mAlertDialog;
    private boolean mSwipeUpToRetry;

@@ -318,7 +320,8 @@ public class KeyguardSecurityContainer extends ConstraintLayout {

    void initMode(@Mode int mode, GlobalSettings globalSettings, FalsingManager falsingManager,
            UserSwitcherController userSwitcherController,
            UserSwitcherViewMode.UserSwitcherCallback userSwitcherCallback) {
            UserSwitcherViewMode.UserSwitcherCallback userSwitcherCallback,
            FalsingA11yDelegate falsingA11yDelegate) {
        if (mCurrentMode == mode) return;
        Log.i(TAG, "Switching mode from " + modeToString(mCurrentMode) + " to "
                + modeToString(mode));
@@ -337,6 +340,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
        }
        mGlobalSettings = globalSettings;
        mFalsingManager = falsingManager;
        mFalsingA11yDelegate = falsingA11yDelegate;
        mUserSwitcherController = userSwitcherController;
        setupViewMode();
    }
@@ -361,7 +365,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
        }

        mViewMode.init(this, mGlobalSettings, mSecurityViewFlipper, mFalsingManager,
                mUserSwitcherController);
                mUserSwitcherController, mFalsingA11yDelegate);
    }

    @Mode int getMode() {
@@ -723,7 +727,8 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
        default void init(@NonNull ConstraintLayout v, @NonNull GlobalSettings globalSettings,
                @NonNull KeyguardSecurityViewFlipper viewFlipper,
                @NonNull FalsingManager falsingManager,
                @NonNull UserSwitcherController userSwitcherController) {};
                @NonNull UserSwitcherController userSwitcherController,
                @NonNull FalsingA11yDelegate falsingA11yDelegate) {};

        /** Reinitialize the location */
        default void updateSecurityViewLocation() {};
@@ -828,7 +833,8 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
        public void init(@NonNull ConstraintLayout v, @NonNull GlobalSettings globalSettings,
                @NonNull KeyguardSecurityViewFlipper viewFlipper,
                @NonNull FalsingManager falsingManager,
                @NonNull UserSwitcherController userSwitcherController) {
                @NonNull UserSwitcherController userSwitcherController,
                @NonNull FalsingA11yDelegate falsingA11yDelegate) {
            mView = v;
            mViewFlipper = viewFlipper;

@@ -865,6 +871,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
                this::setupUserSwitcher;

        private UserSwitcherCallback mUserSwitcherCallback;
        private FalsingA11yDelegate mFalsingA11yDelegate;

        UserSwitcherViewMode(UserSwitcherCallback userSwitcherCallback) {
            mUserSwitcherCallback = userSwitcherCallback;
@@ -874,13 +881,15 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
        public void init(@NonNull ConstraintLayout v, @NonNull GlobalSettings globalSettings,
                @NonNull KeyguardSecurityViewFlipper viewFlipper,
                @NonNull FalsingManager falsingManager,
                @NonNull UserSwitcherController userSwitcherController) {
                @NonNull UserSwitcherController userSwitcherController,
                @NonNull FalsingA11yDelegate falsingA11yDelegate) {
            init(v, viewFlipper, globalSettings, /* leftAlignedByDefault= */false);
            mView = v;
            mViewFlipper = viewFlipper;
            mFalsingManager = falsingManager;
            mUserSwitcherController = userSwitcherController;
            mResources = v.getContext().getResources();
            mFalsingA11yDelegate = falsingA11yDelegate;

            if (mUserSwitcherViewGroup == null) {
                LayoutInflater.from(v.getContext()).inflate(
@@ -978,6 +987,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
            mUserSwitcher.setText(currentUserName);

            KeyguardUserSwitcherAnchor anchor = mView.findViewById(R.id.user_switcher_anchor);
            anchor.setAccessibilityDelegate(mFalsingA11yDelegate);

            BaseUserSwitcherAdapter adapter = new BaseUserSwitcherAdapter(mUserSwitcherController) {
                @Override
@@ -1048,7 +1058,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout {

            anchor.setOnClickListener((v) -> {
                if (mFalsingManager.isFalseTap(LOW_PENALTY)) return;
                mPopup = new KeyguardUserSwitcherPopupMenu(v.getContext(), mFalsingManager);
                mPopup = new KeyguardUserSwitcherPopupMenu(mView.getContext(), mFalsingManager);
                mPopup.setAnchorView(anchor);
                mPopup.setAdapter(adapter);
                mPopup.setOnItemClickListener((parent, view, pos, id) -> {
@@ -1137,7 +1147,8 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
        public void init(@NonNull ConstraintLayout v, @NonNull GlobalSettings globalSettings,
                @NonNull KeyguardSecurityViewFlipper viewFlipper,
                @NonNull FalsingManager falsingManager,
                @NonNull UserSwitcherController userSwitcherController) {
                @NonNull UserSwitcherController userSwitcherController,
                @NonNull FalsingA11yDelegate falsingA11yDelegate) {
            init(v, viewFlipper, globalSettings, /* leftAlignedByDefault= */true);
            mView = v;
            mViewFlipper = viewFlipper;
+11 −4
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ import com.android.settingslib.utils.ThreadUtils;
import com.android.systemui.Gefingerpoken;
import com.android.systemui.R;
import com.android.systemui.biometrics.SidefpsController;
import com.android.systemui.classifier.FalsingA11yDelegate;
import com.android.systemui.classifier.FalsingCollector;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
@@ -100,6 +101,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
    private final FeatureFlags mFeatureFlags;
    private final SessionTracker mSessionTracker;
    private final Optional<SidefpsController> mSidefpsController;
    private final FalsingA11yDelegate mFalsingA11yDelegate;

    private int mLastOrientation = Configuration.ORIENTATION_UNDEFINED;

@@ -288,7 +290,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
            FeatureFlags featureFlags,
            GlobalSettings globalSettings,
            SessionTracker sessionTracker,
            Optional<SidefpsController> sidefpsController) {
            Optional<SidefpsController> sidefpsController,
            FalsingA11yDelegate falsingA11yDelegate) {
        super(view);
        mLockPatternUtils = lockPatternUtils;
        mUpdateMonitor = keyguardUpdateMonitor;
@@ -309,6 +312,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
        mGlobalSettings = globalSettings;
        mSessionTracker = sessionTracker;
        mSidefpsController = sidefpsController;
        mFalsingA11yDelegate = falsingA11yDelegate;
    }

    @Override
@@ -625,7 +629,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard

        mView.initMode(mode, mGlobalSettings, mFalsingManager, mUserSwitcherController,
                () -> showMessage(getContext().getString(R.string.keyguard_unlock_to_continue),
                        null));
                        null), mFalsingA11yDelegate);
    }

    public void reportFailedUnlockAttempt(int userId, int timeoutMs) {
@@ -730,6 +734,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
        private final UserSwitcherController mUserSwitcherController;
        private final SessionTracker mSessionTracker;
        private final Optional<SidefpsController> mSidefpsController;
        private final FalsingA11yDelegate mFalsingA11yDelegate;

        @Inject
        Factory(KeyguardSecurityContainer view,
@@ -749,7 +754,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
                FeatureFlags featureFlags,
                GlobalSettings globalSettings,
                SessionTracker sessionTracker,
                Optional<SidefpsController> sidefpsController) {
                Optional<SidefpsController> sidefpsController,
                FalsingA11yDelegate falsingA11yDelegate) {
            mView = view;
            mAdminSecondaryLockScreenControllerFactory = adminSecondaryLockScreenControllerFactory;
            mLockPatternUtils = lockPatternUtils;
@@ -767,6 +773,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
            mUserSwitcherController = userSwitcherController;
            mSessionTracker = sessionTracker;
            mSidefpsController = sidefpsController;
            mFalsingA11yDelegate = falsingA11yDelegate;
        }

        public KeyguardSecurityContainerController create(
@@ -777,7 +784,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
                    mKeyguardStateController, securityCallback, mSecurityViewFlipperController,
                    mConfigurationController, mFalsingCollector, mFalsingManager,
                    mUserSwitcherController, mFeatureFlags, mGlobalSettings, mSessionTracker,
                    mSidefpsController);
                    mSidefpsController, mFalsingA11yDelegate);
        }
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -337,7 +337,8 @@ public class BrightLineFalsingManager implements FalsingManager {
                || mTestHarness
                || mDataProvider.isJustUnlockedWithFace()
                || mDataProvider.isDocked()
                || mAccessibilityManager.isTouchExplorationEnabled();
                || mAccessibilityManager.isTouchExplorationEnabled()
                || mDataProvider.isA11yAction();
    }

    @Override
+38 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.classifier

import android.os.Bundle
import android.view.View
import android.view.accessibility.AccessibilityNodeInfo.ACTION_CLICK
import javax.inject.Inject

/**
 * Class that injects an artificial tap into the falsing collector.
 *
 * This is used for views that can be interacted with by A11y services and have falsing checks, as
 * the gestures made by the A11y framework do not propagate motion events down the view hierarchy.
 */
class FalsingA11yDelegate @Inject constructor(private val falsingCollector: FalsingCollector) :
    View.AccessibilityDelegate() {
    override fun performAccessibilityAction(host: View?, action: Int, args: Bundle?): Boolean {
        if (action == ACTION_CLICK) {
            falsingCollector.onA11yAction()
        }
        return super.performAccessibilityAction(host, action, args)
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -132,5 +132,8 @@ public interface FalsingCollector {

    /** */
    void updateFalseConfidence(FalsingClassifier.Result result);

    /** Indicates an a11y action was made. */
    void onA11yAction();
}
Loading