ui: clean out self-rolled dimens

Lots of cruft has built up with my dimensions, partially collapse them
into a more consistent set of re-usable dimens (within reason) and try
to delegate to MDC as much as possible.
This commit is contained in:
Alexander Capehart 2024-05-20 12:08:32 -06:00
parent f742aa7592
commit d293cc86b0
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
28 changed files with 137 additions and 265 deletions

View file

@ -101,7 +101,7 @@ class MainFragment :
val queueSheetBehavior =
binding.queueSheet.coordinatorLayoutBehavior as QueueBottomSheetBehavior?
elevationNormal = binding.context.getDimen(R.dimen.elevation_normal)
elevationNormal = binding.context.getDimen(MR.dimen.m3_sys_elevation_level1)
// Currently all back press callbacks are handled in MainFragment, as it's not guaranteed
// that instantiating these callbacks in their respective fragments would result in the
@ -146,12 +146,11 @@ class MainFragment :
// Emulate the elevated bottom sheet style.
background =
MaterialShapeDrawable.createWithElevationOverlay(context).apply {
val cornerSize =
context.resources.getDimension(R.dimen.size_corners_mid_large)
shapeAppearanceModel =
ShapeAppearanceModel.builder()
.setTopLeftCornerSize(cornerSize)
.setTopRightCornerSize(cornerSize)
ShapeAppearanceModel.builder(
context,
MR.style.ShapeAppearance_Material3_Corner_ExtraLarge,
MR.style.ShapeAppearanceOverlay_Material3_Corner_Top)
.build()
fillColor = context.getAttrColorCompat(MR.attr.colorSurfaceContainerHigh)
}

View file

