From 032fd2bd40a6be7bd7260e86f9e986d1be2f6495 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Thu, 11 Nov 2021 16:25:56 -0700 Subject: [PATCH] style: use material in playback view Use Slider and FloatingActionbutton in the playback view. This is not because I wanted to, but because there were insane bugs on Lollipop devices that stemmed from them being unable to load complex selector resources. --- app/build.gradle | 2 +- .../auxio/playback/CompactPlaybackView.kt | 7 ++ .../oxycblt/auxio/playback/PlaybackSeekBar.kt | 19 ++-- app/src/main/res/color/fill_icon_bg.xml | 6 +- .../res/drawable/ic_launcher_background.xml | 4 +- .../res/drawable/ic_launcher_foreground.xml | 6 +- app/src/main/res/drawable/ic_pause.xml | 10 +-- app/src/main/res/drawable/ic_play.xml | 10 +-- .../main/res/drawable/sel_playing_state.xml | 3 +- .../res/drawable/ui_play_pause_circle.xml | 2 +- app/src/main/res/drawable/ui_scroll_thumb.xml | 13 ++- app/src/main/res/drawable/ui_shape_ripple.xml | 3 +- .../res/drawable/ui_widget_aspect_ratio.xml | 5 +- .../res/layout-land/fragment_playback.xml | 11 +-- app/src/main/res/layout-land/item_detail.xml | 4 +- app/src/main/res/layout-large/item_detail.xml | 2 +- .../layout-xlarge-land/fragment_playback.xml | 11 +-- .../res/layout-xlarge/fragment_playback.xml | 25 +++--- app/src/main/res/layout/dialog_accent.xml | 2 +- app/src/main/res/layout/fragment_about.xml | 2 +- app/src/main/res/layout/fragment_home.xml | 9 +- app/src/main/res/layout/fragment_playback.xml | 11 +-- app/src/main/res/layout/fragment_search.xml | 12 +-- app/src/main/res/layout/item_accent.xml | 4 +- .../main/res/layout/item_action_header.xml | 2 +- app/src/main/res/layout/item_artist.xml | 4 +- app/src/main/res/layout/item_artist_album.xml | 6 +- app/src/main/res/layout/item_artist_song.xml | 2 +- app/src/main/res/layout/item_detail.xml | 4 +- app/src/main/res/layout/item_excluded_dir.xml | 6 +- app/src/main/res/layout/item_genre_song.xml | 2 +- app/src/main/res/layout/item_header.xml | 2 +- app/src/main/res/layout/item_queue_song.xml | 8 +- app/src/main/res/layout/item_tab.xml | 6 +- .../main/res/layout/view_compact_playback.xml | 21 ++--- app/src/main/res/layout/view_seek_bar.xml | 14 +-- app/src/main/res/layout/widget_large.xml | 30 +++---- app/src/main/res/layout/widget_medium.xml | 20 ++--- app/src/main/res/layout/widget_tiny.xml | 86 +++++++++---------- app/src/main/res/layout/widget_wide.xml | 16 ++-- .../res/mipmap-anydpi-v26/ic_launcher.xml | 4 +- .../main/res/values-night-v31/styles_core.xml | 56 ++++++++---- .../main/res/values-v31/styles_android.xml | 1 + app/src/main/res/values-v31/styles_core.xml | 54 ++++++++---- app/src/main/res/values/dimens.xml | 5 +- app/src/main/res/values/styles_android.xml | 5 +- app/src/main/res/values/styles_core.xml | 13 ++- app/src/main/res/values/styles_ui.xml | 19 ++-- app/src/main/res/xml-v31/widget_info.xml | 6 +- app/src/main/res/xml/prefs_main.xml | 6 +- app/src/main/res/xml/widget_info.xml | 4 +- 51 files changed, 328 insertions(+), 257 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0223d497a..f33a18072 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -100,7 +100,7 @@ dependencies { implementation 'io.coil-kt:coil:1.4.0' // Material - implementation "com.google.android.material:material:1.5.0-alpha05" + implementation "com.google.android.material:material:1.5.0-beta01" // --- DEBUG --- diff --git a/app/src/main/java/org/oxycblt/auxio/playback/CompactPlaybackView.kt b/app/src/main/java/org/oxycblt/auxio/playback/CompactPlaybackView.kt index fc8ae0ac3..ef1e2f125 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/CompactPlaybackView.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/CompactPlaybackView.kt @@ -25,6 +25,7 @@ import android.util.AttributeSet import android.view.WindowInsets import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.updatePadding +import com.google.android.material.color.MaterialColors import com.google.android.material.shape.MaterialShapeDrawable import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.ViewCompactPlaybackBinding @@ -83,6 +84,12 @@ class CompactPlaybackView @JvmOverloads constructor( binding.playbackPlayPause.setOnClickListener { mCallback?.onPlayPauseClick() } + + // By default, LinearProgressIndicator will not actually color the track with the proper + // opacity. Why? Who knows! + binding.playbackProgressBar.trackColor = MaterialColors.compositeARGBWithAlpha( + binding.playbackProgressBar.trackColor, (255 * 0.2).toInt() + ) } override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets { diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackSeekBar.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackSeekBar.kt index 685b5cbcd..5ee25e20c 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackSeekBar.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackSeekBar.kt @@ -20,8 +20,8 @@ package org.oxycblt.auxio.playback import android.content.Context import android.util.AttributeSet -import android.widget.SeekBar import androidx.constraintlayout.widget.ConstraintLayout +import com.google.android.material.slider.Slider import org.oxycblt.auxio.databinding.ViewSeekBarBinding import org.oxycblt.auxio.music.toDuration import org.oxycblt.auxio.util.inflater @@ -36,39 +36,40 @@ class PlaybackSeekBar @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleRes: Int = -1 -) : ConstraintLayout(context, attrs, defStyleRes), SeekBar.OnSeekBarChangeListener { +) : ConstraintLayout(context, attrs, defStyleRes), Slider.OnChangeListener, Slider.OnSliderTouchListener { private val binding = ViewSeekBarBinding.inflate(context.inflater, this, true) private val isSeeking: Boolean get() = binding.playbackDurationCurrent.isActivated var onConfirmListener: ((Long) -> Unit)? = null init { - binding.seekBar.setOnSeekBarChangeListener(this) + binding.seekBar.addOnChangeListener(this) + binding.seekBar.addOnSliderTouchListener(this) } fun setProgress(seconds: Long) { // Don't update the progress while we are seeking, that will make the SeekBar jump around. if (!isSeeking) { - binding.seekBar.progress = seconds.toInt() + binding.seekBar.value = seconds.toFloat() binding.playbackDurationCurrent.text = seconds.toDuration() } } fun setDuration(seconds: Long) { - binding.seekBar.max = seconds.toInt() + binding.seekBar.valueTo = seconds.toFloat() binding.playbackSongDuration.text = seconds.toDuration() } - override fun onStartTrackingTouch(seekbar: SeekBar) { + override fun onStartTrackingTouch(slider: Slider) { binding.playbackDurationCurrent.isActivated = true } - override fun onStopTrackingTouch(seekbar: SeekBar) { + override fun onStopTrackingTouch(slider: Slider) { binding.playbackDurationCurrent.isActivated = false - onConfirmListener?.invoke(seekbar.progress.toLong()) + onConfirmListener?.invoke(slider.value.toLong()) } - override fun onProgressChanged(seekbar: SeekBar, value: Int, fromUser: Boolean) { + override fun onValueChange(slider: Slider, value: Float, fromUser: Boolean) { if (fromUser) { // Don't actually seek yet when the user moves the progress bar, as to make our // player seek during every movement is both inefficient and weird. diff --git a/app/src/main/res/color/fill_icon_bg.xml b/app/src/main/res/color/fill_icon_bg.xml index a7c171c99..916db1e7d 100644 --- a/app/src/main/res/color/fill_icon_bg.xml +++ b/app/src/main/res/color/fill_icon_bg.xml @@ -1,10 +1,10 @@ - + android:type="linear"> diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index 8cf0eca9e..c0c966ee2 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -6,6 +6,6 @@ android:viewportHeight="108"> + android:pathData="M0 0h108v108H0z" + android:strokeColor="#00000000" /> diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 3a78126f7..0515b0db5 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,12 +1,10 @@ - + android:strokeColor="#00000000"> diff --git a/app/src/main/res/drawable/ic_pause.xml b/app/src/main/res/drawable/ic_pause.xml index 8f12a68eb..31ad74d80 100644 --- a/app/src/main/res/drawable/ic_pause.xml +++ b/app/src/main/res/drawable/ic_pause.xml @@ -2,10 +2,10 @@ - + android:viewportHeight="24"> + diff --git a/app/src/main/res/drawable/ic_play.xml b/app/src/main/res/drawable/ic_play.xml index f5ef8eae9..a456a1c1d 100644 --- a/app/src/main/res/drawable/ic_play.xml +++ b/app/src/main/res/drawable/ic_play.xml @@ -2,10 +2,10 @@ - + android:viewportHeight="24"> + diff --git a/app/src/main/res/drawable/sel_playing_state.xml b/app/src/main/res/drawable/sel_playing_state.xml index b03eab616..c0ce56d30 100644 --- a/app/src/main/res/drawable/sel_playing_state.xml +++ b/app/src/main/res/drawable/sel_playing_state.xml @@ -1,6 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/ui_play_pause_circle.xml b/app/src/main/res/drawable/ui_play_pause_circle.xml index 023794af1..0d814703a 100644 --- a/app/src/main/res/drawable/ui_play_pause_circle.xml +++ b/app/src/main/res/drawable/ui_play_pause_circle.xml @@ -1,6 +1,6 @@ + android:color="@color/mtrl_btn_ripple_color"> - - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ui_shape_ripple.xml b/app/src/main/res/drawable/ui_shape_ripple.xml index 8cca1f401..59706db25 100644 --- a/app/src/main/res/drawable/ui_shape_ripple.xml +++ b/app/src/main/res/drawable/ui_shape_ripple.xml @@ -1,5 +1,4 @@ - - diff --git a/app/src/main/res/drawable/ui_widget_aspect_ratio.xml b/app/src/main/res/drawable/ui_widget_aspect_ratio.xml index acd86eeec..9833fcff9 100644 --- a/app/src/main/res/drawable/ui_widget_aspect_ratio.xml +++ b/app/src/main/res/drawable/ui_widget_aspect_ratio.xml @@ -2,10 +2,9 @@ - + + android:height="1000px" /> \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_playback.xml b/app/src/main/res/layout-land/fragment_playback.xml index c998bb795..40eba7991 100644 --- a/app/src/main/res/layout-land/fragment_playback.xml +++ b/app/src/main/res/layout-land/fragment_playback.xml @@ -24,7 +24,8 @@ android:id="@+id/playback_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?attr/colorSurface"> + android:background="?attr/colorSurface" + android:clipToPadding="false"> - + android:background="?attr/colorSurface" + android:clipToPadding="false"> - + android:background="?attr/colorSurface" + android:clipToPadding="false"> @@ -127,9 +128,9 @@ app:layout_constraintEnd_toStartOf="@+id/playback_play_pause" app:layout_constraintTop_toTopOf="@+id/playback_play_pause" /> - + app:tabMode="scrollable" + app:tabTextAppearance="@style/TextAppearance.Auxio.LabelLarge" + app:tabTextColor="@color/sel_accented_primary" /> @@ -57,10 +58,10 @@ android:id="@+id/home_fab" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/ic_shuffle" - app:fabSize="normal" android:layout_margin="@dimen/spacing_medium" android:contentDescription="@string/desc_shuffle_all" + android:src="@drawable/ic_shuffle" + app:fabSize="normal" app:tint="?attr/colorOnPrimaryContainer" /> diff --git a/app/src/main/res/layout/fragment_playback.xml b/app/src/main/res/layout/fragment_playback.xml index 339513ec1..c277e7cd0 100644 --- a/app/src/main/res/layout/fragment_playback.xml +++ b/app/src/main/res/layout/fragment_playback.xml @@ -23,7 +23,8 @@ android:id="@+id/playback_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?attr/colorSurface"> + android:background="?attr/colorSurface" + android:clipToPadding="false"> @@ -125,9 +126,9 @@ app:layout_constraintStart_toEndOf="@+id/playback_loop" app:layout_constraintTop_toTopOf="@+id/playback_play_pause" /> - + app:errorEnabled="false" + app:hintEnabled="false"> + android:inputType="textFilter" + android:paddingStart="0dp" + android:paddingEnd="0dp" + android:textAppearance="@style/TextAppearance.Auxio.BodyLarge" /> diff --git a/app/src/main/res/layout/item_accent.xml b/app/src/main/res/layout/item_accent.xml index 71d8c1db4..84413120b 100644 --- a/app/src/main/res/layout/item_accent.xml +++ b/app/src/main/res/layout/item_accent.xml @@ -4,11 +4,11 @@ tools:context=".settings.pref.AccentAdapter.ViewHolder"> + android:paddingBottom="@dimen/spacing_small" + android:theme="@style/ThemeOverlay.Accent"> @@ -14,11 +14,11 @@ diff --git a/app/src/main/res/layout/item_queue_song.xml b/app/src/main/res/layout/item_queue_song.xml index 935fdb630..0ee961c58 100644 --- a/app/src/main/res/layout/item_queue_song.xml +++ b/app/src/main/res/layout/item_queue_song.xml @@ -21,16 +21,16 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/colorPrimary" - android:visibility="invisible"/> + android:visibility="invisible" /> + android:src="@drawable/ic_clear" + app:tint="?attr/colorSurface" /> - diff --git a/app/src/main/res/layout/view_seek_bar.xml b/app/src/main/res/layout/view_seek_bar.xml index c2f343bc2..b4fba3de0 100644 --- a/app/src/main/res/layout/view_seek_bar.xml +++ b/app/src/main/res/layout/view_seek_bar.xml @@ -8,14 +8,18 @@ tools:layout_width="match_parent" tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"> - @@ -24,8 +28,8 @@ android:id="@+id/playback_duration_current" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginStart="@dimen/spacing_medium" android:layout_marginBottom="@dimen/spacing_small" - android:layout_marginStart="@dimen/spacing_small" android:textColor="@color/sel_accented_secondary" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -35,8 +39,8 @@ android:id="@+id/playback_song_duration" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/spacing_medium" android:layout_marginBottom="@dimen/spacing_small" - android:layout_marginEnd="@dimen/spacing_small" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" tools:text="16:16" /> diff --git a/app/src/main/res/layout/widget_large.xml b/app/src/main/res/layout/widget_large.xml index fc85508a1..eeb19c0a7 100644 --- a/app/src/main/res/layout/widget_large.xml +++ b/app/src/main/res/layout/widget_large.xml @@ -2,10 +2,10 @@ + android:layout_height="match_parent" + android:background="?attr/colorSurface" + android:theme="@style/Theme.Widget"> - @color/m3_dynamic_dark_default_color_primary_text - @color/m3_dynamic_default_color_primary_text - @color/m3_dynamic_dark_default_color_secondary_text - @color/m3_dynamic_default_color_secondary_text - @color/m3_dynamic_dark_default_color_secondary_text - @color/m3_dynamic_default_color_secondary_text - @color/m3_dynamic_dark_primary_text_disable_only - @color/m3_dynamic_primary_text_disable_only + @color/m3_dynamic_dark_default_color_primary_text + + @color/m3_dynamic_default_color_primary_text + + + @color/m3_dynamic_dark_default_color_secondary_text + + + @color/m3_dynamic_default_color_secondary_text + + @color/m3_dynamic_dark_default_color_secondary_text + + + @color/m3_dynamic_default_color_secondary_text + + + @color/m3_dynamic_dark_primary_text_disable_only + + + @color/m3_dynamic_primary_text_disable_only + @color/m3_dynamic_dark_hint_foreground @color/m3_dynamic_hint_foreground - @color/m3_dynamic_dark_default_color_primary_text + + @color/m3_dynamic_dark_default_color_primary_text + diff --git a/app/src/main/res/values-v31/styles_core.xml b/app/src/main/res/values-v31/styles_core.xml index 987540df3..7ee5041d0 100644 --- a/app/src/main/res/values-v31/styles_core.xml +++ b/app/src/main/res/values-v31/styles_core.xml @@ -15,24 +15,35 @@ @color/m3_sys_color_dynamic_light_primary @color/m3_sys_color_dynamic_light_on_primary @color/m3_sys_color_dynamic_light_inverse_primary - @color/m3_sys_color_dynamic_light_primary_container - @color/m3_sys_color_dynamic_light_on_primary_container + @color/m3_sys_color_dynamic_light_primary_container + + + @color/m3_sys_color_dynamic_light_on_primary_container + @color/m3_sys_color_dynamic_light_secondary @color/m3_sys_color_dynamic_light_on_secondary - @color/m3_sys_color_dynamic_light_secondary_container - @color/m3_sys_color_dynamic_light_on_secondary_container + @color/m3_sys_color_dynamic_light_secondary_container + + + @color/m3_sys_color_dynamic_light_on_secondary_container + @color/m3_sys_color_dynamic_light_tertiary @color/m3_sys_color_dynamic_light_on_tertiary - @color/m3_sys_color_dynamic_light_tertiary_container - @color/m3_sys_color_dynamic_light_on_tertiary_container + @color/m3_sys_color_dynamic_light_tertiary_container + + + @color/m3_sys_color_dynamic_light_on_tertiary_container + @color/m3_sys_color_dynamic_light_background @color/m3_sys_color_dynamic_light_on_background @color/m3_sys_color_dynamic_light_surface @color/m3_sys_color_dynamic_light_on_surface @color/m3_sys_color_dynamic_light_surface_variant - @color/m3_sys_color_dynamic_light_on_surface_variant + @color/m3_sys_color_dynamic_light_on_surface_variant + @color/m3_sys_color_dynamic_light_inverse_surface - @color/m3_sys_color_dynamic_light_inverse_on_surface + @color/m3_sys_color_dynamic_light_inverse_on_surface + @color/m3_sys_color_dynamic_light_outline @color/m3_sys_color_light_error @color/m3_sys_color_light_on_error @@ -41,16 +52,29 @@ @color/m3_dynamic_default_color_primary_text - @color/m3_dynamic_dark_default_color_primary_text - @color/m3_dynamic_default_color_secondary_text - @color/m3_dynamic_dark_default_color_secondary_text + + @color/m3_dynamic_dark_default_color_primary_text + + @color/m3_dynamic_default_color_secondary_text + + + @color/m3_dynamic_dark_default_color_secondary_text + @color/m3_dynamic_default_color_secondary_text - @color/m3_dynamic_dark_default_color_secondary_text - @color/m3_dynamic_primary_text_disable_only - @color/m3_dynamic_dark_primary_text_disable_only + + @color/m3_dynamic_dark_default_color_secondary_text + + + @color/m3_dynamic_primary_text_disable_only + + + @color/m3_dynamic_dark_primary_text_disable_only + @color/m3_dynamic_hint_foreground @color/m3_dynamic_dark_hint_foreground - @color/m3_dynamic_default_color_primary_text + + @color/m3_dynamic_default_color_primary_text + @@ -48,8 +48,7 @@ diff --git a/app/src/main/res/values/styles_core.xml b/app/src/main/res/values/styles_core.xml index aa0c4b457..64ac45aa8 100644 --- a/app/src/main/res/values/styles_core.xml +++ b/app/src/main/res/values/styles_core.xml @@ -3,7 +3,9 @@ diff --git a/app/src/main/res/values/styles_ui.xml b/app/src/main/res/values/styles_ui.xml index b157bdeb1..07d0eb048 100644 --- a/app/src/main/res/values/styles_ui.xml +++ b/app/src/main/res/values/styles_ui.xml @@ -19,11 +19,6 @@ @drawable/ic_down - - @@ -156,19 +152,16 @@ - \ No newline at end of file diff --git a/app/src/main/res/xml-v31/widget_info.xml b/app/src/main/res/xml-v31/widget_info.xml index ec064c79c..1e2f02576 100644 --- a/app/src/main/res/xml-v31/widget_info.xml +++ b/app/src/main/res/xml-v31/widget_info.xml @@ -2,12 +2,12 @@ + app:title="@string/set_lib_tabs" />