diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt index aecd0c4e9..315337c13 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt @@ -167,25 +167,21 @@ class FileDatabaseSelectActivity : SpecialModeActivity(), when (databaseFiles.databaseFileAction) { DatabaseFilesViewModel.DatabaseFileAction.NONE -> { mAdapterDatabaseHistory?.replaceAllDatabaseFileHistoryList(databaseFiles.databaseFileList) - mAdapterDatabaseHistory?.notifyDataSetChanged() } DatabaseFilesViewModel.DatabaseFileAction.ADD -> { databaseFiles.databaseFileToActivate?.let { databaseFileToAdd -> - // TODO notify unique element - mAdapterDatabaseHistory?.notifyDataSetChanged() + mAdapterDatabaseHistory?.addDatabaseFileHistory(databaseFileToAdd) } GroupActivity.launch(this@FileDatabaseSelectActivity) } DatabaseFilesViewModel.DatabaseFileAction.UPDATE -> { databaseFiles.databaseFileToActivate?.let { databaseFileToUpdate -> - // TODO notify unique element - mAdapterDatabaseHistory?.notifyDataSetChanged() + mAdapterDatabaseHistory?.updateDatabaseFileHistory(databaseFileToUpdate) } } DatabaseFilesViewModel.DatabaseFileAction.DELETE -> { databaseFiles.databaseFileToActivate?.let { databaseFileToDelete -> mAdapterDatabaseHistory?.deleteDatabaseFileHistory(databaseFileToDelete) - mAdapterDatabaseHistory?.notifyDataSetChanged() } } } diff --git a/app/src/main/java/com/kunzisoft/keepass/adapters/FileDatabaseHistoryAdapter.kt b/app/src/main/java/com/kunzisoft/keepass/adapters/FileDatabaseHistoryAdapter.kt index eb945aa16..dbd35bd34 100644 --- a/app/src/main/java/com/kunzisoft/keepass/adapters/FileDatabaseHistoryAdapter.kt +++ b/app/src/main/java/com/kunzisoft/keepass/adapters/FileDatabaseHistoryAdapter.kt @@ -43,8 +43,8 @@ class FileDatabaseHistoryAdapter(context: Context) private val listDatabaseFiles = ArrayList() - private var mExpandedPosition = -1 - private var mPreviousExpandedPosition = -1 + private var mExpandedDatabaseFile: DatabaseFile? = null + private var mPreviousExpandedDatabaseFile: DatabaseFile? = null @ColorInt private val defaultColor: Int @@ -70,10 +70,11 @@ class FileDatabaseHistoryAdapter(context: Context) val databaseFile = listDatabaseFiles[position] // Click item to open file - if (fileItemOpenListener != null) + if (fileItemOpenListener != null) { holder.fileContainer.setOnClickListener { fileItemOpenListener?.invoke(databaseFile) } + } // File alias holder.fileAlias.text = databaseFile.databaseAlias @@ -104,7 +105,7 @@ class FileDatabaseHistoryAdapter(context: Context) } // Click on information - val isExpanded = position == mExpandedPosition + val isExpanded = databaseFile == mExpandedDatabaseFile //This line hides or shows the layout in question holder.fileExpandContainer.visibility = if (isExpanded) View.VISIBLE else View.GONE @@ -131,16 +132,16 @@ class FileDatabaseHistoryAdapter(context: Context) } if (isExpanded) { - mPreviousExpandedPosition = position + mPreviousExpandedDatabaseFile = databaseFile } holder.fileInformation.setOnClickListener { - mExpandedPosition = if (isExpanded) -1 else position - + mExpandedDatabaseFile = if (isExpanded) null else databaseFile // Notify change - if (mPreviousExpandedPosition < itemCount) - notifyItemChanged(mPreviousExpandedPosition) - notifyItemChanged(position) + val previousExpandedPosition = listDatabaseFiles.indexOf(mPreviousExpandedDatabaseFile) + notifyItemChanged(previousExpandedPosition) + val expandedPosition = listDatabaseFiles.indexOf(mExpandedDatabaseFile) + notifyItemChanged(expandedPosition) } // Refresh View / Close alias modification if not contains fileAlias @@ -157,13 +158,30 @@ class FileDatabaseHistoryAdapter(context: Context) listDatabaseFiles.clear() } - fun replaceAllDatabaseFileHistoryList(listFileDatabaseHistoryToAdd: List) { - listDatabaseFiles.clear() - listDatabaseFiles.addAll(listFileDatabaseHistoryToAdd) + fun addDatabaseFileHistory(fileDatabaseHistoryToAdd: DatabaseFile) { + listDatabaseFiles.add(0, fileDatabaseHistoryToAdd) + notifyItemInserted(0) + } + + fun updateDatabaseFileHistory(fileDatabaseHistoryToUpdate: DatabaseFile) { + val index = listDatabaseFiles.indexOf(fileDatabaseHistoryToUpdate) + if (listDatabaseFiles.remove(fileDatabaseHistoryToUpdate)) { + listDatabaseFiles.add(index, fileDatabaseHistoryToUpdate) + notifyItemChanged(index) + } } fun deleteDatabaseFileHistory(fileDatabaseHistoryToDelete: DatabaseFile) { - listDatabaseFiles.remove(fileDatabaseHistoryToDelete) + val index = listDatabaseFiles.indexOf(fileDatabaseHistoryToDelete) + if (listDatabaseFiles.remove(fileDatabaseHistoryToDelete)) { + notifyItemRemoved(index) + } + } + + fun replaceAllDatabaseFileHistoryList(listFileDatabaseHistoryToAdd: List) { + listDatabaseFiles.clear() + listDatabaseFiles.addAll(listFileDatabaseHistoryToAdd) + notifyDataSetChanged() } fun setOnFileDatabaseHistoryOpenListener(listener : ((DatabaseFile)->Unit)?) { diff --git a/app/src/main/java/com/kunzisoft/keepass/model/DatabaseFile.kt b/app/src/main/java/com/kunzisoft/keepass/model/DatabaseFile.kt index 34634c70d..578fc4075 100644 --- a/app/src/main/java/com/kunzisoft/keepass/model/DatabaseFile.kt +++ b/app/src/main/java/com/kunzisoft/keepass/model/DatabaseFile.kt @@ -14,7 +14,7 @@ data class DatabaseFile(var databaseUri: Uri? = null, if (this === other) return true if (other !is DatabaseFile) return false - if (databaseUri == null) return false + if (databaseUri == null || other.databaseUri == null) return false if (databaseUri != other.databaseUri) return false return true