Move setting isMultiDeleteState to view model and don't close if no items

This commit is contained in:
Luna712 2024-07-08 21:11:25 -06:00 committed by GitHub
parent 64c45d0468
commit 40bfe7210d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 43 additions and 36 deletions

View file

@ -113,6 +113,15 @@ class DownloadChildFragment : Fragment() {
setAppBarNoScrollFlagsOnTV() setAppBarNoScrollFlagsOnTV()
} }
observe(downloadsViewModel.isMultiDeleteState) { isMultiDeleteState ->
val adapter = binding?.downloadChildList?.adapter as? DownloadAdapter
adapter?.setIsMultiDeleteState(isMultiDeleteState)
binding?.downloadDeleteAppbar?.isVisible = isMultiDeleteState
if (!isMultiDeleteState) {
detachBackPressedCallback()
downloadsViewModel.clearSelectedItems()
}
}
observe(downloadsViewModel.selectedItems) { observe(downloadsViewModel.selectedItems) {
handleSelectedChange(it) handleSelectedChange(it)
binding?.btnDelete?.text = binding?.btnDelete?.text =
@ -160,8 +169,7 @@ class DownloadChildFragment : Fragment() {
} }
binding?.btnCancel?.setOnClickListener { binding?.btnCancel?.setOnClickListener {
adapter?.setIsMultiDeleteState(false) downloadsViewModel.setIsMultiDeleteState(false)
downloadsViewModel.clearSelectedItems()
} }
binding?.btnSelectAll?.setOnClickListener { binding?.btnSelectAll?.setOnClickListener {
@ -169,23 +177,15 @@ class DownloadChildFragment : Fragment() {
downloadsViewModel.selectAllItems() downloadsViewModel.selectAllItems()
} }
adapter?.setIsMultiDeleteState(true) downloadsViewModel.setIsMultiDeleteState(true)
} else {
binding?.downloadDeleteAppbar?.isVisible = false
detachBackPressedCallback()
adapter?.setIsMultiDeleteState(false)
downloadsViewModel.clearSelectedItems()
} }
} }
private fun setUpDownloadDeleteListener(folder: String) { private fun setUpDownloadDeleteListener(folder: String) {
downloadDeleteEventListener = { id: Int -> downloadDeleteEventListener = { id: Int ->
val list = (binding?.downloadChildList?.adapter as? DownloadAdapter)?.currentList val list = (binding?.downloadChildList?.adapter as? DownloadAdapter)?.currentList
if (list != null) { if (list?.any { it.data.id == id } == true) {
if (list.any { it.data.id == id }) { updateList(folder)
updateList(folder)
}
} }
} }
downloadDeleteEventListener?.let { VideoDownloadManager.downloadDeleteEvent += it } downloadDeleteEventListener?.let { VideoDownloadManager.downloadDeleteEvent += it }
@ -197,8 +197,7 @@ class DownloadChildFragment : Fragment() {
if (backPressedCallback == null) { if (backPressedCallback == null) {
backPressedCallback = object : OnBackPressedCallback(true) { backPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() { override fun handleOnBackPressed() {
(binding?.downloadChildList?.adapter as? DownloadAdapter)?.setIsMultiDeleteState(false) downloadsViewModel.setIsMultiDeleteState(false)
downloadsViewModel.clearSelectedItems()
} }
} }
} }

View file

@ -112,6 +112,19 @@ class DownloadFragment : Fragment() {
observe(downloadsViewModel.downloadBytes) { observe(downloadsViewModel.downloadBytes) {
updateStorageInfo(view.context, it, R.string.app_storage, binding?.downloadAppTxt, binding?.downloadApp) updateStorageInfo(view.context, it, R.string.app_storage, binding?.downloadAppTxt, binding?.downloadApp)
} }
observe(downloadsViewModel.isMultiDeleteState) { isMultiDeleteState ->
val adapter = binding?.downloadList?.adapter as? DownloadAdapter
adapter?.setIsMultiDeleteState(isMultiDeleteState)
binding?.downloadDeleteAppbar?.isVisible = isMultiDeleteState
if (!isMultiDeleteState) {
detachBackPressedCallback()
downloadsViewModel.clearSelectedItems()
// Make sure we don't display it early
if (downloadsViewModel.usedBytes.value?.let { it > 0 } == true) {
binding?.downloadStorageAppbar?.isVisible = true
}
}
}
observe(downloadsViewModel.selectedItems) { observe(downloadsViewModel.selectedItems) {
handleSelectedChange(it) handleSelectedChange(it)
binding?.btnDelete?.text = binding?.btnDelete?.text =
@ -195,8 +208,7 @@ class DownloadFragment : Fragment() {
} }
binding?.btnCancel?.setOnClickListener { binding?.btnCancel?.setOnClickListener {
adapter?.setIsMultiDeleteState(false) downloadsViewModel.setIsMultiDeleteState(false)
downloadsViewModel.clearSelectedItems()
} }
binding?.btnSelectAll?.setOnClickListener { binding?.btnSelectAll?.setOnClickListener {
@ -204,17 +216,7 @@ class DownloadFragment : Fragment() {
downloadsViewModel.selectAllItems() downloadsViewModel.selectAllItems()
} }
adapter?.setIsMultiDeleteState(true) downloadsViewModel.setIsMultiDeleteState(true)
} else {
binding?.downloadDeleteAppbar?.isVisible = false
// Make sure we don't display it early
if (downloadsViewModel.usedBytes.value?.let { it > 0 } == true) {
binding?.downloadStorageAppbar?.isVisible = true
}
detachBackPressedCallback()
adapter?.setIsMultiDeleteState(false)
downloadsViewModel.clearSelectedItems()
} }
} }
@ -329,8 +331,7 @@ class DownloadFragment : Fragment() {
if (backPressedCallback == null) { if (backPressedCallback == null) {
backPressedCallback = object : OnBackPressedCallback(true) { backPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() { override fun handleOnBackPressed() {
(binding?.downloadList?.adapter as? DownloadAdapter)?.setIsMultiDeleteState(false) downloadsViewModel.setIsMultiDeleteState(false)
downloadsViewModel.clearSelectedItems()
} }
} }
} }

View file

@ -32,19 +32,26 @@ class DownloadViewModel : ViewModel() {
val headerCards: LiveData<List<VisualDownloadCached.Header>> = _headerCards val headerCards: LiveData<List<VisualDownloadCached.Header>> = _headerCards
private val _usedBytes = MutableLiveData<Long>() private val _usedBytes = MutableLiveData<Long>()
private val _availableBytes = MutableLiveData<Long>()
private val _downloadBytes = MutableLiveData<Long>()
private val _selectedItems = MutableLiveData<MutableList<VisualDownloadCached>>(mutableListOf())
val usedBytes: LiveData<Long> = _usedBytes val usedBytes: LiveData<Long> = _usedBytes
private val _availableBytes = MutableLiveData<Long>()
val availableBytes: LiveData<Long> = _availableBytes val availableBytes: LiveData<Long> = _availableBytes
private val _downloadBytes = MutableLiveData<Long>()
val downloadBytes: LiveData<Long> = _downloadBytes val downloadBytes: LiveData<Long> = _downloadBytes
private val _isMultiDeleteState = MutableLiveData(false)
val isMultiDeleteState: LiveData<Boolean> = _isMultiDeleteState
private val _selectedItems = MutableLiveData<MutableList<VisualDownloadCached>>(mutableListOf())
val selectedItems: LiveData<MutableList<VisualDownloadCached>> = _selectedItems val selectedItems: LiveData<MutableList<VisualDownloadCached>> = _selectedItems
private var previousVisual: List<VisualDownloadCached.Header>? = null private var previousVisual: List<VisualDownloadCached.Header>? = null
fun setIsMultiDeleteState(value: Boolean) {
_isMultiDeleteState.postValue(value)
}
fun addSelected(item: VisualDownloadCached) { fun addSelected(item: VisualDownloadCached) {
val currentSelected = selectedItems.value ?: mutableListOf() val currentSelected = selectedItems.value ?: mutableListOf()
if (!currentSelected.contains(item)) { if (!currentSelected.contains(item)) {
@ -215,7 +222,7 @@ class DownloadViewModel : ViewModel() {
DialogInterface.BUTTON_POSITIVE -> { DialogInterface.BUTTON_POSITIVE -> {
viewModelScope.launchSafe { viewModelScope.launchSafe {
deleteFilesAndUpdateSettings(context, ids, this) deleteFilesAndUpdateSettings(context, ids, this)
clearSelectedItems() setIsMultiDeleteState(false)
updateList(context) updateList(context)
} }
} }