diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/ServerRowAdapter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/ServerRowAdapter.kt index dcb57e1d..6f02ef06 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/ServerRowAdapter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/ServerRowAdapter.kt @@ -23,8 +23,6 @@ import org.moire.ultrasonic.util.ServerColor /** * Row Adapter to be used in the Server List * Converts a Server Setting into a displayable Row, and sets up the Row's context menu - * @param manageMode: set to True if the default action by clicking the row is to edit the server - * In Manage Mode the "Offline" setting is not visible, and the servers can be edited by * clicking the row. */ internal class ServerRowAdapter( @@ -32,9 +30,8 @@ internal class ServerRowAdapter( passedData: Array, private val model: ServerSettingsModel, private val activeServerProvider: ActiveServerProvider, - private val manageMode: Boolean, - private val serverDeletedCallback: ((Int) -> Unit), - private val serverEditRequestedCallback: ((Int) -> Unit) + private val serverDeletedCallback: (Int) -> Unit, + private val serverEditRequestedCallback: (Int) -> Unit ) : BaseAdapter() { private var data: MutableList = mutableListOf() @@ -56,10 +53,8 @@ internal class ServerRowAdapter( fun setData(data: Array) { this.data.clear() - // In read mode show the offline server as well - if (!manageMode) { - this.data.add(ActiveServerProvider.OFFLINE_DB) - } + // Show the offline server as well + this.data.add(ActiveServerProvider.OFFLINE_DB) this.data.addAll(data) notifyDataSetChanged() @@ -82,10 +77,6 @@ internal class ServerRowAdapter( */ @Suppress("LongMethod") override fun getView(pos: Int, convertView: View?, parent: ViewGroup?): View? { - var position = pos - - // Skip "Offline" in manage mode - if (manageMode) position++ var vi: View? = convertView if (vi == null) vi = inflater.inflate(R.layout.server_row, parent, false) @@ -95,7 +86,7 @@ internal class ServerRowAdapter( val layout = vi?.findViewById(R.id.server_layout) val image = vi?.findViewById(R.id.server_image) val serverMenu = vi?.findViewById(R.id.server_menu) - val setting = data.singleOrNull { t -> t.index == position } + val setting = data.singleOrNull { t -> t.index == pos } text?.text = setting?.name ?: "" description?.text = setting?.url ?: "" @@ -122,7 +113,7 @@ internal class ServerRowAdapter( image?.background = background // Highlight the Active Server's row by changing its background - if (position == activeServerProvider.getActiveServer().index) { + if (pos == activeServerProvider.getActiveServer().index) { layout?.background = ContextCompat.getDrawable(context, R.drawable.select_ripple) } else { layout?.background = ContextCompat.getDrawable(context, R.drawable.default_ripple) @@ -134,7 +125,7 @@ internal class ServerRowAdapter( R.drawable.select_ripple_circle ) - serverMenu?.setOnClickListener { view -> serverMenuClick(view, position) } + serverMenu?.setOnClickListener { view -> serverMenuClick(view, pos) } return vi } @@ -145,18 +136,14 @@ internal class ServerRowAdapter( private fun serverMenuClick(view: View, position: Int) { val menu = PopupMenu(context, view) val firstServer = 1 - var lastServer = count - 1 + val lastServer = count - 1 - if (!manageMode) { - menu.menu.add( - Menu.NONE, - MENU_ID_EDIT, - Menu.NONE, - context.getString(R.string.server_menu_edit) - ) - } else { - lastServer++ - } + menu.menu.add( + Menu.NONE, + MENU_ID_EDIT, + Menu.NONE, + context.getString(R.string.server_menu_edit) + ) menu.menu.add( Menu.NONE, diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSelectorFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSelectorFragment.kt index 0798950b..ffc6e9a5 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSelectorFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSelectorFragment.kt @@ -14,6 +14,7 @@ import org.koin.androidx.viewmodel.ext.android.viewModel import org.moire.ultrasonic.R import org.moire.ultrasonic.adapters.ServerRowAdapter import org.moire.ultrasonic.data.ActiveServerProvider +import org.moire.ultrasonic.data.ActiveServerProvider.Companion.OFFLINE_DB_ID import org.moire.ultrasonic.data.ServerSetting import org.moire.ultrasonic.fragment.EditServerFragment.Companion.EDIT_SERVER_INTENT_INDEX import org.moire.ultrasonic.model.ServerSettingsModel @@ -28,9 +29,6 @@ import timber.log.Timber * TODO: Manage mode is unused. Remove it... */ class ServerSelectorFragment : Fragment() { - companion object { - const val SERVER_SELECTOR_MANAGE_MODE = "manageMode" - } private var listView: ListView? = null private val serverSettingsModel: ServerSettingsModel by viewModel() @@ -55,16 +53,7 @@ class ServerSelectorFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val manageMode = arguments?.getBoolean( - SERVER_SELECTOR_MANAGE_MODE, - false - ) ?: false - - if (manageMode) { - FragmentTitle.setTitle(this, R.string.settings_server_manage_servers) - } else { - FragmentTitle.setTitle(this, R.string.server_selector_label) - } + FragmentTitle.setTitle(this, R.string.server_selector_label) listView = view.findViewById(R.id.server_list) serverRowAdapter = ServerRowAdapter( @@ -72,7 +61,6 @@ class ServerSelectorFragment : Fragment() { arrayOf(), serverSettingsModel, activeServerProvider, - manageMode, ::deleteServerById, ::editServerByIndex ) @@ -82,12 +70,8 @@ class ServerSelectorFragment : Fragment() { listView?.onItemClickListener = AdapterView.OnItemClickListener { parent, _, position, _ -> val server = parent.getItemAtPosition(position) as ServerSetting - if (manageMode) { - editServerByIndex(position + 1) - } else { - setActiveServerById(server.id) - findNavController().popBackStack(R.id.mainFragment, false) - } + setActiveServerById(server.id) + findNavController().popBackStack(R.id.mainFragment, false) } val fab = view.findViewById(R.id.server_add_fab) @@ -110,12 +94,20 @@ class ServerSelectorFragment : Fragment() { * Sets the active server when a list item is clicked */ private fun setActiveServerById(id: Int) { + val oldId = activeServerProvider.getActiveServer().id - controller.clearIncomplete() + // Check if there is a change + if (oldId == id) + return - if (activeServerProvider.getActiveServer().id != id) { - ActiveServerProvider.setActiveServerById(id) + // Remove incomplete tracks if we are going offline, or changing between servers. + // If we are coming from offline there is no need to clear downloads etc. + if (oldId != OFFLINE_DB_ID) { + controller.removeIncompleteTracksFromPlaylist() + controller.clearDownloads() } + + ActiveServerProvider.setActiveServerById(id) } /** @@ -132,7 +124,7 @@ class ServerSelectorFragment : Fragment() { val activeServerId = ActiveServerProvider.getActiveServerId() // If the currently active server is deleted, go offline - if (id == activeServerId) setActiveServerById(ActiveServerProvider.OFFLINE_DB_ID) + if (id == activeServerId) setActiveServerById(OFFLINE_DB_ID) serverSettingsModel.deleteItemById(id) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt index 869ba44e..4c21c547 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt @@ -468,13 +468,24 @@ class MediaPlayerController( } @Synchronized - fun clearIncomplete() { - reset() - + fun clearDownloads() { downloader.clearActiveDownloads() downloader.clearBackground() + } - jukeboxMediaPlayer.updatePlaylist() + @Synchronized + fun removeIncompleteTracksFromPlaylist() { + val list = playlist.toList() + var removed = 0 + for ((index, item) in list.withIndex()) { + val state = downloader.getDownloadState(item.toTrack()) + + // The track is not downloaded, remove it + if (state != DownloadStatus.DONE && state != DownloadStatus.PINNED) { + removeFromPlaylist(index - removed) + removed++ + } + } } @Synchronized diff --git a/ultrasonic/src/main/res/values-cs/strings.xml b/ultrasonic/src/main/res/values-cs/strings.xml index 2724208f..8a91149f 100644 --- a/ultrasonic/src/main/res/values-cs/strings.xml +++ b/ultrasonic/src/main/res/values-cs/strings.xml @@ -239,7 +239,6 @@ 75 Historie hledání vyčištěna Nastavení vyhledávání - Spravovat servery Adresa serveru Název Heslo diff --git a/ultrasonic/src/main/res/values-de/strings.xml b/ultrasonic/src/main/res/values-de/strings.xml index dfd9e8a5..2afd3e8d 100644 --- a/ultrasonic/src/main/res/values-de/strings.xml +++ b/ultrasonic/src/main/res/values-de/strings.xml @@ -279,7 +279,6 @@ 75 Suchhistorie gelöscht Sucheinstellungen - Server verwalten Server Adresse Name Kennwort diff --git a/ultrasonic/src/main/res/values-es/strings.xml b/ultrasonic/src/main/res/values-es/strings.xml index 182d22a9..b8b90666 100644 --- a/ultrasonic/src/main/res/values-es/strings.xml +++ b/ultrasonic/src/main/res/values-es/strings.xml @@ -279,7 +279,6 @@ 75 Se ha limpiado el historial de búsqueda Configuración de la búsqueda - Administrar servidores Dirección del servidor Nombre Contraseña diff --git a/ultrasonic/src/main/res/values-fr/strings.xml b/ultrasonic/src/main/res/values-fr/strings.xml index 2cf4d675..1aa86595 100644 --- a/ultrasonic/src/main/res/values-fr/strings.xml +++ b/ultrasonic/src/main/res/values-fr/strings.xml @@ -259,7 +259,6 @@ 75 Historique des recherches effacé Paramètres de recherche - Gérer les serveurs Adresse du serveur Nom Mot de passe diff --git a/ultrasonic/src/main/res/values-hu/strings.xml b/ultrasonic/src/main/res/values-hu/strings.xml index ead5a141..a691327c 100644 --- a/ultrasonic/src/main/res/values-hu/strings.xml +++ b/ultrasonic/src/main/res/values-hu/strings.xml @@ -247,7 +247,6 @@ 75 Keresési előzmények törölve. Keresés beállításai - Kiszolgálók kezelése Kiszolgáló címe Név Jelszó diff --git a/ultrasonic/src/main/res/values-nl/strings.xml b/ultrasonic/src/main/res/values-nl/strings.xml index e04af037..4071079f 100644 --- a/ultrasonic/src/main/res/values-nl/strings.xml +++ b/ultrasonic/src/main/res/values-nl/strings.xml @@ -279,7 +279,6 @@ 75 Zoekgeschiedenis gewist Zoekinstellingen - Manage Servers Serveradres Naam Wachtwoord diff --git a/ultrasonic/src/main/res/values-pl/strings.xml b/ultrasonic/src/main/res/values-pl/strings.xml index 4bc596ed..6d8b62cb 100644 --- a/ultrasonic/src/main/res/values-pl/strings.xml +++ b/ultrasonic/src/main/res/values-pl/strings.xml @@ -239,7 +239,6 @@ 75 Wyczyść historię wyszukiwania Ustawienia wyszukiwania - Manage Servers Adres serwera Nazwa Hasło diff --git a/ultrasonic/src/main/res/values-pt-rBR/strings.xml b/ultrasonic/src/main/res/values-pt-rBR/strings.xml index 52c5f8ef..3907fbe4 100644 --- a/ultrasonic/src/main/res/values-pt-rBR/strings.xml +++ b/ultrasonic/src/main/res/values-pt-rBR/strings.xml @@ -254,7 +254,6 @@ 75 Histórico de pesquisas apagado Configurações de Pesquisa - Gerenciar Servidores Endereço do Servidor Nome Senha diff --git a/ultrasonic/src/main/res/values-pt/strings.xml b/ultrasonic/src/main/res/values-pt/strings.xml index 02e043d3..984492de 100644 --- a/ultrasonic/src/main/res/values-pt/strings.xml +++ b/ultrasonic/src/main/res/values-pt/strings.xml @@ -239,7 +239,6 @@ 75 Histórico de pesquisas apagado Configurações de Pesquisa - Manage Servers Endereço do Servidor Nome Senha diff --git a/ultrasonic/src/main/res/values-ru/strings.xml b/ultrasonic/src/main/res/values-ru/strings.xml index aa628309..b0522c2a 100644 --- a/ultrasonic/src/main/res/values-ru/strings.xml +++ b/ultrasonic/src/main/res/values-ru/strings.xml @@ -265,7 +265,6 @@ 75 История поиска очищена Настройки поиска - Управление серверами Адрес сервера Имя Пароль diff --git a/ultrasonic/src/main/res/values-zh-rCN/strings.xml b/ultrasonic/src/main/res/values-zh-rCN/strings.xml index 417e75a1..74810251 100644 --- a/ultrasonic/src/main/res/values-zh-rCN/strings.xml +++ b/ultrasonic/src/main/res/values-zh-rCN/strings.xml @@ -259,7 +259,6 @@ 75 搜索记录已清除 搜索设置 - 管理服务器 服务器地址 名称 密码 diff --git a/ultrasonic/src/main/res/values/strings.xml b/ultrasonic/src/main/res/values/strings.xml index b6dadbec..594a509c 100644 --- a/ultrasonic/src/main/res/values/strings.xml +++ b/ultrasonic/src/main/res/values/strings.xml @@ -290,7 +290,6 @@ 75 Search history cleared Search Settings - Manage Servers Server Address Name Password