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

Commit de32c756 authored by Pat Manning's avatar Pat Manning
Browse files

Ignore space bar as confirm key when entering a password with the physical keyboard.

Change-Id: Ib7e9d32b90a8bd4f2edda14a9d1f8dc435a49b96
Fix: 325421436
Test: atest SystemUiRoboTests:KeyguardPasswordViewControllerTest
Flag: N/A
parent ecce5eb5
Loading
Loading
Loading
Loading
+40 −1
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.keyguard

import android.testing.TestableLooper
import android.view.KeyEvent
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
@@ -25,8 +27,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.util.LatencyTracker
import com.android.internal.widget.LockPatternUtils
import com.android.internal.widget.LockscreenCredential
import com.android.keyguard.domain.interactor.KeyguardKeyboardInteractor
import com.android.systemui.Flags as AconfigFlags
import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.FalsingCollector
import com.android.systemui.flags.FakeFeatureFlags
@@ -36,12 +38,17 @@ import com.android.systemui.res.R
import com.android.systemui.statusbar.policy.DevicePostureController
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import com.android.systemui.util.concurrency.DelayableExecutor
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import junit.framework.Assert.assertFalse
import junit.framework.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.anyString
import org.mockito.Captor
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.mock
@@ -49,6 +56,7 @@ import org.mockito.Mockito.never
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import com.android.systemui.Flags as AconfigFlags

@SmallTest
@RunWith(AndroidJUnit4::class)
@@ -77,6 +85,7 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() {
    private lateinit var mKeyguardMessageAreaController:
        KeyguardMessageAreaController<BouncerKeyguardMessageArea>
    @Mock private lateinit var postureController: DevicePostureController
    @Captor private lateinit var keyListenerArgumentCaptor: ArgumentCaptor<View.OnKeyListener>

    private lateinit var keyguardPasswordViewController: KeyguardPasswordViewController

@@ -171,4 +180,34 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() {
        keyguardPasswordViewController.resetState()
        verify(mKeyguardMessageAreaController).setMessage(R.string.keyguard_enter_your_password)
    }

    @Test
    fun testSpaceKeyDoesNotSubmitPassword() {
        keyguardPasswordViewController.onViewAttached()
        verify(passwordEntry).setOnKeyListener(keyListenerArgumentCaptor.capture())

        val eventHandled =
            keyListenerArgumentCaptor.value.onKey(keyguardPasswordView,
                KeyEvent.KEYCODE_SPACE,
                KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SPACE))

        assertFalse("Unlock attempted.", eventHandled)
    }

    @Test
    fun testEnterKeySubmitsPassword() {
        val password = mock<LockscreenCredential>()
        `when`(keyguardPasswordView.enteredCredential).thenReturn(password)
        `when`(password.size()).thenReturn(4)
        `when`(password.duplicate()).thenReturn(password)
        keyguardPasswordViewController.onViewAttached()
        verify(passwordEntry).setOnKeyListener(keyListenerArgumentCaptor.capture())

        val eventHandled =
            keyListenerArgumentCaptor.value.onKey(keyguardPasswordView,
                KeyEvent.KEYCODE_ENTER,
                KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER))

        assertTrue("Unlock not attempted.", eventHandled)
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -86,8 +86,9 @@ public class KeyguardPasswordViewController
    };

    private final View.OnKeyListener mKeyListener = (v, keyCode, keyEvent) -> {
        // Ignore SPACE as a confirm key to allow the space character within passwords.
        final boolean isKeyboardEnterKey = keyEvent != null
                && KeyEvent.isConfirmKey(keyCode)
                && KeyEvent.isConfirmKey(keyCode) && keyCode != KeyEvent.KEYCODE_SPACE
                && keyEvent.getAction() == KeyEvent.ACTION_UP;
        if (isKeyboardEnterKey) {
            verifyPasswordAndUnlock();