Merge "[User Switcher] Remove falsing check for a11y." into tm-qpr-dev am: 9e95fb4e8a
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20291285 Change-Id: Ia6cbe6933eb8c13bbff7e498783bca5c98f6ec1c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -337,7 +337,8 @@ public class BrightLineFalsingManager implements FalsingManager {
|
||||
|| mTestHarness
|
||||
|| mDataProvider.isJustUnlockedWithFace()
|
||||
|| mDataProvider.isDocked()
|
||||
|| mAccessibilityManager.isTouchExplorationEnabled();
|
||||
|| mAccessibilityManager.isTouchExplorationEnabled()
|
||||
|| mDataProvider.isA11yAction();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* 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)
|
||||
}
|
||||
}
|
||||
@@ -132,5 +132,8 @@ public interface FalsingCollector {
|
||||
|
||||
/** */
|
||||
void updateFalseConfidence(FalsingClassifier.Result result);
|
||||
|
||||
/** Indicates an a11y action was made. */
|
||||
void onA11yAction();
|
||||
}
|
||||
|
||||
|
||||
@@ -157,4 +157,8 @@ public class FalsingCollectorFake implements FalsingCollector {
|
||||
@Override
|
||||
public void updateFalseConfidence(FalsingClassifier.Result result) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onA11yAction() {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -375,6 +375,15 @@ class FalsingCollectorImpl implements FalsingCollector {
|
||||
mHistoryTracker.addResults(Collections.singleton(result), mSystemClock.uptimeMillis());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onA11yAction() {
|
||||
if (mPendingDownEvent != null) {
|
||||
mPendingDownEvent.recycle();
|
||||
mPendingDownEvent = null;
|
||||
}
|
||||
mFalsingDataProvider.onA11yAction();
|
||||
}
|
||||
|
||||
private boolean shouldSessionBeActive() {
|
||||
return mScreenOn && (mState == StatusBarState.KEYGUARD) && !mShowingAod;
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ public class FalsingDataProvider {
|
||||
private MotionEvent mFirstRecentMotionEvent;
|
||||
private MotionEvent mLastMotionEvent;
|
||||
private boolean mJustUnlockedWithFace;
|
||||
private boolean mA11YAction;
|
||||
|
||||
@Inject
|
||||
public FalsingDataProvider(
|
||||
@@ -124,6 +125,7 @@ public class FalsingDataProvider {
|
||||
mPriorMotionEvents = mRecentMotionEvents;
|
||||
mRecentMotionEvents = new TimeLimitedMotionEventBuffer(MOTION_EVENT_AGE_MS);
|
||||
}
|
||||
mA11YAction = false;
|
||||
}
|
||||
|
||||
/** Returns screen width in pixels. */
|
||||
@@ -334,6 +336,17 @@ public class FalsingDataProvider {
|
||||
mGestureFinalizedListeners.remove(listener);
|
||||
}
|
||||
|
||||
/** Return whether last gesture was an A11y action. */
|
||||
public boolean isA11yAction() {
|
||||
return mA11YAction;
|
||||
}
|
||||
|
||||
/** Set whether last gesture was an A11y action. */
|
||||
public void onA11yAction() {
|
||||
completePriorGesture();
|
||||
this.mA11YAction = true;
|
||||
}
|
||||
|
||||
void onSessionStarted() {
|
||||
mSessionListeners.forEach(SessionListener::onSessionStarted);
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
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.log.SessionTracker;
|
||||
@@ -143,6 +144,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
private SidefpsController mSidefpsController;
|
||||
@Mock
|
||||
private KeyguardPasswordViewController mKeyguardPasswordViewControllerMock;
|
||||
@Mock
|
||||
private FalsingA11yDelegate mFalsingA11yDelegate;
|
||||
|
||||
@Captor
|
||||
private ArgumentCaptor<KeyguardUpdateMonitorCallback> mKeyguardUpdateMonitorCallback;
|
||||
@@ -186,7 +189,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
mKeyguardStateController, mKeyguardSecurityViewFlipperController,
|
||||
mConfigurationController, mFalsingCollector, mFalsingManager,
|
||||
mUserSwitcherController, mFeatureFlags, mGlobalSettings,
|
||||
mSessionTracker, Optional.of(mSidefpsController)).create(mSecurityCallback);
|
||||
mSessionTracker, Optional.of(mSidefpsController), mFalsingA11yDelegate).create(
|
||||
mSecurityCallback);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -225,7 +229,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
mKeyguardSecurityContainerController.updateResources();
|
||||
verify(mView, never()).initMode(eq(MODE_DEFAULT), eq(mGlobalSettings), eq(mFalsingManager),
|
||||
eq(mUserSwitcherController),
|
||||
any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class));
|
||||
any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class),
|
||||
eq(mFalsingA11yDelegate));
|
||||
|
||||
// Update rotation. Should trigger update
|
||||
mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE;
|
||||
@@ -233,7 +238,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
mKeyguardSecurityContainerController.updateResources();
|
||||
verify(mView).initMode(eq(MODE_DEFAULT), eq(mGlobalSettings), eq(mFalsingManager),
|
||||
eq(mUserSwitcherController),
|
||||
any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class));
|
||||
any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class),
|
||||
eq(mFalsingA11yDelegate));
|
||||
}
|
||||
|
||||
private void touchDown() {
|
||||
@@ -269,7 +275,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Pattern);
|
||||
verify(mView).initMode(eq(MODE_DEFAULT), eq(mGlobalSettings), eq(mFalsingManager),
|
||||
eq(mUserSwitcherController),
|
||||
any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class));
|
||||
any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class),
|
||||
eq(mFalsingA11yDelegate));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -282,7 +289,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Pattern);
|
||||
verify(mView).initMode(eq(MODE_ONE_HANDED), eq(mGlobalSettings), eq(mFalsingManager),
|
||||
eq(mUserSwitcherController),
|
||||
any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class));
|
||||
any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class),
|
||||
eq(mFalsingA11yDelegate));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -293,7 +301,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Password);
|
||||
verify(mView).initMode(eq(MODE_DEFAULT), eq(mGlobalSettings), eq(mFalsingManager),
|
||||
eq(mUserSwitcherController),
|
||||
any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class));
|
||||
any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class),
|
||||
eq(mFalsingA11yDelegate));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -307,7 +316,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Password);
|
||||
verify(mView).initMode(anyInt(), any(GlobalSettings.class), any(FalsingManager.class),
|
||||
any(UserSwitcherController.class),
|
||||
captor.capture());
|
||||
captor.capture(),
|
||||
eq(mFalsingA11yDelegate));
|
||||
captor.getValue().showUnlockToContinueMessage();
|
||||
verify(mKeyguardPasswordViewControllerMock).showMessage(
|
||||
getContext().getString(R.string.keyguard_unlock_to_continue), null);
|
||||
|
||||
@@ -31,6 +31,7 @@ import static androidx.constraintlayout.widget.ConstraintSet.WRAP_CONTENT;
|
||||
|
||||
import static com.android.keyguard.KeyguardSecurityContainer.MODE_DEFAULT;
|
||||
import static com.android.keyguard.KeyguardSecurityContainer.MODE_ONE_HANDED;
|
||||
import static com.android.keyguard.KeyguardSecurityContainer.MODE_USER_SWITCHER;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
@@ -54,6 +55,7 @@ import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.classifier.FalsingA11yDelegate;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||
import com.android.systemui.user.data.source.UserRecord;
|
||||
@@ -87,6 +89,8 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
|
||||
private FalsingManager mFalsingManager;
|
||||
@Mock
|
||||
private UserSwitcherController mUserSwitcherController;
|
||||
@Mock
|
||||
private FalsingA11yDelegate mFalsingA11yDelegate;
|
||||
|
||||
private KeyguardSecurityContainer mKeyguardSecurityContainer;
|
||||
|
||||
@@ -111,15 +115,14 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
|
||||
when(mUserSwitcherController.getCurrentUserName()).thenReturn("Test User");
|
||||
when(mUserSwitcherController.isKeyguardShowing()).thenReturn(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnApplyWindowInsets() {
|
||||
int paddingBottom = getContext().getResources()
|
||||
.getDimensionPixelSize(R.dimen.keyguard_security_view_bottom_margin);
|
||||
int imeInsetAmount = paddingBottom + 1;
|
||||
int systemBarInsetAmount = 0;
|
||||
|
||||
mKeyguardSecurityContainer.initMode(MODE_DEFAULT, mGlobalSettings, mFalsingManager,
|
||||
mUserSwitcherController, () -> {});
|
||||
initMode(MODE_DEFAULT);
|
||||
|
||||
Insets imeInset = Insets.of(0, 0, 0, imeInsetAmount);
|
||||
Insets systemBarInset = Insets.of(0, 0, 0, systemBarInsetAmount);
|
||||
@@ -140,8 +143,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
|
||||
.getDimensionPixelSize(R.dimen.keyguard_security_view_bottom_margin);
|
||||
int systemBarInsetAmount = paddingBottom + 1;
|
||||
|
||||
mKeyguardSecurityContainer.initMode(MODE_DEFAULT, mGlobalSettings, mFalsingManager,
|
||||
mUserSwitcherController, () -> {});
|
||||
initMode(MODE_DEFAULT);
|
||||
|
||||
Insets imeInset = Insets.of(0, 0, 0, imeInsetAmount);
|
||||
Insets systemBarInset = Insets.of(0, 0, 0, systemBarInsetAmount);
|
||||
@@ -157,11 +159,8 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void testDefaultViewMode() {
|
||||
mKeyguardSecurityContainer.initMode(MODE_ONE_HANDED, mGlobalSettings, mFalsingManager,
|
||||
mUserSwitcherController, () -> {
|
||||
});
|
||||
mKeyguardSecurityContainer.initMode(MODE_DEFAULT, mGlobalSettings, mFalsingManager,
|
||||
mUserSwitcherController, () -> {});
|
||||
initMode(MODE_ONE_HANDED);
|
||||
initMode(MODE_DEFAULT);
|
||||
ConstraintSet.Constraint viewFlipperConstraint =
|
||||
getViewConstraint(mSecurityViewFlipper.getId());
|
||||
assertThat(viewFlipperConstraint.layout.topToTop).isEqualTo(PARENT_ID);
|
||||
@@ -377,8 +376,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
|
||||
|
||||
private void setupUserSwitcher() {
|
||||
when(mGlobalSettings.getInt(any(), anyInt())).thenReturn(ONE_HANDED_KEYGUARD_SIDE_RIGHT);
|
||||
mKeyguardSecurityContainer.initMode(KeyguardSecurityContainer.MODE_USER_SWITCHER,
|
||||
mGlobalSettings, mFalsingManager, mUserSwitcherController, () -> {});
|
||||
initMode(MODE_USER_SWITCHER);
|
||||
}
|
||||
|
||||
private ArrayList<UserRecord> buildUserRecords(int count) {
|
||||
@@ -396,8 +394,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
|
||||
|
||||
private void setupForUpdateKeyguardPosition(boolean oneHandedMode) {
|
||||
int mode = oneHandedMode ? MODE_ONE_HANDED : MODE_DEFAULT;
|
||||
mKeyguardSecurityContainer.initMode(mode, mGlobalSettings, mFalsingManager,
|
||||
mUserSwitcherController, () -> {});
|
||||
initMode(mode);
|
||||
}
|
||||
|
||||
/** Get the ConstraintLayout constraint of the view. */
|
||||
@@ -406,4 +403,10 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
|
||||
constraintSet.clone(mKeyguardSecurityContainer);
|
||||
return constraintSet.getConstraint(viewId);
|
||||
}
|
||||
|
||||
private void initMode(int mode) {
|
||||
mKeyguardSecurityContainer.initMode(mode, mGlobalSettings, mFalsingManager,
|
||||
mUserSwitcherController, () -> {
|
||||
}, mFalsingA11yDelegate);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +96,6 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase {
|
||||
assertThat(mBrightLineFalsingManager.isFalseTap(1)).isFalse();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testA11yDisablesTap() {
|
||||
assertThat(mBrightLineFalsingManager.isFalseTouch(Classifier.GENERIC)).isTrue();
|
||||
@@ -159,4 +158,11 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase {
|
||||
});
|
||||
assertThat(mBrightLineFalsingManager.isProximityNear()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testA11yAction() {
|
||||
assertThat(mBrightLineFalsingManager.isFalseTap(1)).isTrue();
|
||||
when(mFalsingDataProvider.isA11yAction()).thenReturn(true);
|
||||
assertThat(mBrightLineFalsingManager.isFalseTap(1)).isFalse();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* 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.testing.AndroidTestingRunner
|
||||
import android.view.View
|
||||
import android.view.accessibility.AccessibilityNodeInfo.ACTION_CLICK
|
||||
import android.view.accessibility.AccessibilityNodeInfo.ACTION_LONG_CLICK
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations
|
||||
|
||||
@SmallTest
|
||||
@RunWith(AndroidTestingRunner::class)
|
||||
class FalsingA11yDelegateTest : SysuiTestCase() {
|
||||
@Mock lateinit var falsingCollector: FalsingCollector
|
||||
@Mock lateinit var view: View
|
||||
lateinit var underTest: FalsingA11yDelegate
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
underTest = FalsingA11yDelegate(falsingCollector)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testPerformAccessibilityAction_ACTION_CLICK() {
|
||||
underTest.performAccessibilityAction(view, ACTION_CLICK, null)
|
||||
verify(falsingCollector).onA11yAction()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testPerformAccessibilityAction_not_ACTION_CLICK() {
|
||||
underTest.performAccessibilityAction(view, ACTION_LONG_CLICK, null)
|
||||
verify(falsingCollector, never()).onA11yAction()
|
||||
}
|
||||
}
|
||||
@@ -267,4 +267,10 @@ public class FalsingCollectorImplTest extends SysuiTestCase {
|
||||
mFalsingCollector.onTouchEvent(up);
|
||||
verify(mFalsingDataProvider, times(2)).onMotionEvent(any(MotionEvent.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnA11yAction() {
|
||||
mFalsingCollector.onA11yAction();
|
||||
verify(mFalsingDataProvider).onA11yAction();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -310,4 +310,10 @@ public class FalsingDataProviderTest extends ClassifierTest {
|
||||
// an empty array.
|
||||
assertThat(mDataProvider.getPriorMotionEvents()).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_MotionEventComplete_A11yAction() {
|
||||
mDataProvider.onA11yAction();
|
||||
assertThat(mDataProvider.isA11yAction()).isTrue();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user