diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/PasskeysPrivilegedAppsPreferenceDialogFragmentCompat.kt b/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/PasskeysPrivilegedAppsPreferenceDialogFragmentCompat.kt index 468318b68..83fd21654 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/PasskeysPrivilegedAppsPreferenceDialogFragmentCompat.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/PasskeysPrivilegedAppsPreferenceDialogFragmentCompat.kt @@ -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() + } } } } diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/adapter/ListSelectionItemAdapter.kt b/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/adapter/ListSelectionItemAdapter.kt index d691df561..d000d1843 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/adapter/ListSelectionItemAdapter.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/adapter/ListSelectionItemAdapter.kt @@ -32,7 +32,11 @@ class ListSelectionItemAdapter() private val itemList: MutableList = ArrayList() var selectedItem: T? = null - private set + @SuppressLint("NotifyDataSetChanged") + set(value) { + field = value + notifyDataSetChanged() + } var itemSelectedCallback: ItemSelectedCallback? = null diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/viewmodel/PasskeysPrivilegedAppsViewModel.kt b/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/viewmodel/PasskeysPrivilegedAppsViewModel.kt index 37ebee701..e3f75480b 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/viewmodel/PasskeysPrivilegedAppsViewModel.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/viewmodel/PasskeysPrivilegedAppsViewModel.kt @@ -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 -> - privilegedApp.packageName == it.packageName + 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 - } + 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) : UiState() + data class OnPrivilegedAppsToSelectRetrieved( + val privilegedApps: List, + val selected: List + ) : UiState() } } \ No newline at end of file