Loading packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +21 −4 Original line number Diff line number Diff line Loading @@ -54,7 +54,9 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController.StateList import com.android.systemui.statusbar.phone.KeyguardIndicationTextView; import com.android.systemui.statusbar.phone.LockIcon; import com.android.systemui.statusbar.phone.LockscreenGestureLogger; import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.AccessibilityController; import com.android.systemui.statusbar.policy.UserInfoController; import com.android.systemui.util.wakelock.SettableWakeLock; import com.android.systemui.util.wakelock.WakeLock; Loading @@ -77,6 +79,8 @@ public class KeyguardIndicationController implements StateListener { private static final long TRANSIENT_BIOMETRIC_ERROR_TIMEOUT = 1300; private final Context mContext; private final ShadeController mShadeController; private final AccessibilityController mAccessibilityController; private ViewGroup mIndicationArea; private KeyguardIndicationTextView mTextView; private KeyguardIndicationTextView mDisclosure; Loading Loading @@ -116,7 +120,9 @@ public class KeyguardIndicationController implements StateListener { public KeyguardIndicationController(Context context, ViewGroup indicationArea, LockIcon lockIcon) { this(context, indicationArea, lockIcon, new LockPatternUtils(context), WakeLock.createPartial(context, "Doze:KeyguardIndication")); WakeLock.createPartial(context, "Doze:KeyguardIndication"), Dependency.get(ShadeController.class), Dependency.get(AccessibilityController.class)); registerCallbacks(KeyguardUpdateMonitor.getInstance(context)); } Loading @@ -126,7 +132,8 @@ public class KeyguardIndicationController implements StateListener { */ @VisibleForTesting KeyguardIndicationController(Context context, ViewGroup indicationArea, LockIcon lockIcon, LockPatternUtils lockPatternUtils, WakeLock wakeLock) { LockPatternUtils lockPatternUtils, WakeLock wakeLock, ShadeController shadeController, AccessibilityController accessibilityController) { mContext = context; mIndicationArea = indicationArea; mTextView = indicationArea.findViewById(R.id.keyguard_indication_text); Loading @@ -134,9 +141,12 @@ public class KeyguardIndicationController implements StateListener { mTextView.getTextColors() : ColorStateList.valueOf(Color.WHITE); mDisclosure = indicationArea.findViewById(R.id.keyguard_indication_enterprise_disclosure); mLockIcon = lockIcon; mShadeController = shadeController; mAccessibilityController = accessibilityController; // lock icon is not used on all form factors. if (mLockIcon != null) { mLockIcon.setOnLongClickListener(this::handleTrustCircleClick); mLockIcon.setOnLongClickListener(this::handleLockLongClick); mLockIcon.setOnClickListener(this::handleLockClick); } mWakeLock = new SettableWakeLock(wakeLock, TAG); mLockPatternUtils = lockPatternUtils; Loading Loading @@ -173,7 +183,7 @@ public class KeyguardIndicationController implements StateListener { Dependency.get(StatusBarStateController.class).removeCallback(this); } private boolean handleTrustCircleClick(View view) { private boolean handleLockLongClick(View view) { mLockscreenGestureLogger.write(MetricsProto.MetricsEvent.ACTION_LS_LOCK, 0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */); showTransientIndication(R.string.keyguard_indication_trust_disabled); Loading @@ -182,6 +192,13 @@ public class KeyguardIndicationController implements StateListener { return true; } private void handleLockClick(View view) { if (!mAccessibilityController.isAccessibilityEnabled()) { return; } mShadeController.showBouncer(false /* scrimmed */); } /** * Gets the {@link KeyguardUpdateMonitorCallback} instance associated with this * {@link KeyguardIndicationController}. Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +2 −4 Original line number Diff line number Diff line Loading @@ -248,10 +248,8 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange boolean canLock = mUnlockMethodCache.isMethodSecure() && mUnlockMethodCache.canSkipBouncer(); boolean clickToUnlock = mAccessibilityController.isAccessibilityEnabled(); boolean clickToForceLock = canLock && !clickToUnlock; boolean longClickToForceLock = canLock && !clickToForceLock; setClickable(clickToForceLock || clickToUnlock); setLongClickable(longClickToForceLock); setClickable(clickToUnlock); setLongClickable(canLock && !clickToUnlock); setFocusable(mAccessibilityController.isAccessibilityEnabled()); } Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +5 −1 Original line number Diff line number Diff line Loading @@ -3326,8 +3326,12 @@ public class StatusBar extends SystemUI implements DemoMode, @Override public void showBouncer(boolean scrimmed) { if (!mIsOccluded && !scrimmed && mState == StatusBarState.KEYGUARD) { animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */); } else { mStatusBarKeyguardViewManager.showBouncer(scrimmed); } } @Override public void instantExpandNotificationsPanel() { Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +29 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; Loading @@ -46,11 +48,14 @@ import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.phone.KeyguardIndicationTextView; import com.android.systemui.statusbar.phone.LockIcon; import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.policy.AccessibilityController; import com.android.systemui.util.wakelock.WakeLockFake; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; Loading @@ -72,6 +77,10 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { private LockIcon mLockIcon; @Mock private LockPatternUtils mLockPatternUtils; @Mock private ShadeController mShadeController; @Mock private AccessibilityController mAccessibilityController; private KeyguardIndicationTextView mTextView; private KeyguardIndicationController mController; Loading Loading @@ -102,7 +111,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { Looper.prepare(); } mController = new KeyguardIndicationController(mContext, mIndicationArea, mLockIcon, mLockPatternUtils, mWakeLock); mLockPatternUtils, mWakeLock, mShadeController, mAccessibilityController); } @Test Loading Loading @@ -222,4 +231,23 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { assertThat(mTextView.getCurrentTextColor()).isEqualTo(Color.WHITE); assertThat(mTextView.getAlpha()).isEqualTo(1f); } @Test public void lockIcon_click() { createController(); ArgumentCaptor<View.OnLongClickListener> longClickCaptor = ArgumentCaptor.forClass( View.OnLongClickListener.class); ArgumentCaptor<View.OnClickListener> clickCaptor = ArgumentCaptor.forClass( View.OnClickListener.class); verify(mLockIcon).setOnLongClickListener(longClickCaptor.capture()); verify(mLockIcon).setOnClickListener(clickCaptor.capture()); when(mAccessibilityController.isAccessibilityEnabled()).thenReturn(true); clickCaptor.getValue().onClick(mLockIcon); verify(mShadeController).showBouncer(eq(false)); longClickCaptor.getValue().onLongClick(mLockIcon); verify(mLockPatternUtils).requireCredentialEntry(anyInt()); } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +21 −4 Original line number Diff line number Diff line Loading @@ -54,7 +54,9 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController.StateList import com.android.systemui.statusbar.phone.KeyguardIndicationTextView; import com.android.systemui.statusbar.phone.LockIcon; import com.android.systemui.statusbar.phone.LockscreenGestureLogger; import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.AccessibilityController; import com.android.systemui.statusbar.policy.UserInfoController; import com.android.systemui.util.wakelock.SettableWakeLock; import com.android.systemui.util.wakelock.WakeLock; Loading @@ -77,6 +79,8 @@ public class KeyguardIndicationController implements StateListener { private static final long TRANSIENT_BIOMETRIC_ERROR_TIMEOUT = 1300; private final Context mContext; private final ShadeController mShadeController; private final AccessibilityController mAccessibilityController; private ViewGroup mIndicationArea; private KeyguardIndicationTextView mTextView; private KeyguardIndicationTextView mDisclosure; Loading Loading @@ -116,7 +120,9 @@ public class KeyguardIndicationController implements StateListener { public KeyguardIndicationController(Context context, ViewGroup indicationArea, LockIcon lockIcon) { this(context, indicationArea, lockIcon, new LockPatternUtils(context), WakeLock.createPartial(context, "Doze:KeyguardIndication")); WakeLock.createPartial(context, "Doze:KeyguardIndication"), Dependency.get(ShadeController.class), Dependency.get(AccessibilityController.class)); registerCallbacks(KeyguardUpdateMonitor.getInstance(context)); } Loading @@ -126,7 +132,8 @@ public class KeyguardIndicationController implements StateListener { */ @VisibleForTesting KeyguardIndicationController(Context context, ViewGroup indicationArea, LockIcon lockIcon, LockPatternUtils lockPatternUtils, WakeLock wakeLock) { LockPatternUtils lockPatternUtils, WakeLock wakeLock, ShadeController shadeController, AccessibilityController accessibilityController) { mContext = context; mIndicationArea = indicationArea; mTextView = indicationArea.findViewById(R.id.keyguard_indication_text); Loading @@ -134,9 +141,12 @@ public class KeyguardIndicationController implements StateListener { mTextView.getTextColors() : ColorStateList.valueOf(Color.WHITE); mDisclosure = indicationArea.findViewById(R.id.keyguard_indication_enterprise_disclosure); mLockIcon = lockIcon; mShadeController = shadeController; mAccessibilityController = accessibilityController; // lock icon is not used on all form factors. if (mLockIcon != null) { mLockIcon.setOnLongClickListener(this::handleTrustCircleClick); mLockIcon.setOnLongClickListener(this::handleLockLongClick); mLockIcon.setOnClickListener(this::handleLockClick); } mWakeLock = new SettableWakeLock(wakeLock, TAG); mLockPatternUtils = lockPatternUtils; Loading Loading @@ -173,7 +183,7 @@ public class KeyguardIndicationController implements StateListener { Dependency.get(StatusBarStateController.class).removeCallback(this); } private boolean handleTrustCircleClick(View view) { private boolean handleLockLongClick(View view) { mLockscreenGestureLogger.write(MetricsProto.MetricsEvent.ACTION_LS_LOCK, 0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */); showTransientIndication(R.string.keyguard_indication_trust_disabled); Loading @@ -182,6 +192,13 @@ public class KeyguardIndicationController implements StateListener { return true; } private void handleLockClick(View view) { if (!mAccessibilityController.isAccessibilityEnabled()) { return; } mShadeController.showBouncer(false /* scrimmed */); } /** * Gets the {@link KeyguardUpdateMonitorCallback} instance associated with this * {@link KeyguardIndicationController}. Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +2 −4 Original line number Diff line number Diff line Loading @@ -248,10 +248,8 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange boolean canLock = mUnlockMethodCache.isMethodSecure() && mUnlockMethodCache.canSkipBouncer(); boolean clickToUnlock = mAccessibilityController.isAccessibilityEnabled(); boolean clickToForceLock = canLock && !clickToUnlock; boolean longClickToForceLock = canLock && !clickToForceLock; setClickable(clickToForceLock || clickToUnlock); setLongClickable(longClickToForceLock); setClickable(clickToUnlock); setLongClickable(canLock && !clickToUnlock); setFocusable(mAccessibilityController.isAccessibilityEnabled()); } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +5 −1 Original line number Diff line number Diff line Loading @@ -3326,8 +3326,12 @@ public class StatusBar extends SystemUI implements DemoMode, @Override public void showBouncer(boolean scrimmed) { if (!mIsOccluded && !scrimmed && mState == StatusBarState.KEYGUARD) { animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */); } else { mStatusBarKeyguardViewManager.showBouncer(scrimmed); } } @Override public void instantExpandNotificationsPanel() { Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +29 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; Loading @@ -46,11 +48,14 @@ import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.phone.KeyguardIndicationTextView; import com.android.systemui.statusbar.phone.LockIcon; import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.policy.AccessibilityController; import com.android.systemui.util.wakelock.WakeLockFake; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; Loading @@ -72,6 +77,10 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { private LockIcon mLockIcon; @Mock private LockPatternUtils mLockPatternUtils; @Mock private ShadeController mShadeController; @Mock private AccessibilityController mAccessibilityController; private KeyguardIndicationTextView mTextView; private KeyguardIndicationController mController; Loading Loading @@ -102,7 +111,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { Looper.prepare(); } mController = new KeyguardIndicationController(mContext, mIndicationArea, mLockIcon, mLockPatternUtils, mWakeLock); mLockPatternUtils, mWakeLock, mShadeController, mAccessibilityController); } @Test Loading Loading @@ -222,4 +231,23 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { assertThat(mTextView.getCurrentTextColor()).isEqualTo(Color.WHITE); assertThat(mTextView.getAlpha()).isEqualTo(1f); } @Test public void lockIcon_click() { createController(); ArgumentCaptor<View.OnLongClickListener> longClickCaptor = ArgumentCaptor.forClass( View.OnLongClickListener.class); ArgumentCaptor<View.OnClickListener> clickCaptor = ArgumentCaptor.forClass( View.OnClickListener.class); verify(mLockIcon).setOnLongClickListener(longClickCaptor.capture()); verify(mLockIcon).setOnClickListener(clickCaptor.capture()); when(mAccessibilityController.isAccessibilityEnabled()).thenReturn(true); clickCaptor.getValue().onClick(mLockIcon); verify(mShadeController).showBouncer(eq(false)); longClickCaptor.getValue().onLongClick(mLockIcon); verify(mLockPatternUtils).requireCredentialEntry(anyInt()); } }