Loading packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +18 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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)); Loading @@ -337,6 +340,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { } mGlobalSettings = globalSettings; mFalsingManager = falsingManager; mFalsingA11yDelegate = falsingA11yDelegate; mUserSwitcherController = userSwitcherController; setupViewMode(); } Loading @@ -361,7 +365,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { } mViewMode.init(this, mGlobalSettings, mSecurityViewFlipper, mFalsingManager, mUserSwitcherController); mUserSwitcherController, mFalsingA11yDelegate); } @Mode int getMode() { Loading Loading @@ -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() {}; Loading Loading @@ -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; Loading Loading @@ -865,6 +871,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { this::setupUserSwitcher; private UserSwitcherCallback mUserSwitcherCallback; private FalsingA11yDelegate mFalsingA11yDelegate; UserSwitcherViewMode(UserSwitcherCallback userSwitcherCallback) { mUserSwitcherCallback = userSwitcherCallback; Loading @@ -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( Loading Loading @@ -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 Loading Loading @@ -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) -> { Loading Loading @@ -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; Loading packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +11 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -309,6 +312,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mGlobalSettings = globalSettings; mSessionTracker = sessionTracker; mSidefpsController = sidefpsController; mFalsingA11yDelegate = falsingA11yDelegate; } @Override Loading Loading @@ -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) { Loading Loading @@ -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, Loading @@ -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; Loading @@ -767,6 +773,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mUserSwitcherController = userSwitcherController; mSessionTracker = sessionTracker; mSidefpsController = sidefpsController; mFalsingA11yDelegate = falsingA11yDelegate; } public KeyguardSecurityContainerController create( Loading @@ -777,7 +784,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mKeyguardStateController, securityCallback, mSecurityViewFlipperController, mConfigurationController, mFalsingCollector, mFalsingManager, mUserSwitcherController, mFeatureFlags, mGlobalSettings, mSessionTracker, mSidefpsController); mSidefpsController, mFalsingA11yDelegate); } } } packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -337,7 +337,8 @@ public class BrightLineFalsingManager implements FalsingManager { || mTestHarness || mDataProvider.isJustUnlockedWithFace() || mDataProvider.isDocked() || mAccessibilityManager.isTouchExplorationEnabled(); || mAccessibilityManager.isTouchExplorationEnabled() || mDataProvider.isA11yAction(); } @Override Loading packages/SystemUI/src/com/android/systemui/classifier/FalsingA11yDelegate.kt 0 → 100644 +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) } } packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java +3 −0 Original line number Diff line number Diff line Loading @@ -132,5 +132,8 @@ public interface FalsingCollector { /** */ void updateFalseConfidence(FalsingClassifier.Result result); /** Indicates an a11y action was made. */ void onA11yAction(); } Loading
packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +18 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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)); Loading @@ -337,6 +340,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { } mGlobalSettings = globalSettings; mFalsingManager = falsingManager; mFalsingA11yDelegate = falsingA11yDelegate; mUserSwitcherController = userSwitcherController; setupViewMode(); } Loading @@ -361,7 +365,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { } mViewMode.init(this, mGlobalSettings, mSecurityViewFlipper, mFalsingManager, mUserSwitcherController); mUserSwitcherController, mFalsingA11yDelegate); } @Mode int getMode() { Loading Loading @@ -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() {}; Loading Loading @@ -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; Loading Loading @@ -865,6 +871,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { this::setupUserSwitcher; private UserSwitcherCallback mUserSwitcherCallback; private FalsingA11yDelegate mFalsingA11yDelegate; UserSwitcherViewMode(UserSwitcherCallback userSwitcherCallback) { mUserSwitcherCallback = userSwitcherCallback; Loading @@ -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( Loading Loading @@ -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 Loading Loading @@ -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) -> { Loading Loading @@ -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; Loading
packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +11 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -309,6 +312,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mGlobalSettings = globalSettings; mSessionTracker = sessionTracker; mSidefpsController = sidefpsController; mFalsingA11yDelegate = falsingA11yDelegate; } @Override Loading Loading @@ -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) { Loading Loading @@ -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, Loading @@ -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; Loading @@ -767,6 +773,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mUserSwitcherController = userSwitcherController; mSessionTracker = sessionTracker; mSidefpsController = sidefpsController; mFalsingA11yDelegate = falsingA11yDelegate; } public KeyguardSecurityContainerController create( Loading @@ -777,7 +784,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mKeyguardStateController, securityCallback, mSecurityViewFlipperController, mConfigurationController, mFalsingCollector, mFalsingManager, mUserSwitcherController, mFeatureFlags, mGlobalSettings, mSessionTracker, mSidefpsController); mSidefpsController, mFalsingA11yDelegate); } } }
packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -337,7 +337,8 @@ public class BrightLineFalsingManager implements FalsingManager { || mTestHarness || mDataProvider.isJustUnlockedWithFace() || mDataProvider.isDocked() || mAccessibilityManager.isTouchExplorationEnabled(); || mAccessibilityManager.isTouchExplorationEnabled() || mDataProvider.isA11yAction(); } @Override Loading
packages/SystemUI/src/com/android/systemui/classifier/FalsingA11yDelegate.kt 0 → 100644 +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) } }
packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java +3 −0 Original line number Diff line number Diff line Loading @@ -132,5 +132,8 @@ public interface FalsingCollector { /** */ void updateFalseConfidence(FalsingClassifier.Result result); /** Indicates an a11y action was made. */ void onA11yAction(); }