ui: material 3.1 (first draft)

I'm mostly cowboying through patching things to look nice. I'll re-add round mode
configs and actually try to migrate to standard spacing later.
This commit is contained in:
Alexander Capehart 2024-04-17 22:07:50 -06:00
parent b19283002f
commit 7995d3ac98
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
26 changed files with 142 additions and 85 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -79,7 +79,7 @@ class MainActivity : AppCompatActivity() {
} }
} }
override fun onNewIntent(intent: Intent?) { override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent) super.onNewIntent(intent)
startIntentAction(intent) startIntentAction(intent)
} }

View file

@ -146,8 +146,7 @@ class MainFragment :
// Emulate the elevated bottom sheet style. // Emulate the elevated bottom sheet style.
background = background =
MaterialShapeDrawable.createWithElevationOverlay(context).apply { MaterialShapeDrawable.createWithElevationOverlay(context).apply {
fillColor = context.getAttrColorCompat(MR.attr.colorSurface) fillColor = context.getAttrColorCompat(MR.attr.colorSurfaceContainerHigh)
elevation = context.getDimen(R.dimen.elevation_normal)
} }
// Apply bar insets for the queue's RecyclerView to use. // Apply bar insets for the queue's RecyclerView to use.
setOnApplyWindowInsetsListener { v, insets -> setOnApplyWindowInsetsListener { v, insets ->
@ -277,7 +276,7 @@ class MainFragment :
// Reduce playback sheet elevation as it expands. This involves both updating the // Reduce playback sheet elevation as it expands. This involves both updating the
// shadow elevation for older versions, and fading out the background drawable // shadow elevation for older versions, and fading out the background drawable
// containing the elevation overlay. // containing the elevation overlay.
binding.playbackSheet.translationZ = elevationNormal * outPlaybackRatio binding.playbackSheet.elevation = elevationNormal * outPlaybackRatio
playbackSheetBehavior.sheetBackgroundDrawable.alpha = (outPlaybackRatio * 255).toInt() playbackSheetBehavior.sheetBackgroundDrawable.alpha = (outPlaybackRatio * 255).toInt()
// Fade out the playback bar as the panel expands. // Fade out the playback bar as the panel expands.

View file

@ -30,7 +30,6 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.R as MR import com.google.android.material.R as MR
import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.MaterialShapeDrawable
import org.oxycblt.auxio.IntegerTable import org.oxycblt.auxio.IntegerTable
import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.ItemEditHeaderBinding import org.oxycblt.auxio.databinding.ItemEditHeaderBinding
import org.oxycblt.auxio.databinding.ItemEditableSongBinding import org.oxycblt.auxio.databinding.ItemEditableSongBinding
import org.oxycblt.auxio.list.EditableListListener import org.oxycblt.auxio.list.EditableListListener
@ -46,7 +45,6 @@ import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.music.resolveNames import org.oxycblt.auxio.music.resolveNames
import org.oxycblt.auxio.util.context import org.oxycblt.auxio.util.context
import org.oxycblt.auxio.util.getAttrColorCompat import org.oxycblt.auxio.util.getAttrColorCompat
import org.oxycblt.auxio.util.getDimen
import org.oxycblt.auxio.util.inflater import org.oxycblt.auxio.util.inflater
import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logD
@ -232,8 +230,7 @@ private constructor(private val binding: ItemEditableSongBinding) :
override val delete = binding.background override val delete = binding.background
override val background = override val background =
MaterialShapeDrawable.createWithElevationOverlay(binding.root.context).apply { MaterialShapeDrawable.createWithElevationOverlay(binding.root.context).apply {
fillColor = binding.context.getAttrColorCompat(MR.attr.colorSurface) fillColor = binding.context.getAttrColorCompat(MR.attr.colorSurfaceContainerHigh)
elevation = binding.context.getDimen(R.dimen.elevation_normal)
alpha = 0 alpha = 0
} }

View file

@ -461,7 +461,9 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
companion object { companion object {
val SIZING_CORNER_RADII = val SIZING_CORNER_RADII =
arrayOf( arrayOf(
R.dimen.size_corners_small, R.dimen.size_corners_small, R.dimen.size_corners_medium) R.dimen.size_corners_small,
R.dimen.size_corners_medium,
R.dimen.size_corners_mid_large)
val SIZING_ICON_SIZE = arrayOf(R.dimen.size_icon_small, R.dimen.size_icon_medium, null) val SIZING_ICON_SIZE = arrayOf(R.dimen.size_icon_small, R.dimen.size_icon_medium, null)
} }
} }

