feat: Multiple custom list

This commit is contained in:
J-Jamet
2025-09-07 20:19:34 +02:00
parent fb909dac52
commit 05c480b6d3
3 changed files with 14 additions and 10 deletions

View File

@@ -55,7 +55,7 @@ class PasskeysPrivilegedAppsPreferenceDialogFragmentCompat
is PasskeysPrivilegedAppsViewModel.UiState.OnPrivilegedAppsToSelectRetrieved -> {
mAdapter.apply {
setItems(uiState.privilegedApps)
selectedItem = uiState.selected.firstOrNull()
selectedItems = uiState.selected.toMutableList()
}
}
}
@@ -75,7 +75,7 @@ class PasskeysPrivilegedAppsPreferenceDialogFragmentCompat
override fun onDialogClosed(positiveResult: Boolean) {
if (positiveResult) {
passkeysPrivilegedAppsViewModel.saveSelectedPrivilegedApp(mAdapter.selectedItem)
passkeysPrivilegedAppsViewModel.saveSelectedPrivilegedApp(mAdapter.selectedItems)
}
}

View File

@@ -30,8 +30,8 @@ import com.kunzisoft.keepass.R
class ListSelectionItemAdapter<T>()
: RecyclerView.Adapter<ListSelectionItemAdapter.SelectionViewHolder>() {
private val itemList: MutableList<T> = ArrayList()
var selectedItem: T? = null
private val itemList: MutableList<T> = mutableListOf()
var selectedItems: MutableList<T> = mutableListOf()
@SuppressLint("NotifyDataSetChanged")
set(value) {
field = value
@@ -50,12 +50,15 @@ class ListSelectionItemAdapter<T>()
val item = itemList[position]
holder.container.apply {
isSelected = item == selectedItem
isSelected = selectedItems.contains(item)
}
holder.textView.apply {
text = item.toString()
setOnClickListener {
selectedItem = if (item == selectedItem) null else item
if (selectedItems.contains(item))
selectedItems.remove(item)
else
selectedItems.add(item)
itemSelectedCallback?.onItemSelected(item)
notifyDataSetChanged()
}

View File

@@ -41,11 +41,12 @@ class PasskeysPrivilegedAppsViewModel(application: Application): AndroidViewMode
}
}
fun saveSelectedPrivilegedApp(privilegedApp: AndroidPrivilegedApp?) {
fun saveSelectedPrivilegedApp(privilegedApps: List<AndroidPrivilegedApp>) {
viewModelScope.launch {
privilegedApp?.let {
saveCustomPrivilegedApps(getApplication(), listOf(privilegedApp))
} ?: deletePrivilegedAppsFile(getApplication())
if (privilegedApps.isNotEmpty())
saveCustomPrivilegedApps(getApplication(), privilegedApps)
else
deletePrivilegedAppsFile(getApplication())
}
}