1 package com.android.settings.biometrics2.ui.viewmodel 2 3 import android.app.Application 4 import androidx.lifecycle.AndroidViewModel 5 import kotlinx.atomicfu.AtomicBoolean 6 import kotlinx.atomicfu.atomic 7 import kotlinx.coroutines.flow.MutableSharedFlow 8 import kotlinx.coroutines.flow.SharedFlow 9 import kotlinx.coroutines.flow.asSharedFlow 10 11 class FingerprintEnrollErrorDialogViewModel( 12 application: Application, 13 val isSuw: Boolean 14 ): AndroidViewModel(application) { 15 16 private val _isDialogShown: AtomicBoolean = atomic(false) 17 val isDialogShown: Boolean 18 get() = _isDialogShown.value 19 20 private val _newDialogFlow = MutableSharedFlow<Int>() 21 val newDialogFlow: SharedFlow<Int> 22 get() = _newDialogFlow.asSharedFlow() 23 24 private val _triggerRetryFlow = MutableSharedFlow<Any>() 25 val triggerRetryFlow: SharedFlow<Any> 26 get() = _triggerRetryFlow.asSharedFlow() 27 28 private val _setResultFlow = MutableSharedFlow<FingerprintErrorDialogSetResultAction>() 29 val setResultFlow: SharedFlow<FingerprintErrorDialogSetResultAction> 30 get() = _setResultFlow.asSharedFlow() 31 newDialognull32 suspend fun newDialog(errorMsgId: Int) { 33 _isDialogShown.compareAndSet(expect = false, update = true) 34 _newDialogFlow.emit(errorMsgId) 35 } 36 triggerRetrynull37 suspend fun triggerRetry() { 38 _isDialogShown.compareAndSet(expect = true, update = false) 39 _triggerRetryFlow.emit(Any()) 40 } 41 setResultAndFinishnull42 suspend fun setResultAndFinish(action: FingerprintErrorDialogSetResultAction) { 43 _isDialogShown.compareAndSet(expect = true, update = false) 44 _setResultFlow.emit(action) 45 } 46 } 47 48 enum class FingerprintErrorDialogSetResultAction { 49 FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH, 50 FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT 51 } 52