View file

@ -141,10 +141,8 @@ constructor(
is MediaSessionUID.Category -> return uid.toMediaItem(context) is MediaSessionUID.Category -> return uid.toMediaItem(context)
is MediaSessionUID.Single -> is MediaSessionUID.Single ->
musicRepository.find(uid.uid)?.let { musicRepository.find(it.uid) } musicRepository.find(uid.uid)?.let { musicRepository.find(it.uid) }
is MediaSessionUID.Joined -> is MediaSessionUID.Joined ->
musicRepository.find(uid.childUid)?.let { musicRepository.find(it.uid) } musicRepository.find(uid.childUid)?.let { musicRepository.find(it.uid) }
null -> null null -> null
} }
?: return null ?: return null
@ -179,40 +177,32 @@ constructor(
when (mediaSessionUID) { when (mediaSessionUID) {
MediaSessionUID.Category.ROOT -> MediaSessionUID.Category.ROOT ->
MediaSessionUID.Category.IMPORTANT.map { it.toMediaItem(context) } MediaSessionUID.Category.IMPORTANT.map { it.toMediaItem(context) }
MediaSessionUID.Category.SONGS -> MediaSessionUID.Category.SONGS ->
listSettings.songSort.songs(deviceLibrary.songs).map { listSettings.songSort.songs(deviceLibrary.songs).map {
it.toMediaItem(context, null) it.toMediaItem(context, null)
} }
MediaSessionUID.Category.ALBUMS -> MediaSessionUID.Category.ALBUMS ->
listSettings.albumSort.albums(deviceLibrary.albums).map { listSettings.albumSort.albums(deviceLibrary.albums).map {
it.toMediaItem(context) it.toMediaItem(context)
} }
MediaSessionUID.Category.ARTISTS -> MediaSessionUID.Category.ARTISTS ->
listSettings.artistSort.artists(deviceLibrary.artists).map { listSettings.artistSort.artists(deviceLibrary.artists).map {
it.toMediaItem(context) it.toMediaItem(context)
} }
MediaSessionUID.Category.GENRES -> MediaSessionUID.Category.GENRES ->
listSettings.genreSort.genres(deviceLibrary.genres).map { listSettings.genreSort.genres(deviceLibrary.genres).map {
it.toMediaItem(context) it.toMediaItem(context)
} }
MediaSessionUID.Category.PLAYLISTS -> MediaSessionUID.Category.PLAYLISTS ->
userLibrary.playlists.map { it.toMediaItem(context) } userLibrary.playlists.map { it.toMediaItem(context) }
} }
} }
is MediaSessionUID.Single -> { is MediaSessionUID.Single -> {
getChildMediaItems(mediaSessionUID.uid) getChildMediaItems(mediaSessionUID.uid)
} }
is MediaSessionUID.Joined -> { is MediaSessionUID.Joined -> {
getChildMediaItems(mediaSessionUID.childUid) getChildMediaItems(mediaSessionUID.childUid)
} }
null -> { null -> {
return null return null
} }
@ -225,24 +215,20 @@ constructor(
val songs = listSettings.albumSongSort.songs(item.songs) val songs = listSettings.albumSongSort.songs(item.songs)
songs.map { it.toMediaItem(context, item) } songs.map { it.toMediaItem(context, item) }
} }
is Artist -> { is Artist -> {
val albums = ARTIST_ALBUMS_SORT.albums(item.explicitAlbums + item.implicitAlbums) val albums = ARTIST_ALBUMS_SORT.albums(item.explicitAlbums + item.implicitAlbums)
val songs = listSettings.artistSongSort.songs(item.songs) val songs = listSettings.artistSongSort.songs(item.songs)
albums.map { it.toMediaItem(context) } + songs.map { it.toMediaItem(context, item) } albums.map { it.toMediaItem(context) } + songs.map { it.toMediaItem(context, item) }
} }
is Genre -> { is Genre -> {
val artists = GENRE_ARTISTS_SORT.artists(item.artists) val artists = GENRE_ARTISTS_SORT.artists(item.artists)
val songs = listSettings.genreSongSort.songs(item.songs) val songs = listSettings.genreSongSort.songs(item.songs)
artists.map { it.toMediaItem(context) } + artists.map { it.toMediaItem(context) } +
songs.map { it.toMediaItem(context, null) } songs.map { it.toMediaItem(context, null) }
} }
is Playlist -> { is Playlist -> {
item.songs.map { it.toMediaItem(context, item) } item.songs.map { it.toMediaItem(context, item) }
} }
is Song, is Song,
null -> return null null -> return null
} }
@ -339,8 +325,7 @@ constructor(
deviceLibrary.albums, deviceLibrary.albums,
deviceLibrary.artists, deviceLibrary.artists,
deviceLibrary.genres, deviceLibrary.genres,
userLibrary.playlists userLibrary.playlists)
)
val results = searchEngine.search(items, query) val results = searchEngine.search(items, query)
for (entry in searchSubscribers.entries) { for (entry in searchSubscribers.entries) {
if (entry.value == query) { if (entry.value == query) {

View file

@ -76,6 +76,10 @@ class PlaybackBarFragment : ViewBindingFragment<FragmentPlaybackBarBinding>() {
binding.playbackProgressBar.trackColor = binding.playbackProgressBar.trackColor =
context.getColorCompat(R.color.sel_track).defaultColor context.getColorCompat(R.color.sel_track).defaultColor
// binding.playbackProgressBar.wavelength = 48
// binding.playbackProgressBar.speed = 20
// binding.playbackProgressBar.amplitude = 5
// -- VIEWMODEL SETUP --- // -- VIEWMODEL SETUP ---
collectImmediately(playbackModel.song, ::updateSong) collectImmediately(playbackModel.song, ::updateSong)
collectImmediately(playbackModel.isPlaying, ::updatePlaying) collectImmediately(playbackModel.isPlaying, ::updatePlaying)

View file

@ -29,7 +29,6 @@ import com.google.android.material.shape.MaterialShapeDrawable
import org.oxycblt.auxio.R import org.oxycblt.auxio.R
import org.oxycblt.auxio.ui.BaseBottomSheetBehavior import org.oxycblt.auxio.ui.BaseBottomSheetBehavior
import org.oxycblt.auxio.util.getAttrColorCompat import org.oxycblt.auxio.util.getAttrColorCompat
import org.oxycblt.auxio.util.getDimen
/** /**
* The [BaseBottomSheetBehavior] for the playback bottom sheet. This bottom sheet * The [BaseBottomSheetBehavior] for the playback bottom sheet. This bottom sheet
@ -40,8 +39,8 @@ class PlaybackBottomSheetBehavior<V : View>(context: Context, attributeSet: Attr
BaseBottomSheetBehavior<V>(context, attributeSet) { BaseBottomSheetBehavior<V>(context, attributeSet) {
val sheetBackgroundDrawable = val sheetBackgroundDrawable =
MaterialShapeDrawable.createWithElevationOverlay(context).apply { MaterialShapeDrawable.createWithElevationOverlay(context).apply {
fillColor = context.getAttrColorCompat(MR.attr.colorSurface) fillColor = context.getAttrColorCompat(MR.attr.colorSurfaceContainerLow)
elevation = context.getDimen(R.dimen.elevation_normal) setCornerSize(context.resources.getDimension(R.dimen.size_corners_mid_large))
} }
init { init {

View file

@ -26,7 +26,6 @@ import androidx.core.view.isInvisible
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.R as MR import com.google.android.material.R as MR
import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.MaterialShapeDrawable
import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.ItemEditableSongBinding import org.oxycblt.auxio.databinding.ItemEditableSongBinding
import org.oxycblt.auxio.list.EditClickListListener import org.oxycblt.auxio.list.EditClickListListener
import org.oxycblt.auxio.list.adapter.FlexibleListAdapter import org.oxycblt.auxio.list.adapter.FlexibleListAdapter
@ -37,7 +36,6 @@ import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.music.resolveNames import org.oxycblt.auxio.music.resolveNames
import org.oxycblt.auxio.util.context import org.oxycblt.auxio.util.context
import org.oxycblt.auxio.util.getAttrColorCompat import org.oxycblt.auxio.util.getAttrColorCompat
import org.oxycblt.auxio.util.getDimen
import org.oxycblt.auxio.util.inflater import org.oxycblt.auxio.util.inflater
import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logD
@ -120,8 +118,7 @@ class QueueSongViewHolder private constructor(private val binding: ItemEditableS
override val delete = binding.background override val delete = binding.background
override val background = override val background =
MaterialShapeDrawable.createWithElevationOverlay(binding.root.context).apply { MaterialShapeDrawable.createWithElevationOverlay(binding.root.context).apply {
fillColor = binding.context.getAttrColorCompat(MR.attr.colorSurface) fillColor = binding.context.getAttrColorCompat(MR.attr.colorSurfaceContainerHighest)
elevation = binding.context.getDimen(R.dimen.elevation_normal) * 5
alpha = 0 alpha = 0
} }
@ -142,8 +139,8 @@ class QueueSongViewHolder private constructor(private val binding: ItemEditableS
LayerDrawable( LayerDrawable(
arrayOf( arrayOf(
MaterialShapeDrawable.createWithElevationOverlay(binding.context).apply { MaterialShapeDrawable.createWithElevationOverlay(binding.context).apply {
fillColor = binding.context.getAttrColorCompat(MR.attr.colorSurface) fillColor =
elevation = binding.context.getDimen(R.dimen.elevation_normal) binding.context.getAttrColorCompat(MR.attr.colorSurfaceContainerHigh)
}, },
background)) background))
} }

View file

@ -28,7 +28,6 @@ import com.google.android.material.shape.MaterialShapeDrawable
import org.oxycblt.auxio.R import org.oxycblt.auxio.R
import org.oxycblt.auxio.ui.BaseBottomSheetBehavior import org.oxycblt.auxio.ui.BaseBottomSheetBehavior
import org.oxycblt.auxio.util.getAttrColorCompat import org.oxycblt.auxio.util.getAttrColorCompat
import org.oxycblt.auxio.util.getDimen
import org.oxycblt.auxio.util.getDimenPixels import org.oxycblt.auxio.util.getDimenPixels
import org.oxycblt.auxio.util.replaceSystemBarInsetsCompat import org.oxycblt.auxio.util.replaceSystemBarInsetsCompat
import org.oxycblt.auxio.util.systemBarInsetsCompat import org.oxycblt.auxio.util.systemBarInsetsCompat
@ -65,8 +64,8 @@ class QueueBottomSheetBehavior<V : View>(context: Context, attributeSet: Attribu
override fun createBackground(context: Context) = override fun createBackground(context: Context) =
MaterialShapeDrawable.createWithElevationOverlay(context).apply { MaterialShapeDrawable.createWithElevationOverlay(context).apply {
// The queue sheet's background is a static elevated background. // The queue sheet's background is a static elevated background.
fillColor = context.getAttrColorCompat(MR.attr.colorSurface) fillColor = context.getAttrColorCompat(MR.attr.colorSurfaceContainerHigh)
elevation = context.getDimen(R.dimen.elevation_normal) setCornerSize(context.resources.getDimension(R.dimen.size_corners_mid_large))
} }
override fun applyWindowInsets(child: View, insets: WindowInsets): WindowInsets { override fun applyWindowInsets(child: View, insets: WindowInsets): WindowInsets {

View file

@ -255,7 +255,7 @@ constructor(
mediaSession.setCustomLayout(layout) mediaSession.setCustomLayout(layout)
} }
override fun invalidate(ids: Map<String, Int>){ override fun invalidate(ids: Map<String, Int>) {
for (id in ids) { for (id in ids) {
mediaSession.notifyChildrenChanged(id.key, id.value, null) mediaSession.notifyChildrenChanged(id.key, id.value, null)
} }

View file

@ -21,6 +21,7 @@ package org.oxycblt.auxio.playback.ui
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.animation.AnimationUtils
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import org.oxycblt.auxio.R import org.oxycblt.auxio.R
import org.oxycblt.auxio.ui.RippleFixMaterialButton import org.oxycblt.auxio.ui.RippleFixMaterialButton
@ -64,6 +65,9 @@ class AnimatedMaterialButton : RippleFixMaterialButton {
animator = animator =
ValueAnimator.ofFloat(currentCornerRadiusRatio, targetRadius).apply { ValueAnimator.ofFloat(currentCornerRadiusRatio, targetRadius).apply {
duration = context.getInteger(R.integer.anim_fade_enter_duration).toLong() duration = context.getInteger(R.integer.anim_fade_enter_duration).toLong()
interpolator =
AnimationUtils.loadInterpolator(
context, android.R.interpolator.fast_out_slow_in)
addUpdateListener { updateCornerRadiusRatio(animatedValue as Float) } addUpdateListener { updateCornerRadiusRatio(animatedValue as Float) }
start() start()
} }

View file

@ -1,2 +1,19 @@
package org.oxycblt.auxio.tasker /*
* Copyright (c) 2024 Auxio Project
* Tasker.kt is part of Auxio.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.oxycblt.auxio.tasker

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M555,760L555,200L730,200L730,760L555,760ZM230,760L230,200L405,200L405,760L230,760Z"/>
</vector>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M320,757L320,197L760,477L320,757Z"/>
</vector>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="40dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M673.33,720L673.33,240L740,240L740,720L673.33,720ZM220,720L220,240L570.67,480L220,720Z"/>
</vector>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="40dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M220,720L220,240L286.67,240L286.67,720L220,720ZM740,720L389.33,480L740,240L740,720Z"/>
</vector>

View file

@ -8,9 +8,7 @@
android:viewportHeight="108"> android:viewportHeight="108">
<group android:name="bg" <group android:name="bg"
android:pivotX="56" android:pivotX="56"
android:pivotY="56" android:pivotY="56">
android:scaleX="0"
android:scaleY="0">
<path <path
android:fillColor="#eef0ff" android:fillColor="#eef0ff"
android:pathData="M 136,54 A 82,82 0 0 1 54,136 82,82 0 0 1 -28,54 82,82 0 0 1 54,-28 82,82 0 0 1 136,54 Z" android:pathData="M 136,54 A 82,82 0 0 1 54,136 82,82 0 0 1 -28,54 82,82 0 0 1 54,-28 82,82 0 0 1 136,54 Z"
@ -62,22 +60,6 @@
<target android:name="bg"> <target android:name="bg">
<aapt:attr name="android:animation"> <aapt:attr name="android:animation">
<set> <set>
<objectAnimator
android:duration="1000"
android:interpolator="@android:interpolator/fast_out_slow_in"
android:propertyName="scaleX"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" />
<objectAnimator
android:duration="1000"
android:interpolator="@android:interpolator/fast_out_slow_in"
android:propertyName="scaleY"
android:startOffset="0"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" />
</set> </set>
</aapt:attr> </aapt:attr>
</target> </target>

View file

@ -0,0 +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_48" android:state_activated="true" />
<item android:drawable="@drawable/ic_play_48" />
</selector>

View file

@ -102,11 +102,14 @@
<org.oxycblt.auxio.ui.RippleFixMaterialButton <org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/playback_skip_prev" android:id="@+id/playback_skip_prev"
style="@style/Widget.Auxio.Button.Icon.Large" style="@style/Widget.Auxio.Button.Icon.Larger"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@string/desc_skip_prev" android:contentDescription="@string/desc_skip_prev"
app:icon="@drawable/ic_skip_prev_24" app:icon="@drawable/ic_skip_prev_40"
app:backgroundTint="?attr/colorSecondaryContainer"
app:iconTint="?attr/colorOnSecondaryContainer"
app:iconSize="40dp"
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause" app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
app:layout_constraintEnd_toStartOf="@+id/playback_play_pause" app:layout_constraintEnd_toStartOf="@+id/playback_play_pause"
app:layout_constraintStart_toEndOf="@+id/playback_repeat" app:layout_constraintStart_toEndOf="@+id/playback_repeat"
@ -118,7 +121,9 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@string/desc_play_pause" android:contentDescription="@string/desc_play_pause"
app:icon="@drawable/sel_playing_state_24" app:icon="@drawable/sel_playing_state_48"
app:backgroundTint="?attr/colorPrimaryContainer"
app:iconTint="?attr/colorOnPrimaryContainer"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -127,11 +132,13 @@
<org.oxycblt.auxio.ui.RippleFixMaterialButton <org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/playback_skip_next" android:id="@+id/playback_skip_next"
style="@style/Widget.Auxio.Button.Icon.Large" style="@style/Widget.Auxio.Button.Icon.Larger"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@string/desc_skip_next" android:contentDescription="@string/desc_skip_next"
app:icon="@drawable/ic_skip_next_24" app:iconTint="?attr/colorOnSecondaryContainer"
app:icon="@drawable/ic_skip_next_40"
app:backgroundTint="?attr/colorSecondaryContainer"
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause" app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
app:layout_constraintEnd_toStartOf="@+id/playback_shuffle" app:layout_constraintEnd_toStartOf="@+id/playback_shuffle"
app:layout_constraintStart_toEndOf="@+id/playback_play_pause" app:layout_constraintStart_toEndOf="@+id/playback_play_pause"

View file

@ -34,6 +34,7 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
style="@style/Widget.Auxio.DisableDropShadows"
android:orientation="horizontal"> android:orientation="horizontal">
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView

View file

@ -25,7 +25,6 @@
<androidx.coordinatorlayout.widget.CoordinatorLayout <androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/playback_sheet" android:id="@+id/playback_sheet"
style="@style/Widget.Auxio.DisableDropShadows"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layout_behavior="org.oxycblt.auxio.playback.PlaybackBottomSheetBehavior"> app:layout_behavior="org.oxycblt.auxio.playback.PlaybackBottomSheetBehavior">
@ -45,10 +44,10 @@
<LinearLayout <LinearLayout
android:id="@+id/queue_sheet" android:id="@+id/queue_sheet"
style="@style/Widget.Auxio.DisableDropShadows"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
style="@style/Widget.Auxio.DisableDropShadows"
app:layout_behavior="org.oxycblt.auxio.playback.queue.QueueBottomSheetBehavior"> app:layout_behavior="org.oxycblt.auxio.playback.queue.QueueBottomSheetBehavior">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout

View file

@ -2,13 +2,16 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.google.android.material.slider.Slider <com.google.android.material.slider.Slider
android:id="@+id/seek_bar_slider" android:id="@+id/seek_bar_slider"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_medium" android:layout_marginBottom="@dimen/spacing_medium"
app:trackHeight="4dp"
app:thumbHeight="24dp"
android:valueFrom="0" android:valueFrom="0"
android:valueTo="1" /> android:valueTo="1" />

View file

@ -16,8 +16,8 @@
<dimen name="size_cover_mid_huge">192dp</dimen> <dimen name="size_cover_mid_huge">192dp</dimen>
<dimen name="size_cover_huge">256dp</dimen> <dimen name="size_cover_huge">256dp</dimen>
<dimen name="size_corners_small">8dp</dimen> <dimen name="size_corners_small">12dp</dimen>
<dimen name="size_corners_medium">16dp</dimen> <dimen name="size_corners_medium">14dp</dimen>
<dimen name="size_corners_mid_large">24dp</dimen> <dimen name="size_corners_mid_large">24dp</dimen>
<dimen name="size_btn">48dp</dimen> <dimen name="size_btn">48dp</dimen>
@ -36,7 +36,7 @@
<dimen name="text_size_track_number_step">2sp</dimen> <dimen name="text_size_track_number_step">2sp</dimen>
<!-- Misc --> <!-- Misc -->
<dimen name="elevation_normal">3dp</dimen> <dimen name="elevation_normal">6dp</dimen>
<dimen name="fast_scroll_popup_min_width">78dp</dimen> <dimen name="fast_scroll_popup_min_width">78dp</dimen>
<dimen name="fast_scroll_popup_min_height">64dp</dimen> <dimen name="fast_scroll_popup_min_height">64dp</dimen>

View file

@ -18,7 +18,7 @@
<style name="Theme.Auxio.Base" parent="Theme.Auxio.V31"> <style name="Theme.Auxio.Base" parent="Theme.Auxio.V31">
<!-- Material configuration --> <!-- Material configuration -->
<item name="colorOutline">@color/overlay_stroke</item> <!-- <item name="colorOutline">@color/overlay_stroke</item>-->
<item name="toolbarStyle">@style/Widget.Auxio.Toolbar</item> <item name="toolbarStyle">@style/Widget.Auxio.Toolbar</item>
<item name="materialAlertDialogTheme">@style/Theme.Auxio.Dialog</item> <item name="materialAlertDialogTheme">@style/Theme.Auxio.Dialog</item>
<item name="sliderStyle">@style/Widget.Auxio.Slider</item> <item name="sliderStyle">@style/Widget.Auxio.Slider</item>

View file

@ -19,16 +19,15 @@
</style> </style>
<style name="Widget.Auxio.Slider" parent="Widget.Material3.Slider"> <style name="Widget.Auxio.Slider" parent="Widget.Material3.Slider">
<item name="trackColorInactive">@color/sel_track</item>
<item name="haloRadius">@dimen/spacing_medium</item>
<item name="thumbRadius">@dimen/slider_thumb_radius</item>
<item name="labelBehavior">gone</item> <item name="labelBehavior">gone</item>
<item name="tickVisible">false</item> <item name="tickVisible">false</item>
<item name="trackStopIndicatorSize">0dp</item>
</style> </style>
<style name="Widget.Auxio.LinearProgressIndicator" parent="Widget.Material3.LinearProgressIndicator"> <style name="Widget.Auxio.LinearProgressIndicator" parent="Widget.Material3.LinearProgressIndicator">
<item name="trackColor">@color/sel_track</item> <item name="trackColor">@color/sel_track</item>
<item name="trackCornerRadius">@dimen/size_corners_medium</item> <item name="trackCornerRadius">@dimen/size_corners_medium</item>
<item name="trackStopIndicatorSize">0dp</item>
</style> </style>
<style name="Widget.Auxio.BottomSheet" parent="Widget.Material3.BottomSheet"> <style name="Widget.Auxio.BottomSheet" parent="Widget.Material3.BottomSheet">
@ -45,8 +44,7 @@
<item name="marginRightSystemWindowInsets">false</item> <item name="marginRightSystemWindowInsets">false</item>
<item name="paddingBottomSystemWindowInsets">false</item> <item name="paddingBottomSystemWindowInsets">false</item>
<item name="paddingTopSystemWindowInsets">false</item> <item name="paddingTopSystemWindowInsets">false</item>
<item name="shapeAppearance">@style/ShapeAppearance.Material3.Corner.None</item> <item name="shouldRemoveExpandedCorners">false</item>
<item name="shouldRemoveExpandedCorners">true</item>
</style> </style>
<style name="Widget.Auxio.BottomSheet.Dialog" parent="ThemeOverlay.Material3.BottomSheetDialog"> <style name="Widget.Auxio.BottomSheet.Dialog" parent="ThemeOverlay.Material3.BottomSheetDialog">
@ -267,18 +265,33 @@
<item name="iconTint">@color/m3_text_button_foreground_color_selector</item> <item name="iconTint">@color/m3_text_button_foreground_color_selector</item>
</style> </style>
<style name="Widget.Auxio.Button.PlayPause" parent="Widget.Material3.Button.IconButton.Filled.Tonal"> <style name="Widget.Auxio.Button.Icon.Larger" parent="Widget.Auxio.Button.Icon.Base">
<item name="android:minWidth">@dimen/size_play_pause_button</item> <item name="iconSize">40dp</item>
<item name="android:minHeight">@dimen/size_play_pause_button</item> <item name="android:minWidth">@dimen/size_btn</item>
<item name="iconSize">@dimen/size_icon_medium</item> <item name="android:minHeight">@dimen/size_btn</item>
<item name="android:insetTop">0dp</item> <item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item> <item name="android:insetBottom">0dp</item>
<item name="android:insetLeft">0dp</item> <item name="android:insetLeft">0dp</item>
<item name="android:insetRight">0dp</item> <item name="android:insetRight">0dp</item>
<item name="android:paddingStart">@dimen/spacing_mid_large</item> <item name="android:paddingStart">10dp</item>
<item name="android:paddingEnd">@dimen/spacing_mid_large</item> <item name="android:paddingEnd">10dp</item>
<item name="android:paddingTop">@dimen/spacing_mid_large</item> <item name="android:paddingTop">10dp</item>
<item name="android:paddingBottom">@dimen/spacing_mid_large</item> <item name="android:paddingBottom">10dp</item>
<item name="iconTint">@color/m3_text_button_foreground_color_selector</item>
</style>
<style name="Widget.Auxio.Button.PlayPause" parent="Widget.Material3.Button.IconButton.Filled.Tonal">
<item name="android:minWidth">@dimen/size_play_pause_button</item>
<item name="android:minHeight">@dimen/size_play_pause_button</item>
<item name="iconSize">48dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
<item name="android:insetLeft">0dp</item>
<item name="android:insetRight">0dp</item>
<item name="android:paddingStart">@dimen/spacing_medium</item>
<item name="android:paddingEnd">@dimen/spacing_medium</item>
<item name="android:paddingTop">@dimen/spacing_medium</item>
<item name="android:paddingBottom">@dimen/spacing_medium</item>
<item name="shapeAppearanceOverlay"> <item name="shapeAppearanceOverlay">
@style/ShapeAppearanceOverlay.Material3.FloatingActionButton @style/ShapeAppearanceOverlay.Material3.FloatingActionButton
</item> </item>