fix: Selected privileged app

This commit is contained in:
J-Jamet
2025-09-03 17:35:48 +02:00
parent 074910ea19
commit 754d195e26
3 changed files with 27 additions and 12 deletions

View File

@@ -53,7 +53,10 @@ class PasskeysPrivilegedAppsPreferenceDialogFragmentCompat
when(uiState) {
is PasskeysPrivilegedAppsViewModel.UiState.Loading -> {}
is PasskeysPrivilegedAppsViewModel.UiState.OnPrivilegedAppsToSelectRetrieved -> {
mAdapter.setItems(uiState.privilegedApps)
mAdapter.apply {
setItems(uiState.privilegedApps)
selectedItem = uiState.selected.firstOrNull()
}
}
}
}

View File

@@ -32,7 +32,11 @@ class ListSelectionItemAdapter<T>()
private val itemList: MutableList<T> = ArrayList()
var selectedItem: T? = null
private set
@SuppressLint("NotifyDataSetChanged")
set(value) {
field = value
notifyDataSetChanged()
}
var itemSelectedCallback: ItemSelectedCallback<T>? = null

View File

@@ -7,7 +7,8 @@ import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
import com.kunzisoft.keepass.credentialprovider.passkey.data.AndroidPrivilegedApp
import com.kunzisoft.keepass.credentialprovider.passkey.util.PrivilegedAllowLists.deletePrivilegedAppsFile
import com.kunzisoft.keepass.credentialprovider.passkey.util.PrivilegedAllowLists.retrieveAllPrivilegedApps
import com.kunzisoft.keepass.credentialprovider.passkey.util.PrivilegedAllowLists.retrieveCustomPrivilegedApps
import com.kunzisoft.keepass.credentialprovider.passkey.util.PrivilegedAllowLists.retrievePredefinedPrivilegedApps
import com.kunzisoft.keepass.credentialprovider.passkey.util.PrivilegedAllowLists.saveCustomPrivilegedApps
import com.kunzisoft.keepass.utils.AppUtil.getInstalledBrowsersWithSignatures
import kotlinx.coroutines.flow.MutableStateFlow
@@ -22,17 +23,21 @@ class PasskeysPrivilegedAppsViewModel(application: Application): AndroidViewMode
fun retrievePrivilegedAppsToSelect() {
viewModelScope.launch {
val privilegedApps = retrieveAllPrivilegedApps(getApplication())
val privilegedAppsToSelect = getInstalledBrowsersWithSignatures(getApplication())
.filter {
privilegedApps.none { privilegedApp ->
val predefinedPrivilegedApps = retrievePredefinedPrivilegedApps(getApplication())
val customPrivilegedApps = retrieveCustomPrivilegedApps(getApplication())
// Only retrieve browser apps that are not already in the predefined list
val browserApps = getInstalledBrowsersWithSignatures(getApplication()).filter {
predefinedPrivilegedApps.none { privilegedApp ->
privilegedApp.packageName == it.packageName
&& privilegedApp.fingerprints.any {
fingerprint -> fingerprint in it.fingerprints
}
}
}
_uiState.value = UiState.OnPrivilegedAppsToSelectRetrieved(privilegedAppsToSelect)
_uiState.value = UiState.OnPrivilegedAppsToSelectRetrieved(
privilegedApps = browserApps,
selected = customPrivilegedApps
)
}
}
@@ -47,6 +52,9 @@ class PasskeysPrivilegedAppsViewModel(application: Application): AndroidViewMode
sealed class UiState {
object Loading : UiState()
data class OnPrivilegedAppsToSelectRetrieved(val privilegedApps: List<AndroidPrivilegedApp>) : UiState()
data class OnPrivilegedAppsToSelectRetrieved(
val privilegedApps: List<AndroidPrivilegedApp>,
val selected: List<AndroidPrivilegedApp>
) : UiState()
}
}