Loading packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java +11 −0 Original line number Diff line number Diff line Loading @@ -17,11 +17,13 @@ package com.android.keyguard; import static com.android.internal.widget.flags.Flags.FLAG_HIDE_LAST_CHAR_WITH_PHYSICAL_INPUT; import static com.android.systemui.Flags.FLAG_BOUNCER_LIFECYCLE_FIX; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.times; import static org.mockito.Mockito.when; Loading Loading @@ -142,11 +144,20 @@ public class KeyguardPinBasedInputViewControllerTest extends SysuiTestCase { } @Test @EnableFlags(FLAG_BOUNCER_LIFECYCLE_FIX) public void onResume_requestsFocus() { when(mPinBasedInputView.isVisibleToUser()).thenReturn(true); mKeyguardPinViewController.onResume(KeyguardSecurityView.SCREEN_ON); verify(mPasswordEntry).requestFocus(); } @Test public void onResume_doesNotRequestFocusIfNotVisible() { when(mPinBasedInputView.isVisibleToUser()).thenReturn(false); mKeyguardPinViewController.onResume(KeyguardSecurityView.SCREEN_ON); verify(mPasswordEntry, never()).requestFocus(); } @Test public void testGetInitialMessageResId() { assertThat(mKeyguardPinViewController.getInitialMessageResId()).isNotEqualTo(0); Loading packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java +7 −3 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_RESTART_FO import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TIMEOUT; import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TRUSTAGENT_EXPIRED; import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_USER_REQUEST; import static com.android.systemui.Flags.bouncerLifecycleFix; import static com.android.systemui.Flags.pinInputFieldStyledFocusState; import android.animation.Animator; Loading Loading @@ -79,7 +80,8 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView protected void setPasswordEntryEnabled(boolean enabled) { mPasswordEntry.setEnabled(enabled); mOkButton.setEnabled(enabled); if (enabled && !mPasswordEntry.hasFocus()) { if (enabled && !mPasswordEntry.hasFocus() && (!bouncerLifecycleFix() || isVisibleToUser())) { mPasswordEntry.requestFocus(); } } Loading @@ -88,7 +90,7 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView protected void setPasswordEntryInputEnabled(boolean enabled) { mPasswordEntry.setEnabled(enabled); mOkButton.setEnabled(enabled); if (enabled) { if (enabled && (!bouncerLifecycleFix() || isVisibleToUser())) { mPasswordEntry.requestFocus(); } } Loading Loading @@ -201,7 +203,9 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView mButtons[8] = findViewById(R.id.key8); mButtons[9] = findViewById(R.id.key9); if ((!bouncerLifecycleFix() || isVisibleToUser())) { mPasswordEntry.requestFocus(); } super.onFinishInflate(); reloadColors(); } Loading packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java +7 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.keyguard; import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED; import static com.android.internal.widget.flags.Flags.hideLastCharWithPhysicalInput; import static com.android.systemui.Flags.bouncerLifecycleFix; import static com.android.systemui.Flags.pinInputFieldStyledFocusState; import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow; Loading Loading @@ -262,6 +263,12 @@ public abstract class KeyguardPinBasedInputViewController<T extends KeyguardPinB @Override public void onResume(int reason) { super.onResume(reason); if (bouncerLifecycleFix() && !mView.isVisibleToUser()) { // don't request focus if view isn't visible return; } // It's possible to reach a state here where mPasswordEntry believes it is focused // but it is not actually focused. This state will prevent the view from gaining focus, // as requestFocus will no-op since the focus flag is already set. By clearing focus first, Loading packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +1 −23 Original line number Diff line number Diff line Loading @@ -429,30 +429,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard @Override public void onDevicePolicyManagerStateChanged() { if (Flags.bouncerLifecycleFix()) { // Update the current security mode without showing it SecurityMode currSecurityMode = whitelistIpcs( () -> mSecurityModel.getSecurityMode( mSelectedUserInteractor.getSelectedUserId()) ); if (DEBUG) { Log.d(TAG, "onDevicePolicyManagerStateChanged(" + currSecurityMode + ")"); } if (currSecurityMode == SecurityMode.Invalid || currSecurityMode == mCurrentSecurityMode || currSecurityMode == SimPuk || currSecurityMode == SimPin) { return; } getCurrentSecurityController(oldView -> oldView.onPause()); mCurrentSecurityMode = currSecurityMode; } else { showPrimarySecurityScreen(false); } } }; private final SelectedUserInteractor mSelectedUserInteractor; private final Provider<DeviceEntryInteractor> mDeviceEntryInteractor; Loading Loading
packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java +11 −0 Original line number Diff line number Diff line Loading @@ -17,11 +17,13 @@ package com.android.keyguard; import static com.android.internal.widget.flags.Flags.FLAG_HIDE_LAST_CHAR_WITH_PHYSICAL_INPUT; import static com.android.systemui.Flags.FLAG_BOUNCER_LIFECYCLE_FIX; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.times; import static org.mockito.Mockito.when; Loading Loading @@ -142,11 +144,20 @@ public class KeyguardPinBasedInputViewControllerTest extends SysuiTestCase { } @Test @EnableFlags(FLAG_BOUNCER_LIFECYCLE_FIX) public void onResume_requestsFocus() { when(mPinBasedInputView.isVisibleToUser()).thenReturn(true); mKeyguardPinViewController.onResume(KeyguardSecurityView.SCREEN_ON); verify(mPasswordEntry).requestFocus(); } @Test public void onResume_doesNotRequestFocusIfNotVisible() { when(mPinBasedInputView.isVisibleToUser()).thenReturn(false); mKeyguardPinViewController.onResume(KeyguardSecurityView.SCREEN_ON); verify(mPasswordEntry, never()).requestFocus(); } @Test public void testGetInitialMessageResId() { assertThat(mKeyguardPinViewController.getInitialMessageResId()).isNotEqualTo(0); Loading
packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java +7 −3 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_RESTART_FO import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TIMEOUT; import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TRUSTAGENT_EXPIRED; import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_USER_REQUEST; import static com.android.systemui.Flags.bouncerLifecycleFix; import static com.android.systemui.Flags.pinInputFieldStyledFocusState; import android.animation.Animator; Loading Loading @@ -79,7 +80,8 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView protected void setPasswordEntryEnabled(boolean enabled) { mPasswordEntry.setEnabled(enabled); mOkButton.setEnabled(enabled); if (enabled && !mPasswordEntry.hasFocus()) { if (enabled && !mPasswordEntry.hasFocus() && (!bouncerLifecycleFix() || isVisibleToUser())) { mPasswordEntry.requestFocus(); } } Loading @@ -88,7 +90,7 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView protected void setPasswordEntryInputEnabled(boolean enabled) { mPasswordEntry.setEnabled(enabled); mOkButton.setEnabled(enabled); if (enabled) { if (enabled && (!bouncerLifecycleFix() || isVisibleToUser())) { mPasswordEntry.requestFocus(); } } Loading Loading @@ -201,7 +203,9 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView mButtons[8] = findViewById(R.id.key8); mButtons[9] = findViewById(R.id.key9); if ((!bouncerLifecycleFix() || isVisibleToUser())) { mPasswordEntry.requestFocus(); } super.onFinishInflate(); reloadColors(); } Loading
packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java +7 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.keyguard; import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED; import static com.android.internal.widget.flags.Flags.hideLastCharWithPhysicalInput; import static com.android.systemui.Flags.bouncerLifecycleFix; import static com.android.systemui.Flags.pinInputFieldStyledFocusState; import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow; Loading Loading @@ -262,6 +263,12 @@ public abstract class KeyguardPinBasedInputViewController<T extends KeyguardPinB @Override public void onResume(int reason) { super.onResume(reason); if (bouncerLifecycleFix() && !mView.isVisibleToUser()) { // don't request focus if view isn't visible return; } // It's possible to reach a state here where mPasswordEntry believes it is focused // but it is not actually focused. This state will prevent the view from gaining focus, // as requestFocus will no-op since the focus flag is already set. By clearing focus first, Loading
packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +1 −23 Original line number Diff line number Diff line Loading @@ -429,30 +429,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard @Override public void onDevicePolicyManagerStateChanged() { if (Flags.bouncerLifecycleFix()) { // Update the current security mode without showing it SecurityMode currSecurityMode = whitelistIpcs( () -> mSecurityModel.getSecurityMode( mSelectedUserInteractor.getSelectedUserId()) ); if (DEBUG) { Log.d(TAG, "onDevicePolicyManagerStateChanged(" + currSecurityMode + ")"); } if (currSecurityMode == SecurityMode.Invalid || currSecurityMode == mCurrentSecurityMode || currSecurityMode == SimPuk || currSecurityMode == SimPin) { return; } getCurrentSecurityController(oldView -> oldView.onPause()); mCurrentSecurityMode = currSecurityMode; } else { showPrimarySecurityScreen(false); } } }; private final SelectedUserInteractor mSelectedUserInteractor; private final Provider<DeviceEntryInteractor> mDeviceEntryInteractor; Loading