From a6c321cfa5ca275fb40cd6c1acbbf7db04308aa0 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Wed, 8 Jun 2022 09:31:57 -0600 Subject: [PATCH] home: make toolbar collapse Make the home toolbar collapse on scroll. I was planning to implement this back in 2.0.0, but visual bugs stopped me. Now, knowing how much space the the Toolbar + Tab combination takes up on smaller devices, I think it would be better to have this in general. --- app/src/main/AndroidManifest.xml | 10 ++++++++-- .../java/org/oxycblt/auxio/home/HomeFragment.kt | 14 ++++++++++++++ .../oxycblt/auxio/home/list/HomeListFragment.kt | 2 ++ .../org/oxycblt/auxio/search/SearchViewModel.kt | 11 +++++++---- .../org/oxycblt/auxio/settings/AboutFragment.kt | 13 ++++++++----- .../java/org/oxycblt/auxio/ui/RecyclerFramework.kt | 6 +++--- .../java/org/oxycblt/auxio/ui/StyledImageButton.kt | 2 ++ .../org/oxycblt/auxio/widgets/WidgetProvider.kt | 2 +- app/src/main/res/layout/fragment_home.xml | 1 + app/src/main/res/values-ar-rIQ/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 10 +++++----- app/src/main/res/values-de/strings.xml | 10 +++++----- app/src/main/res/values-el/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 10 +++++----- app/src/main/res/values-ko/strings.xml | 10 +++++----- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-pt-rPT/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values/strings.xml | 10 +++++----- 25 files changed, 82 insertions(+), 51 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 855c606ea..2e189db2d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -67,6 +67,10 @@ + + - + (), Toolbar.OnMenuI indexerModel.reindex() } + binding.homeAppbar.apply { + addOnOffsetChangedListener( + AppBarLayout.OnOffsetChangedListener { _, offset -> + val range = binding.homeAppbar.totalScrollRange + + binding.homeToolbar.alpha = 1f - (abs(offset.toFloat()) / (range.toFloat() / 2)) + + binding.homePager.updatePadding( + bottom = binding.homeAppbar.totalScrollRange + offset) + }) + } + binding.homeToolbar.apply { sortItem = menu.findItem(R.id.submenu_sorting) setOnMenuItemClickListener(this@HomeFragment) diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/HomeListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/HomeListFragment.kt index a369f1c6a..743ef17f8 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/HomeListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/HomeListFragment.kt @@ -29,6 +29,7 @@ import org.oxycblt.auxio.ui.Item import org.oxycblt.auxio.ui.MenuItemListener import org.oxycblt.auxio.ui.NavigationViewModel import org.oxycblt.auxio.ui.ViewBindingFragment +import org.oxycblt.auxio.util.applySpans /** * A Base [Fragment] implementing the base features shared across all list fragments in the home UI. @@ -49,6 +50,7 @@ abstract class HomeListFragment : override fun onBindingCreated(binding: FragmentHomeListBinding, savedInstanceState: Bundle?) { binding.homeRecycler.popupProvider = this binding.homeRecycler.listener = this + binding.homeRecycler.applySpans() } override fun onDestroyBinding(binding: FragmentHomeListBinding) { diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt index cebbc09e6..e23cdb3cc 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt @@ -36,8 +36,11 @@ import org.oxycblt.auxio.ui.Sort import org.oxycblt.auxio.util.logD /** - * The [ViewModel] for the search functionality + * The [ViewModel] for search functionality * @author OxygenCobalt + * + * TODO: Add a context to this ViewModel, not because I want to, but because it just makes the code + * easier to work with. */ class SearchViewModel : ViewModel() { private val musicStore = MusicStore.getInstance() @@ -143,9 +146,9 @@ class SearchViewModel : ViewModel() { */ private fun List.filterByOrNull(context: Context, value: String): List? { val filtered = filter { - // First see if the normal item name will work. If that fails, try the "normalized" - // [e.g all accented/unicode chars become latin chars] instead. Hopefully this - // shouldn't break other language's search functionality. + // Compare normalized names, which are names with unicode characters that are + // normalized to their non-unicode forms. This is just for quality-of-life, + // and I hope it doesn't bork search functionality for other languages. it.resolveNameNormalized(context).contains(value, ignoreCase = true) || it.resolveNameNormalized(context).contains(value, ignoreCase = true) } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt index f04d4c241..163a42518 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt @@ -74,23 +74,26 @@ class AboutFragment : ViewBindingFragment() { private fun updateSongCount(songs: List) { val binding = requireBinding() - binding.aboutSongCount.textSafe = getString(R.string.fmt_song_count, songs.size) + binding.aboutSongCount.textSafe = getString(R.string.fmt_lib_song_count, songs.size) binding.aboutTotalDuration.textSafe = getString( - R.string.fmt_total_duration, songs.sumOf { it.durationSecs }.formatDuration(false)) + R.string.fmt_lib_total_duration, + songs.sumOf { it.durationSecs }.formatDuration(false)) } private fun updateAlbumCount(albums: List) { - requireBinding().aboutAlbumCount.textSafe = getString(R.string.fmt_album_count, albums.size) + requireBinding().aboutAlbumCount.textSafe = + getString(R.string.fmt_lib_album_count, albums.size) } private fun updateArtistCount(artists: List) { requireBinding().aboutArtistCount.textSafe = - getString(R.string.fmt_artist_count, artists.size) + getString(R.string.fmt_lib_artist_count, artists.size) } private fun updateGenreCount(genres: List) { - requireBinding().aboutGenreCount.textSafe = getString(R.string.fmt_genre_count, genres.size) + requireBinding().aboutGenreCount.textSafe = + getString(R.string.fmt_lib_genre_count, genres.size) } /** Go through the process of opening a [link] in a browser. */ diff --git a/app/src/main/java/org/oxycblt/auxio/ui/RecyclerFramework.kt b/app/src/main/java/org/oxycblt/auxio/ui/RecyclerFramework.kt index 5f1e4a43f..9c3d74571 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/RecyclerFramework.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/RecyclerFramework.kt @@ -218,8 +218,8 @@ class SyncBackingData(adapter: RecyclerView.Adapter<*>, diffCallback: DiffUti /** * Like [AsyncListDiffer], but synchronous. This may seem like it would be inefficient, but in - * practice Auxio's lists tend to be small enough to the point where this does not matter, - * and situations that would be inefficient are ruled out with [SyncBackingData.replaceList]. + * practice Auxio's lists tend to be small enough to the point where this does not matter, and + * situations that would be inefficient are ruled out with [SyncBackingData.replaceList]. */ private class SyncListDiffer( adapter: RecyclerView.Adapter<*>, @@ -301,7 +301,7 @@ private class SyncListDiffer( } } }) - + _currentList = newList result.dispatchUpdatesTo(updateCallback) } diff --git a/app/src/main/java/org/oxycblt/auxio/ui/StyledImageButton.kt b/app/src/main/java/org/oxycblt/auxio/ui/StyledImageButton.kt index 7243523e1..f04401770 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/StyledImageButton.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/StyledImageButton.kt @@ -39,6 +39,8 @@ import org.oxycblt.auxio.util.getDrawableSafe * useful for the playback buttons, as at times highlighting them is not enough to differentiate * them. * @author OxygenCobalt + * + * TODO: Remove this for Material Buttons (I hope) */ class StyledImageButton @JvmOverloads diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt index 3e34adc99..51a1f4c8f 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt @@ -183,7 +183,7 @@ class WidgetProvider : AppWidgetProvider() { logW("No good widget layout found") val minimum = - unlikelyToBeNull(views.minByOrNull { it.key.width * it.key.height }?.value) + unlikelyToBeNull(views.minByOrNull { it.key.width * it.key.height }).value updateAppWidget(id, minimum) } diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index d72c2cfd6..104b13dd8 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -14,6 +14,7 @@ android:id="@+id/home_toolbar" style="@style/Widget.Auxio.Toolbar" app:menu="@menu/menu_home" + app:layout_scrollFlags="scroll|enterAlways" app:title="@string/info_app_name" /> رمادي - الاغنية المُحملة: %d + الاغنية المُحملة: %d %d اغاني diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index f740a1289..86bdadcd1 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -190,11 +190,11 @@ Načítání hudební knihovny… (%1$d/%2$d) - Načtených skladeb: %d - Načtených alb: %d - Načtených umělců: %d - Načtených žánrů: %d - Celková doba trvání: %s + Načtených skladeb: %d + Načtených alb: %d + Načtených umělců: %d + Načtených žánrů: %d + Celková doba trvání: %s "%d skladba" diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ad0f69e87..d1eb00aa8 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -146,7 +146,7 @@ Grau - Geladene Lieder: %d + Geladene Lieder: %d %d Lied @@ -191,8 +191,8 @@ Schallplatte %d +%.1f dB -%.1f dB - Geladene Alben: %d - Geladene Künstler: %d - Geladene Genres: %d - Gesamtdauer: %s + Geladene Alben: %d + Geladene Künstler: %d + Geladene Genres: %d + Gesamtdauer: %s diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 989e7306a..f34fa10f7 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -74,7 +74,7 @@ Γκρί - Τραγούδια φορτώθηκε: %d + Τραγούδια φορτώθηκε: %d %d Τραγούδι diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 1b2561cd1..1a997b3b2 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -165,7 +165,7 @@ Gris - Canciones cargadas: %d + Canciones cargadas: %d %d Canción diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index fa62a2e30..01cddaee7 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -80,7 +80,7 @@ Gris - Titres chargés: %d + Titres chargés: %d %s Titre diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 02e000c00..5aa5af8c7 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -168,11 +168,11 @@ Grigio - Canzoni trovate: %d - Dischi trovati: %d - Artisti trovati: %d - Generi trovati: %d - Durata totale: %s + Canzoni trovate: %d + Dischi trovati: %d + Artisti trovati: %d + Generi trovati: %d + Durata totale: %s %d canzone diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 9804996b4..0e2f7b240 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -186,11 +186,11 @@ +%.1f dB -%.1f dB - 불러온 음악: %d - 불러온 앨범: %d - 불러온 아티스트: %d - 불러온 장르: %d - 총 길이: %s + 불러온 음악: %d + 불러온 앨범: %d + 불러온 아티스트: %d + 불러온 장르: %d + 총 길이: %s %d 곡 diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 521d0c32a..00bb6e190 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -133,7 +133,7 @@ Grijis - Nummers geladen: %d + Nummers geladen: %d %d Nummer diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 9d8bbfa3f..83339a907 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -78,7 +78,7 @@ Szary - Utwory uruchamia się: %d + Utwory uruchamia się: %d %d Utwór diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index efbbd8f41..99ae9ca25 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -79,7 +79,7 @@ Grisalho - Músicas carregado: %d + Músicas carregado: %d %d Música diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index cf5d97836..a300a8301 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -80,7 +80,7 @@ Grisalho - Músicas carregado: %d + Músicas carregado: %d %d Música diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index acc004386..0f25d87c8 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -166,7 +166,7 @@ Серый - Всего треков: %d + Всего треков: %d %d трек diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 1dbb7e15b..04a797ef3 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -60,7 +60,7 @@ Відтворити/Зупинити - Пісні завантажено: %d + Пісні завантажено: %d %d Пісня diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 2933acc81..a000aab56 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -167,7 +167,7 @@ 灰色 - 已加载 %d 首曲目 + 已加载 %d 首曲目 "%d 首歌曲" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 19dbe5ad4..8cc6f615a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -192,11 +192,11 @@ Loading your music library… (%1$d/%2$d) - Songs loaded: %d - Albums loaded: %d - Artists loaded: %d - Genres loaded: %d - Total duration: %s + Songs loaded: %d + Albums loaded: %d + Artists loaded: %d + Genres loaded: %d + Total duration: %s %d Song