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

Commit f06d5cf9 authored by Joshua Mccloskey's avatar Joshua Mccloskey Committed by Android (Google) Code Review
Browse files

Merge "Updating navigation view model" into main

parents 6ceaa64f 98374376
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ android_library {
        "src/**/*.kt",
    ],
    exclude_srcs: [
        "src/com/android/settings/biometrics/fingerprint2/shared/**/*.kt",
        "src/com/android/settings/biometrics/fingerprint2/lib/**/*.kt",
    ],
    use_resource_processor: true,
    resource_dirs: [
+2 −4
Original line number Diff line number Diff line
@@ -20,8 +20,8 @@ import android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERR
import android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_UNABLE_TO_PROCESS
import android.hardware.fingerprint.FingerprintManager
import com.android.settings.R
import com.android.settings.biometrics.fingerprint2.shared.model.EnrollReason
import com.android.settings.biometrics.fingerprint2.shared.model.FingerEnrollState
import com.android.settings.biometrics.fingerprint2.lib.model.EnrollReason
import com.android.settings.biometrics.fingerprint2.lib.model.FingerEnrollState

object Util {
  fun EnrollReason.toOriginalReason(): Int {
@@ -71,6 +71,4 @@ object Util {
      this == FINGERPRINT_ERROR_CANCELED,
    )
  }

}
+90 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.settings.biometrics.fingerprint2.data.repository

import android.hardware.biometrics.ComponentInfoInternal
import android.hardware.biometrics.SensorLocationInternal
import android.hardware.biometrics.SensorProperties
import android.hardware.fingerprint.FingerprintManager
import android.hardware.fingerprint.FingerprintSensorProperties
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback
import com.android.systemui.biometrics.shared.model.FingerprintSensor
import com.android.systemui.biometrics.shared.model.toFingerprintSensor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.withContext

/**
 * Provides the [FingerprintSensor]
 *
 * TODO(b/313493336): Move this to systemui
 */
interface FingerprintSensorRepo {
  /** Get the [FingerprintSensor] */
  val fingerprintSensor: Flow<FingerprintSensor>
}

class FingerprintSensorRepoImpl(
    fingerprintManager: FingerprintManager,
    backgroundDispatcher: CoroutineDispatcher,
    activityScope: CoroutineScope,
) : FingerprintSensorRepo {

  override val fingerprintSensor: Flow<FingerprintSensor> =
    callbackFlow {
        val callback =
          object : IFingerprintAuthenticatorsRegisteredCallback.Stub() {
            override fun onAllAuthenticatorsRegistered(
              sensors: List<FingerprintSensorPropertiesInternal>
            ) {
              if (sensors.isEmpty()) {
                trySend(DEFAULT_PROPS)
              } else {
                trySend(sensors[0].toFingerprintSensor())
              }
            }
          }
        withContext(backgroundDispatcher) {
          fingerprintManager?.addAuthenticatorsRegisteredCallback(callback)
        }
        awaitClose {}
      }
      .stateIn(activityScope, started = SharingStarted.Eagerly, initialValue = DEFAULT_PROPS)

    companion object {
        private const val TAG = "FingerprintSensorRepoImpl"

        private val DEFAULT_PROPS =
            FingerprintSensorPropertiesInternal(
                -1 /* sensorId */,
                SensorProperties.STRENGTH_CONVENIENCE,
                0 /* maxEnrollmentsPerUser */,
                listOf<ComponentInfoInternal>(),
                FingerprintSensorProperties.TYPE_UNKNOWN,
                false /* halControlsIllumination */,
                true /* resetLockoutRequiresHardwareAuthToken */,
                listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT),
            )
                .toFingerprintSensor()
    }
}
+16 −5
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 * Copyright (C) 2024 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.
@@ -14,13 +14,24 @@
 * limitations under the License.
 */

package com.android.settings.biometrics.fingerprint2.repository
package com.android.settings.biometrics.fingerprint2.data.repository

import android.content.Context
import android.provider.Settings
import com.android.settings.biometrics.fingerprint2.shared.data.repository.PressToAuthProvider

