ui: use grade instead of indicator

Finally unify all icon activation states under the new grade modifier
in Material Symbols.

This provides similar clarify to the dot/greyed state, but without
inconsistent meanings. The shuffle icon did have to be bolded a little
more though, as the grade did not seem to do much.
This commit is contained in:
OxygenCobalt 2022-07-03 15:29:42 -06:00
parent 4f8fc8008c
commit b3cac19ee4
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
29 changed files with 90 additions and 181 deletions

View file

@ -122,7 +122,7 @@ class Indexer {
this.callback = null
}
suspend fun index(context: Context) {
fun index(context: Context) {
val generation = synchronized(this) { ++currentGeneration }
val notGranted =

View file

@ -25,7 +25,6 @@ import coil.imageLoader
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import org.oxycblt.auxio.IntegerTable
import org.oxycblt.auxio.R
@ -113,11 +112,17 @@ class IndexerService : Service(), Indexer.Controller, Settings.Callback {
// Load was completed successfully. However, we still need to do some
// extra work to update the app's state.
updateScope.launch {
// Invalidate the image cache, as there may be some covers that are
// no longer valid.
imageLoader.memoryCache?.clear()
if (musicStore.library != null) {
// This is a new library, so we need to make sure the playback state
// is coherent.
// is coherent. This seems a bit muddly, but PlaybackService (or any
// other playback component capable of handling this) may not be
// capable of long-running background work as the library is being
// updated. The initialization steps on the other hand are firmly in
// the place of the playback module.
playbackManager.sanitize(
PlaybackStateDatabase.getInstance(this@IndexerService), newLibrary)
}

View file

@ -205,8 +205,6 @@ class Task(context: Context, private val audio: MediaStoreBackend.Audio) {
}
}
// TODO: Release types
private fun populateId3v2(tags: Map<String, String>) {
// Title
tags["TIT2"]?.let { audio.title = it }

View file

@ -1,61 +0,0 @@
/*
* Copyright (c) 2022 Auxio Project
*
* 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
import android.content.Context
import android.graphics.Canvas
import android.util.AttributeSet
import androidx.annotation.AttrRes
import com.google.android.material.button.MaterialButton
import org.oxycblt.auxio.R
import org.oxycblt.auxio.util.getDrawableSafe
/**
* Extends [MaterialButton] to add a dot indicator to the bottom of the view.
*
* TODO: Experiment with the "grade" attribute on Material Icons so that I can replace this
*
* @author OxygenCobalt
*/
class IndicatorMaterialButton
@JvmOverloads
constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr: Int = 0) :
MaterialButton(context, attrs, defStyleAttr) {
private val indicatorDrawable = context.getDrawableSafe(R.drawable.ui_indicator)
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
// Put the indicator right below the icon.
val x = (measuredWidth - indicatorDrawable.intrinsicWidth) / 2
val y = ((measuredHeight - iconSize) / 2) + iconSize
indicatorDrawable.bounds.set(
x, y, x + indicatorDrawable.intrinsicWidth, y + indicatorDrawable.intrinsicHeight)
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
// I would use onDrawForeground but apparently that isn't called by Lollipop devices.
// This is not referenced in the documentation at all.
if (isActivated) {
indicatorDrawable.draw(canvas)
}
}
}

View file

@ -31,6 +31,8 @@ import android.widget.FrameLayout
* particular overrides the layout direction in a way that will not disrupt how other views are laid
* out.
*
* This layout can only contain one child.
*
* @author OxygenCobalt
*/
open class NoRtlFrameLayout

View file

@ -185,8 +185,8 @@ class PlaybackPanelFragment :
isActivated = repeatMode != RepeatMode.NONE
val iconRes =
when (repeatMode) {
RepeatMode.NONE,
RepeatMode.ALL -> R.drawable.ic_repeat_24
RepeatMode.NONE -> R.drawable.ic_repeat_off_24
RepeatMode.ALL -> R.drawable.ic_repeat_on_24
RepeatMode.TRACK -> R.drawable.ic_repeat_one_24
}

View file

@ -265,7 +265,7 @@ class MediaSessionComponent(
PlaybackStateCompat.CustomAction.Builder(
PlaybackService.ACTION_INC_REPEAT_MODE,
context.getString(R.string.desc_change_repeat),
R.drawable.ic_remote_repeat_off_24)
R.drawable.ic_repeat_off_24)
.build())
.setBufferedPosition(player.bufferedPosition)

View file

@ -27,7 +27,6 @@ import android.support.v4.media.session.MediaSessionCompat
import androidx.annotation.DrawableRes
import androidx.core.app.NotificationCompat
import androidx.media.app.NotificationCompat.MediaStyle
import okhttp3.internal.notify
import org.oxycblt.auxio.BuildConfig
import org.oxycblt.auxio.IntegerTable
import org.oxycblt.auxio.R
@ -135,9 +134,9 @@ class NotificationComponent(private val context: Context, sessionToken: MediaSes
): NotificationCompat.Action {
val drawableRes =
when (repeatMode) {
RepeatMode.NONE -> R.drawable.ic_remote_repeat_off_24
RepeatMode.ALL -> R.drawable.ic_remote_repeat_on_24
RepeatMode.TRACK -> R.drawable.ic_remote_repeat_one_24
RepeatMode.NONE -> R.drawable.ic_repeat_off_24
RepeatMode.ALL -> R.drawable.ic_repeat_on_24
RepeatMode.TRACK -> R.drawable.ic_repeat_one_24
}
return buildAction(context, PlaybackService.ACTION_INC_REPEAT_MODE, drawableRes)
@ -148,7 +147,7 @@ class NotificationComponent(private val context: Context, sessionToken: MediaSes
isShuffled: Boolean
): NotificationCompat.Action {
val drawableRes =
if (isShuffled) R.drawable.ic_shuffle_24 else R.drawable.ic_remote_shuffle_off_24
if (isShuffled) R.drawable.ic_shuffle_on_24 else R.drawable.ic_shuffle_off_24
return buildAction(context, PlaybackService.ACTION_INVERT_SHUFFLE, drawableRes)
}
@ -165,10 +164,6 @@ class NotificationComponent(private val context: Context, sessionToken: MediaSes
return action.build()
}
interface Callback {
fun onNotificationChanged(song: Song?, component: NotificationComponent)
}
companion object {
const val CHANNEL_ID = BuildConfig.APPLICATION_ID + ".channel.PLAYBACK"
}

View file

@ -516,7 +516,7 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) :
}
/**
* Do the nice view animations that occur whenever we slide up the bottom sheet. The way I
* Do the nice view animations that occur whenever we slide up the bottom sheet. The way we
* transition is largely inspired by Android 12's notification panel, with the compact view
* fading out completely before the panel view fades in.
*/
@ -569,6 +569,7 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) :
if (dragHelper.smoothSlideViewTo(
sheetView, sheetView.left, calculateSheetTopPosition(offset))) {
// Slide has started, begin animating
postInvalidateOnAnimation()
}
}