@ -50,8 +50,8 @@ class FastScrollPopupView
constructor(context: Context, attrs: AttributeSet? = null, defStyleRes: Int = 0) :
MaterialTextView(context, attrs, defStyleRes) {
init {
minimumWidth = context.getDimenPixels(R.dimen.fast_scroll_popup_min_width)
minimumHeight = context.getDimenPixels(R.dimen.fast_scroll_popup_min_height)
minimumWidth = context.getDimenPixels(R.dimen.size_touchable_mid_huge)
minimumHeight = context.getDimenPixels(R.dimen.size_touchable_large)
TextViewCompat.setTextAppearance(this, R.style.TextAppearance_Auxio_HeadlineLarge)
setTextColor(context.getAttrColorCompat(MR.attr.colorOnSecondary))
@ -60,7 +60,7 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleRes: Int = 0)
includeFontPadding = false
alpha = 0f
elevation = context.getDimenPixels(R.dimen.elevation_normal).toFloat()
elevation = context.getDimenPixels(MR.dimen.m3_sys_elevation_level2).toFloat()
background = FastScrollPopupDrawable(context)
}
@ -78,8 +78,8 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleRes: Int = 0)
private val path = Path()
private val matrix = Matrix()
private val paddingStart = context.getDimenPixels(R.dimen.fast_scroll_popup_padding_start)
private val paddingEnd = context.getDimenPixels(R.dimen.fast_scroll_popup_padding_end)
private val paddingStart = context.getDimenPixels(R.dimen.spacing_medium)
private val paddingEnd = context.getDimenPixels(R.dimen.spacing_mid_huge)
override fun draw(canvas: Canvas) {
canvas.drawPath(path, paint)

View file

@ -151,8 +151,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
private var showingPopup = false
// Touch
private val minTouchTargetSize =
context.getDimenPixels(R.dimen.fast_scroll_thumb_touch_target_size)
private val minTouchTargetSize = context.getDimenPixels(R.dimen.size_touchable_small)
private val touchSlop = ViewConfiguration.get(context).scaledTouchSlop
private var downX = 0f

View file

@ -25,6 +25,7 @@ import android.view.animation.AccelerateDecelerateInterpolator
import androidx.core.view.isInvisible
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.R as MR
import kotlin.math.abs
import kotlin.math.max
import kotlin.math.min
@ -96,7 +97,7 @@ abstract class MaterialDragCallback : ItemTouchHelper.Callback() {
logD("Lifting ViewHolder")
val bg = holder.background
val elevation = recyclerView.context.getDimen(R.dimen.elevation_normal)
val elevation = recyclerView.context.getDimen(MR.dimen.m3_sys_elevation_level4)
holder.root
.animate()
.translationZ(elevation)
@ -138,7 +139,7 @@ abstract class MaterialDragCallback : ItemTouchHelper.Callback() {
logD("Lifting ViewHolder")
val bg = holder.background
val elevation = recyclerView.context.getDimen(R.dimen.elevation_normal)
val elevation = recyclerView.context.getDimen(MR.dimen.m3_sys_elevation_level4)
holder.root
.animate()
.translationZ(0f)

View file

@ -27,7 +27,7 @@ import android.view.WindowInsets
import androidx.coordinatorlayout.widget.CoordinatorLayout
import com.google.android.material.R as MR
import com.google.android.material.shape.MaterialShapeDrawable
import org.oxycblt.auxio.R
import com.google.android.material.shape.ShapeAppearanceModel
import org.oxycblt.auxio.ui.BaseBottomSheetBehavior
import org.oxycblt.auxio.util.getAttrColorCompat
import org.oxycblt.auxio.util.replaceSystemBarInsetsCompat
@ -43,7 +43,12 @@ class PlaybackBottomSheetBehavior<V : View>(context: Context, attributeSet: Attr
val sheetBackgroundDrawable =
MaterialShapeDrawable.createWithElevationOverlay(context).apply {
fillColor = context.getAttrColorCompat(MR.attr.colorSurfaceContainerLow)
setCornerSize(context.resources.getDimension(R.dimen.size_corners_mid_large))
shapeAppearanceModel =
ShapeAppearanceModel.builder(
context,
MR.style.ShapeAppearance_Material3_Corner_ExtraLarge,
MR.style.ShapeAppearanceOverlay_Material3_Corner_Top)
.build()
}
init {

View file

@ -38,7 +38,6 @@ import org.oxycblt.auxio.music.MusicParent
import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.music.resolveNames
import org.oxycblt.auxio.playback.state.RepeatMode
import org.oxycblt.auxio.playback.ui.PlaybackPagerAdapter
import org.oxycblt.auxio.playback.ui.StyledSeekBar
import org.oxycblt.auxio.playback.ui.SwipeCoverView
import org.oxycblt.auxio.ui.ViewBindingFragment
@ -65,7 +64,6 @@ class PlaybackPanelFragment :
private val detailModel: DetailViewModel by activityViewModels()
private val listModel: ListViewModel by activityViewModels()
private var equalizerLauncher: ActivityResultLauncher<Intent>? = null
private var coverAdapter: PlaybackPagerAdapter? = null
override fun onCreateBinding(inflater: LayoutInflater) =
FragmentPlaybackPanelBinding.inflate(inflater)
@ -129,7 +127,6 @@ class PlaybackPanelFragment :
override fun onDestroyBinding(binding: FragmentPlaybackPanelBinding) {
equalizerLauncher = null
coverAdapter = null
binding.playbackSong.isSelected = false
binding.playbackToolbar.setOnMenuItemClickListener(null)
}

View file

@ -25,6 +25,7 @@ import android.view.WindowInsets
import androidx.coordinatorlayout.widget.CoordinatorLayout
import com.google.android.material.R as MR
import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.shape.ShapeAppearanceModel
import org.oxycblt.auxio.R
import org.oxycblt.auxio.ui.BaseBottomSheetBehavior
import org.oxycblt.auxio.util.getAttrColorCompat
@ -65,7 +66,12 @@ class QueueBottomSheetBehavior<V : View>(context: Context, attributeSet: Attribu
MaterialShapeDrawable.createWithElevationOverlay(context).apply {
// The queue sheet's background is a static elevated background.
fillColor = context.getAttrColorCompat(MR.attr.colorSurfaceContainerHigh)
setCornerSize(context.resources.getDimension(R.dimen.size_corners_mid_large))
shapeAppearanceModel =
ShapeAppearanceModel.builder(
context,
MR.style.ShapeAppearance_Material3_Corner_ExtraLarge,
MR.style.ShapeAppearanceOverlay_Material3_Corner_Top)
.build()
}
override fun applyWindowInsets(child: View, insets: WindowInsets): WindowInsets {

View file

@ -1,121 +0,0 @@
/*
* Copyright (c) 2023 Auxio Project
* PlaybackPagerAdapter.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.playback.ui
import android.view.ViewGroup
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import kotlin.jvm.internal.Intrinsics
import org.oxycblt.auxio.databinding.ItemPlaybackSongBinding
import org.oxycblt.auxio.list.adapter.FlexibleListAdapter
import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.music.resolveNames
import org.oxycblt.auxio.util.inflater
/** @author Koitharu, Alexander Capehart (OxygenCobalt) */
class PlaybackPagerAdapter(private val listener: Listener) :
FlexibleListAdapter<Song, CoverViewHolder>(CoverViewHolder.DIFF_CALLBACK) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CoverViewHolder {
return CoverViewHolder.from(parent)
}
override fun onBindViewHolder(holder: CoverViewHolder, position: Int) {
holder.bind(getItem(position), listener)
}
override fun onViewRecycled(holder: CoverViewHolder) {
holder.recycle()
super.onViewRecycled(holder)
}
interface Listener {
fun navigateToCurrentArtist()
fun navigateToCurrentAlbum()
fun navigateToCurrentSong()
fun navigateToMenu()
}
}
class CoverViewHolder private constructor(private val binding: ItemPlaybackSongBinding) :
RecyclerView.ViewHolder(binding.root), DefaultLifecycleObserver {
init {
binding.root.layoutParams =
RecyclerView.LayoutParams(
RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.MATCH_PARENT)
}
/**
* Bind new data to this instance.
*
* @param item The new [Song] to bind.
*/
fun bind(item: Song, listener: PlaybackPagerAdapter.Listener) {
val context = binding.root.context
binding.playbackCover.bind(item)
// binding.playbackCover.bind(item)
binding.playbackSong.apply { text = item.name.resolve(context) }
binding.playbackArtist.apply {
text = item.artists.resolveNames(context)
setOnClickListener { listener.navigateToCurrentArtist() }
}
binding.playbackAlbum.apply {
text = item.album.name.resolve(context)
setOnClickListener { listener.navigateToCurrentAlbum() }
}
setSelected(true)
}
fun recycle() {
// Marquee elements leak if they are not disabled when the views are destroyed.
// TODO: Move to TextView impl to avoid having to deal with lifecycle here
setSelected(false)
}
private fun setSelected(value: Boolean) {
binding.playbackSong.isSelected = value
binding.playbackArtist.isSelected = value
binding.playbackAlbum.isSelected = value
}
companion object {
/**
* Create a new instance.
*
* @param parent The parent to inflate this instance from.
* @return A new instance.
*/
fun from(parent: ViewGroup) =
CoverViewHolder(ItemPlaybackSongBinding.inflate(parent.context.inflater))
/** A comparator that can be used with DiffUtil. */
val DIFF_CALLBACK =
object : DiffUtil.ItemCallback<Song>() {
override fun areItemsTheSame(oldItem: Song, newItem: Song) =
oldItem.uid == newItem.uid
override fun areContentsTheSame(oldItem: Song, newItem: Song): Boolean {
return Intrinsics.areEqual(oldItem, newItem)
}
}
}
}

View file

@ -25,8 +25,8 @@ import android.view.View
import android.view.ViewGroup
import android.view.WindowInsets
import androidx.coordinatorlayout.widget.CoordinatorLayout
import com.google.android.material.R as MR
import com.google.android.material.bottomsheet.BackportBottomSheetBehavior
import org.oxycblt.auxio.R
import org.oxycblt.auxio.util.getDimen
import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.systemGestureInsetsCompat
@ -87,7 +87,7 @@ abstract class BaseBottomSheetBehavior<V : View>(context: Context, attributeSet:
logD("Not initialized, setting up child")
child.apply {
// Set up compat elevation attributes. These are only shown below API 28.
translationZ = context.getDimen(R.dimen.elevation_normal)
translationZ = context.getDimen(MR.dimen.m3_sys_elevation_level1)
// Background differs depending on concrete implementation.
background = createBackground(context)
setOnApplyWindowInsetsListener(::applyWindowInsets)

View file

@ -39,7 +39,7 @@ class AccentGridLayoutManager(
) : GridLayoutManager(context, attrs, defStyleAttr, defStyleRes) {
// We use 56dp here since that's the rough size of the accent item.
// This will need to be modified if this is used beyond the accent dialog.
private var columnWidth = context.getDimenPixels(R.dimen.size_accent_item)
private var columnWidth = context.getDimenPixels(R.dimen.size_touchable_large)
private var lastWidth = -1
private var lastHeight = -1

View file

@ -89,7 +89,7 @@ constructor(
} else if (uiSettings.roundMode) {
// < Android 12, but the user still enabled round mode.
logD("Using default corner radius")
context.getDimenPixels(R.dimen.size_corners_medium)
context.getDimenPixels(R.dimen.m3_shape_corners_large)
} else {
// User did not enable round mode.
logD("Using no corner radius")

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/size_corners_mid_large" />
<corners android:radius="@dimen/m3_shape_corners_full" />
<solid android:color="?attr/colorPrimary" />
</shape>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/size_corners_medium" />
<corners android:radius="@dimen/m3_shape_corners_large" />
<solid android:color="?attr/colorPrimary" />
</shape>

View file

@ -38,7 +38,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_medium"
android:layout_marginHorizontal="@dimen/spacing_tiny"
android:layout_marginEnd="@dimen/spacing_mid_medium"
android:layout_marginEnd="@dimen/spacing_medium"
app:layout_constraintBottom_toTopOf="@+id/playback_artist"
app:layout_constraintEnd_toStartOf="@+id/playback_more"
app:layout_constraintStart_toStartOf="parent"
@ -77,11 +77,11 @@
<org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/playback_more"
style="@style/Widget.Auxio.Button.Icon.Small"
style="@style/Widget.Auxio.Button.Icon.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="@drawable/ic_more_24"
android:layout_marginEnd="@dimen/spacing_mid_medium"
android:layout_marginEnd="@dimen/spacing_medium"
app:layout_constraintBottom_toBottomOf="@+id/playback_album"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/playback_song" />
@ -101,7 +101,7 @@
<org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/playback_repeat"
style="@style/Widget.Auxio.Button.Icon.Large"
style="@style/Widget.Auxio.Button.Icon.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_change_repeat"
@ -151,7 +151,7 @@
<org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/playback_shuffle"
style="@style/Widget.Auxio.Button.Icon.Large"
style="@style/Widget.Auxio.Button.Icon.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_shuffle"

View file

@ -68,7 +68,7 @@
<org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/playback_more"
style="@style/Widget.Auxio.Button.Icon.Small"
style="@style/Widget.Auxio.Button.Icon.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="@drawable/ic_more_24"
@ -103,7 +103,7 @@
<org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/playback_repeat"
style="@style/Widget.Auxio.Button.Icon.Large"
style="@style/Widget.Auxio.Button.Icon.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_huge"
@ -154,7 +154,7 @@
<org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/playback_shuffle"
style="@style/Widget.Auxio.Button.Icon.Large"
style="@style/Widget.Auxio.Button.Icon.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_huge"

View file

@ -40,7 +40,7 @@
android:hyphenationFrequency="none"
android:paddingStart="@dimen/spacing_medium"
android:paddingTop="@dimen/spacing_medium"
android:paddingEnd="@dimen/size_copy_button"
android:paddingEnd="@dimen/size_touchable_large"
android:paddingBottom="@dimen/spacing_medium"
android:typeface="monospace"
tools:text="Stack trace here" />

View file

@ -40,7 +40,7 @@
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_large"
android:gravity="center"
android:minWidth="@dimen/size_pre_amp_ticker"
android:minWidth="@dimen/size_touchable_medium"
android:textAppearance="@style/TextAppearance.Auxio.BodySmall"
app:layout_constraintBottom_toBottomOf="@+id/with_tags_slider"
app:layout_constraintEnd_toEndOf="parent"
@ -77,7 +77,7 @@
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_large"
android:gravity="center"
android:minWidth="@dimen/size_pre_amp_ticker"
android:minWidth="@dimen/size_touchable_medium"
android:textAppearance="@style/TextAppearance.Auxio.BodySmall"
app:layout_constraintBottom_toBottomOf="@+id/without_tags_slider"
app:layout_constraintEnd_toEndOf="parent"

View file

@ -60,7 +60,7 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/queue_handle_wrapper"
android:layout_width="match_parent"
android:layout_height="@dimen/size_bottom_sheet_bar"
android:layout_height="@dimen/size_touchable_large"
android:contentDescription="@string/desc_queue_bar">
<com.google.android.material.bottomsheet.BottomSheetDragHandleView

View file

@ -73,7 +73,7 @@
<org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/playback_more"
style="@style/Widget.Auxio.Button.Icon.Small"
style="@style/Widget.Auxio.Button.Icon.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="@drawable/ic_more_24"
@ -108,7 +108,7 @@
<org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/playback_repeat"
style="@style/Widget.Auxio.Button.Icon.Large"
style="@style/Widget.Auxio.Button.Icon.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_change_repeat"
@ -157,7 +157,7 @@
<org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/playback_shuffle"
style="@style/Widget.Auxio.Button.Icon.Large"
style="@style/Widget.Auxio.Button.Icon.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_shuffle"

View file

@ -69,8 +69,8 @@
<android.widget.ImageButton
android:id="@+id/widget_skip_prev"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_skip_prev"
android:src="@drawable/ic_skip_prev_24" />
@ -82,8 +82,8 @@
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.MaterialButton.AppWidget.PlayPause"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/ic_play_24" />
@ -95,8 +95,8 @@
<android.widget.ImageButton
android:id="@+id/widget_skip_next"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_skip_next"
android:src="@drawable/ic_skip_next_24" />

View file

@ -56,8 +56,8 @@
<android.widget.ImageButton
android:id="@+id/widget_repeat"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_change_repeat"
android:src="@drawable/ic_repeat_off_24" />
@ -69,8 +69,8 @@
<android.widget.ImageButton
android:id="@+id/widget_skip_prev"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_skip_prev"
android:src="@drawable/ic_skip_prev_24" />
@ -82,8 +82,8 @@
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.MaterialButton.AppWidget.PlayPause"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/ic_play_24" />
@ -95,8 +95,8 @@
<android.widget.ImageButton
android:id="@+id/widget_skip_next"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_skip_next"
android:src="@drawable/ic_skip_next_24" />
@ -108,8 +108,8 @@
<android.widget.ImageButton
android:id="@+id/widget_shuffle"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_shuffle"
android:src="@drawable/ic_shuffle_off_24" />
</android.widget.LinearLayout>

View file

@ -80,8 +80,8 @@
<android.widget.ImageButton
android:id="@+id/widget_skip_prev"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_skip_prev"
android:src="@drawable/ic_skip_prev_24" />
@ -93,8 +93,8 @@
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.MaterialButton.AppWidget.PlayPause"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/ic_play_24" />
@ -106,8 +106,8 @@
<android.widget.ImageButton
android:id="@+id/widget_skip_next"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_skip_next"
android:src="@drawable/ic_skip_next_24" />

View file

@ -82,8 +82,8 @@
<android.widget.ImageButton
android:id="@+id/widget_repeat"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_change_repeat"
android:src="@drawable/ic_repeat_off_24" />
@ -95,8 +95,8 @@
<android.widget.ImageButton
android:id="@+id/widget_skip_prev"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_skip_prev"
android:src="@drawable/ic_skip_prev_24" />
@ -108,8 +108,8 @@
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.MaterialButton.AppWidget.PlayPause"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/ic_play_24" />
@ -121,8 +121,8 @@
<android.widget.ImageButton
android:id="@+id/widget_skip_next"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_skip_next"
android:src="@drawable/ic_skip_next_24" />
@ -134,8 +134,8 @@
<android.widget.ImageButton
android:id="@+id/widget_shuffle"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_shuffle"
android:src="@drawable/ic_shuffle_off_24" />

View file

@ -40,8 +40,8 @@
<android.widget.ImageButton
android:id="@+id/widget_skip_prev"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_skip_prev"
android:src="@drawable/ic_skip_prev_24" />
</FrameLayout>
@ -55,8 +55,8 @@
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.MaterialButton.AppWidget.PlayPause"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/ic_play_24" />
@ -73,8 +73,8 @@
<android.widget.ImageButton
android:id="@+id/widget_skip_next"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_skip_next"
android:src="@drawable/ic_skip_next_24" />

View file

@ -39,8 +39,8 @@
<android.widget.ImageButton
android:id="@+id/widget_repeat"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_change_repeat"
android:src="@drawable/ic_repeat_off_24" />
@ -60,8 +60,8 @@
<android.widget.ImageButton
android:id="@+id/widget_skip_prev"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_skip_prev"
android:src="@drawable/ic_skip_prev_24" />
</FrameLayout>
@ -75,8 +75,8 @@
<android.widget.ImageButton
android:id="@+id/widget_play_pause"
style="@style/Widget.Auxio.MaterialButton.AppWidget.PlayPause"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_play_pause"
android:src="@drawable/ic_play_24" />
@ -93,8 +93,8 @@
<android.widget.ImageButton
android:id="@+id/widget_skip_next"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_skip_next"
android:src="@drawable/ic_skip_next_24" />
@ -114,8 +114,8 @@
<android.widget.ImageButton
android:id="@+id/widget_shuffle"
style="@style/Widget.Auxio.MaterialButton.AppWidget"
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:layout_width="@dimen/size_touchable_small"
android:layout_height="@dimen/size_touchable_small"
android:contentDescription="@string/desc_shuffle"
android:src="@drawable/ic_shuffle_off_24" />

View file

@ -7,32 +7,29 @@
<dimen name="spacing_medium">16dp</dimen>
<dimen name="spacing_mid_large">20dp</dimen>
<dimen name="spacing_large">24dp</dimen>
<dimen name="spacing_mid_huge">28dp</dimen>
<dimen name="spacing_huge">32dp</dimen>
<!-- Size Namespace | Width & Heights for UI elements -->
<dimen name="size_cover_compact">48dp</dimen>
<dimen name="size_cover_medium">56dp</dimen>
<dimen name="size_cover_large">128dp</dimen>
<dimen name="size_cover_mid_huge">192dp</dimen>
<dimen name="size_cover_huge">256dp</dimen>
<dimen name="size_touchable_small">48dp</dimen>
<dimen name="size_touchable_medium">56dp</dimen>
<dimen name="size_touchable_mid_large">60dp</dimen>
<dimen name="size_touchable_large">64dp</dimen>
<dimen name="size_touchable_mid_huge">76dp</dimen>
<dimen name="size_touchable_huge">80dp</dimen>
<dimen name="size_corners_small">12dp</dimen>
<dimen name="size_corners_medium">14dp</dimen>
<dimen name="size_corners_mid_large">24dp</dimen>
<dimen name="size_btn">48dp</dimen>
<dimen name="size_btn_larger">60dp</dimen>
<dimen name="size_accent_item">56dp</dimen>
<dimen name="size_bottom_sheet_bar">64dp</dimen>
<dimen name="size_copy_button">64dp</dimen>
<dimen name="size_play_pause_button">80dp</dimen>
<dimen name="size_hero_small">128dp</dimen>
<dimen name="size_hero_medium">192dp</dimen>
<dimen name="size_hero_large">256dp</dimen>
<dimen name="size_icon_small">24dp</dimen>
<dimen name="size_icon_medium">32dp</dimen>
<dimen name="size_icon_large">40dp</dimen>
<dimen name="size_icon_huge">48dp</dimen>
<dimen name="size_pre_amp_ticker">56dp</dimen>
<!-- Misc -->
<dimen name="m3_shape_corners_large">16dp</dimen>
<dimen name="m3_shape_corners_full">128dp</dimen>
<dimen name="text_size_track_number_min">14sp</dimen>
<dimen name="text_size_track_number_max">22sp</dimen>
@ -41,17 +38,6 @@
<dimen name="slider_track_height">10dp</dimen>
<dimen name="slider_thumb_height">24dp</dimen>
<!-- Misc -->
<dimen name="elevation_normal">1dp</dimen>
<dimen name="fast_scroll_popup_min_width">78dp</dimen>
<dimen name="fast_scroll_popup_min_height">64dp</dimen>
<dimen name="fast_scroll_popup_padding_start">@dimen/spacing_medium</dimen>
<dimen name="fast_scroll_popup_padding_end">28dp</dimen>
<dimen name="fast_scroll_thumb_touch_target_size">48dp</dimen>
<dimen name="slider_thumb_radius">6dp</dimen>
<dimen name="recycler_fab_space_normal">88dp</dimen>
<dimen name="recycler_fab_space_large">128dp</dimen>

View file

@ -7,7 +7,7 @@
56dp to 48dp.
-->
<style name="Widget.Auxio.Toolbar.Navigation" parent="Widget.AppCompat.Toolbar.Button.Navigation">
<item name="android:minWidth">@dimen/size_btn</item>
<item name="android:minWidth">@dimen/size_touchable_small</item>
</style>
<!--
@ -15,8 +15,8 @@
(presumably for compat with older devices)
-->
<style name="Widget.Auxio.Button.Overflow" parent="Widget.AppCompat.ActionButton.Overflow">
<item name="android:minWidth">@dimen/size_btn</item>
<item name="android:minHeight">@dimen/size_btn</item>
<item name="android:minWidth">@dimen/size_touchable_small</item>
<item name="android:minHeight">@dimen/size_touchable_small</item>
<item name="android:paddingStart">0dp</item>
<item name="android:paddingEnd">0dp</item>
</style>
@ -85,13 +85,13 @@
<!-- A variant of PlaybackButton that plays along with AppWidget restrictions. -->
<style name="Widget.Auxio.MaterialButton.AppWidget" parent="Widget.AppCompat.Button.Borderless">
<item name="android:minHeight">@dimen/size_btn</item>
<item name="android:minHeight">@dimen/size_touchable_small</item>
<item name="android:background">?android:attr/selectableItemBackgroundBorderless</item>
</style>
<!-- A variant of button that emulates a FAB-ish button that plays along with widget restrictions -->
<style name="Widget.Auxio.MaterialButton.AppWidget.PlayPause" parent="Widget.AppCompat.Button.Borderless">
<item name="android:minWidth">@dimen/size_btn</item>
<item name="android:minWidth">@dimen/size_touchable_small</item>
<item name="android:background">@drawable/ui_remote_fab_container_paused</item>
<item name="android:tint">?attr/colorOnPrimary</item>
</style>

View file

@ -11,7 +11,7 @@
<!-- Base toolbar style -->
<style name="Widget.Auxio.Toolbar" parent="Widget.Material3.Toolbar">
<item name="maxButtonHeight">@dimen/size_btn</item>
<item name="maxButtonHeight">@dimen/size_touchable_small</item>
<item name="android:paddingLeft">@dimen/spacing_tiny</item>
<item name="android:paddingStart">@dimen/spacing_tiny</item>
<item name="android:paddingRight">@dimen/spacing_tiny</item>
@ -28,7 +28,7 @@
<style name="Widget.Auxio.LinearProgressIndicator" parent="Widget.Material3.LinearProgressIndicator">
<item name="trackColor">@color/sel_track</item>
<item name="trackCornerRadius">@dimen/size_corners_medium</item>
<item name="trackCornerRadius">@dimen/m3_shape_corners_full</item>
<item name="trackStopIndicatorSize">0dp</item>
</style>
@ -64,35 +64,35 @@
</style>
<style name="Widget.Auxio.Image.Small" parent="">
<item name="android:layout_width">@dimen/size_cover_compact</item>
<item name="android:layout_height">@dimen/size_cover_compact</item>
<item name="android:layout_width">@dimen/size_touchable_small</item>
<item name="android:layout_height">@dimen/size_touchable_small</item>
<item name="shapeAppearance">@style/ShapeAppearance.Material3.Corner.Medium</item>
<item name="iconSize">@dimen/size_icon_small</item>
</style>
<style name="Widget.Auxio.Image.Medium" parent="">
<item name="android:layout_width">@dimen/size_cover_medium</item>
<item name="android:layout_height">@dimen/size_cover_medium</item>
<item name="android:layout_width">@dimen/size_touchable_medium</item>
<item name="android:layout_height">@dimen/size_touchable_medium</item>
<item name="shapeAppearance">@style/ShapeAppearance.Material3.Corner.Medium</item>
<item name="iconSize">@dimen/size_icon_medium</item>
</style>
<style name="Widget.Auxio.Image.Large" parent="">
<item name="android:layout_width">@dimen/size_cover_large</item>
<item name="android:layout_height">@dimen/size_cover_large</item>
<item name="android:layout_width">@dimen/size_hero_small</item>
<item name="android:layout_height">@dimen/size_hero_small</item>
<item name="shapeAppearance">@style/ShapeAppearance.Material3.Corner.ExtraLarge</item>
</style>
<style name="Widget.Auxio.Image.MidHuge" parent="">
<item name="android:layout_width">@dimen/size_cover_mid_huge</item>
<item name="android:layout_height">@dimen/size_cover_mid_huge</item>
<item name="android:layout_width">@dimen/size_hero_medium</item>
<item name="android:layout_height">@dimen/size_hero_medium</item>
<item name="shapeAppearance">@style/ShapeAppearance.Material3.Corner.ExtraLarge</item>
</style>
<style name="Widget.Auxio.Image.Huge" parent="">
<item name="android:layout_width">@dimen/size_cover_huge</item>
<item name="android:layout_height">@dimen/size_cover_huge</item>
<item name="android:layout_width">@dimen/size_hero_large</item>
<item name="android:layout_height">@dimen/size_hero_large</item>
<item name="shapeAppearance">@style/ShapeAppearance.Material3.Corner.ExtraLarge</item>
</style>
@ -205,7 +205,7 @@
<item name="android:paddingTop">@dimen/spacing_small</item>
<item name="android:paddingBottom">@dimen/spacing_small</item>
<item name="android:paddingEnd">@dimen/spacing_medium</item>
<item name="android:minHeight">@dimen/size_btn</item>
<item name="android:minHeight">@dimen/size_touchable_small</item>
<item name="android:gravity">center_vertical</item>
<item name="android:textColor">?attr/colorSecondary</item>
<item name="android:textAppearance">@style/TextAppearance.Auxio.LabelLarge</item>
@ -248,8 +248,8 @@
<style name="Widget.Auxio.Button.Icon.Small" parent="Widget.Auxio.Button.Icon.Base">
<item name="iconSize">@dimen/size_icon_small</item>
<item name="android:minWidth">@dimen/size_btn</item>
<item name="android:minHeight">@dimen/size_btn</item>
<item name="android:minWidth">@dimen/size_touchable_small</item>
<item name="android:minHeight">@dimen/size_touchable_small</item>
<item name="android:insetTop">@dimen/spacing_tiny</item>
<item name="android:insetBottom">@dimen/spacing_tiny</item>
<item name="android:insetLeft">@dimen/spacing_tiny</item>
@ -262,10 +262,10 @@
<item name="iconTint">@color/m3_text_button_foreground_color_selector</item>
</style>
<style name="Widget.Auxio.Button.Icon.Large" parent="Widget.Auxio.Button.Icon.Base">
<style name="Widget.Auxio.Button.Icon.Medium" parent="Widget.Auxio.Button.Icon.Base">
<item name="iconSize">@dimen/size_icon_medium</item>
<item name="android:minWidth">@dimen/size_btn</item>
<item name="android:minHeight">@dimen/size_btn</item>
<item name="android:minWidth">@dimen/size_touchable_small</item>
<item name="android:minHeight">@dimen/size_touchable_small</item>
<item name="android:insetTop">@dimen/spacing_small</item>
<item name="android:insetBottom">@dimen/spacing_small</item>
<item name="android:insetLeft">0dp</item>
@ -279,8 +279,8 @@
<style name="Widget.Auxio.Button.Icon.Huge" parent="Widget.Material3.Button.IconButton">
<item name="iconSize">40dp</item>
<item name="android:minWidth">@dimen/size_btn_larger</item>
<item name="android:minHeight">@dimen/size_btn_larger</item>
<item name="android:minWidth">@dimen/size_touchable_mid_large</item>
<item name="android:minHeight">@dimen/size_touchable_mid_large</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
<item name="android:insetLeft">0dp</item>
@ -298,8 +298,8 @@
</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="android:minWidth">@dimen/size_touchable_huge</item>
<item name="android:minHeight">@dimen/size_touchable_huge</item>
<item name="iconSize">48dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>