class PressToAuthProviderImpl(val context: Context) : PressToAuthProvider {
/** Interface that indicates if press to auth is on or off. */
interface PressToAuthRepo {
  /** Indicates true if the PressToAuth feature is enabled, false otherwise. */
  val isEnabled: Boolean
}

/** Indicates whether or not the press to auth feature is enabled. */
class PressToAuthRepoImpl(private val context: Context) : PressToAuthRepo {
  /**
   * Gets the status of the press to auth feature.
   *
   * Returns whether or not the press to auth feature is enabled.
   */
  override val isEnabled: Boolean
    get() {
      var toReturn: Int =
@@ -43,7 +54,7 @@ class PressToAuthProviderImpl(val context: Context) : PressToAuthProvider {
          context.contentResolver,
          Settings.Secure.SFPS_PERFORMANT_AUTH_ENABLED,
          toReturn,
          context.userId
          context.userId,
        )
      }
      return (toReturn == 1)
+25 −28
Original line number Diff line number Diff line
@@ -26,16 +26,16 @@ import android.util.Log
import com.android.settings.biometrics.GatekeeperPasswordProvider
import com.android.settings.biometrics.fingerprint2.conversion.Util.toEnrollError
import com.android.settings.biometrics.fingerprint2.conversion.Util.toOriginalReason
import com.android.settings.biometrics.fingerprint2.shared.data.repository.PressToAuthProvider
import com.android.settings.biometrics.fingerprint2.shared.domain.interactor.FingerprintManagerInteractor
import com.android.settings.biometrics.fingerprint2.shared.model.EnrollReason
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintFlow
import com.android.settings.biometrics.fingerprint2.shared.model.FingerEnrollState
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintAuthAttemptModel
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintData
import com.android.settings.biometrics.fingerprint2.shared.model.SetupWizard
import com.android.settings.biometrics.fingerprint2.data.repository.FingerprintSensorRepo
import com.android.settings.biometrics.fingerprint2.data.repository.PressToAuthRepo
import com.android.settings.biometrics.fingerprint2.lib.domain.interactor.FingerprintManagerInteractor
import com.android.settings.biometrics.fingerprint2.lib.model.EnrollReason
import com.android.settings.biometrics.fingerprint2.lib.model.FingerEnrollState
import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintAuthAttemptModel
import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintData
import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintFlow
import com.android.settings.biometrics.fingerprint2.lib.model.SetupWizard
import com.android.settings.password.ChooseLockSettingsHelper
import com.android.systemui.biometrics.shared.model.toFingerprintSensor
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
import kotlinx.coroutines.CancellableContinuation
@@ -57,8 +57,9 @@ class FingerprintManagerInteractorImpl(
  applicationContext: Context,
  private val backgroundDispatcher: CoroutineDispatcher,
  private val fingerprintManager: FingerprintManager,
  fingerprintSensorRepo: FingerprintSensorRepo,
  private val gatekeeperPasswordProvider: GatekeeperPasswordProvider,
  private val pressToAuthProvider: PressToAuthProvider,
  private val pressToAuthRepo: PressToAuthRepo,
  private val fingerprintFlow: FingerprintFlow,
) : FingerprintManagerInteractor {

@@ -100,13 +101,7 @@ class FingerprintManagerInteractorImpl(
    )
  }

  override val sensorPropertiesInternal = flow {
    val sensorPropertiesInternal = fingerprintManager.sensorPropertiesInternal
    emit(
      if (sensorPropertiesInternal.isEmpty()) null
      else sensorPropertiesInternal.first().toFingerprintSensor()
    )
  }
  override val sensorPropertiesInternal = fingerprintSensorRepo.fingerprintSensor

  override val maxEnrollableFingerprints = flow { emit(maxFingerprints) }

@@ -136,8 +131,7 @@ class FingerprintManagerInteractorImpl(
            totalSteps = remaining + 1
          }

          trySend(FingerEnrollState.EnrollProgress(remaining, totalSteps!!)).onFailure {
            error ->
          trySend(FingerEnrollState.EnrollProgress(remaining, totalSteps!!)).onFailure { error ->
            Log.d(TAG, "onEnrollmentProgress($remaining) failed to send, due to $error")
          }

@@ -148,13 +142,16 @@ class FingerprintManagerInteractorImpl(
        }

        override fun onEnrollmentHelp(helpMsgId: Int, helpString: CharSequence?) {
          trySend(FingerEnrollState.EnrollHelp(helpMsgId, helpString.toString()))
            .onFailure { error -> Log.d(TAG, "onEnrollmentHelp failed to send, due to $error") }
          trySend(FingerEnrollState.EnrollHelp(helpMsgId, helpString.toString())).onFailure { error
            ->
            Log.d(TAG, "onEnrollmentHelp failed to send, due to $error")
          }
        }

        override fun onEnrollmentError(errMsgId: Int, errString: CharSequence?) {
          trySend(errMsgId.toEnrollError(fingerprintFlow == SetupWizard))
            .onFailure { error -> Log.d(TAG, "onEnrollmentError failed to send, due to $error") }
          trySend(errMsgId.toEnrollError(fingerprintFlow == SetupWizard)).onFailure { error ->
            Log.d(TAG, "onEnrollmentError failed to send, due to $error")
          }
          Log.d(TAG, "onEnrollmentError($errMsgId)")
          streamEnded = true
          enrollRequestOutstanding.update { false }
@@ -185,14 +182,14 @@ class FingerprintManagerInteractorImpl(
        override fun onRemovalError(
          fp: android.hardware.fingerprint.Fingerprint,
          errMsgId: Int,
          errString: CharSequence
          errString: CharSequence,
        ) {
          it.resume(false)
        }

        override fun onRemovalSucceeded(
          fp: android.hardware.fingerprint.Fingerprint?,
          remaining: Int
          remaining: Int,
        ) {
          it.resume(true)
        }
@@ -200,7 +197,7 @@ class FingerprintManagerInteractorImpl(
    fingerprintManager.remove(
      android.hardware.fingerprint.Fingerprint(fp.name, fp.fingerId, fp.deviceId),
      applicationContext.userId,
      callback
      callback,
    )
  }

@@ -215,7 +212,7 @@ class FingerprintManagerInteractorImpl(
  }

  override suspend fun pressToAuthEnabled(): Boolean = suspendCancellableCoroutine {
    it.resume(pressToAuthProvider.isEnabled)
    it.resume(pressToAuthRepo.isEnabled)
  }

  override suspend fun authenticate(): FingerprintAuthAttemptModel =
@@ -249,7 +246,7 @@ class FingerprintManagerInteractorImpl(
        cancellationSignal,
        authenticationCallback,
        null,
        applicationContext.userId
        applicationContext.userId,
      )
    }
}
Loading