From 51b2749c0621cbfb566d408995d71fabaca26911 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Wed, 2 Dec 2020 19:00:20 -0700 Subject: [PATCH] Refactor styles heavily Move a bunch of UI elements into reusable styles, along with removing literal dimen resources. --- app/build.gradle | 1 + .../java/org/oxycblt/auxio/MainActivity.kt | 9 +- .../auxio/playback/PlaybackViewModel.kt | 2 + .../auxio/playback/queue/QueueFragment.kt | 13 ++- .../oxycblt/auxio/recycler/NoLeakThumbView.kt | 14 +-- .../recycler/viewholders/BaseViewHolder.kt | 2 +- .../auxio/settings/SettingsListFragment.kt | 4 + .../org/oxycblt/auxio/songs/SongsFragment.kt | 2 + app/src/main/res/anim/anim_nav_slide_down.xml | 2 +- app/src/main/res/anim/anim_nav_slide_up.xml | 2 +- app/src/main/res/drawable/ic_library.xml | 2 +- .../main/res/drawable/ic_pause_to_play.xml | 4 +- .../main/res/drawable/ic_play_to_pause.xml | 4 +- app/src/main/res/drawable/ic_queue_add.xml | 2 +- app/src/main/res/drawable/ic_settings.xml | 4 +- app/src/main/res/drawable/ui_circle.xml | 8 -- .../main/res/drawable/ui_header_dividers.xml | 6 -- .../drawable/ui_small_unbounded_ripple.xml | 2 +- .../main/res/drawable/ui_unbounded_ripple.xml | 2 +- .../main/res/layout/fragment_album_detail.xml | 31 +----- .../res/layout/fragment_artist_detail.xml | 32 ++----- .../main/res/layout/fragment_genre_detail.xml | 32 ++----- app/src/main/res/layout/fragment_library.xml | 9 +- app/src/main/res/layout/fragment_playback.xml | 11 +-- app/src/main/res/layout/fragment_queue.xml | 18 +--- app/src/main/res/layout/fragment_settings.xml | 14 +-- app/src/main/res/layout/fragment_songs.xml | 8 +- app/src/main/res/layout/item_accent.xml | 4 - .../main/res/layout/item_action_header.xml | 28 ++---- app/src/main/res/layout/item_album.xml | 24 +---- app/src/main/res/layout/item_album_song.xml | 31 ++---- app/src/main/res/layout/item_artist.xml | 23 +---- app/src/main/res/layout/item_artist_album.xml | 23 +---- app/src/main/res/layout/item_basic_song.xml | 24 +---- app/src/main/res/layout/item_genre.xml | 22 +---- app/src/main/res/layout/item_genre_artist.xml | 22 +---- app/src/main/res/layout/item_header.xml | 13 +-- app/src/main/res/layout/item_prefs_header.xml | 16 ---- app/src/main/res/layout/item_queue_song.xml | 19 +--- app/src/main/res/layout/item_song.xml | 33 ++----- app/src/main/res/values/dimens.xml | 7 +- app/src/main/res/values/strings.xml | 17 +++- app/src/main/res/values/styles.xml | 96 +++++++++++++++---- app/src/main/res/xml-v27/prefs_main.xml | 2 +- app/src/main/res/xml/prefs_main.xml | 2 +- 45 files changed, 212 insertions(+), 434 deletions(-) delete mode 100644 app/src/main/res/drawable/ui_circle.xml delete mode 100644 app/src/main/res/layout/item_prefs_header.xml diff --git a/app/build.gradle b/app/build.gradle index 2744fab62..5ee63557f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -49,6 +49,7 @@ dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) // Kotlin + //noinspection DifferentStdlibGradleVersion implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" // --- SUPPORT --- diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index 05cfa91d8..037aeb2f2 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -26,7 +26,6 @@ import org.oxycblt.auxio.ui.toColor class MainActivity : AppCompatActivity() { private val settingsModel: SettingsViewModel by viewModels() - @Suppress("DEPRECATION") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -56,8 +55,6 @@ class MainActivity : AppCompatActivity() { settingsModel.theme.observe(this) { if (it != null) { doThemeRecreate(it) - - settingsModel.doneWithThemeUpdate() } } @@ -86,6 +83,7 @@ class MainActivity : AppCompatActivity() { } } + @Suppress("DEPRECATION") private fun doEdgeToEdgeSetup(binding: ActivityMainBinding) { window?.apply { statusBarColor = Color.TRANSPARENT @@ -120,10 +118,7 @@ class MainActivity : AppCompatActivity() { } } - /** - * - */ - fun doThemeRecreate(newTheme: Int) { + private fun doThemeRecreate(newTheme: Int) { AppCompatDelegate.setDefaultNightMode(newTheme) } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt index c9ea53a1c..a3268c0c8 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -1,3 +1,5 @@ +@file:Suppress("unused") + package org.oxycblt.auxio.playback import android.content.Context diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt index 00f4eedad..2c74bc049 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt @@ -1,15 +1,16 @@ package org.oxycblt.auxio.playback.queue +import android.os.Build import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.WindowInsets import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.ItemTouchHelper -import com.afollestad.materialdialogs.utils.MDUtil.updatePadding import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentQueueBinding import org.oxycblt.auxio.music.BaseModel @@ -49,9 +50,15 @@ class QueueFragment : Fragment() { findNavController().navigateUp() } - setOnApplyWindowInsetsListener { v, insets -> + setOnApplyWindowInsetsListener { _, insets -> + val top = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + insets.getInsets(WindowInsets.Type.systemBars()).top + } else { + insets.systemWindowInsetTop + } + (parent as View).updatePadding( - top = insets.systemWindowInsetTop + top = top ) insets diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/NoLeakThumbView.kt b/app/src/main/java/org/oxycblt/auxio/recycler/NoLeakThumbView.kt index 069d49539..572148a94 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/NoLeakThumbView.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/NoLeakThumbView.kt @@ -1,3 +1,5 @@ +@file:Suppress("MemberVisibilityCanBePrivate") + package org.oxycblt.auxio.recycler import android.annotation.SuppressLint @@ -40,9 +42,9 @@ class NoLeakThumbView @JvmOverloads constructor( FastScrollerView.ItemIndicatorSelectedCallback { private var thumbColor = ColorStateList.valueOf(accent.first.toColor(context)) - var iconColor = R.color.background.toColor(context) + private var iconColor = R.color.background.toColor(context) var textAppearanceRes = R.style.TextAppearance_ThumbIndicator - var textColor = R.color.background.toColor(context) + private var textColor = R.color.background.toColor(context) private val thumbView: ViewGroup private val textView: TextView @@ -80,16 +82,14 @@ class NoLeakThumbView @JvmOverloads constructor( // FastScrollerView's "onItemIndicatorTouched" [Which I would've used here] is internal, // so instead I just use a setOnTouchListener to get the same-ish effect. - fastScrollerView.setOnTouchListener { v, event -> + fastScrollerView.setOnTouchListener { _, event -> fastScrollerView.onTouchEvent(event) fastScrollerView.performClick() isVisible = true - if (event.actionMasked in intArrayOf( - MotionEvent.ACTION_UP, - MotionEvent.ACTION_CANCEL - ) + if (event.actionMasked == MotionEvent.ACTION_UP || + event.actionMasked == MotionEvent.ACTION_CANCEL ) { isActivated = false return@setOnTouchListener true diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/BaseViewHolder.kt b/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/BaseViewHolder.kt index 520bddbaf..81c4c026c 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/BaseViewHolder.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/BaseViewHolder.kt @@ -27,7 +27,7 @@ abstract class BaseViewHolder( /** * Bind the viewholder with whatever [BaseModel] instance that has been specified. * Will call [onBind] on the inheriting ViewHolder. - * @param data Data that the viewholder should be binded with + * @param data Data that the viewholder should be bound with */ fun bind(data: T) { doOnClick?.let { onClick -> diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt index b2de1e784..6ca116b6c 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt @@ -1,3 +1,5 @@ +@file:Suppress("unused") + package org.oxycblt.auxio.settings import android.os.Bundle @@ -59,6 +61,8 @@ class SettingsListFragment : PreferenceFragmentCompat() { else -> R.drawable.ic_auto } ) + + settingsModel.doneWithThemeUpdate() } } diff --git a/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt index 74cfdcaff..7e284775f 100644 --- a/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt @@ -84,6 +84,8 @@ class SongsFragment : Fragment(), SearchView.OnQueryTextListener { var hasAddedNumber = false var iters = 0 + // TODO: Do selection instead of using iters + setupWithRecyclerView( binding.songRecycler, { pos -> diff --git a/app/src/main/res/anim/anim_nav_slide_down.xml b/app/src/main/res/anim/anim_nav_slide_down.xml index 3a33ca190..be2049cd8 100644 --- a/app/src/main/res/anim/anim_nav_slide_down.xml +++ b/app/src/main/res/anim/anim_nav_slide_down.xml @@ -2,5 +2,5 @@ \ No newline at end of file diff --git a/app/src/main/res/anim/anim_nav_slide_up.xml b/app/src/main/res/anim/anim_nav_slide_up.xml index fd61456c1..8bbc16079 100644 --- a/app/src/main/res/anim/anim_nav_slide_up.xml +++ b/app/src/main/res/anim/anim_nav_slide_up.xml @@ -2,5 +2,5 @@ \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_library.xml b/app/src/main/res/drawable/ic_library.xml index c734a21dd..6c1146063 100644 --- a/app/src/main/res/drawable/ic_library.xml +++ b/app/src/main/res/drawable/ic_library.xml @@ -7,5 +7,5 @@ android:tint="?attr/colorPrimary"> + android:pathData="M22,2L6,2v16h16L22,2zM18,7h-3v5.5c0,1.38 -1.12,2.5 -2.5,2.5S10,13.88 10,12.5s1.12,-2.5 2.5,-2.5c0.57,0 1.08,0.19 1.5,0.51L14,5h4v2zM4,6L2,6v16h16v-2L4,20L4,6z" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_pause_to_play.xml b/app/src/main/res/drawable/ic_pause_to_play.xml index aec896ba4..553f5e7ba 100644 --- a/app/src/main/res/drawable/ic_pause_to_play.xml +++ b/app/src/main/res/drawable/ic_pause_to_play.xml @@ -10,7 +10,7 @@ https://github.com/ashutoshgngwr/noice/ + android:pathData="M4,6L2,6v16h16v-2L4,20L4,6zM22,2L6,2v16h16L22,2zM19,11h-4v4h-2v-4L9,11L9,9h4L13,5h2v4h4v2z" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml index e0beb8339..b24c6810a 100644 --- a/app/src/main/res/drawable/ic_settings.xml +++ b/app/src/main/res/drawable/ic_settings.xml @@ -4,8 +4,8 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24" - android:tint="?attr/colorPrimary"> + android:tint="?attr/colorControlNormal"> + android:pathData="M19.44,12.99l-0.01,0.02c0.04,-0.33 0.08,-0.67 0.08,-1.01 0,-0.34 -0.03,-0.66 -0.07,-0.99l0.01,0.02 2.44,-1.92 -2.43,-4.22 -2.87,1.16 0.01,0.01c-0.52,-0.4 -1.09,-0.74 -1.71,-1h0.01L14.44,2H9.57l-0.44,3.07h0.01c-0.62,0.26 -1.19,0.6 -1.71,1l0.01,-0.01 -2.88,-1.17 -2.44,4.22 2.44,1.92 0.01,-0.02c-0.04,0.33 -0.07,0.65 -0.07,0.99 0,0.34 0.03,0.68 0.08,1.01l-0.01,-0.02 -2.1,1.65 -0.33,0.26 2.43,4.2 2.88,-1.15 -0.02,-0.04c0.53,0.41 1.1,0.75 1.73,1.01h-0.03L9.58,22h4.85s0.03,-0.18 0.06,-0.42l0.38,-2.65h-0.01c0.62,-0.26 1.2,-0.6 1.73,-1.01l-0.02,0.04 2.88,1.15 2.43,-4.2s-0.14,-0.12 -0.33,-0.26l-2.11,-1.66zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ui_circle.xml b/app/src/main/res/drawable/ui_circle.xml deleted file mode 100644 index be5283142..000000000 --- a/app/src/main/res/drawable/ui_circle.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ui_header_dividers.xml b/app/src/main/res/drawable/ui_header_dividers.xml index 8a036f39b..37b903240 100644 --- a/app/src/main/res/drawable/ui_header_dividers.xml +++ b/app/src/main/res/drawable/ui_header_dividers.xml @@ -13,10 +13,4 @@ https://stackoverflow.com/a/61157571/14143986 android:color="@color/divider_color" /> - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ui_small_unbounded_ripple.xml b/app/src/main/res/drawable/ui_small_unbounded_ripple.xml index c76c0abd6..1af43a6c5 100644 --- a/app/src/main/res/drawable/ui_small_unbounded_ripple.xml +++ b/app/src/main/res/drawable/ui_small_unbounded_ripple.xml @@ -1,4 +1,4 @@ \ No newline at end of file + android:radius="@dimen/size_small_unb_ripple" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ui_unbounded_ripple.xml b/app/src/main/res/drawable/ui_unbounded_ripple.xml index 61bb0e72c..48e83633c 100644 --- a/app/src/main/res/drawable/ui_unbounded_ripple.xml +++ b/app/src/main/res/drawable/ui_unbounded_ripple.xml @@ -1,4 +1,4 @@ \ No newline at end of file + android:radius="@dimen/size_unb_ripple" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_album_detail.xml b/app/src/main/res/layout/fragment_album_detail.xml index 8f1ede2a6..c645642c4 100644 --- a/app/src/main/res/layout/fragment_album_detail.xml +++ b/app/src/main/res/layout/fragment_album_detail.xml @@ -26,14 +26,8 @@ + app:menu="@menu/menu_playback" /> + app:title="@string/label_queue" /> + tools:listitem="@layout/item_queue_song" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 9c4356f58..0e0862f38 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -1,24 +1,16 @@ - + style="@style/Toolbar.Style" + app:title="@string/setting_title" /> + app:title="@string/label_all_songs" /> - - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="Songs" /> + tools:src="@drawable/ic_clear" + tools:ignore="ContentDescription" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_album.xml b/app/src/main/res/layout/item_album.xml index 09667efd7..5b7c381ee 100644 --- a/app/src/main/res/layout/item_album.xml +++ b/app/src/main/res/layout/item_album.xml @@ -11,13 +11,7 @@ type="org.oxycblt.auxio.music.Album" /> - + diff --git a/app/src/main/res/layout/item_album_song.xml b/app/src/main/res/layout/item_album_song.xml index 18837fff7..3429abc77 100644 --- a/app/src/main/res/layout/item_album_song.xml +++ b/app/src/main/res/layout/item_album_song.xml @@ -11,15 +11,9 @@ type="org.oxycblt.auxio.music.Song" /> - + - - + diff --git a/app/src/main/res/layout/item_artist_album.xml b/app/src/main/res/layout/item_artist_album.xml index e1d9d00a3..62ae3fec8 100644 --- a/app/src/main/res/layout/item_artist_album.xml +++ b/app/src/main/res/layout/item_artist_album.xml @@ -11,13 +11,7 @@ type="org.oxycblt.auxio.music.Album" /> - + - + - + - + \ No newline at end of file diff --git a/app/src/main/res/layout/item_prefs_header.xml b/app/src/main/res/layout/item_prefs_header.xml deleted file mode 100644 index 09cf4e536..000000000 --- a/app/src/main/res/layout/item_prefs_header.xml +++ /dev/null @@ -1,16 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_queue_song.xml b/app/src/main/res/layout/item_queue_song.xml index 6413f3ae3..51478a4fd 100644 --- a/app/src/main/res/layout/item_queue_song.xml +++ b/app/src/main/res/layout/item_queue_song.xml @@ -30,15 +30,9 @@ diff --git a/app/src/main/res/layout/item_song.xml b/app/src/main/res/layout/item_song.xml index 7ef365502..1edc324a0 100644 --- a/app/src/main/res/layout/item_song.xml +++ b/app/src/main/res/layout/item_song.xml @@ -11,13 +11,7 @@ type="org.oxycblt.auxio.music.Song" /> - + 48dp - 18dp + 18dp + 24dp 44dp 56dp 68dp @@ -31,7 +32,9 @@ 10sp 2sp 20sp - 26sp + 26sp + 18sp + 19sp 4dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 01be725c0..e1fbeb639 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,27 +4,34 @@ Retry - Library - All Songs - Now Playing Grant + + Library Genres Artists Albums - Songs Search + Default A-Z Z-A - Shuffle + + All Songs + Songs + + Now Playing + Play + Shuffle Play from artist Play from album Go to artist + Queue Add to queue Added to queue Next in Queue + Music Playback The music playback service for Auxio. diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3f8241ec0..07d82ee79 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -14,6 +14,7 @@ @style/FastScrollTheme @color/selection_color ?attr/colorPrimary + 0dp @color/background 0dp @@ -21,12 +22,22 @@ @font/inter_black - - - + + + @@ -37,11 +48,11 @@ - @@ -49,15 +60,12 @@ @font/inter_semibold - - - + @@ -69,6 +77,7 @@ 0dp + @@ -79,19 +88,68 @@ @style/TextAppearance.FastScroll + + - + + + + + + + + + + + + + + + - --> \ No newline at end of file diff --git a/app/src/main/res/xml-v27/prefs_main.xml b/app/src/main/res/xml-v27/prefs_main.xml index 809e51bab..e29f95673 100644 --- a/app/src/main/res/xml-v27/prefs_main.xml +++ b/app/src/main/res/xml-v27/prefs_main.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> + android:layout="@layout/item_header"> + android:layout="@layout/item_header">