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.
This commit is contained in:
OxygenCobalt 2021-11-11 16:25:56 -07:00
parent 67797d957e
commit 032fd2bd40
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
51 changed files with 328 additions and 257 deletions

View file

@ -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 ---

View file

@ -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 {

View file

@ -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.

View file

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<gradient android:endX="108"
<gradient xmlns:android="http://schemas.android.com/apk/res/android"
android:endX="108"
android:endY="108"
android:startX="0"
android:startY="0"
android:type="linear"
xmlns:android="http://schemas.android.com/apk/res/android">
android:type="linear">
<item
android:color="#0D47A1"
android:offset="0.0" />

View file

@ -6,6 +6,6 @@
android:viewportHeight="108">
<path
android:fillColor="@color/fill_icon_bg"
android:strokeColor="#00000000"
android:pathData="M0 0h108v108H0z" />
android:pathData="M0 0h108v108H0z"
android:strokeColor="#00000000" />
</vector>

View file

@ -1,12 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#ffffff"
android:pathData="M 53.999797,30.00003 V 56.66727 H 52.765254 48.82459 44.568872 l -6.567779,6.56803 v 4.05833 c -4.8e-5,0.0136 -0.0011,0.0269 -0.0011,0.0405 0,0.0136 0.0011,0.027 0.0011,0.0405 v 4.0573 l 6.567779,6.56804 h 8.196382 l 6.567788,-6.56804 v -4.0573 c 5e-5,-0.0133 9.92e-4,-0.0269 9.92e-4,-0.0405 V 40.667439 H 70.000006 V 30.001057 Z"
android:strokeColor="#00000000"
android:fillColor="#ffffff">
</path>
android:strokeColor="#00000000"></path>
</vector>

View file

@ -2,10 +2,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z"/>
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z" />
</vector>

View file

@ -2,10 +2,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M8,5v14l11,-7L8,5z"/>
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M8,5v14l11,-7L8,5z" />
</vector>

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_pause"
android:state_activated="true" />
<item android:drawable="@drawable/ic_pause" android:state_activated="true" />
<item android:drawable="@drawable/ic_play" />
</selector>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/m3_button_ripple_color_selector">
android:color="@color/mtrl_btn_ripple_color">
<item android:id="@android:id/background">
<shape
android:shape="rectangle"

View file

@ -1,11 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:tint="?attr/colorSecondary">
<corners android:radius="8dp" />
<padding android:top="4dp" android:bottom="4dp" android:right="2dp" android:left="2dp"/>
<size android:width="8dp" android:height="52dp" />
<padding
android:bottom="4dp"
android:left="2dp"
android:right="2dp"
android:top="4dp" />
<size
android:width="8dp"
android:height="52dp" />
<solid android:color="@android:color/white" />
</shape>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Hack to make MaterialShapeDrawable cooperate with RippleDrawable. See
<?xml version="1.0" encoding="utf-8"?><!-- Hack to make MaterialShapeDrawable cooperate with RippleDrawable. See
CompactPlaybackView for more info. -->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">

View file

@ -2,10 +2,9 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="#00000000" />
<solid android:color="#00000000" />
<size
android:width="1000px"
android:height="1000px"/>
android:height="1000px" />
</shape>

View file

@ -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">
<androidx.appcompat.widget.Toolbar
android:id="@+id/playback_toolbar"
@ -109,8 +110,8 @@
android:id="@+id/playback_seek_bar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_medium"
android:layout_marginEnd="@dimen/spacing_medium"
android:layout_marginStart="@dimen/spacing_small"
android:layout_marginEnd="@dimen/spacing_small"
app:layout_constraintBottom_toTopOf="@+id/playback_play_pause"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
@ -144,9 +145,9 @@
app:layout_constraintStart_toEndOf="@+id/playback_loop"
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
<ImageButton
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/playback_play_pause"
style="@style/Widget.Auxio.Button.Circular"
style="@style/Widget.Auxio.FloatingActionButton.MidLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_play_pause"

View file

@ -24,10 +24,10 @@
android:id="@+id/detail_name"
style="@style/Widget.Auxio.TextView.Detail"
android:layout_width="0dp"
android:maxLines="2"
android:ellipsize="end"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_medium"
android:ellipsize="end"
android:maxLines="2"
app:layout_constraintBottom_toTopOf="@+id/detail_subhead"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"

View file

@ -24,8 +24,8 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_medium"
android:maxLines="4"
android:ellipsize="end"
android:maxLines="4"
app:layout_constraintBottom_toTopOf="@+id/detail_subhead"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"

View file

@ -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">
<androidx.appcompat.widget.Toolbar
android:id="@+id/playback_toolbar"
@ -110,8 +111,8 @@
android:id="@+id/playback_seek_bar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_medium"
android:layout_marginEnd="@dimen/spacing_medium"
android:layout_marginStart="@dimen/spacing_small"
android:layout_marginEnd="@dimen/spacing_small"
app:layout_constraintBottom_toTopOf="@+id/playback_play_pause"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
@ -145,9 +146,9 @@
app:layout_constraintEnd_toStartOf="@+id/playback_play_pause"
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
<ImageButton
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/playback_play_pause"
style="@style/Widget.Auxio.Button.Circular"
style="@style/Widget.Auxio.FloatingActionButton.MidLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_play_pause"

View file

@ -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">
<androidx.appcompat.widget.Toolbar
android:id="@+id/playback_toolbar"
@ -37,7 +38,7 @@
<ImageView
android:id="@+id/playback_cover"
style="@style/Widget.Auxio.Image.Full"
android:layout_margin="@dimen/spacing_mid_huge"
android:layout_margin="@dimen/spacing_huge"
android:contentDescription="@{@string/desc_album_cover(song.name)}"
app:albumArt="@{song}"
app:layout_constraintBottom_toTopOf="@+id/playback_song"
@ -52,8 +53,8 @@
style="@style/Widget.Auxio.TextView.Primary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_mid_huge"
android:layout_marginEnd="@dimen/spacing_mid_huge"
android:layout_marginStart="@dimen/spacing_huge"
android:layout_marginEnd="@dimen/spacing_huge"
android:onClick="@{() -> detailModel.navToItem(playbackModel.song)}"
android:text="@{song.name}"
app:layout_constraintBottom_toTopOf="@+id/playback_artist"
@ -67,8 +68,8 @@
style="@style/Widget.Auxio.TextView.Secondary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_mid_huge"
android:layout_marginEnd="@dimen/spacing_mid_huge"
android:layout_marginStart="@dimen/spacing_huge"
android:layout_marginEnd="@dimen/spacing_huge"
android:onClick="@{() -> detailModel.navToItem(playbackModel.song.album.artist)}"
android:text="@{song.album.artist.resolvedName}"
app:layout_constraintBottom_toTopOf="@+id/playback_album"
@ -81,8 +82,8 @@
style="@style/Widget.Auxio.TextView.Secondary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_mid_huge"
android:layout_marginEnd="@dimen/spacing_mid_huge"
android:layout_marginStart="@dimen/spacing_huge"
android:layout_marginEnd="@dimen/spacing_huge"
android:onClick="@{() -> detailModel.navToItem(playbackModel.song.album)}"
android:text="@{song.album.name}"
app:layout_constraintBottom_toTopOf="@+id/playback_seek_bar"
@ -94,8 +95,8 @@
android:id="@+id/playback_seek_bar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_mid_huge"
android:layout_marginEnd="@dimen/spacing_mid_huge"
android:layout_marginStart="@dimen/spacing_large"
android:layout_marginEnd="@dimen/spacing_large"
app:layout_constraintBottom_toTopOf="@+id/playback_play_pause"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
@ -127,9 +128,9 @@
app:layout_constraintEnd_toStartOf="@+id/playback_play_pause"
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
<ImageButton
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/playback_play_pause"
style="@style/Widget.Auxio.Button.Circular"
style="@style/Widget.Auxio.FloatingActionButton.MidLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_large"

View file

@ -8,8 +8,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
android:paddingTop="@dimen/spacing_medium"
android:paddingStart="@dimen/spacing_medium"
android:paddingTop="@dimen/spacing_medium"
android:paddingEnd="@dimen/spacing_medium"
app:layoutManager="org.oxycblt.auxio.accent.AutoGridLayoutManager"
app:layout_constraintBottom_toTopOf="@+id/accent_cancel"

View file

@ -178,8 +178,8 @@
style="@style/Widget.Auxio.TextView.Icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Theme.Auxio.Neutral"
android:text="@string/lbl_author"
android:theme="@style/Theme.Auxio.Neutral"
app:drawableStartCompat="@drawable/ic_artist"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"

View file

@ -32,9 +32,10 @@
android:layout_height="wrap_content"
android:background="@android:color/transparent"
app:tabContentStart="@dimen/spacing_medium"
app:tabMode="scrollable"
app:tabGravity="start"
app:tabTextColor="@color/sel_accented_primary"/>
app:tabMode="scrollable"
app:tabTextAppearance="@style/TextAppearance.Auxio.LabelLarge"
app:tabTextColor="@color/sel_accented_primary" />
</org.oxycblt.auxio.ui.EdgeAppBarLayout>
@ -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" />
</org.oxycblt.auxio.home.FloatingActionButtonContainer>

View file

@ -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">
<androidx.appcompat.widget.Toolbar
android:id="@+id/playback_toolbar"
@ -93,8 +94,8 @@
android:id="@+id/playback_seek_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_medium"
android:layout_marginEnd="@dimen/spacing_medium"
android:layout_marginStart="@dimen/spacing_small"
android:layout_marginEnd="@dimen/spacing_small"
app:layout_constraintBottom_toTopOf="@+id/playback_play_pause"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
@ -125,9 +126,9 @@
app:layout_constraintStart_toEndOf="@+id/playback_loop"
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
<ImageButton
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/playback_play_pause"
style="@style/Widget.Auxio.Button.Circular"
style="@style/Widget.Auxio.FloatingActionButton.MidLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_medium"

View file

@ -24,24 +24,24 @@
android:id="@+id/search_text_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hintEnabled="false"
app:endIconContentDescription="@string/desc_clear_search"
app:endIconDrawable="@drawable/ic_close"
app:endIconMode="clear_text"
app:endIconTint="?attr/colorControlNormal"
app:errorEnabled="false">
app:errorEnabled="false"
app:hintEnabled="false">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/search_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.Auxio.BodyLarge"
android:background="@android:color/transparent"
android:paddingStart="0dp"
android:paddingEnd="0dp"
android:hint="@string/hint_search_library"
android:imeOptions="actionSearch|flagNoExtractUi"
android:inputType="textFilter" />
android:inputType="textFilter"
android:paddingStart="0dp"
android:paddingEnd="0dp"
android:textAppearance="@style/TextAppearance.Auxio.BodyLarge" />
</com.google.android.material.textfield.TextInputLayout>

View file

@ -4,11 +4,11 @@
tools:context=".settings.pref.AccentAdapter.ViewHolder">
<FrameLayout
android:theme="@style/ThemeOverlay.Accent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/spacing_small"
android:paddingBottom="@dimen/spacing_small">
android:paddingBottom="@dimen/spacing_small"
android:theme="@style/ThemeOverlay.Accent">
<ImageButton
android:id="@+id/accent"

View file

@ -31,12 +31,12 @@
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/ui_small_unbounded_ripple"
android:contentDescription="@{context.getString(header.desc)}"
android:minWidth="@dimen/size_btn_small"
android:minHeight="@dimen/size_btn_small"
android:paddingStart="@dimen/spacing_medium"
android:paddingEnd="@dimen/spacing_medium"
android:background="@drawable/ui_small_unbounded_ripple"
android:src="@{context.getDrawable(header.icon)}"
app:layout_constraintBottom_toTopOf="@id/header_divider"
app:layout_constraintEnd_toEndOf="parent"

View file

@ -25,9 +25,9 @@
<TextView
android:id="@+id/artist_name"
style="@style/Widget.Auxio.TextView.Item.Primary"
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Widget.Auxio.TextView.Item.Primary"
android:text="@{artist.resolvedName}"
app:layout_constraintBottom_toTopOf="@+id/artist_details"
app:layout_constraintEnd_toEndOf="parent"
@ -38,9 +38,9 @@
<TextView
android:id="@+id/artist_details"
style="@style/Widget.Auxio.TextView.Item.Secondary"
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Widget.Auxio.TextView.Item.Secondary"
app:artistCounts="@{artist}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"

View file

@ -25,11 +25,11 @@
<TextView
android:id="@+id/album_name"
style="@style/Widget.Auxio.TextView.Item.Primary"
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Widget.Auxio.TextView.Item.Primary"
android:textColor="@color/sel_accented_primary"
android:text="@{album.name}"
android:textColor="@color/sel_accented_primary"
app:layout_constraintBottom_toTopOf="@+id/album_year"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/album_cover"
@ -39,9 +39,9 @@
<TextView
android:id="@+id/album_year"
style="@style/Widget.Auxio.TextView.Item.Secondary"
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Widget.Auxio.TextView.Item.Secondary"
android:text="@{album.year != 0 ? String.valueOf(album.year) : @string/def_date}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"

View file

@ -53,9 +53,9 @@
<TextView
android:id="@+id/song_duration"
style="@style/Widget.Auxio.TextView.Item.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Widget.Auxio.TextView.Item.Secondary"
android:ellipsize="none"
android:gravity="end"
android:text="@{song.formattedDuration}"

View file

@ -35,9 +35,9 @@
<TextView
android:id="@+id/detail_subhead"
style="@style/Widget.Auxio.TextView.Secondary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.Auxio.TextView.Secondary"
android:textColor="?android:attr/textColorSecondary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/detail_name"
@ -45,9 +45,9 @@
<TextView
android:id="@+id/detail_info"
style="@style/Widget.Auxio.TextView.Secondary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.Auxio.TextView.Secondary"
android:textColor="?android:attr/textColorSecondary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/detail_subhead"

View file

@ -5,8 +5,8 @@
<androidx.constraintlayout.widget.ConstraintLayout
style="@style/Widget.Auxio.ItemLayout"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:padding="0dp">
@ -14,11 +14,11 @@
<TextView
android:id="@+id/excluded_path"
style="@style/Widget.Auxio.TextView.Item.Primary"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/spacing_medium"
android:maxLines="@null"
android:gravity="center"
android:maxLines="@null"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/excluded_clear"
app:layout_constraintStart_toStartOf="parent"

View file

@ -53,9 +53,9 @@
<TextView
android:id="@+id/song_duration"
style="@style/Widget.Auxio.TextView.Item.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Widget.Auxio.TextView.Item.Secondary"
android:ellipsize="none"
android:gravity="end"
android:text="@{song.formattedDuration}"

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".ui.HeaderViewHolder">
<data>

View file

@ -21,16 +21,16 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorPrimary"
android:visibility="invisible"/>
android:visibility="invisible" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_clear"
android:layout_gravity="end|center_vertical"
android:contentDescription="@string/desc_clear_queue_item"
android:padding="@dimen/spacing_medium"
app:tint="?attr/colorSurface"
android:contentDescription="@string/desc_clear_queue_item"/>
android:src="@drawable/ic_clear"
app:tint="?attr/colorSurface" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/body"

View file

@ -5,22 +5,22 @@
<androidx.constraintlayout.widget.ConstraintLayout
style="@style/Widget.Auxio.ItemLayout"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="0dp">
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/tab_icon"
android:layout_width="0dp"
style="@style/Widget.Material3.CompoundButton.CheckBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_medium"
android:layout_marginTop="@dimen/spacing_small"
android:layout_marginBottom="@dimen/spacing_small"
android:clickable="false"
android:focusable="false"
android:textAppearance="@style/TextAppearance.Auxio.BodyLarge"
android:paddingStart="@dimen/spacing_medium"
android:textAppearance="@style/TextAppearance.Auxio.BodyLarge"
app:buttonCompat="@null"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/tab_drag_handle"

View file

@ -30,9 +30,9 @@
<TextView
android:id="@+id/playback_song"
android:layout_height="wrap_content"
android:layout_width="0dp"
style="@style/Widget.Auxio.TextView.Primary.Compact"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_small"
android:layout_marginEnd="@dimen/spacing_small"
android:text="@{song.name}"
@ -45,9 +45,9 @@
<TextView
android:id="@+id/playback_info"
android:layout_height="wrap_content"
android:layout_width="0dp"
style="@style/Widget.Auxio.TextView.Secondary.Compact"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_small"
android:layout_marginEnd="@dimen/spacing_small"
android:ellipsize="end"
@ -60,25 +60,26 @@
<ImageButton
android:id="@+id/playback_play_pause"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
style="@style/Widget.Auxio.Button.Unbounded"
android:src="@drawable/sel_playing_state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/spacing_small"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/sel_playing_state"
app:layout_constraintBottom_toTopOf="@+id/playback_progress_bar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ProgressBar
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/playback_progress_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/size_stroke_large"
android:layout_height="wrap_content"
android:disabledAlpha="0.24"
android:max="@{(int) song.seconds}"
style="@style/Widget.Auxio.ProgressBar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:trackColor="@color/blue_primary"
tools:progress="70" />
</merge>

View file

@ -8,14 +8,18 @@
tools:layout_width="match_parent"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
<SeekBar
<com.google.android.material.slider.Slider
android:id="@+id/seek_bar"
style="@style/Widget.Auxio.SeekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_medium"
android:paddingStart="@dimen/spacing_small"
android:paddingEnd="@dimen/spacing_small"
android:layout_marginBottom="@dimen/spacing_medium"
app:labelBehavior="gone"
android:valueFrom="0"
android:valueTo="0"
app:thumbRadius="6dp"
app:haloRadius="14dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
@ -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" />

View file

@ -2,10 +2,10 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@android:id/background"
android:background="?attr/colorSurface"
android:theme="@style/Theme.Widget"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:background="?attr/colorSurface"
android:theme="@style/Theme.Widget">
<!--
We can't use ConstraintLayout on widgets due to RemoteView limitations, but
@ -19,15 +19,15 @@
android:id="@+id/widget_aspect_ratio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/widget_panel"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginStart="@dimen/spacing_medium"
android:layout_marginTop="@dimen/spacing_medium"
android:layout_marginEnd="@dimen/spacing_medium"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:layout_marginTop="@dimen/spacing_medium"
android:layout_marginStart="@dimen/spacing_medium"
android:layout_marginEnd="@dimen/spacing_medium"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_above="@+id/widget_panel"
android:src="@drawable/ui_widget_aspect_ratio"
android:visibility="invisible"
tools:ignore="ContentDescription" />
@ -71,45 +71,45 @@
<android.widget.ImageButton
android:id="@+id/widget_loop"
style="@style/Widget.Auxio.Button.AppWidget"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/desc_change_loop"
android:src="@drawable/ic_loop" />
<android.widget.ImageButton
android:id="@+id/widget_skip_prev"
android:layout_weight="1"
style="@style/Widget.Auxio.Button.AppWidget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/desc_skip_prev"
android:src="@drawable/ic_skip_prev" />
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
android:layout_weight="1"
style="@style/Widget.Auxio.Button.AppWidget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/sel_playing_state" />
<android.widget.ImageButton
android:id="@+id/widget_skip_next"
android:layout_weight="1"
style="@style/Widget.Auxio.Button.AppWidget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/desc_skip_next"
android:src="@drawable/ic_skip_next" />
<android.widget.ImageButton
android:id="@+id/widget_shuffle"
style="@style/Widget.Auxio.Button.AppWidget"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/desc_shuffle"
android:src="@drawable/ic_shuffle" />

View file

@ -2,10 +2,10 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@android:id/background"
android:background="?attr/colorSurface"
android:theme="@style/Theme.Widget"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:background="?attr/colorSurface"
android:theme="@style/Theme.Widget">
<!--
We can't use ConstraintLayout on widgets due to RemoteView limitations, but
@ -19,15 +19,15 @@
android:id="@+id/widget_aspect_ratio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/widget_panel"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginStart="@dimen/spacing_medium"
android:layout_marginTop="@dimen/spacing_medium"
android:layout_marginEnd="@dimen/spacing_medium"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:layout_marginTop="@dimen/spacing_medium"
android:layout_marginStart="@dimen/spacing_medium"
android:layout_marginEnd="@dimen/spacing_medium"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_above="@+id/widget_panel"
android:src="@drawable/ui_widget_aspect_ratio"
android:visibility="invisible"
tools:ignore="ContentDescription" />

View file

@ -3,60 +3,60 @@
android:id="@android:id/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_vertical"
android:background="?attr/colorSurface"
android:gravity="center_vertical"
android:orientation="vertical"
android:theme="@style/Theme.Widget">
<LinearLayout
style="@style/Widget.Auxio.AppWidget.Panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/widget_cover"
style="@style/Widget.Auxio.Image.Normal"
android:layout_marginEnd="@dimen/spacing_medium"
android:contentDescription="@string/desc_no_cover"
android:scaleType="centerCrop"
android:src="@drawable/ic_song" />
<LinearLayout
style="@style/Widget.Auxio.AppWidget.Panel"
android:layout_width="match_parent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
android:layout_weight="1"
android:orientation="vertical">
<ImageView
android:id="@+id/widget_cover"
style="@style/Widget.Auxio.Image.Normal"
android:contentDescription="@string/desc_no_cover"
android:scaleType="centerCrop"
android:layout_marginEnd="@dimen/spacing_medium"
android:src="@drawable/ic_song" />
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
<android.widget.TextView
android:id="@+id/widget_song"
style="@style/Widget.Auxio.TextView.Primary.AppWidget"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:text="@string/def_widget_song" />
<android.widget.TextView
android:id="@+id/widget_song"
style="@style/Widget.Auxio.TextView.Primary.AppWidget"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/def_widget_song" />
<android.widget.TextView
android:id="@+id/widget_artist"
style="@style/Widget.Auxio.TextView.Secondary.AppWidget"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/def_widget_artist" />
</LinearLayout>
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.Button.AppWidget"
android:layout_width="wrap_content"
<android.widget.TextView
android:id="@+id/widget_artist"
style="@style/Widget.Auxio.TextView.Secondary.AppWidget"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/size_btn_small"
android:minWidth="@dimen/size_btn_small"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/sel_playing_state" />
android:text="@string/def_widget_artist" />
</LinearLayout>
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.Button.AppWidget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_play_pause"
android:minWidth="@dimen/size_btn_small"
android:minHeight="@dimen/size_btn_small"
android:src="@drawable/sel_playing_state" />
</LinearLayout>
</LinearLayout>

View file

@ -3,9 +3,9 @@
android:id="@android:id/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_vertical"
android:background="?attr/colorSurface"
android:gravity="center_vertical"
android:orientation="vertical"
android:theme="@style/Theme.Widget">
<android.widget.LinearLayout style="@style/Widget.Auxio.AppWidget.Panel">
@ -18,9 +18,9 @@
<ImageView
android:id="@+id/widget_cover"
style="@style/Widget.Auxio.Image.Normal"
android:layout_marginEnd="@dimen/spacing_medium"
android:contentDescription="@string/desc_no_cover"
android:scaleType="centerCrop"
android:layout_marginEnd="@dimen/spacing_medium"
android:src="@drawable/ic_song" />
<LinearLayout
@ -55,45 +55,45 @@
<android.widget.ImageButton
android:id="@+id/widget_loop"
style="@style/Widget.Auxio.Button.AppWidget"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/desc_change_loop"
android:src="@drawable/ic_loop" />
<android.widget.ImageButton
android:id="@+id/widget_skip_prev"
android:layout_weight="1"
style="@style/Widget.Auxio.Button.AppWidget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/desc_skip_prev"
android:src="@drawable/ic_skip_prev" />
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
android:layout_weight="1"
style="@style/Widget.Auxio.Button.AppWidget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/sel_playing_state" />
<android.widget.ImageButton
android:id="@+id/widget_skip_next"
android:layout_weight="1"
style="@style/Widget.Auxio.Button.AppWidget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/desc_skip_next"
android:src="@drawable/ic_skip_next" />
<android.widget.ImageButton
android:id="@+id/widget_shuffle"
style="@style/Widget.Auxio.Button.AppWidget"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/desc_shuffle"
android:src="@drawable/ic_shuffle" />

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

View file

@ -16,23 +16,32 @@
<item name="colorOnPrimary">@color/m3_sys_color_dynamic_dark_on_primary</item>
<item name="colorPrimaryInverse">@color/m3_sys_color_dynamic_dark_inverse_primary</item>
<item name="colorPrimaryContainer">@color/m3_sys_color_dynamic_dark_primary_container</item>
<item name="colorOnPrimaryContainer">@color/m3_sys_color_dynamic_dark_on_primary_container</item>
<item name="colorOnPrimaryContainer">@color/m3_sys_color_dynamic_dark_on_primary_container
</item>
<item name="colorSecondary">@color/m3_sys_color_dynamic_dark_secondary</item>
<item name="colorOnSecondary">@color/m3_sys_color_dynamic_dark_on_secondary</item>
<item name="colorSecondaryContainer">@color/m3_sys_color_dynamic_dark_secondary_container</item>
<item name="colorOnSecondaryContainer">@color/m3_sys_color_dynamic_dark_on_secondary_container</item>
<item name="colorSecondaryContainer">@color/m3_sys_color_dynamic_dark_secondary_container
</item>
<item name="colorOnSecondaryContainer">
@color/m3_sys_color_dynamic_dark_on_secondary_container
</item>
<item name="colorTertiary">@color/m3_sys_color_dynamic_dark_tertiary</item>
<item name="colorOnTertiary">@color/m3_sys_color_dynamic_dark_on_tertiary</item>
<item name="colorTertiaryContainer">@color/m3_sys_color_dynamic_dark_tertiary_container</item>
<item name="colorOnTertiaryContainer">@color/m3_sys_color_dynamic_dark_on_tertiary_container</item>
<item name="colorTertiaryContainer">@color/m3_sys_color_dynamic_dark_tertiary_container
</item>
<item name="colorOnTertiaryContainer">
@color/m3_sys_color_dynamic_dark_on_tertiary_container
</item>
<item name="android:colorBackground">@color/m3_sys_color_dynamic_dark_background</item>
<item name="colorOnBackground">@color/m3_sys_color_dynamic_dark_on_background</item>
<item name="colorSurface">@color/m3_sys_color_dynamic_dark_surface</item>
<item name="colorOnSurface">@color/m3_sys_color_dynamic_dark_on_surface</item>
<item name="colorSurfaceVariant">@color/m3_sys_color_dynamic_dark_surface_variant</item>
<item name="colorOnSurfaceVariant">@color/m3_sys_color_dynamic_dark_on_surface_variant</item>
<item name="colorOnSurfaceVariant">@color/m3_sys_color_dynamic_dark_on_surface_variant
</item>
<item name="colorSurfaceInverse">@color/m3_sys_color_dynamic_dark_inverse_surface</item>
<item name="colorOnSurfaceInverse">@color/m3_sys_color_dynamic_dark_inverse_on_surface</item>
<item name="colorOnSurfaceInverse">@color/m3_sys_color_dynamic_dark_inverse_on_surface
</item>
<item name="colorOutline">@color/m3_sys_color_dynamic_dark_outline</item>
<item name="colorError">@color/m3_sys_color_dark_error</item>
<item name="colorOnError">@color/m3_sys_color_dark_on_error</item>
@ -40,17 +49,32 @@
<item name="colorOnErrorContainer">@color/m3_sys_color_dark_on_error_container</item>
<!-- Default Framework Text Colors. -->
<item name="android:textColorPrimary">@color/m3_dynamic_dark_default_color_primary_text</item>
<item name="android:textColorPrimaryInverse">@color/m3_dynamic_default_color_primary_text</item>
<item name="android:textColorSecondary">@color/m3_dynamic_dark_default_color_secondary_text</item>
<item name="android:textColorSecondaryInverse">@color/m3_dynamic_default_color_secondary_text</item>
<item name="android:textColorTertiary">@color/m3_dynamic_dark_default_color_secondary_text</item>
<item name="android:textColorTertiaryInverse">@color/m3_dynamic_default_color_secondary_text</item>
<item name="android:textColorPrimaryDisableOnly">@color/m3_dynamic_dark_primary_text_disable_only</item>
<item name="android:textColorPrimaryInverseDisableOnly">@color/m3_dynamic_primary_text_disable_only</item>
<item name="android:textColorPrimary">@color/m3_dynamic_dark_default_color_primary_text
</item>
<item name="android:textColorPrimaryInverse">@color/m3_dynamic_default_color_primary_text
</item>
<item name="android:textColorSecondary">
@color/m3_dynamic_dark_default_color_secondary_text
</item>
<item name="android:textColorSecondaryInverse">
@color/m3_dynamic_default_color_secondary_text
</item>
<item name="android:textColorTertiary">@color/m3_dynamic_dark_default_color_secondary_text
</item>
<item name="android:textColorTertiaryInverse">
@color/m3_dynamic_default_color_secondary_text
</item>
<item name="android:textColorPrimaryDisableOnly">
@color/m3_dynamic_dark_primary_text_disable_only
</item>
<item name="android:textColorPrimaryInverseDisableOnly">
@color/m3_dynamic_primary_text_disable_only
</item>
<item name="android:textColorHint">@color/m3_dynamic_dark_hint_foreground</item>
<item name="android:textColorHintInverse">@color/m3_dynamic_hint_foreground</item>
<item name="android:textColorAlertDialogListItem">@color/m3_dynamic_dark_default_color_primary_text</item>
<item name="android:textColorAlertDialogListItem">
@color/m3_dynamic_dark_default_color_primary_text
</item>
</style>
<style name="Theme.Widget" parent="@android:style/Theme.DeviceDefault.DayNight">

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Widget.Auxio.Button.AppWidget.V31" parent="Widget.AppCompat.Button.Borderless">
<item name="android:background">@drawable/ui_unbounded_ripple</item>
</style>

View file

@ -15,24 +15,35 @@
<item name="colorPrimary">@color/m3_sys_color_dynamic_light_primary</item>
<item name="colorOnPrimary">@color/m3_sys_color_dynamic_light_on_primary</item>
<item name="colorPrimaryInverse">@color/m3_sys_color_dynamic_light_inverse_primary</item>
<item name="colorPrimaryContainer">@color/m3_sys_color_dynamic_light_primary_container</item>
<item name="colorOnPrimaryContainer">@color/m3_sys_color_dynamic_light_on_primary_container</item>
<item name="colorPrimaryContainer">@color/m3_sys_color_dynamic_light_primary_container
</item>
<item name="colorOnPrimaryContainer">
@color/m3_sys_color_dynamic_light_on_primary_container
</item>
<item name="colorSecondary">@color/m3_sys_color_dynamic_light_secondary</item>
<item name="colorOnSecondary">@color/m3_sys_color_dynamic_light_on_secondary</item>
<item name="colorSecondaryContainer">@color/m3_sys_color_dynamic_light_secondary_container</item>
<item name="colorOnSecondaryContainer">@color/m3_sys_color_dynamic_light_on_secondary_container</item>
<item name="colorSecondaryContainer">@color/m3_sys_color_dynamic_light_secondary_container
</item>
<item name="colorOnSecondaryContainer">
@color/m3_sys_color_dynamic_light_on_secondary_container
</item>
<item name="colorTertiary">@color/m3_sys_color_dynamic_light_tertiary</item>
<item name="colorOnTertiary">@color/m3_sys_color_dynamic_light_on_tertiary</item>
<item name="colorTertiaryContainer">@color/m3_sys_color_dynamic_light_tertiary_container</item>
<item name="colorOnTertiaryContainer">@color/m3_sys_color_dynamic_light_on_tertiary_container</item>
<item name="colorTertiaryContainer">@color/m3_sys_color_dynamic_light_tertiary_container
</item>
<item name="colorOnTertiaryContainer">
@color/m3_sys_color_dynamic_light_on_tertiary_container
</item>
<item name="android:colorBackground">@color/m3_sys_color_dynamic_light_background</item>
<item name="colorOnBackground">@color/m3_sys_color_dynamic_light_on_background</item>
<item name="colorSurface">@color/m3_sys_color_dynamic_light_surface</item>
<item name="colorOnSurface">@color/m3_sys_color_dynamic_light_on_surface</item>
<item name="colorSurfaceVariant">@color/m3_sys_color_dynamic_light_surface_variant</item>
<item name="colorOnSurfaceVariant">@color/m3_sys_color_dynamic_light_on_surface_variant</item>
<item name="colorOnSurfaceVariant">@color/m3_sys_color_dynamic_light_on_surface_variant
</item>
<item name="colorSurfaceInverse">@color/m3_sys_color_dynamic_light_inverse_surface</item>
<item name="colorOnSurfaceInverse">@color/m3_sys_color_dynamic_light_inverse_on_surface</item>
<item name="colorOnSurfaceInverse">@color/m3_sys_color_dynamic_light_inverse_on_surface
</item>
<item name="colorOutline">@color/m3_sys_color_dynamic_light_outline</item>
<item name="colorError">@color/m3_sys_color_light_error</item>
<item name="colorOnError">@color/m3_sys_color_light_on_error</item>
@ -41,16 +52,29 @@
<!-- Default Framework Text Colors. -->
<item name="android:textColorPrimary">@color/m3_dynamic_default_color_primary_text</item>
<item name="android:textColorPrimaryInverse">@color/m3_dynamic_dark_default_color_primary_text</item>
<item name="android:textColorSecondary">@color/m3_dynamic_default_color_secondary_text</item>
<item name="android:textColorSecondaryInverse">@color/m3_dynamic_dark_default_color_secondary_text</item>
<item name="android:textColorPrimaryInverse">
@color/m3_dynamic_dark_default_color_primary_text
</item>
<item name="android:textColorSecondary">@color/m3_dynamic_default_color_secondary_text
</item>
<item name="android:textColorSecondaryInverse">
@color/m3_dynamic_dark_default_color_secondary_text
</item>
<item name="android:textColorTertiary">@color/m3_dynamic_default_color_secondary_text</item>
<item name="android:textColorTertiaryInverse">@color/m3_dynamic_dark_default_color_secondary_text</item>
<item name="android:textColorPrimaryDisableOnly">@color/m3_dynamic_primary_text_disable_only</item>
<item name="android:textColorPrimaryInverseDisableOnly">@color/m3_dynamic_dark_primary_text_disable_only</item>
<item name="android:textColorTertiaryInverse">
@color/m3_dynamic_dark_default_color_secondary_text
</item>
<item name="android:textColorPrimaryDisableOnly">
@color/m3_dynamic_primary_text_disable_only
</item>
<item name="android:textColorPrimaryInverseDisableOnly">
@color/m3_dynamic_dark_primary_text_disable_only
</item>
<item name="android:textColorHint">@color/m3_dynamic_hint_foreground</item>
<item name="android:textColorHintInverse">@color/m3_dynamic_dark_hint_foreground</item>
<item name="android:textColorAlertDialogListItem">@color/m3_dynamic_default_color_primary_text</item>
<item name="android:textColorAlertDialogListItem">
@color/m3_dynamic_default_color_primary_text
</item>
</style>
<style name="Theme.Widget" parent="@android:style/Theme.DeviceDefault.DayNight">

View file

@ -5,7 +5,7 @@
<dimen name="spacing_medium">16dp</dimen>
<dimen name="spacing_mid_large">24dp</dimen>
<dimen name="spacing_large">32dp</dimen>
<dimen name="spacing_mid_huge">48dp</dimen>
<dimen name="spacing_huge">48dp</dimen>
<dimen name="spacing_insane">128dp</dimen>
<!-- Size Namespace | Width & Heights for UI elements -->
@ -17,12 +17,13 @@
<dimen name="size_cover_huge_land">128dp</dimen>
<dimen name="size_cover_huge">256dp</dimen>
<dimen name="size_stroke_large">2dp</dimen>
<dimen name="size_stroke_large">1dp</dimen>
<dimen name="size_small_unb_ripple">20dp</dimen>
<dimen name="size_unb_ripple">24dp</dimen>
<dimen name="size_track_number">32dp</dimen>
<dimen name="size_play_fab_icon">32dp</dimen>
<!-- Misc -->
<dimen name="elevation_small">2dp</dimen>

View file

@ -30,7 +30,7 @@
<!-- Style for dialog buttons -->
<style name="Widget.Auxio.Dialog.Button" parent="Widget.Material3.Button.TextButton.Dialog">
<item name="android:fontFamily">@font/inter_semibold</item>
<item name="android:textAppearance">@style/TextAppearance.Auxio.LabelMedium</item>
<item name="android:textAppearance">@style/TextAppearance.Auxio.LabelLarge</item>
</style>
<!-- Custom button style that eliminates the weird margin that the neutral button has -->
@ -48,8 +48,7 @@
<!-- Widget TextView that mimics the main Auxio Primary TextView -->
<style name="Widget.Auxio.TextView.Primary.AppWidget" parent="Widget.Auxio.TextView.AppWidget">
<item name="android:textStyle">bold</item>
<item name="android:textAppearance">@style/TextAppearance.Auxio.TitleMedium
</item>
<item name="android:textAppearance">@style/TextAppearance.Auxio.TitleMedium</item>
</style>
<!-- Widget TextView that mimics the main Auxio Secondary TextView -->

View file

@ -3,7 +3,9 @@
<!-- Master parent theme -->
<style name="Theme.Auxio" parent="Theme.Material3.DayNight.NoActionBar" />
<!-- Template theme that handles edge-to-edge on other styles variants -->
<style name="Theme.Auxio.V27" parent="Theme.Auxio" />
<style name="Theme.Auxio.V27" parent="Theme.Auxio">
<item name="android:statusBarColor">@android:color/black</item>
</style>
<!-- Android 12 configuration -->
<style name="Theme.Auxio.V31" parent="Theme.Auxio.V27">
<!-- Make sure to apply more accent-friendly values on older versions -->
@ -26,6 +28,7 @@
<!-- Values -->
<item name="colorAccent">?attr/colorSecondary</item>
<item name="colorOutline">@color/overlay_stroke</item>
<item name="indicatorColor">?attr/colorPrimary</item>
<item name="colorControlNormal">?attr/colorOnSurfaceVariant</item>
<item name="colorControlActivated">?attr/colorSecondary</item>
@ -56,6 +59,14 @@
<item name="textAppearanceBodyLarge">@style/TextAppearance.Auxio.BodyLarge</item>
<item name="textAppearanceBodyMedium">@style/TextAppearance.Auxio.BodyMedium</item>
<item name="textAppearanceBodySmall">@style/TextAppearance.Auxio.BodySmall</item>
<!-- Work around other views actually using text appearances I modified -->
<item name="android:textAppearanceListItem">@style/TextAppearance.Material3.TitleMedium</item>
<item name="android:textAppearanceListItemSmall">@style/TextAppearance.Material3.TitleMedium</item>
<item name="android:textAppearanceListItemSecondary">@style/TextAppearance.Material3.BodyMedium</item>
<item name="textAppearanceListItem">@style/TextAppearance.Material3.TitleMedium</item>
<item name="textAppearanceListItemSmall">@style/TextAppearance.Material3.TitleMedium</item>
<item name="textAppearanceListItemSecondary">@style/TextAppearance.Material3.BodyMedium</item>
</style>
<!-- The basic black theme derived in all black accents. -->

View file

@ -19,11 +19,6 @@
<item name="navigationIcon">@drawable/ic_down</item>
</style>
<style name="Widget.Auxio.ProgressBar" parent="Widget.AppCompat.ProgressBar.Horizontal">
<item name="android:progressTint">?attr/colorPrimary</item>
<item name="android:progressBackgroundTint">?attr/colorSecondary</item>
</style>
<style name="Widget.Auxio.SeekBar" parent="Widget.AppCompat.SeekBar">
<item name="android:progressTint">?attr/colorPrimary</item>
<item name="android:progressBackgroundTint">?attr/colorSecondary</item>
@ -106,6 +101,7 @@
<item name="android:ellipsize">end</item>
<item name="android:maxLines">1</item>
<item name="android:fontFamily">@font/inter_semibold</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textAppearance">@style/TextAppearance.Auxio.LabelMedium</item>
</style>
@ -156,19 +152,16 @@
<style name="Widget.Auxio.Button.Primary" parent="Widget.Material3.Button">
<item name="fontFamily">@font/inter_semibold</item>
<item name="android:textAppearance">@style/TextAppearance.Auxio.LabelLarge</item>
</style>
<style name="Widget.Auxio.Button.Secondary" parent="Widget.Material3.Button.OutlinedButton">
<item name="fontFamily">@font/inter_semibold</item>
<item name="android:textAppearance">@style/TextAppearance.Auxio.LabelLarge</item>
</style>
<style name="Widget.Auxio.Button.Circular" parent="">
<item name="android:minHeight">@dimen/size_btn_large</item>
<item name="android:minWidth">@dimen/size_btn_large</item>
<item name="android:background">@drawable/ui_play_pause_circle</item>
<item name="android:contentDescription">@string/desc_play_pause</item>
<item name="android:tint">?attr/colorSurface</item>
<item name="android:scaleType">fitCenter</item>
<item name="android:padding">@dimen/spacing_medium</item>
<style name="Widget.Auxio.FloatingActionButton.MidLarge" parent="Widget.Material3.FloatingActionButton.Primary">
<item name="maxImageSize">@dimen/size_play_fab_icon</item>
<item name="fabCustomSize">@dimen/size_btn_large</item>
</style>
</resources>

View file

@ -2,12 +2,12 @@
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/info_widget_desc"
android:initialLayout="@layout/widget_medium"
android:minResizeWidth="@dimen/widget_width_min"
android:minResizeHeight="@dimen/widget_height_min"
android:minWidth="@dimen/widget_width_def"
android:minHeight="@dimen/widget_height_def"
android:previewLayout="@layout/widget_medium"
android:minResizeWidth="@dimen/widget_width_min"
android:minResizeHeight="@dimen/widget_height_min"
android:previewImage="@drawable/ui_widget_preview"
android:previewLayout="@layout/widget_medium"
android:resizeMode="horizontal|vertical"
android:targetCellWidth="3"
android:targetCellHeight="3"

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory
app:layout="@layout/item_header"
app:isPreferenceVisible="@bool/enable_theme_settings"
app:layout="@layout/item_header"
app:title="@string/set_ui">
<org.oxycblt.auxio.settings.pref.IntListPreference
@ -35,10 +35,10 @@
app:title="@string/set_display">
<Preference
app:iconSpaceReserved="false"
app:key="KEY_LIB_TABS"
app:title="@string/set_lib_tabs"
app:summary="@string/set_lib_tabs_desc"
app:iconSpaceReserved="false" />
app:title="@string/set_lib_tabs" />
<SwitchPreferenceCompat
app:defaultValue="true"

View file

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget_medium"
android:minResizeWidth="@dimen/widget_width_min"
android:minResizeHeight="@dimen/widget_height_min"
android:minWidth="@dimen/widget_width_def"
android:minHeight="@dimen/widget_height_def"
android:minResizeWidth="@dimen/widget_width_min"
android:minResizeHeight="@dimen/widget_height_min"
android:previewImage="@drawable/ui_widget_preview"
android:resizeMode="horizontal|vertical"
android:updatePeriodMillis="0"