diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt
index ef31de4f1..fd5f0ad64 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt
@@ -29,15 +29,12 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import org.oxycblt.auxio.R
-import org.oxycblt.auxio.accent.Accent
import org.oxycblt.auxio.databinding.FragmentPlaybackBinding
import org.oxycblt.auxio.detail.DetailViewModel
import org.oxycblt.auxio.playback.state.LoopMode
import org.oxycblt.auxio.ui.memberBinding
import org.oxycblt.auxio.util.applyEdge
import org.oxycblt.auxio.util.logD
-import org.oxycblt.auxio.util.resolveDrawable
-import org.oxycblt.auxio.util.resolveStateList
/**
* A [Fragment] that displays more information about the song, along with more media controls.
@@ -48,7 +45,7 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
private val playbackModel: PlaybackViewModel by activityViewModels()
private val detailModel: DetailViewModel by activityViewModels()
private val binding by memberBinding(FragmentPlaybackBinding::inflate) {
- playbackSong.isSelected = false
+ playbackSong.isSelected = false // Clear marquee to prevent a memory leak
}
override fun onCreateView(
@@ -56,14 +53,6 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- val normalTextColor = binding.playbackDurationCurrent.currentTextColor
- val accentColor = Accent.get().getStateList(requireContext())
- val controlColor = R.color.control.resolveStateList(requireContext())
-
- // Can't set the tint of a MenuItem below Android 8, so use icons instead.
- val iconQueueActive = R.drawable.ic_queue.resolveDrawable(requireContext())
- val iconQueueInactive = R.drawable.ic_queue_inactive.resolveDrawable(requireContext())
-
val queueItem: MenuItem
// --- UI SETUP ---
@@ -102,6 +91,7 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
binding.playbackSeekBar.setOnSeekBarChangeListener(this)
// --- VIEWMODEL SETUP --
+
playbackModel.song.observe(viewLifecycleOwner) { song ->
if (song != null) {
logD("Updating song display to ${song.name}.")
@@ -120,32 +110,17 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
}
playbackModel.loopMode.observe(viewLifecycleOwner) { loopMode ->
- when (loopMode) {
- LoopMode.NONE -> {
- binding.playbackLoop.imageTintList = controlColor
- binding.playbackLoop.setImageResource(R.drawable.ic_loop)
- }
-
- LoopMode.ALL -> {
- binding.playbackLoop.imageTintList = accentColor
- binding.playbackLoop.setImageResource(R.drawable.ic_loop)
- }
-
- LoopMode.TRACK -> {
- binding.playbackLoop.imageTintList = accentColor
- binding.playbackLoop.setImageResource(R.drawable.ic_loop_one)
- }
-
- else -> return@observe
+ val resId = when (loopMode) {
+ LoopMode.NONE, null -> R.drawable.ic_loop
+ LoopMode.ALL -> R.drawable.ic_loop_on
+ LoopMode.TRACK -> R.drawable.ic_loop_one
}
+
+ binding.playbackLoop.setImageResource(resId)
}
playbackModel.isSeeking.observe(viewLifecycleOwner) { isSeeking ->
- if (isSeeking) {
- binding.playbackDurationCurrent.setTextColor(accentColor)
- } else {
- binding.playbackDurationCurrent.setTextColor(normalTextColor)
- }
+ binding.playbackDurationCurrent.isActivated = isSeeking
}
playbackModel.positionAsProgress.observe(viewLifecycleOwner) { pos ->
@@ -155,27 +130,11 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
}
playbackModel.nextItemsInQueue.observe(viewLifecycleOwner) { nextQueue ->
- val userQueue = playbackModel.userQueue.value!!
-
- if (userQueue.isEmpty() && nextQueue.isEmpty()) {
- queueItem.icon = iconQueueInactive
- queueItem.isEnabled = false
- } else {
- queueItem.icon = iconQueueActive
- queueItem.isEnabled = true
- }
+ updateQueueIcon(queueItem)
}
playbackModel.userQueue.observe(viewLifecycleOwner) { userQueue ->
- val nextQueue = playbackModel.nextItemsInQueue.value!!
-
- if (userQueue.isEmpty() && nextQueue.isEmpty()) {
- queueItem.icon = iconQueueInactive
- queueItem.isEnabled = false
- } else {
- queueItem.icon = iconQueueActive
- queueItem.isEnabled = true
- }
+ updateQueueIcon(queueItem)
}
playbackModel.isPlaying.observe(viewLifecycleOwner) { isPlaying ->
@@ -193,6 +152,15 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
return binding.root
}
+ private fun updateQueueIcon(queueItem: MenuItem) {
+ val userQueue = playbackModel.userQueue.value!!
+ val nextQueue = playbackModel.nextItemsInQueue.value!!
+
+ // The queue icon uses a selector that will automatically tint the icon as active or
+ // inactive. We just need to set the flag.
+ queueItem.isEnabled = !(userQueue.isEmpty() && nextQueue.isEmpty())
+ }
+
// --- SEEK CALLBACKS ---
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
diff --git a/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt b/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt
index c2329d087..c890c547e 100644
--- a/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt
+++ b/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt
@@ -75,7 +75,7 @@ fun RecyclerView.applySpans(shouldBeFullWidth: ((Int) -> Boolean)? = null) {
*/
fun ImageButton.disable() {
if (isEnabled) {
- imageTintList = R.color.inactive.resolveStateList(context)
+ imageTintList = ContextCompat.getColorStateList(context, R.color.overlay_disabled)
isEnabled = false
}
}
diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt b/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt
index 166619469..5755d6da9 100644
--- a/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt
+++ b/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt
@@ -129,7 +129,7 @@ fun createFullWidget(context: Context, state: WidgetState): RemoteViews {
val loopRes = when (state.loopMode) {
LoopMode.NONE -> R.drawable.ic_loop
- LoopMode.ALL -> R.drawable.ic_loop_tinted
+ LoopMode.ALL -> R.drawable.ic_loop_on
LoopMode.TRACK -> R.drawable.ic_loop_one
}
diff --git a/app/src/main/res/color/overlay_disabled.xml b/app/src/main/res/color/overlay_disabled.xml
new file mode 100644
index 000000000..057dffcd5
--- /dev/null
+++ b/app/src/main/res/color/overlay_disabled.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/color/sel_accent_active.xml b/app/src/main/res/color/sel_accented.xml
similarity index 100%
rename from app/src/main/res/color/sel_accent_active.xml
rename to app/src/main/res/color/sel_accented.xml
diff --git a/app/src/main/res/color/sel_accented_track.xml b/app/src/main/res/color/sel_accented_secondary.xml
similarity index 76%
rename from app/src/main/res/color/sel_accented_track.xml
rename to app/src/main/res/color/sel_accented_secondary.xml
index 72e833a26..82ee15d01 100644
--- a/app/src/main/res/color/sel_accented_track.xml
+++ b/app/src/main/res/color/sel_accented_secondary.xml
@@ -2,5 +2,5 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_loop_tinted.xml b/app/src/main/res/drawable/ic_loop_on.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_loop_tinted.xml
rename to app/src/main/res/drawable/ic_loop_on.xml
diff --git a/app/src/main/res/drawable/ic_queue.xml b/app/src/main/res/drawable/ic_queue.xml
index 7728677a0..bba0ecc39 100644
--- a/app/src/main/res/drawable/ic_queue.xml
+++ b/app/src/main/res/drawable/ic_queue.xml
@@ -2,7 +2,7 @@
-
-
-
diff --git a/app/src/main/res/drawable/ui_circle_ripple.xml b/app/src/main/res/drawable/ui_circle_ripple.xml
index 9da7508a5..88efdfd63 100644
--- a/app/src/main/res/drawable/ui_circle_ripple.xml
+++ b/app/src/main/res/drawable/ui_circle_ripple.xml
@@ -1,9 +1,9 @@
+ android:color="@color/mtrl_btn_ripple_color">
-
+ android:tint="@color/sel_accented">
diff --git a/app/src/main/res/layout-land/fragment_playback.xml b/app/src/main/res/layout-land/fragment_playback.xml
index 2ae75d5f2..ba7929c66 100644
--- a/app/src/main/res/layout-land/fragment_playback.xml
+++ b/app/src/main/res/layout-land/fragment_playback.xml
@@ -116,6 +116,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_mid_large"
android:text="@{playbackModel.formattedPosition}"
+ android:textColor="@color/sel_accented_secondary"
app:layout_constraintBottom_toTopOf="@+id/playback_play_pause"
app:layout_constraintStart_toEndOf="@+id/playback_cover"
app:layout_constraintTop_toBottomOf="@+id/playback_seek_bar"
@@ -183,7 +184,7 @@
android:contentDescription="@string/desc_shuffle"
android:onClick="@{() -> playbackModel.invertShuffleStatus()}"
android:src="@drawable/ic_shuffle"
- app:tint="@color/sel_accent_active"
+ app:tint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
app:layout_constraintEnd_toEndOf="@+id/playback_song_duration"
app:layout_constraintTop_toTopOf="@+id/playback_skip_next" />
diff --git a/app/src/main/res/layout-xlarge-land/fragment_playback.xml b/app/src/main/res/layout-xlarge-land/fragment_playback.xml
index 306c70b98..a23fe6413 100644
--- a/app/src/main/res/layout-xlarge-land/fragment_playback.xml
+++ b/app/src/main/res/layout-xlarge-land/fragment_playback.xml
@@ -117,6 +117,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_mid_large"
android:text="@{playbackModel.formattedPosition}"
+ android:textColor="@color/sel_accented_secondary"
app:layout_constraintBottom_toTopOf="@+id/playback_play_pause"
app:layout_constraintStart_toEndOf="@+id/playback_cover"
app:layout_constraintTop_toBottomOf="@+id/playback_seek_bar"
@@ -184,7 +185,7 @@
android:contentDescription="@string/desc_shuffle"
android:onClick="@{() -> playbackModel.invertShuffleStatus()}"
android:src="@drawable/ic_shuffle"
- app:tint="@color/sel_accent_active"
+ app:tint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
app:layout_constraintStart_toEndOf="@+id/playback_skip_next"
app:layout_constraintTop_toTopOf="@+id/playback_skip_next" />
diff --git a/app/src/main/res/layout-xlarge/fragment_playback.xml b/app/src/main/res/layout-xlarge/fragment_playback.xml
index a775ea950..510c14b6e 100644
--- a/app/src/main/res/layout-xlarge/fragment_playback.xml
+++ b/app/src/main/res/layout-xlarge/fragment_playback.xml
@@ -104,6 +104,7 @@
android:layout_marginStart="@dimen/spacing_mid_huge"
android:layout_marginBottom="@dimen/spacing_medium"
android:text="@{playbackModel.formattedPosition}"
+ android:textColor="@color/sel_accented_secondary"
app:layout_constraintBottom_toTopOf="@+id/playback_play_pause"
app:layout_constraintStart_toStartOf="parent"
tools:text="11:38" />
@@ -171,7 +172,7 @@
android:contentDescription="@string/desc_shuffle"
android:onClick="@{() -> playbackModel.invertShuffleStatus()}"
android:src="@drawable/ic_shuffle"
- app:tint="@color/sel_accent_active"
+ app:tint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
app:layout_constraintStart_toEndOf="@+id/playback_skip_next"
app:layout_constraintTop_toTopOf="@+id/playback_skip_next" />
diff --git a/app/src/main/res/layout/fragment_playback.xml b/app/src/main/res/layout/fragment_playback.xml
index 19035e050..e57e45099 100644
--- a/app/src/main/res/layout/fragment_playback.xml
+++ b/app/src/main/res/layout/fragment_playback.xml
@@ -101,6 +101,7 @@
android:layout_marginStart="@dimen/spacing_mid_large"
android:layout_marginBottom="@dimen/spacing_medium"
android:text="@{playbackModel.formattedPosition}"
+ android:textColor="@color/sel_accented_secondary"
app:layout_constraintBottom_toTopOf="@+id/playback_play_pause"
app:layout_constraintStart_toStartOf="parent"
tools:text="11:38" />
@@ -167,7 +168,7 @@
android:contentDescription="@string/desc_shuffle"
android:onClick="@{() -> playbackModel.invertShuffleStatus()}"
android:src="@drawable/ic_shuffle"
- app:tint="@color/sel_accent_active"
+ app:tint="@color/sel_accented"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
app:layout_constraintEnd_toEndOf="@+id/playback_song_duration"
app:layout_constraintTop_toTopOf="@+id/playback_skip_next" />
diff --git a/app/src/main/res/layout/item_album_song.xml b/app/src/main/res/layout/item_album_song.xml
index e089213cd..82c6dd232 100644
--- a/app/src/main/res/layout/item_album_song.xml
+++ b/app/src/main/res/layout/item_album_song.xml
@@ -24,7 +24,7 @@
android:text="@{String.valueOf(song.track)}"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceListItem"
- android:textColor="@color/sel_accented_track"
+ android:textColor="@color/sel_accented_secondary"
android:textSize="@dimen/text_size_large"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml
index ce3bcfa6b..fd85e9434 100644
--- a/app/src/main/res/values-night/colors.xml
+++ b/app/src/main/res/values-night/colors.xml
@@ -1,7 +1,6 @@
- @color/surface_night
- #404040
+ #202124
#ffffff
#01151515
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 9ec0a6ef8..4fdf88ce6 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,12 +1,8 @@
- #fafafa
- #202124
+ #fafafa
@android:color/black
-
- @color/surface_day
#202020
- #c4c4c4
#01fafafa