View file

@ -189,15 +189,15 @@ private fun RemoteViews.applyFullControls(
// indicators.
val shuffleRes =
when {
state.isShuffled -> R.drawable.ic_remote_shuffle_on_24
else -> R.drawable.ic_remote_shuffle_off_24
state.isShuffled -> R.drawable.ic_shuffle_on_24
else -> R.drawable.ic_shuffle_off_24
}
val repeatRes =
when (state.repeatMode) {
RepeatMode.NONE -> R.drawable.ic_remote_repeat_off_24
RepeatMode.ALL -> R.drawable.ic_remote_repeat_on_24
RepeatMode.TRACK -> R.drawable.ic_remote_repeat_one_24
RepeatMode.NONE -> R.drawable.ic_repeat_off_24
RepeatMode.ALL -> R.drawable.ic_repeat_on_24
RepeatMode.TRACK -> R.drawable.ic_repeat_one_24
}
setImageViewResource(R.id.widget_shuffle, shuffleRes)

View file

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<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">
<path
android:fillColor="@color/remote_translucent"
android:pathData="M7,22 L3,18 7,14 8.4,15.45 6.85,17H17V13H19V19H6.85L8.4,20.55ZM5,11V5H17.15L15.6,3.45L17,2L21,6L17,10L15.6,8.55L17.15,7H7V11Z" />
</vector>

View file

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorPrimary"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M11.5,15V10.5H10V9H13V15ZM7,22 L3,18 7,14 8.4,15.45 6.85,17H17V13H19V19H6.85L8.4,20.55ZM5,11V5H17.15L15.6,3.45L17,2L21,6L17,10L15.6,8.55L17.15,7H7V11Z" />
</vector>

View file

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<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">
<path
android:fillColor="@color/remote_translucent"
android:pathData="M9.175,10.575 L4,5.4 5.4,4 10.575,9.175ZM14,20V18H16.6L13.425,14.825L14.85,13.4L18,16.55V14H20V20ZM5.4,20 L4,18.6 16.6,6H14V4H20V10H18V7.4Z" />
</vector>

View file

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorPrimary"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M9.175,10.575 L4,5.4 5.4,4 10.575,9.175ZM14,20V18H16.6L13.425,14.825L14.85,13.4L18,16.55V14H20V20ZM5.4,20 L4,18.6 16.6,6H14V4H20V10H18V7.4Z" />
</vector>

View file

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="32"
android:viewportHeight="32">
<path
android:fillColor="@android:color/white"
android:pathData="M 9.3333328,29.333332 3.9999997,23.999999 9.3333328,18.666666 11.199999,20.599999 9.1333328,22.666666 H 22.666666 v -5.333334 h 2.666666 v 8 H 9.1333328 l 2.0666662,2.066667 z M 6.6666662,14.666666 V 6.6666662 H 22.866666 l -2.066667,-2.0666665 1.866667,-1.9333332 5.333333,5.333333 -5.333333,5.3333335 -1.866667,-1.933334 2.066667,-2.0666662 H 9.3333328 v 5.3333332 z" />
</vector>

View file

@ -2,7 +2,7 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorPrimary"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorPrimary">
<path
android:fillColor="@android:color/white"
android:pathData="M6.8,22.725 L2.3,18.225 6.8,13.725 8.675,15.625 7.4,16.9H16.925V12.825H19.575V19.55H7.4L8.675,20.825ZM4.45,11.15V4.425H16.625L15.35,3.15L17.225,1.25L21.725,5.75L17.225,10.25L15.35,8.35L16.625,7.075H7.1V11.15Z"/>
</vector>

View file

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<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:viewportHeight="24"
android:tint="?attr/colorPrimary">
<path
android:fillColor="@android:color/white"
android:pathData="M11.5,15V10.5H10V9H13V15ZM7,22 L3,18 7,14 8.4,15.45 6.85,17H17V13H19V19H6.85L8.4,20.55ZM5,11V5H17.15L15.6,3.45L17,2L21,6L17,10L15.6,8.55L17.15,7H7V11Z" />
android:pathData="M11.325,15.225V10.65H9.6V8.75H13.225V15.225ZM6.8,22.725 L2.3,18.225 6.8,13.725 8.675,15.625 7.4,16.9H16.925V12.825H19.575V19.55H7.4L8.675,20.825ZM4.45,11.15V4.425H16.625L15.35,3.15L17.225,1.25L21.725,5.75L17.225,10.25L15.35,8.35L16.625,7.075H7.1V11.15Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorPrimary">
<path
android:fillColor="@android:color/white"
android:pathData="M9.05,10.775 L3.675,5.4 5.45,3.625 10.825,9ZM13.75,20.275V17.725H16L13.275,14.975L15.025,13.2L17.75,15.925V13.725H20.325V20.275ZM5.45,20.375 L3.675,18.6 16,6.275H13.75V3.725H20.325V10.275H17.75V8.05Z"/>
</vector>

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_shuffle_on_24" android:state_activated="true" />
<item android:drawable="@drawable/ic_shuffle_off_24" />
</selector>

View file

@ -101,19 +101,19 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.oxycblt.auxio.playback.IndicatorMaterialButton
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_repeat"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_change_repeat"
app:icon="@drawable/ic_repeat_24"
app:icon="@drawable/ic_repeat_off_24"
app:iconTint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_prev"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/playback_skip_prev" />
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_skip_prev"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
@ -138,7 +138,7 @@
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_play_24" />
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_skip_next"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
@ -150,13 +150,13 @@
app:layout_constraintStart_toEndOf="@+id/playback_play_pause"
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
<org.oxycblt.auxio.playback.IndicatorMaterialButton
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_shuffle"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_shuffle"
app:icon="@drawable/ic_shuffle_24"
app:icon="@drawable/sel_shuffle_state_24"
app:iconTint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
app:layout_constraintEnd_toEndOf="parent"

View file

@ -97,21 +97,21 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.oxycblt.auxio.playback.IndicatorMaterialButton
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_repeat"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_large"
android:contentDescription="@string/desc_change_repeat"
app:icon="@drawable/ic_repeat_24"
app:icon="@drawable/ic_repeat_off_24"
app:iconTint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_prev"
app:layout_constraintEnd_toStartOf="@+id/playback_skip_prev"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintTop_toTopOf="@+id/playback_skip_prev" />
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_skip_prev"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
@ -136,7 +136,7 @@
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_pause_24" />
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_skip_next"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
@ -148,14 +148,14 @@
app:layout_constraintStart_toEndOf="@+id/playback_play_pause"
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
<org.oxycblt.auxio.playback.IndicatorMaterialButton
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_shuffle"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_large"
android:contentDescription="@string/desc_shuffle"
app:icon="@drawable/ic_shuffle_24"
app:icon="@drawable/sel_shuffle_state_24"
app:iconTint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
app:layout_constraintStart_toEndOf="@+id/playback_skip_next"

View file

@ -86,21 +86,21 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.oxycblt.auxio.playback.IndicatorMaterialButton
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_repeat"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_large"
android:contentDescription="@string/desc_change_repeat"
app:icon="@drawable/ic_repeat_24"
app:icon="@drawable/ic_repeat_off_24"
app:iconTint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_prev"
app:layout_constraintEnd_toStartOf="@+id/playback_skip_prev"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintTop_toTopOf="@+id/playback_skip_prev" />
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_skip_prev"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
@ -125,7 +125,7 @@
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_pause_24" />
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_skip_next"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
@ -137,14 +137,14 @@
app:layout_constraintStart_toEndOf="@+id/playback_play_pause"
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
<org.oxycblt.auxio.playback.IndicatorMaterialButton
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_shuffle"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_large"
android:contentDescription="@string/desc_shuffle"
app:icon="@drawable/ic_shuffle_24"
app:icon="@drawable/sel_shuffle_state_24"
app:iconTint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
app:layout_constraintStart_toEndOf="@+id/playback_skip_next"

View file

@ -102,19 +102,19 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.oxycblt.auxio.playback.IndicatorMaterialButton
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_repeat"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_change_repeat"
app:icon="@drawable/ic_repeat_24"
app:icon="@drawable/ic_repeat_off_24"
app:iconTint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_prev"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/playback_skip_prev" />
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_skip_prev"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
@ -139,7 +139,7 @@
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_play_24" />
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_skip_next"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
@ -151,13 +151,13 @@
app:layout_constraintStart_toEndOf="@+id/playback_play_pause"
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
<org.oxycblt.auxio.playback.IndicatorMaterialButton
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_shuffle"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_shuffle"
app:icon="@drawable/ic_shuffle_24"
app:icon="@drawable/sel_shuffle_state_24"
app:iconTint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
app:layout_constraintEnd_toEndOf="parent"

View file

@ -111,7 +111,7 @@
android:layout_height="wrap_content"
android:layout_margin="@dimen/spacing_medium"
android:contentDescription="@string/desc_shuffle_all"
android:src="@drawable/ic_shuffle_24" />
android:src="@drawable/ic_shuffle_off_24" />
</org.oxycblt.auxio.home.EdgeFabContainer>

View file

@ -84,19 +84,19 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.oxycblt.auxio.playback.IndicatorMaterialButton
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_repeat"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_change_repeat"
app:icon="@drawable/ic_repeat_24"
app:icon="@drawable/ic_repeat_off_24"
app:iconTint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_prev"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/playback_skip_prev" />
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_skip_prev"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
@ -121,7 +121,7 @@
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_play_24" />
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_skip_next"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
@ -133,13 +133,13 @@
app:layout_constraintStart_toEndOf="@+id/playback_play_pause"
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
<org.oxycblt.auxio.playback.IndicatorMaterialButton
<com.google.android.material.button.MaterialButton
android:id="@+id/playback_shuffle"
style="@style/Widget.Auxio.Button.Icon.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/desc_shuffle"
app:icon="@drawable/ic_shuffle_24"
app:icon="@drawable/sel_shuffle_state_24"
app:iconTint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
app:layout_constraintEnd_toEndOf="parent"

View file

@ -85,7 +85,7 @@
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:contentDescription="@string/desc_change_repeat"
android:src="@drawable/ic_remote_repeat_off_24" />
android:src="@drawable/ic_repeat_off_24" />
<android.widget.ImageView
android:layout_width="0dp"
@ -139,7 +139,7 @@
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:contentDescription="@string/desc_shuffle"
android:src="@drawable/ic_remote_shuffle_off_24" />
android:src="@drawable/ic_shuffle_off_24" />
</android.widget.LinearLayout>

View file

@ -59,7 +59,7 @@
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:contentDescription="@string/desc_change_repeat"
android:src="@drawable/ic_remote_repeat_off_24" />
android:src="@drawable/ic_repeat_off_24" />
<android.widget.ImageView
android:layout_width="0dp"
@ -112,7 +112,7 @@
android:layout_width="@dimen/size_btn"
android:layout_height="@dimen/size_btn"
android:contentDescription="@string/desc_shuffle"
android:src="@drawable/ic_remote_shuffle_off_24" />
android:src="@drawable/ic_shuffle_off_24" />
</android.widget.LinearLayout>
</android.widget.RelativeLayout>