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

Commit fac29892 authored by Joe Bolinger's avatar Joe Bolinger Committed by Android (Google) Code Review
Browse files

Merge "Add biometric scuba tests to presubmit."

parents 07f9a099 d551c77a
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import org.junit.runners.model.Statement
import platform.test.screenshot.DeviceEmulationRule
import platform.test.screenshot.DeviceEmulationSpec
import platform.test.screenshot.MaterialYouColorsRule
import platform.test.screenshot.PathConfig
import platform.test.screenshot.ScreenshotTestRule
import platform.test.screenshot.getEmulatedDevicePathConfig
import platform.test.screenshot.matchers.BitmapMatcher
@@ -41,13 +42,19 @@ import platform.test.screenshot.matchers.BitmapMatcher
/** A rule for View screenshot diff unit tests. */
class ViewScreenshotTestRule(
    emulationSpec: DeviceEmulationSpec,
    private val matcher: BitmapMatcher = UnitTestBitmapMatcher
    private val matcher: BitmapMatcher = UnitTestBitmapMatcher,
    pathConfig: PathConfig = getEmulatedDevicePathConfig(emulationSpec),
    assetsPathRelativeToRepo: String = ""
) : TestRule {
    private val colorsRule = MaterialYouColorsRule()
    private val deviceEmulationRule = DeviceEmulationRule(emulationSpec)
    private val screenshotRule =
        ScreenshotTestRule(
            SystemUIGoldenImagePathManager(getEmulatedDevicePathConfig(emulationSpec))
            if (assetsPathRelativeToRepo.isBlank()) {
                SystemUIGoldenImagePathManager(pathConfig)
            } else {
                SystemUIGoldenImagePathManager(pathConfig, assetsPathRelativeToRepo)
            }
        )
    private val activityRule = ActivityScenarioRule(ScreenshotActivity::class.java)
    private val delegateRule =
+16 −0
Original line number Diff line number Diff line
{
  "presubmit": [
    {
      // TODO(b/251476085): Consider merging with SystemUIGoogleScreenshotTests (in U+)
      "name": "SystemUIGoogleBiometricsScreenshotTests",
      "options": [
        {
          "exclude-annotation": "org.junit.Ignore"
        },
        {
          "exclude-annotation": "androidx.test.filters.FlakyTest"
        }
      ]
    }
  ]
}
+5 −3
Original line number Diff line number Diff line
@@ -13,7 +13,6 @@ import com.android.systemui.biometrics.ui.CredentialPasswordView
import com.android.systemui.biometrics.ui.CredentialView
import com.android.systemui.biometrics.ui.viewmodel.CredentialViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch

/** Sub-binder for the [CredentialPasswordView]. */
@@ -24,14 +23,17 @@ object CredentialPasswordViewBinder {
        view: CredentialPasswordView,
        host: CredentialView.Host,
        viewModel: CredentialViewModel,
        requestFocusForInput: Boolean,
    ) {
        val imeManager = view.context.getSystemService(InputMethodManager::class.java)!!

        val passwordField: ImeAwareEditText = view.requireViewById(R.id.lockPassword)

        view.repeatWhenAttached {
            if (requestFocusForInput) {
                passwordField.requestFocus()
                passwordField.scheduleShowSoftInput()
            }

            repeatOnLifecycle(Lifecycle.State.STARTED) {
                // observe credential validation attempts and submit/cancel buttons
+2 −3
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@ import com.android.systemui.biometrics.ui.CredentialPatternView
import com.android.systemui.biometrics.ui.CredentialView
import com.android.systemui.biometrics.ui.viewmodel.CredentialViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch

/** Sub-binder for the [CredentialPatternView]. */
@@ -30,7 +29,7 @@ object CredentialPatternViewBinder {
                    viewModel.header.collect { header ->
                        lockPatternView.setOnPatternListener(
                            OnPatternDetectedListener { pattern ->
                                if (pattern.isPatternLongEnough()) {
                                if (pattern.isPatternTooShort()) {
                                    // Pattern size is less than the minimum
                                    // do not count it as a failed attempt
                                    viewModel.showPatternTooShortError()
@@ -71,5 +70,5 @@ private class OnPatternDetectedListener(
    }
}

private fun List<LockPatternView.Cell>.isPatternLongEnough(): Boolean =
private fun List<LockPatternView.Cell>.isPatternTooShort(): Boolean =
    size < LockPatternUtils.MIN_PATTERN_REGISTER_FAIL
+3 −2
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@ import com.android.systemui.biometrics.ui.viewmodel.CredentialViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
@@ -40,6 +39,7 @@ object CredentialViewBinder {
        panelViewController: AuthPanelController,
        animatePanel: Boolean,
        maxErrorDuration: Long = 3_000L,
        requestFocusForInput: Boolean = true,
    ) {
        val titleView: TextView = view.requireViewById(R.id.title)
        val subtitleView: TextView = view.requireViewById(R.id.subtitle)
@@ -110,7 +110,8 @@ object CredentialViewBinder {

        // bind the auth widget
        when (view) {
            is CredentialPasswordView -> CredentialPasswordViewBinder.bind(view, host, viewModel)
            is CredentialPasswordView ->
                CredentialPasswordViewBinder.bind(view, host, viewModel, requestFocusForInput)
            is CredentialPatternView -> CredentialPatternViewBinder.bind(view, host, viewModel)
            else -> throw IllegalStateException("unexpected view type: ${view.javaClass.name}")
        }