Fix database list change

This commit is contained in:
J-Jamet
2020-08-09 20:59:34 +02:00
parent a0ceb788db
commit 0eac4d4d7f
3 changed files with 35 additions and 21 deletions

View File

@@ -167,25 +167,21 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
when (databaseFiles.databaseFileAction) { when (databaseFiles.databaseFileAction) {
DatabaseFilesViewModel.DatabaseFileAction.NONE -> { DatabaseFilesViewModel.DatabaseFileAction.NONE -> {
mAdapterDatabaseHistory?.replaceAllDatabaseFileHistoryList(databaseFiles.databaseFileList) mAdapterDatabaseHistory?.replaceAllDatabaseFileHistoryList(databaseFiles.databaseFileList)
mAdapterDatabaseHistory?.notifyDataSetChanged()
} }
DatabaseFilesViewModel.DatabaseFileAction.ADD -> { DatabaseFilesViewModel.DatabaseFileAction.ADD -> {
databaseFiles.databaseFileToActivate?.let { databaseFileToAdd -> databaseFiles.databaseFileToActivate?.let { databaseFileToAdd ->
// TODO notify unique element mAdapterDatabaseHistory?.addDatabaseFileHistory(databaseFileToAdd)
mAdapterDatabaseHistory?.notifyDataSetChanged()
} }
GroupActivity.launch(this@FileDatabaseSelectActivity) GroupActivity.launch(this@FileDatabaseSelectActivity)
} }
DatabaseFilesViewModel.DatabaseFileAction.UPDATE -> { DatabaseFilesViewModel.DatabaseFileAction.UPDATE -> {
databaseFiles.databaseFileToActivate?.let { databaseFileToUpdate -> databaseFiles.databaseFileToActivate?.let { databaseFileToUpdate ->
// TODO notify unique element mAdapterDatabaseHistory?.updateDatabaseFileHistory(databaseFileToUpdate)
mAdapterDatabaseHistory?.notifyDataSetChanged()
} }
} }
DatabaseFilesViewModel.DatabaseFileAction.DELETE -> { DatabaseFilesViewModel.DatabaseFileAction.DELETE -> {
databaseFiles.databaseFileToActivate?.let { databaseFileToDelete -> databaseFiles.databaseFileToActivate?.let { databaseFileToDelete ->
mAdapterDatabaseHistory?.deleteDatabaseFileHistory(databaseFileToDelete) mAdapterDatabaseHistory?.deleteDatabaseFileHistory(databaseFileToDelete)
mAdapterDatabaseHistory?.notifyDataSetChanged()
} }
} }
} }

View File

@@ -43,8 +43,8 @@ class FileDatabaseHistoryAdapter(context: Context)
private val listDatabaseFiles = ArrayList<DatabaseFile>() private val listDatabaseFiles = ArrayList<DatabaseFile>()
private var mExpandedPosition = -1 private var mExpandedDatabaseFile: DatabaseFile? = null
private var mPreviousExpandedPosition = -1 private var mPreviousExpandedDatabaseFile: DatabaseFile? = null
@ColorInt @ColorInt
private val defaultColor: Int private val defaultColor: Int
@@ -70,10 +70,11 @@ class FileDatabaseHistoryAdapter(context: Context)
val databaseFile = listDatabaseFiles[position] val databaseFile = listDatabaseFiles[position]
// Click item to open file // Click item to open file
if (fileItemOpenListener != null) if (fileItemOpenListener != null) {
holder.fileContainer.setOnClickListener { holder.fileContainer.setOnClickListener {
fileItemOpenListener?.invoke(databaseFile) fileItemOpenListener?.invoke(databaseFile)
} }
}
// File alias // File alias
holder.fileAlias.text = databaseFile.databaseAlias holder.fileAlias.text = databaseFile.databaseAlias
@@ -104,7 +105,7 @@ class FileDatabaseHistoryAdapter(context: Context)
} }
// Click on information // Click on information
val isExpanded = position == mExpandedPosition val isExpanded = databaseFile == mExpandedDatabaseFile
//This line hides or shows the layout in question //This line hides or shows the layout in question
holder.fileExpandContainer.visibility = if (isExpanded) View.VISIBLE else View.GONE holder.fileExpandContainer.visibility = if (isExpanded) View.VISIBLE else View.GONE
@@ -131,16 +132,16 @@ class FileDatabaseHistoryAdapter(context: Context)
} }
if (isExpanded) { if (isExpanded) {
mPreviousExpandedPosition = position mPreviousExpandedDatabaseFile = databaseFile
} }
holder.fileInformation.setOnClickListener { holder.fileInformation.setOnClickListener {
mExpandedPosition = if (isExpanded) -1 else position mExpandedDatabaseFile = if (isExpanded) null else databaseFile
// Notify change // Notify change
if (mPreviousExpandedPosition < itemCount) val previousExpandedPosition = listDatabaseFiles.indexOf(mPreviousExpandedDatabaseFile)
notifyItemChanged(mPreviousExpandedPosition) notifyItemChanged(previousExpandedPosition)
notifyItemChanged(position) val expandedPosition = listDatabaseFiles.indexOf(mExpandedDatabaseFile)
notifyItemChanged(expandedPosition)
} }
// Refresh View / Close alias modification if not contains fileAlias // Refresh View / Close alias modification if not contains fileAlias
@@ -157,13 +158,30 @@ class FileDatabaseHistoryAdapter(context: Context)
listDatabaseFiles.clear() listDatabaseFiles.clear()
} }
fun replaceAllDatabaseFileHistoryList(listFileDatabaseHistoryToAdd: List<DatabaseFile>) { fun addDatabaseFileHistory(fileDatabaseHistoryToAdd: DatabaseFile) {
listDatabaseFiles.clear() listDatabaseFiles.add(0, fileDatabaseHistoryToAdd)
listDatabaseFiles.addAll(listFileDatabaseHistoryToAdd) 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) { fun deleteDatabaseFileHistory(fileDatabaseHistoryToDelete: DatabaseFile) {
listDatabaseFiles.remove(fileDatabaseHistoryToDelete) val index = listDatabaseFiles.indexOf(fileDatabaseHistoryToDelete)
if (listDatabaseFiles.remove(fileDatabaseHistoryToDelete)) {
notifyItemRemoved(index)
}
}
fun replaceAllDatabaseFileHistoryList(listFileDatabaseHistoryToAdd: List<DatabaseFile>) {
listDatabaseFiles.clear()
listDatabaseFiles.addAll(listFileDatabaseHistoryToAdd)
notifyDataSetChanged()
} }
fun setOnFileDatabaseHistoryOpenListener(listener : ((DatabaseFile)->Unit)?) { fun setOnFileDatabaseHistoryOpenListener(listener : ((DatabaseFile)->Unit)?) {

View File

@@ -14,7 +14,7 @@ data class DatabaseFile(var databaseUri: Uri? = null,
if (this === other) return true if (this === other) return true
if (other !is DatabaseFile) return false 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 if (databaseUri != other.databaseUri) return false
return true return true