From 5297d870a90a954ee1ff21e0b47ca6289c7347d6 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Thu, 21 Dec 2023 14:16:27 +0100 Subject: [PATCH] fix: crash in add to playlist dialog if playlists empty --- .../ui/dialogs/AddToPlaylistDialog.kt | 22 +++++++++---------- .../github/libretube/ui/views/DropdownMenu.kt | 8 ++++++- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt index aa7f8a5a0..42905d14f 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt @@ -66,9 +66,11 @@ class AddToPlaylistDialog : DialogFragment() { CreatePlaylistDialog().show(childFragmentManager, null) } getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener { - val index = binding.playlistsSpinner.selectedItemPosition - val playlist = playlists[index] + val playlistIndex = binding.playlistsSpinner.selectedItemPosition + + val playlist = playlists.getOrElse(playlistIndex) { return@setOnClickListener } viewModel.lastSelectedPlaylistId = playlist.id!! + dialog?.hide() lifecycleScope.launch { addToPlaylist(playlist.id, playlist.name!!) @@ -87,21 +89,17 @@ class AddToPlaylistDialog : DialogFragment() { Log.e(TAG(), e.toString()) Toast.makeText(context, R.string.unknown_error, Toast.LENGTH_SHORT).show() return@repeatOnLifecycle - } + }.filter { !it.name.isNullOrEmpty() } - playlists = response.filter { !it.name.isNullOrEmpty() } - if (playlists.isEmpty()) return@repeatOnLifecycle + binding.playlistsSpinner.setItems(playlists.map { it.name!! }) - binding.playlistsSpinner.adapter = - ArrayAdapter( - requireContext(), - R.layout.dropdown_item, - playlists.map { it.name!! } - ) + if (response.isEmpty()) return@repeatOnLifecycle // select the last used playlist viewModel.lastSelectedPlaylistId?.let { id -> - val latestIndex = response.indexOfFirst { it.id == id }.takeIf { it >= 0 } ?: 0 + val latestIndex = response + .indexOfFirst { it.id == id } + .takeIf { it >= 0 } ?: 0 binding.playlistsSpinner.setSelection(latestIndex) } } diff --git a/app/src/main/java/com/github/libretube/ui/views/DropdownMenu.kt b/app/src/main/java/com/github/libretube/ui/views/DropdownMenu.kt index 337039a10..9b1c3bb72 100644 --- a/app/src/main/java/com/github/libretube/ui/views/DropdownMenu.kt +++ b/app/src/main/java/com/github/libretube/ui/views/DropdownMenu.kt @@ -24,7 +24,7 @@ class DropdownMenu( get() = binding.autoCompleteTextView.adapter as ArrayAdapter set(value) { binding.autoCompleteTextView.setAdapter(value) - binding.autoCompleteTextView.setText(value.getItem(0), false) + if (!value.isEmpty) binding.autoCompleteTextView.setText(value.getItem(0), false) } val selectedItemPosition: Int @@ -36,6 +36,12 @@ class DropdownMenu( binding.textInputLayout.startIconDrawable = it.getDrawable(R.styleable.DropdownMenu_icon) } + + adapter = ArrayAdapter(context, R.layout.dropdown_item) + } + + fun setItems(items: List) { + adapter = ArrayAdapter(context, R.layout.dropdown_item, items) } fun setSelection(index: Int) {