From 725d9281bfcfe43898535f3a19e252a4f4c1c970 Mon Sep 17 00:00:00 2001 From: birdbird <6892457-tzugen@users.noreply.gitlab.com> Date: Wed, 14 Jun 2023 12:07:13 +0000 Subject: [PATCH] Move search button in to main Topbar menu --- gradle/libs.versions.toml | 2 +- .../provider/SearchSuggestionProvider.java | 37 ----- .../ultrasonic/activity/NavigationActivity.kt | 131 +++++++++++++----- .../ultrasonic/fragment/SearchFragment.kt | 87 +----------- .../fragment/TrackCollectionFragment.kt | 15 +- .../ultrasonic/playback/PlaybackService.kt | 1 + .../provider/SearchSuggestionProvider.kt | 24 ++++ .../provider/UltrasonicAppWidgetProvider.kt | 4 +- .../org/moire/ultrasonic/util/Constants.kt | 1 - ultrasonic/src/main/res/menu/search.xml | 9 -- .../src/main/res/menu/search_view_menu.xml | 12 ++ ...ct_album.xml => track_collection_menu.xml} | 0 ultrasonic/src/main/res/values-cs/strings.xml | 1 - ultrasonic/src/main/res/values-de/strings.xml | 1 - ultrasonic/src/main/res/values-es/strings.xml | 1 - ultrasonic/src/main/res/values-fr/strings.xml | 1 - ultrasonic/src/main/res/values-hu/strings.xml | 1 - ultrasonic/src/main/res/values-it/strings.xml | 1 - ultrasonic/src/main/res/values-ja/strings.xml | 1 - .../src/main/res/values-nb-rNO/strings.xml | 1 - ultrasonic/src/main/res/values-nl/strings.xml | 1 - ultrasonic/src/main/res/values-pl/strings.xml | 1 - .../src/main/res/values-pt-rBR/strings.xml | 1 - ultrasonic/src/main/res/values-pt/strings.xml | 1 - ultrasonic/src/main/res/values-ru/strings.xml | 1 - .../src/main/res/values-zh-rCN/strings.xml | 1 - .../src/main/res/values-zh-rTW/strings.xml | 1 - ultrasonic/src/main/res/values/strings.xml | 1 - 28 files changed, 144 insertions(+), 195 deletions(-) delete mode 100644 ultrasonic/src/main/java/org/moire/ultrasonic/provider/SearchSuggestionProvider.java create mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/provider/SearchSuggestionProvider.kt delete mode 100644 ultrasonic/src/main/res/menu/search.xml create mode 100644 ultrasonic/src/main/res/menu/search_view_menu.xml rename ultrasonic/src/main/res/menu/{select_album.xml => track_collection_menu.xml} (100%) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 390d79a3..a18ca95a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ # You need to run ./gradlew wrapper after updating the version gradle = "8.1.1" -navigation = "2.5.3" +navigation = "2.6.0" gradlePlugin = "8.0.2" androidxcore = "1.10.1" ktlint = "0.43.2" diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/provider/SearchSuggestionProvider.java b/ultrasonic/src/main/java/org/moire/ultrasonic/provider/SearchSuggestionProvider.java deleted file mode 100644 index 4cca8444..00000000 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/provider/SearchSuggestionProvider.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - This file is part of Subsonic. - - Subsonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Subsonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Subsonic. If not, see . - - Copyright 2010 (C) Sindre Mehus - */ -package org.moire.ultrasonic.provider; - -import android.content.SearchRecentSuggestionsProvider; - -/** - * Provides search suggestions based on recent searches. - * - * @author Sindre Mehus - */ -public class SearchSuggestionProvider extends SearchRecentSuggestionsProvider -{ - public static final String AUTHORITY = SearchSuggestionProvider.class.getName(); - public static final int MODE = DATABASE_MODE_QUERIES; - - public SearchSuggestionProvider() - { - setupSuggestions(AUTHORITY, MODE); - } -} \ No newline at end of file diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index 24d0d95a..76df1ea5 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -18,16 +18,20 @@ import android.os.Bundle import android.provider.MediaStore import android.provider.SearchRecentSuggestions import android.view.Menu +import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.widget.ImageView import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.Toolbar import androidx.core.content.ContextCompat import androidx.core.view.GravityCompat +import androidx.core.view.MenuProvider import androidx.drawerlayout.widget.DrawerLayout import androidx.fragment.app.FragmentContainerView +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.media3.common.MediaItem import androidx.media3.common.Player.STATE_BUFFERING @@ -94,6 +98,10 @@ class NavigationActivity : AppCompatActivity() { private var selectServerButton: MaterialButton? = null private var headerBackgroundImage: ImageView? = null + // We store the last search string in this variable. + // Seems a bit like a hack, is there a better way? + var searchQuery: String? = null + private lateinit var appBarConfiguration: AppBarConfiguration private var rxBusSubscription: CompositeDisposable = CompositeDisposable() @@ -221,10 +229,57 @@ class NavigationActivity : AppCompatActivity() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && !UApp.instance!!.isFirstRun) { ShortcutUtil.registerShortcuts(this) } + + // Register our options menu + addMenuProvider( + searchMenuProvider, + this, + Lifecycle.State.RESUMED + ) + } + + private val searchMenuProvider: MenuProvider = object : MenuProvider { + override fun onPrepareMenu(menu: Menu) { + setupSearchField(menu) + } + + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { + inflater.inflate(R.menu.search_view_menu, menu) + } + + override fun onMenuItemSelected(item: MenuItem): Boolean { + return false + } + } + + fun setupSearchField(menu: Menu) { + Timber.i("Recreating search field") + val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager + val searchItem = menu.findItem(R.id.action_search) + val searchView = searchItem.actionView as SearchView + val searchableInfo = searchManager.getSearchableInfo(this.componentName) + searchView.setSearchableInfo(searchableInfo) + searchView.setIconifiedByDefault(false) + + if (searchQuery != null) { + Timber.e("Found existing search query") + searchItem.expandActionView() + searchView.isIconified = false + searchView.setQuery(searchQuery, false) + searchView.clearFocus() + // Restore search text only once! + searchQuery = null + } } private fun setupDrawerLayout(drawerLayout: DrawerLayout) { + // Set initial state passed on drawer state + closeNavigationDrawerOnBack.isEnabled = drawerLayout.isOpen + + // Add the back press listener onBackPressedDispatcher.addCallback(this, closeNavigationDrawerOnBack) + + // Listen to changes in the drawer state and enable the back press listener accordingly. drawerLayout.addDrawerListener(object : DrawerLayout.DrawerListener { override fun onDrawerSlide(drawerView: View, slideOffset: Float) { // Nothing @@ -392,47 +447,55 @@ class NavigationActivity : AppCompatActivity() { return findNavController(R.id.nav_host_fragment).navigateUp(appBarConfiguration) } - // TODO: Test if this works with external Intents - // android.intent.action.SEARCH and android.media.action.MEDIA_PLAY_FROM_SEARCH calls here override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) - if (intent == null) return - if (intent.action == Constants.INTENT_PLAY_RANDOM_SONGS) { - val currentFragment = host?.childFragmentManager?.fragments?.last() ?: return - val service = MusicServiceFactory.getMusicService() - val musicDirectory = service.getRandomSongs(Settings.maxSongs) - val downloadHandler: DownloadHandler by inject() - downloadHandler.addTracksToMediaController( - songs = musicDirectory.getTracks(), - append = false, - playNext = false, - autoPlay = true, - shuffle = false, - fragment = currentFragment, - playlistName = null - ) - return + when (intent?.action) { + Constants.INTENT_PLAY_RANDOM_SONGS -> { + playRandomSongs() + } + Intent.ACTION_MAIN -> { + if (intent.getBooleanExtra(Constants.INTENT_SHOW_PLAYER, false)) { + findNavController(R.id.nav_host_fragment).navigate(R.id.playerFragment) + } + } + Intent.ACTION_SEARCH -> { + searchQuery = intent.getStringExtra(SearchManager.QUERY) + handleSearchIntent(searchQuery, false) + } + MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH -> { + searchQuery = intent.getStringExtra(SearchManager.QUERY) + handleSearchIntent(searchQuery, true) + } } + } - if (intent.getBooleanExtra(Constants.INTENT_SHOW_PLAYER, false)) { - findNavController(R.id.nav_host_fragment).navigate(R.id.playerFragment) - return - } + private fun handleSearchIntent(query: String?, autoPlay: Boolean) { + val suggestions = SearchRecentSuggestions( + this, + SearchSuggestionProvider.AUTHORITY, SearchSuggestionProvider.MODE + ) + suggestions.saveRecentQuery(query, null) - val query = intent.getStringExtra(SearchManager.QUERY) + val action = NavigationGraphDirections.toSearchFragment(query, autoPlay) + findNavController(R.id.nav_host_fragment).navigate(action) + } - if (query != null) { - val autoPlay = intent.action == MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH - val suggestions = SearchRecentSuggestions( - this, - SearchSuggestionProvider.AUTHORITY, SearchSuggestionProvider.MODE - ) - suggestions.saveRecentQuery(query, null) - - val action = NavigationGraphDirections.toSearchFragment(query, autoPlay) - findNavController(R.id.nav_host_fragment).navigate(action) - } + private fun playRandomSongs() { + val currentFragment = host?.childFragmentManager?.fragments?.last() ?: return + val service = MusicServiceFactory.getMusicService() + val musicDirectory = service.getRandomSongs(Settings.maxSongs) + val downloadHandler: DownloadHandler by inject() + downloadHandler.addTracksToMediaController( + songs = musicDirectory.getTracks(), + append = false, + playNext = false, + autoPlay = true, + shuffle = false, + fragment = currentFragment, + playlistName = null + ) + return } /** diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt index bd70f431..cd4d1104 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt @@ -7,19 +7,11 @@ package org.moire.ultrasonic.fragment -import android.app.SearchManager -import android.content.Context import android.os.Bundle -import android.view.Menu -import android.view.MenuInflater import android.view.MenuItem import android.view.View -import androidx.appcompat.widget.SearchView -import androidx.core.view.MenuHost -import androidx.core.view.MenuProvider import androidx.core.view.isVisible import androidx.fragment.app.viewModels -import androidx.lifecycle.Lifecycle import androidx.lifecycle.viewModelScope import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs @@ -54,16 +46,14 @@ import org.moire.ultrasonic.util.CommunicationError import org.moire.ultrasonic.util.Settings import org.moire.ultrasonic.util.Util import org.moire.ultrasonic.util.Util.toast -import timber.log.Timber /** * Initiates a search on the media library and displays the results - * TODO: Switch to material3 class + */ class SearchFragment : MultiListFragment(), KoinComponent { private var searchResult: SearchResult? = null private var searchRefresh: SwipeRefreshLayout? = null - private var searchView: SearchView? = null private val mediaPlayerManager: MediaPlayerManager by inject() @@ -83,13 +73,6 @@ class SearchFragment : MultiListFragment(), KoinComponent { cancellationToken = CancellationToken() setTitle(this, R.string.search_title) - // Register our options menu - (requireActivity() as MenuHost).addMenuProvider( - menuProvider, - viewLifecycleOwner, - Lifecycle.State.RESUMED - ) - listModel.searchResult.observe( viewLifecycleOwner ) { @@ -148,73 +131,6 @@ class SearchFragment : MultiListFragment(), KoinComponent { } } - /** - * This provide creates the search bar above the recycler view - */ - private val menuProvider: MenuProvider = object : MenuProvider { - override fun onPrepareMenu(menu: Menu) { - setupOptionsMenu(menu) - } - - override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { - menuInflater.inflate(R.menu.search, menu) - } - - override fun onMenuItemSelected(menuItem: MenuItem): Boolean { - return true - } - } - fun setupOptionsMenu(menu: Menu) { - val activity = activity ?: return - val searchManager = activity.getSystemService(Context.SEARCH_SERVICE) as SearchManager - val searchItem = menu.findItem(R.id.search_item) - searchView = searchItem.actionView as SearchView - val searchableInfo = searchManager.getSearchableInfo(requireActivity().componentName) - searchView!!.setSearchableInfo(searchableInfo) - - val autoPlay = navArgs.autoplay - val query = navArgs.query - - // If started with a query, enter it to the searchView - if (query != null) { - searchView!!.setQuery(query, false) - searchView!!.clearFocus() - } - - searchView!!.setOnSuggestionListener(object : SearchView.OnSuggestionListener { - override fun onSuggestionSelect(position: Int): Boolean { - return true - } - - override fun onSuggestionClick(position: Int): Boolean { - Timber.d("onSuggestionClick: %d", position) - val cursor = searchView!!.suggestionsAdapter.cursor - cursor.moveToPosition(position) - - // 2 is the index of col containing suggestion name. - val suggestion = cursor.getString(2) - searchView!!.setQuery(suggestion, true) - return true - } - }) - - searchView!!.setOnQueryTextListener(object : SearchView.OnQueryTextListener { - override fun onQueryTextSubmit(query: String): Boolean { - Timber.d("onQueryTextSubmit: %s", query) - searchView!!.clearFocus() - search(query, autoPlay) - return true - } - - override fun onQueryTextChange(newText: String): Boolean { - return true - } - }) - - searchView!!.setIconifiedByDefault(false) - searchItem.expandActionView() - } - override fun onDestroyView() { Util.hideKeyboard(activity) cancellationToken?.cancel() @@ -313,7 +229,6 @@ class SearchFragment : MultiListFragment(), KoinComponent { } private fun onAlbumSelected(album: Album, autoplay: Boolean) { - val action = SearchFragmentDirections.searchToTrackCollection( id = album.id, name = album.title, diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt index 5491bca0..ecb7df54 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt @@ -36,7 +36,6 @@ import org.moire.ultrasonic.adapters.AlbumHeader import org.moire.ultrasonic.adapters.AlbumRowDelegate import org.moire.ultrasonic.adapters.HeaderViewBinder import org.moire.ultrasonic.adapters.TrackViewBinder -import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline import org.moire.ultrasonic.domain.Identifiable import org.moire.ultrasonic.domain.MusicDirectory @@ -64,7 +63,6 @@ import timber.log.Timber * In most cases the data should be just a list of Entries, but there are some cases * where the list can contain Albums as well. This happens especially when having ID3 tags disabled, * or using Offline mode, both in which Indexes instead of Artists are being used. - * */ @Suppress("TooManyFunctions") open class TrackCollectionFragment( @@ -268,6 +266,9 @@ open class TrackCollectionFragment( private val menuProvider: MenuProvider = object : MenuProvider { override fun onPrepareMenu(menu: Menu) { + // Hide search button (from xml) + menu.findItem(R.id.action_search).isVisible = false + playAllButton = menu.findItem(R.id.select_album_play_all) if (playAllButton != null) { @@ -282,7 +283,7 @@ open class TrackCollectionFragment( } override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { - inflater.inflate(R.menu.select_album, menu) + inflater.inflate(R.menu.track_collection_menu, menu) } override fun onMenuItemSelected(item: MenuItem): Boolean { @@ -584,12 +585,8 @@ open class TrackCollectionFragment( } else { setTitle(name) - if (ActiveServerProvider.shouldUseId3Tags()) { - if (isAlbum) { - listModel.getAlbum(refresh2, id, name) - } else { - throw IllegalAccessException("Use AlbumFragment instead!") - } + if (isAlbum) { + listModel.getAlbum(refresh2, id, name) } else { listModel.getMusicDirectory(refresh2, id, name) } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/PlaybackService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/PlaybackService.kt index 6dd656a3..7965558e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/PlaybackService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/PlaybackService.kt @@ -340,6 +340,7 @@ class PlaybackService : // needed starting Android 12 (S = 31) flags = flags or FLAG_IMMUTABLE } + intent.action = Intent.ACTION_MAIN intent.putExtra(Constants.INTENT_SHOW_PLAYER, true) return PendingIntent.getActivity(this, 0, intent, flags) } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/provider/SearchSuggestionProvider.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/provider/SearchSuggestionProvider.kt new file mode 100644 index 00000000..06803c17 --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/provider/SearchSuggestionProvider.kt @@ -0,0 +1,24 @@ +/* + * SearchSuggestionProvider.kt + * Copyright (C) 2009-2023 Ultrasonic developers + * + * Distributed under terms of the GNU GPLv3 license. + */ +package org.moire.ultrasonic.provider + +import android.content.SearchRecentSuggestionsProvider +import org.moire.ultrasonic.BuildConfig + +/** + * Provides search suggestions based on recent searches. + */ +class SearchSuggestionProvider : SearchRecentSuggestionsProvider() { + init { + setupSuggestions(AUTHORITY, MODE) + } + + companion object { + val AUTHORITY = "${BuildConfig.APPLICATION_ID}.provider.SearchSuggestionProvider" + const val MODE = DATABASE_MODE_QUERIES + } +} diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.kt index 5902d772..3a422a2b 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.kt @@ -219,8 +219,8 @@ open class UltrasonicAppWidgetProvider : AppWidgetProvider() { NavigationActivity::class.java ).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) if (playerActive) intent.putExtra(Constants.INTENT_SHOW_PLAYER, true) - intent.action = "android.intent.action.MAIN" - intent.addCategory("android.intent.category.LAUNCHER") + intent.action = Intent.ACTION_MAIN + intent.addCategory(Intent.CATEGORY_LAUNCHER) var flags = PendingIntent.FLAG_UPDATE_CURRENT if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // needed starting Android 12 (S = 31) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Constants.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Constants.kt index 1db5cffe..fceee797 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Constants.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Constants.kt @@ -30,7 +30,6 @@ object Constants { // Legacy Preferences keys // Warning: Don't add any new here! // Use setting_keys.xml - const val PREFERENCES_KEY_USE_FIVE_STAR_RATING = "use_five_star_rating" const val PREFERENCE_VALUE_ALL = 0 const val PREFERENCE_VALUE_A2DP = 1 const val PREFERENCE_VALUE_DISABLED = 2 diff --git a/ultrasonic/src/main/res/menu/search.xml b/ultrasonic/src/main/res/menu/search.xml deleted file mode 100644 index 1fba16c6..00000000 --- a/ultrasonic/src/main/res/menu/search.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/ultrasonic/src/main/res/menu/search_view_menu.xml b/ultrasonic/src/main/res/menu/search_view_menu.xml new file mode 100644 index 00000000..9b39a8b2 --- /dev/null +++ b/ultrasonic/src/main/res/menu/search_view_menu.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/ultrasonic/src/main/res/menu/select_album.xml b/ultrasonic/src/main/res/menu/track_collection_menu.xml similarity index 100% rename from ultrasonic/src/main/res/menu/select_album.xml rename to ultrasonic/src/main/res/menu/track_collection_menu.xml diff --git a/ultrasonic/src/main/res/values-cs/strings.xml b/ultrasonic/src/main/res/values-cs/strings.xml index c06ae0b5..2bcf7604 100644 --- a/ultrasonic/src/main/res/values-cs/strings.xml +++ b/ultrasonic/src/main/res/values-cs/strings.xml @@ -104,7 +104,6 @@ Chyba aktualizace informací playlistu %s Alba Umělci - Vyhledávání Zobrazit více Nenalezeno, zkuste znovu Skladby diff --git a/ultrasonic/src/main/res/values-de/strings.xml b/ultrasonic/src/main/res/values-de/strings.xml index 728688b9..b60c265f 100644 --- a/ultrasonic/src/main/res/values-de/strings.xml +++ b/ultrasonic/src/main/res/values-de/strings.xml @@ -139,7 +139,6 @@ Aktualisierung der Wiedergabeliste %s ist fehlgeschlagen Alben Künstler*innen - Suche Zeige mehr Keine Treffer, bitte erneut versuchen Titel diff --git a/ultrasonic/src/main/res/values-es/strings.xml b/ultrasonic/src/main/res/values-es/strings.xml index fd477225..0f66c28f 100644 --- a/ultrasonic/src/main/res/values-es/strings.xml +++ b/ultrasonic/src/main/res/values-es/strings.xml @@ -141,7 +141,6 @@ Fallo al actualizar la información de la lista de reproducción para %s Álbumes Artistas - Buscar Mostrar mas Sin resultados, por favor inténtalo de nuevo Canciones diff --git a/ultrasonic/src/main/res/values-fr/strings.xml b/ultrasonic/src/main/res/values-fr/strings.xml index a310becd..73226555 100644 --- a/ultrasonic/src/main/res/values-fr/strings.xml +++ b/ultrasonic/src/main/res/values-fr/strings.xml @@ -137,7 +137,6 @@ Échec de la mise à jour des informations de la liste de lecture pour %s Albums Artistes - Recherche Afficher plus Aucun résultat, veuillez essayer à nouveau Titres diff --git a/ultrasonic/src/main/res/values-hu/strings.xml b/ultrasonic/src/main/res/values-hu/strings.xml index f85bf6b3..853d1e7f 100644 --- a/ultrasonic/src/main/res/values-hu/strings.xml +++ b/ultrasonic/src/main/res/values-hu/strings.xml @@ -110,7 +110,6 @@ Lejátszási lista módosítása sikertelen %s Albumok Előadók - Keresés Továbbiak Nincs találat, próbálja újra! Dalok diff --git a/ultrasonic/src/main/res/values-it/strings.xml b/ultrasonic/src/main/res/values-it/strings.xml index 0b778491..b0f2faa9 100644 --- a/ultrasonic/src/main/res/values-it/strings.xml +++ b/ultrasonic/src/main/res/values-it/strings.xml @@ -100,7 +100,6 @@ Impossibile aggiornare informazioni playlist per %s Album Artisti - Cerca Mostra di più Nessun risultato, riprova per favore Canzoni diff --git a/ultrasonic/src/main/res/values-ja/strings.xml b/ultrasonic/src/main/res/values-ja/strings.xml index 0c749feb..d09880f5 100644 --- a/ultrasonic/src/main/res/values-ja/strings.xml +++ b/ultrasonic/src/main/res/values-ja/strings.xml @@ -106,7 +106,6 @@ %s のプレイリスト情報をアップデートできません アルバム アーティスト - 検索 もっと表示 一致するものはありません、やり直してください diff --git a/ultrasonic/src/main/res/values-nb-rNO/strings.xml b/ultrasonic/src/main/res/values-nb-rNO/strings.xml index 5d530829..86e58df5 100644 --- a/ultrasonic/src/main/res/values-nb-rNO/strings.xml +++ b/ultrasonic/src/main/res/values-nb-rNO/strings.xml @@ -186,7 +186,6 @@ Oppdater info Album Artister - Søk Vis mer Spor Søk diff --git a/ultrasonic/src/main/res/values-nl/strings.xml b/ultrasonic/src/main/res/values-nl/strings.xml index 882ba982..2fea5e44 100644 --- a/ultrasonic/src/main/res/values-nl/strings.xml +++ b/ultrasonic/src/main/res/values-nl/strings.xml @@ -142,7 +142,6 @@ Kan afspeellijstinformatie voor %s niet bijwerken Albums Artiesten - Zoeken Meer tonen Geen overeenkomsten; probeer het opnieuw Nummers diff --git a/ultrasonic/src/main/res/values-pl/strings.xml b/ultrasonic/src/main/res/values-pl/strings.xml index 253d858a..2e87a7ad 100644 --- a/ultrasonic/src/main/res/values-pl/strings.xml +++ b/ultrasonic/src/main/res/values-pl/strings.xml @@ -103,7 +103,6 @@ Błąd podczas aktualizacji playlisty %s Albumy Wykonawcy - Wyszukaj Wyświetl więcej Brak wyników, proszę spróbować ponownie Utwory diff --git a/ultrasonic/src/main/res/values-pt-rBR/strings.xml b/ultrasonic/src/main/res/values-pt-rBR/strings.xml index b61c8b15..96691401 100644 --- a/ultrasonic/src/main/res/values-pt-rBR/strings.xml +++ b/ultrasonic/src/main/res/values-pt-rBR/strings.xml @@ -140,7 +140,6 @@ Falha ao atualizar a informação da playlist para %s Álbuns Artistas - Pesquisar Mostrar Mais Nada coincide, tente novamente Músicas diff --git a/ultrasonic/src/main/res/values-pt/strings.xml b/ultrasonic/src/main/res/values-pt/strings.xml index 682ecc02..e0cf7285 100644 --- a/ultrasonic/src/main/res/values-pt/strings.xml +++ b/ultrasonic/src/main/res/values-pt/strings.xml @@ -103,7 +103,6 @@ Falha ao atualizar a informação da playlist para %s Álbuns Artistas - Pesquisar Mostrar Mais Nada coincide, tente novamente Músicas diff --git a/ultrasonic/src/main/res/values-ru/strings.xml b/ultrasonic/src/main/res/values-ru/strings.xml index 93eb988a..0d9e5ff4 100644 --- a/ultrasonic/src/main/res/values-ru/strings.xml +++ b/ultrasonic/src/main/res/values-ru/strings.xml @@ -128,7 +128,6 @@ Не удалось обновить информацию о плейлисте для %s Альбомы Исполнители - Поиск Показать еще Нет совпадений, пожалуйста попробуйте еще раз Песни diff --git a/ultrasonic/src/main/res/values-zh-rCN/strings.xml b/ultrasonic/src/main/res/values-zh-rCN/strings.xml index 769c22ae..f704d2a1 100644 --- a/ultrasonic/src/main/res/values-zh-rCN/strings.xml +++ b/ultrasonic/src/main/res/values-zh-rCN/strings.xml @@ -128,7 +128,6 @@ 更新播放列表信息失败 - %s 专辑 艺人 - 搜索 显示更多 没有匹配的结果,请重试 歌曲 diff --git a/ultrasonic/src/main/res/values-zh-rTW/strings.xml b/ultrasonic/src/main/res/values-zh-rTW/strings.xml index 0610cc46..ced7be3b 100644 --- a/ultrasonic/src/main/res/values-zh-rTW/strings.xml +++ b/ultrasonic/src/main/res/values-zh-rTW/strings.xml @@ -67,7 +67,6 @@ 播放清單 專輯 歌手 - 搜尋 搜尋 無符合類型 已停用 diff --git a/ultrasonic/src/main/res/values/strings.xml b/ultrasonic/src/main/res/values/strings.xml index 73763394..f8d91b62 100644 --- a/ultrasonic/src/main/res/values/strings.xml +++ b/ultrasonic/src/main/res/values/strings.xml @@ -142,7 +142,6 @@ Failed to update playlist information for %s Albums Artists - Search Show More No matches, please try again Songs