Migrate to material theming

Finally move the app from AppCompat the Material Bridge theme. This does a couple things:
- Removes need for runtime styling of material widgets used before
- Allows for a better dialog style [But only after a ton of tinkering and weird hacks]
- Makes theming slightly easier [After all the dumb migration bugs and technicalities are fixed]

I never want to do something like this again. UI styling on android is a nightmare.
This commit is contained in:
OxygenCobalt 2021-04-04 09:13:19 -06:00
parent f2445e56f2
commit 03aa2d4579
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
21 changed files with 95 additions and 102 deletions

View file

@ -16,7 +16,6 @@ import org.oxycblt.auxio.recycler.DiffCallback
import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder
import org.oxycblt.auxio.recycler.viewholders.Highlightable import org.oxycblt.auxio.recycler.viewholders.Highlightable
import org.oxycblt.auxio.ui.Accent import org.oxycblt.auxio.ui.Accent
import org.oxycblt.auxio.ui.applyAccents
import org.oxycblt.auxio.ui.disable import org.oxycblt.auxio.ui.disable
import org.oxycblt.auxio.ui.inflater import org.oxycblt.auxio.ui.inflater
import org.oxycblt.auxio.ui.setTextColorResource import org.oxycblt.auxio.ui.setTextColorResource
@ -116,9 +115,6 @@ class AlbumDetailAdapter(
binding.playbackModel = playbackModel binding.playbackModel = playbackModel
binding.lifecycleOwner = lifecycleOwner binding.lifecycleOwner = lifecycleOwner
binding.albumShuffleButton.applyAccents(true)
binding.albumPlayButton.applyAccents(false)
if (data.songs.size < 2) { if (data.songs.size < 2) {
binding.albumSortButton.disable() binding.albumSortButton.disable()
} }

View file

@ -16,7 +16,6 @@ import org.oxycblt.auxio.recycler.DiffCallback
import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder
import org.oxycblt.auxio.recycler.viewholders.Highlightable import org.oxycblt.auxio.recycler.viewholders.Highlightable
import org.oxycblt.auxio.ui.Accent import org.oxycblt.auxio.ui.Accent
import org.oxycblt.auxio.ui.applyAccents
import org.oxycblt.auxio.ui.disable import org.oxycblt.auxio.ui.disable
import org.oxycblt.auxio.ui.inflater import org.oxycblt.auxio.ui.inflater
import org.oxycblt.auxio.ui.setTextColorResource import org.oxycblt.auxio.ui.setTextColorResource
@ -115,9 +114,6 @@ class ArtistDetailAdapter(
binding.playbackModel = playbackModel binding.playbackModel = playbackModel
binding.lifecycleOwner = lifecycleOwner binding.lifecycleOwner = lifecycleOwner
binding.artistShuffleButton.applyAccents(true)
binding.artistPlayButton.applyAccents(false)
if (data.albums.size < 2) { if (data.albums.size < 2) {
binding.artistSortButton.disable() binding.artistSortButton.disable()
} }

View file

@ -16,7 +16,6 @@ import org.oxycblt.auxio.recycler.DiffCallback
import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder
import org.oxycblt.auxio.recycler.viewholders.Highlightable import org.oxycblt.auxio.recycler.viewholders.Highlightable
import org.oxycblt.auxio.ui.Accent import org.oxycblt.auxio.ui.Accent
import org.oxycblt.auxio.ui.applyAccents
import org.oxycblt.auxio.ui.disable import org.oxycblt.auxio.ui.disable
import org.oxycblt.auxio.ui.inflater import org.oxycblt.auxio.ui.inflater
import org.oxycblt.auxio.ui.setTextColorResource import org.oxycblt.auxio.ui.setTextColorResource
@ -116,9 +115,6 @@ class GenreDetailAdapter(
binding.playbackModel = playbackModel binding.playbackModel = playbackModel
binding.lifecycleOwner = lifecycleOwner binding.lifecycleOwner = lifecycleOwner
binding.genreShuffleButton.applyAccents(true)
binding.genrePlayButton.applyAccents(false)
if (data.songs.size < 2) { if (data.songs.size < 2) {
binding.genreSortButton.disable() binding.genreSortButton.disable()
} }

View file

@ -1,6 +1,5 @@
package org.oxycblt.auxio.search package org.oxycblt.auxio.search
import android.content.res.ColorStateList
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -23,12 +22,9 @@ import org.oxycblt.auxio.music.Genre
import org.oxycblt.auxio.music.Header import org.oxycblt.auxio.music.Header
import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.ui.Accent
import org.oxycblt.auxio.ui.fixAnimInfoLeak import org.oxycblt.auxio.ui.fixAnimInfoLeak
import org.oxycblt.auxio.ui.getSpans import org.oxycblt.auxio.ui.getSpans
import org.oxycblt.auxio.ui.newMenu import org.oxycblt.auxio.ui.newMenu
import org.oxycblt.auxio.ui.toColor
import org.oxycblt.auxio.ui.toStateList
/** /**
* A [Fragment] that allows for the searching of the entire music library. * A [Fragment] that allows for the searching of the entire music library.
@ -51,9 +47,6 @@ class SearchFragment : Fragment() {
newMenu(view, data) newMenu(view, data)
} }
// Apply the accents manually. Not going through the mess of converting my app's
// styling to Material given all the second-and-third-order effects it has.
val accent = Accent.get().color.toColor(requireContext())
val toolbarParams = binding.searchToolbar.layoutParams as AppBarLayout.LayoutParams val toolbarParams = binding.searchToolbar.layoutParams as AppBarLayout.LayoutParams
val defaultParams = toolbarParams.scrollFlags val defaultParams = toolbarParams.scrollFlags
@ -73,12 +66,6 @@ class SearchFragment : Fragment() {
} }
} }
binding.searchTextLayout.apply {
boxStrokeColor = accent
hintTextColor = ColorStateList.valueOf(accent)
setEndIconTintList(R.color.control_color.toStateList(context))
}
binding.searchEditText.addTextChangedListener { text -> binding.searchEditText.addTextChangedListener { text ->
// Run the search with the updated text as the query // Run the search with the updated text as the query
searchModel.doSearch(text?.toString() ?: "", requireContext()) searchModel.doSearch(text?.toString() ?: "", requireContext())

View file

@ -1,6 +1,7 @@
package org.oxycblt.auxio.settings.ui package org.oxycblt.auxio.settings.ui
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import org.oxycblt.auxio.R
class IntListPrefDialog(private val pref: IntListPreference) : LifecycleDialog() { class IntListPrefDialog(private val pref: IntListPreference) : LifecycleDialog() {
override fun onConfigDialog(builder: AlertDialog.Builder) { override fun onConfigDialog(builder: AlertDialog.Builder) {

View file

@ -4,16 +4,17 @@ import android.app.Dialog
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatDialogFragment
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import org.oxycblt.auxio.R import com.google.android.material.dialog.MaterialAlertDialogBuilder
/** /**
* A wrapper around [DialogFragment] that allows the usage of the standard Auxio lifecycle * A wrapper around [DialogFragment] that allows the usage of the standard Auxio lifecycle
* override [onCreateView] and [onDestroyView], but with a proper dialog being created. * override [onCreateView] and [onDestroyView], but with a proper dialog being created.
*/ */
abstract class LifecycleDialog : DialogFragment() { abstract class LifecycleDialog : AppCompatDialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val builder = AlertDialog.Builder(requireActivity(), R.style.Theme_CustomDialog) val builder = MaterialAlertDialogBuilder(requireActivity(), theme)
onConfigDialog(builder) onConfigDialog(builder)

View file

@ -23,7 +23,6 @@ import androidx.annotation.PluralsRes
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.button.MaterialButton
import org.oxycblt.auxio.R import org.oxycblt.auxio.R
import org.oxycblt.auxio.logE import org.oxycblt.auxio.logE
import kotlin.reflect.KClass import kotlin.reflect.KClass
@ -47,21 +46,6 @@ fun TextView.setTextColorResource(@ColorRes color: Int) {
setTextColor(color.toColor(context)) setTextColor(color.toColor(context))
} }
/**
* Apply accents to a [MaterialButton] manually.
* Yes, I could change my theming to Material but that would have so many second-and-third order
* effects that I *really* dont want to deal with it. This hack works.
* @param highlighted Whether the MaterialButton has an "Unimportant" style or not.
* Required because you cant determine a style of a view before API 29
*/
fun MaterialButton.applyAccents(highlighted: Boolean) {
if (highlighted) {
backgroundTintList = Accent.get().getStateList(context)
} else {
setTextColorResource(Accent.get().color)
}
}
// --- CONVENIENCE --- // --- CONVENIENCE ---
/** /**

View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android" <ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/selection_color"> android:color="?attr/colorControlHighlight">
<item android:id="@android:id/mask"> <item android:id="@android:id/mask">
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<solid android:color="@color/selection_color" /> <solid android:color="?attr/colorControlHighlight" />
</shape> </shape>
</item> </item>
</ripple> </ripple>

View file

@ -90,19 +90,18 @@
app:layout_constraintEnd_toStartOf="@+id/album_shuffle_button" app:layout_constraintEnd_toStartOf="@+id/album_shuffle_button"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/album_cover" app:layout_constraintTop_toBottomOf="@+id/album_cover" />
tools:textColor="@color/control_color" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/album_shuffle_button" android:id="@+id/album_shuffle_button"
style="@style/Widget.MaterialComponents.Button.Highlighted" style="@style/Widget.MaterialComponents.Button.Highlighted"
android:onClick="@{() -> playbackModel.playAlbum(album, true)}" android:onClick="@{() -> playbackModel.playAlbum(album, true)}"
android:text="@string/label_shuffle" android:text="@string/label_shuffle"
android:backgroundTint="?attr/colorPrimary"
app:layout_constraintBottom_toBottomOf="@+id/album_play_button" app:layout_constraintBottom_toBottomOf="@+id/album_play_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/album_play_button" app:layout_constraintStart_toEndOf="@+id/album_play_button"
app:layout_constraintTop_toTopOf="@+id/album_play_button" app:layout_constraintTop_toTopOf="@+id/album_play_button" />
tools:backgroundTint="@color/control_color" />
<TextView <TextView
android:id="@+id/album_song_header" android:id="@+id/album_song_header"

View file

@ -86,19 +86,18 @@
app:layout_constraintEnd_toStartOf="@+id/artist_shuffle_button" app:layout_constraintEnd_toStartOf="@+id/artist_shuffle_button"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/artist_image" app:layout_constraintTop_toBottomOf="@+id/artist_image" />
tools:textColor="@color/control_color" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/artist_shuffle_button" android:id="@+id/artist_shuffle_button"
style="@style/Widget.MaterialComponents.Button.Highlighted" style="@style/Widget.MaterialComponents.Button.Highlighted"
android:onClick="@{() -> playbackModel.playArtist(artist, true)}" android:onClick="@{() -> playbackModel.playArtist(artist, true)}"
android:text="@string/label_shuffle" android:text="@string/label_shuffle"
android:backgroundTint="?attr/colorPrimary"
app:layout_constraintBottom_toBottomOf="@+id/artist_play_button" app:layout_constraintBottom_toBottomOf="@+id/artist_play_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/artist_play_button" app:layout_constraintStart_toEndOf="@+id/artist_play_button"
app:layout_constraintTop_toTopOf="@+id/artist_play_button" app:layout_constraintTop_toTopOf="@+id/artist_play_button" />
tools:backgroundTint="@color/control_color" />
<TextView <TextView
android:id="@+id/artist_album_header" android:id="@+id/artist_album_header"

View file

@ -73,19 +73,18 @@
app:layout_constraintEnd_toStartOf="@+id/genre_shuffle_button" app:layout_constraintEnd_toStartOf="@+id/genre_shuffle_button"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/genre_image" app:layout_constraintTop_toBottomOf="@+id/genre_image" />
tools:textColor="@color/control_color" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/genre_shuffle_button" android:id="@+id/genre_shuffle_button"
style="@style/Widget.MaterialComponents.Button.Highlighted" style="@style/Widget.MaterialComponents.Button.Highlighted"
android:onClick="@{() -> playbackModel.playGenre(genre, true)}" android:onClick="@{() -> playbackModel.playGenre(genre, true)}"
android:text="@string/label_shuffle" android:text="@string/label_shuffle"
android:backgroundTint="?attr/colorPrimary"
app:layout_constraintBottom_toBottomOf="@+id/genre_play_button" app:layout_constraintBottom_toBottomOf="@+id/genre_play_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/genre_play_button" app:layout_constraintStart_toEndOf="@+id/genre_play_button"
app:layout_constraintTop_toTopOf="@+id/genre_play_button" app:layout_constraintTop_toTopOf="@+id/genre_play_button" />
tools:backgroundTint="@color/control_color" />
<TextView <TextView
android:id="@+id/genre_duration" android:id="@+id/genre_duration"

View file

@ -90,19 +90,18 @@
app:layout_constraintEnd_toStartOf="@+id/album_shuffle_button" app:layout_constraintEnd_toStartOf="@+id/album_shuffle_button"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/album_cover" app:layout_constraintTop_toBottomOf="@+id/album_cover" />
tools:textColor="@color/control_color" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/album_shuffle_button" android:id="@+id/album_shuffle_button"
style="@style/Widget.MaterialComponents.Button.Highlighted" style="@style/Widget.MaterialComponents.Button.Highlighted"
android:onClick="@{() -> playbackModel.playAlbum(album, true)}" android:onClick="@{() -> playbackModel.playAlbum(album, true)}"
android:text="@string/label_shuffle" android:text="@string/label_shuffle"
android:backgroundTint="?attr/colorPrimary"
app:layout_constraintBottom_toBottomOf="@+id/album_play_button" app:layout_constraintBottom_toBottomOf="@+id/album_play_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/album_play_button" app:layout_constraintStart_toEndOf="@+id/album_play_button"
app:layout_constraintTop_toTopOf="@+id/album_play_button" app:layout_constraintTop_toTopOf="@+id/album_play_button" />
tools:backgroundTint="@color/control_color" />
<TextView <TextView
android:id="@+id/album_song_header" android:id="@+id/album_song_header"

View file

@ -86,19 +86,18 @@
app:layout_constraintEnd_toStartOf="@+id/artist_shuffle_button" app:layout_constraintEnd_toStartOf="@+id/artist_shuffle_button"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/artist_image" app:layout_constraintTop_toBottomOf="@+id/artist_image" />
tools:textColor="@color/control_color" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/artist_shuffle_button" android:id="@+id/artist_shuffle_button"
style="@style/Widget.MaterialComponents.Button.Highlighted" style="@style/Widget.MaterialComponents.Button.Highlighted"
android:onClick="@{() -> playbackModel.playArtist(artist, true)}" android:onClick="@{() -> playbackModel.playArtist(artist, true)}"
android:text="@string/label_shuffle" android:text="@string/label_shuffle"
android:backgroundTint="?attr/colorPrimary"
app:layout_constraintBottom_toBottomOf="@+id/artist_play_button" app:layout_constraintBottom_toBottomOf="@+id/artist_play_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/artist_play_button" app:layout_constraintStart_toEndOf="@+id/artist_play_button"
app:layout_constraintTop_toTopOf="@+id/artist_play_button" app:layout_constraintTop_toTopOf="@+id/artist_play_button" />
tools:backgroundTint="@color/control_color" />
<TextView <TextView
android:id="@+id/artist_album_header" android:id="@+id/artist_album_header"

View file

@ -73,19 +73,18 @@
app:layout_constraintEnd_toStartOf="@+id/genre_shuffle_button" app:layout_constraintEnd_toStartOf="@+id/genre_shuffle_button"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/genre_image" app:layout_constraintTop_toBottomOf="@+id/genre_image" />
tools:textColor="@color/control_color" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/genre_shuffle_button" android:id="@+id/genre_shuffle_button"
style="@style/Widget.MaterialComponents.Button.Highlighted" style="@style/Widget.MaterialComponents.Button.Highlighted"
android:onClick="@{() -> playbackModel.playGenre(genre, true)}" android:onClick="@{() -> playbackModel.playGenre(genre, true)}"
android:text="@string/label_shuffle" android:text="@string/label_shuffle"
android:backgroundTint="?attr/colorPrimary"
app:layout_constraintBottom_toBottomOf="@+id/genre_play_button" app:layout_constraintBottom_toBottomOf="@+id/genre_play_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/genre_play_button" app:layout_constraintStart_toEndOf="@+id/genre_play_button"
app:layout_constraintTop_toTopOf="@+id/genre_play_button" app:layout_constraintTop_toTopOf="@+id/genre_play_button" />
tools:backgroundTint="@color/control_color" />
<TextView <TextView
android:id="@+id/genre_duration" android:id="@+id/genre_duration"

View file

@ -17,6 +17,7 @@
android:fontFamily="@font/inter_exbold" android:fontFamily="@font/inter_exbold"
android:padding="@dimen/padding_medium" android:padding="@dimen/padding_medium"
android:text="@string/setting_accent" android:text="@string/setting_accent"
android:paddingHorizontal="10dp"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textColor="?attr/colorPrimary" android:textColor="?attr/colorPrimary"
android:textSize="@dimen/text_size_toolbar_header" android:textSize="@dimen/text_size_toolbar_header"

View file

@ -24,9 +24,10 @@
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/search_text_layout" android:id="@+id/search_text_layout"
style="@style/Theme.MaterialComponents.DayNight"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:boxStrokeWidthFocused="2dp"
app:boxStrokeColor="?attr/colorPrimary"
app:boxBackgroundMode="filled" app:boxBackgroundMode="filled"
app:boxStrokeWidth="0dp" app:boxStrokeWidth="0dp"
app:endIconContentDescription="@string/description_clear_search" app:endIconContentDescription="@string/description_clear_search"
@ -36,7 +37,6 @@
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/search_edit_text" android:id="@+id/search_edit_text"
style="@style/Widget.AppCompat.EditText"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@android:color/transparent" android:background="@android:color/transparent"

View file

@ -84,19 +84,18 @@
android:text="@string/label_play" android:text="@string/label_play"
app:layout_constraintEnd_toStartOf="@+id/album_shuffle_button" app:layout_constraintEnd_toStartOf="@+id/album_shuffle_button"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/album_details" app:layout_constraintTop_toBottomOf="@+id/album_details" />
tools:textColor="@color/control_color" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/album_shuffle_button" android:id="@+id/album_shuffle_button"
style="@style/Widget.MaterialComponents.Button.Highlighted" style="@style/Widget.MaterialComponents.Button.Highlighted"
android:onClick="@{() -> playbackModel.playAlbum(album, true)}" android:onClick="@{() -> playbackModel.playAlbum(album, true)}"
android:text="@string/label_shuffle" android:text="@string/label_shuffle"
android:backgroundTint="?attr/colorPrimary"
app:layout_constraintBottom_toBottomOf="@+id/album_play_button" app:layout_constraintBottom_toBottomOf="@+id/album_play_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/album_play_button" app:layout_constraintStart_toEndOf="@+id/album_play_button"
app:layout_constraintTop_toTopOf="@+id/album_play_button" app:layout_constraintTop_toTopOf="@+id/album_play_button" />
tools:backgroundTint="@color/control_color" />
<TextView <TextView
android:id="@+id/album_song_header" android:id="@+id/album_song_header"

View file

@ -83,19 +83,18 @@
android:text="@string/label_play" android:text="@string/label_play"
app:layout_constraintEnd_toStartOf="@+id/artist_shuffle_button" app:layout_constraintEnd_toStartOf="@+id/artist_shuffle_button"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/artist_counts" app:layout_constraintTop_toBottomOf="@+id/artist_counts" />
tools:textColor="@color/control_color" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/artist_shuffle_button" android:id="@+id/artist_shuffle_button"
style="@style/Widget.MaterialComponents.Button.Highlighted" style="@style/Widget.MaterialComponents.Button.Highlighted"
android:onClick="@{() -> playbackModel.playArtist(artist, true)}" android:onClick="@{() -> playbackModel.playArtist(artist, true)}"
android:text="@string/label_shuffle" android:text="@string/label_shuffle"
android:backgroundTint="?attr/colorPrimary"
app:layout_constraintBottom_toBottomOf="@+id/artist_play_button" app:layout_constraintBottom_toBottomOf="@+id/artist_play_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/artist_play_button" app:layout_constraintStart_toEndOf="@+id/artist_play_button"
app:layout_constraintTop_toTopOf="@+id/artist_play_button" app:layout_constraintTop_toTopOf="@+id/artist_play_button" />
tools:backgroundTint="@color/control_color" />
<TextView <TextView
android:id="@+id/artist_album_header" android:id="@+id/artist_album_header"

View file

@ -84,19 +84,18 @@
android:text="@string/label_play" android:text="@string/label_play"
app:layout_constraintEnd_toStartOf="@+id/genre_shuffle_button" app:layout_constraintEnd_toStartOf="@+id/genre_shuffle_button"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/genre_duration" app:layout_constraintTop_toBottomOf="@+id/genre_duration" />
tools:textColor="@color/control_color" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/genre_shuffle_button" android:id="@+id/genre_shuffle_button"
style="@style/Widget.MaterialComponents.Button.Highlighted" style="@style/Widget.MaterialComponents.Button.Highlighted"
android:onClick="@{() -> playbackModel.playGenre(genre, true)}" android:onClick="@{() -> playbackModel.playGenre(genre, true)}"
android:text="@string/label_shuffle" android:text="@string/label_shuffle"
android:backgroundTint="?attr/colorPrimary"
app:layout_constraintBottom_toBottomOf="@+id/genre_play_button" app:layout_constraintBottom_toBottomOf="@+id/genre_play_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/genre_play_button" app:layout_constraintStart_toEndOf="@+id/genre_play_button"
app:layout_constraintTop_toTopOf="@+id/genre_play_button" app:layout_constraintTop_toTopOf="@+id/genre_play_button" />
tools:backgroundTint="@color/control_color" />
<TextView <TextView
android:id="@+id/genre_song_header" android:id="@+id/genre_song_header"

View file

@ -6,7 +6,6 @@
<item name="android:layout_height">wrap_content</item> <item name="android:layout_height">wrap_content</item>
<item name="android:clickable">true</item> <item name="android:clickable">true</item>
<item name="android:focusable">true</item> <item name="android:focusable">true</item>
<item name="android:theme">@style/Theme.MaterialComponents</item>
<item name="rippleColor">@color/selection_color</item> <item name="rippleColor">@color/selection_color</item>
<item name="fontFamily">@font/inter_semibold</item> <item name="fontFamily">@font/inter_semibold</item>
<item name="textAllCaps">false</item> <item name="textAllCaps">false</item>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<!-- Master parent theme based off of Theme.AppCompat.DayNight.NoActionBar --> <!-- Master parent theme based off of Theme.MaterialComponents.DayNight.NoActionBar.Bridge -->
<style name="Theme.Master" parent="Theme.AppCompat.DayNight.NoActionBar" /> <style name="Theme.Master" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge" />
<!-- Template theme that handles edge-to-edge on other styles variants --> <!-- Template theme that handles edge-to-edge on other styles variants -->
<style name="Theme.Template" parent="Theme.Master" /> <style name="Theme.Template" parent="Theme.Master" />
@ -13,15 +13,28 @@
<item name="android:scrollbars">none</item> <item name="android:scrollbars">none</item>
<item name="android:windowIsFloating">false</item> <item name="android:windowIsFloating">false</item>
<!-- Interim default values for the accents. -->
<item name="colorPrimary">@color/design_default_color_primary</item>
<item name="colorSecondary">@color/design_default_color_primary</item>
<item name="popupMenuStyle">@style/Widget.CustomPopup</item> <item name="popupMenuStyle">@style/Widget.CustomPopup</item>
<item name="colorControlNormal">@color/control_color</item> <item name="colorControlNormal">@color/control_color</item>
<item name="alertDialogTheme">@style/Theme.CustomDialog</item>
<item name="colorControlHighlight">@color/selection_color</item> <item name="colorControlHighlight">@color/selection_color</item>
<item name="colorControlActivated">?attr/colorPrimary</item> <item name="colorControlActivated">?attr/colorPrimary</item>
<item name="cornerRadius">0dp</item> <item name="cornerRadius">0dp</item>
<item name="colorSurface">@color/background</item>
<!--
These magic values seem to make the dialogs use the nicer material style. Don't know why.
-->
<item name="viewInflaterClass">
com.google.android.material.theme.MaterialComponentsViewInflater
</item>
<item name="materialAlertDialogTheme">@style/Theme.CustomDialog</item>
<item name="alertDialogTheme">@style/ThemeOverlay.MaterialComponents.Dialog.Alert</item>
</style> </style>
<!-- Toolbar theme --> <!-- Toolbar theme -->
<style name="Toolbar.Style" parent="ThemeOverlay.MaterialComponents.ActionBar"> <style name="Toolbar.Style" parent="ThemeOverlay.MaterialComponents.ActionBar">
<item name="android:layout_width">match_parent</item> <item name="android:layout_width">match_parent</item>
@ -79,28 +92,57 @@
</style> </style>
<!-- Custom Dialog EntryNames --> <!-- Custom Dialog EntryNames -->
<style name="Theme.CustomDialog" parent="ThemeOverlay.AppCompat.Dialog.Alert"> <style name="Theme.CustomDialog" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog">
<item name="android:windowTitleStyle">@style/TextAppearance.Dialog.Title</item> <item name="android:background">@color/background</item>
<item name="android:colorControlHighlight">@color/selection_color</item>
<item name="android:checkedTextViewStyle">@style/Widget.CheckedTextView.Dialog</item>
<item name="materialAlertDialogTitleTextStyle">@style/Widget.TextView.Dialog.Title</item>
<item name="colorBackgroundFloating">@color/background</item> <item name="colorBackgroundFloating">@color/background</item>
<item name="buttonBarButtonStyle">@style/Widget.Button.Dialog</item> <item name="alertDialogStyle">@style/MaterialAlertDialog.App</item>
<item name="dialogCornerRadius">0dp</item>
<item name="colorControlHighlight">@color/selection_color</item> <item name="buttonBarPositiveButtonStyle">@style/Widget.Button.Dialog</item>
<item name="buttonBarNegativeButtonStyle">@style/Widget.Button.Dialog</item>
<item name="buttonBarNeutralButtonStyle">@style/Widget.Button.Dialog.Neutral</item>
</style>
<!-- Baseline dialog style -->
<style name="MaterialAlertDialog.App" parent="MaterialAlertDialog.MaterialComponents">
<item name="shapeAppearanceOverlay">@style/ShapeAppearance.Angular</item>
</style>
<!-- Dialog shape with no rounded corners -->
<style name="ShapeAppearance.Angular" parent="ShapeAppearance.MaterialComponents.MediumComponent">
<item name="cornerFamily">cut</item>
<item name="cornerRadius">0dp</item>
</style> </style>
<!-- Custom dialog title theme --> <!-- Custom dialog title theme -->
<style name="TextAppearance.Dialog.Title" parent="@android:style/TextAppearance.Material.Title"> <style name="Widget.TextView.Dialog.Title" parent="MaterialAlertDialog.MaterialComponents.Title.Text">
<item name="android:fontFamily">@font/inter_exbold</item> <item name="android:fontFamily">@font/inter_exbold</item>
<item name="android:textSize">@dimen/text_size_toolbar_header</item>
</style>
<!-- The style for the checked text view in the custom dialog -->
<style name="Widget.CheckedTextView.Dialog" parent="Widget.MaterialComponents.CheckedTextView">
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textSize">18sp</item>
<item name="android:background">@null</item>
</style> </style>
<!-- Style for dialog buttons --> <!-- Style for dialog buttons -->
<style name="Widget.Button.Dialog" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog"> <style name="Widget.Button.Dialog" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
<item name="android:layout_height">@dimen/height_dialog_button</item> <item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item> <item name="android:layout_width">wrap_content</item>
<item name="android:paddingStart">@dimen/padding_mid_small</item>
<item name="android:paddingEnd">@dimen/padding_mid_small</item>
<item name="android:minWidth">@dimen/width_dialog_button_min</item>
<item name="android:textColor">?attr/colorPrimary</item>
<item name="android:fontFamily">@font/inter_semibold</item> <item name="android:fontFamily">@font/inter_semibold</item>
<item name="android:textAppearance">?android:attr/textAppearanceButton</item>
<item name="rippleColor">@color/selection_color</item>
<item name="cornerRadius">0dp</item>
</style>
<!-- Custom button style that eliminates the weird margin that the neutral button has -->
<style name="Widget.Button.Dialog.Neutral" parent="Widget.Button.Dialog">
<item name="android:layout_marginStart">0dp</item>
</style> </style>
<!-- Style for the general item background --> <!-- Style for the general item background -->
@ -179,7 +221,6 @@
<item name="android:layout_height">wrap_content</item> <item name="android:layout_height">wrap_content</item>
<item name="android:clickable">true</item> <item name="android:clickable">true</item>
<item name="android:focusable">true</item> <item name="android:focusable">true</item>
<item name="android:theme">@style/Theme.MaterialComponents.DayNight</item>
<item name="rippleColor">@color/selection_color</item> <item name="rippleColor">@color/selection_color</item>
<item name="fontFamily">@font/inter_semibold</item> <item name="fontFamily">@font/inter_semibold</item>
<item name="textAllCaps">false</item> <item name="textAllCaps">false</item>