Fix general issues

Fix issues where colorPrimary was the main ripple color [ew], and some QueueAdapter errors stemming from a useless function.
This commit is contained in:
OxygenCobalt 2020-11-30 19:44:29 -07:00
parent 12c14eeda6
commit 91b8d226c8
10 changed files with 27 additions and 56 deletions

View file

@ -10,7 +10,6 @@ import android.view.WindowInsets
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import dev.chrisbanes.insetter.applySystemWindowInsetsToMargin
import org.oxycblt.auxio.databinding.ActivityMainBinding import org.oxycblt.auxio.databinding.ActivityMainBinding
import org.oxycblt.auxio.playback.PlaybackService import org.oxycblt.auxio.playback.PlaybackService
import org.oxycblt.auxio.settings.SettingsManager import org.oxycblt.auxio.settings.SettingsManager
@ -72,7 +71,7 @@ class MainActivity : AppCompatActivity() {
// I barely know how insets work so here's another third party library // I barely know how insets work so here's another third party library
// that I think does things // that I think does things
binding.root.applySystemWindowInsetsToMargin(top = false, bottom = false) // binding.root.applySystemWindowInsetsToMargin(top = false, bottom = false)
} }
} }
} }

View file

@ -82,9 +82,7 @@ class AlbumDetailFragment : DetailFragment() {
) )
R.id.action_queue_add -> { R.id.action_queue_add -> {
playbackModel.addToUserQueue( playbackModel.addToUserQueue(detailModel.currentAlbum.value!!)
detailModel.currentAlbum.value!!.songs
)
context.getString(R.string.label_queue_added).createToast(requireContext()) context.getString(R.string.label_queue_added).createToast(requireContext())
} }
} }

View file

@ -18,6 +18,7 @@ import org.oxycblt.auxio.playback.queue.QueueAdapter
import org.oxycblt.auxio.playback.state.LoopMode import org.oxycblt.auxio.playback.state.LoopMode
import org.oxycblt.auxio.playback.state.PlaybackMode import org.oxycblt.auxio.playback.state.PlaybackMode
import org.oxycblt.auxio.playback.state.PlaybackStateManager import org.oxycblt.auxio.playback.state.PlaybackStateManager
import org.oxycblt.auxio.recycler.SortMode
/** /**
* The ViewModel that provides a UI frontend for [PlaybackStateManager]. * The ViewModel that provides a UI frontend for [PlaybackStateManager].
@ -235,7 +236,9 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback {
playbackManager.addToUserQueue(song) playbackManager.addToUserQueue(song)
} }
fun addToUserQueue(songs: List<Song>) { fun addToUserQueue(album: Album) {
val songs = SortMode.NUMERIC_DOWN.getSortedSongList(album.songs)
playbackManager.addToUserQueue(songs) playbackManager.addToUserQueue(songs)
} }

View file

@ -41,7 +41,7 @@ class QueueAdapter(
return if (item is Header) return if (item is Header)
if (item.isAction) if (item.isAction)
USER_QUEUE_HEADER_ITEM_tYPE USER_QUEUE_HEADER_ITEM_TYPE
else else
HeaderViewHolder.ITEM_TYPE HeaderViewHolder.ITEM_TYPE
else else
@ -54,7 +54,7 @@ class QueueAdapter(
QUEUE_ITEM_TYPE -> QueueSongViewHolder( QUEUE_ITEM_TYPE -> QueueSongViewHolder(
ItemQueueSongBinding.inflate(LayoutInflater.from(parent.context)) ItemQueueSongBinding.inflate(LayoutInflater.from(parent.context))
) )
USER_QUEUE_HEADER_ITEM_tYPE -> UserQueueHeaderViewHolder( USER_QUEUE_HEADER_ITEM_TYPE -> UserQueueHeaderViewHolder(
parent.context, ItemActionHeaderBinding.inflate(LayoutInflater.from(parent.context)) parent.context, ItemActionHeaderBinding.inflate(LayoutInflater.from(parent.context))
) )
else -> error("Someone messed with the ViewHolder item types.") else -> error("Someone messed with the ViewHolder item types.")
@ -117,15 +117,6 @@ class QueueAdapter(
} }
} }
private fun clearUserQueue() {
val nextQueueHeaderIndex = data.indexOfLast { it is Header && !it.isAction }
Log.d(this::class.simpleName, nextQueueHeaderIndex.toString())
val slice = data.slice(0..nextQueueHeaderIndex.dec())
data.removeAll(slice)
notifyItemRangeRemoved(0, slice.size)
}
// Generic ViewHolder for a queue item // Generic ViewHolder for a queue item
inner class QueueSongViewHolder( inner class QueueSongViewHolder(
private val binding: ItemQueueSongBinding, private val binding: ItemQueueSongBinding,
@ -168,7 +159,6 @@ class QueueAdapter(
setImageResource(R.drawable.ic_clear) setImageResource(R.drawable.ic_clear)
setOnClickListener { setOnClickListener {
clearUserQueue()
onHeaderAction() onHeaderAction()
} }
} }
@ -177,6 +167,6 @@ class QueueAdapter(
companion object { companion object {
const val QUEUE_ITEM_TYPE = 0xA015 const val QUEUE_ITEM_TYPE = 0xA015
const val USER_QUEUE_HEADER_ITEM_tYPE = 0xA016 const val USER_QUEUE_HEADER_ITEM_TYPE = 0xA016
} }
} }

View file

@ -80,7 +80,11 @@ class QueueFragment : Fragment() {
if (playbackModel.userQueue.value!!.isNotEmpty()) { if (playbackModel.userQueue.value!!.isNotEmpty()) {
queue.add( queue.add(
Header(name = getString(R.string.label_next_user_queue), isAction = true) Header(
id = 0,
name = getString(R.string.label_next_user_queue),
isAction = true
)
) )
queue.addAll(playbackModel.userQueue.value!!) queue.addAll(playbackModel.userQueue.value!!)
} }
@ -88,6 +92,7 @@ class QueueFragment : Fragment() {
if (playbackModel.nextItemsInQueue.value!!.isNotEmpty()) { if (playbackModel.nextItemsInQueue.value!!.isNotEmpty()) {
queue.add( queue.add(
Header( Header(
id = 1,
name = getString( name = getString(
R.string.format_next_from, R.string.format_next_from,
if (playbackModel.mode.value == PlaybackMode.ALL_SONGS) if (playbackModel.mode.value == PlaybackMode.ALL_SONGS)

View file

@ -84,25 +84,25 @@ class NoLeakThumbView @JvmOverloads constructor(
fastScrollerView.onTouchEvent(event) fastScrollerView.onTouchEvent(event)
fastScrollerView.performClick() fastScrollerView.performClick()
isVisible = true
if (event.actionMasked in intArrayOf( if (event.actionMasked in intArrayOf(
MotionEvent.ACTION_UP, MotionEvent.ACTION_UP,
MotionEvent.ACTION_CANCEL MotionEvent.ACTION_CANCEL
) )
) { ) {
isActivated = false isActivated = false
isVisible = true
return@setOnTouchListener true return@setOnTouchListener true
} }
isActivated = isPointerOnItem(fastScrollerView, event.y.toInt()) isActivated = isPointerOnItem(fastScrollerView, event.y.toInt())
isVisible = true
true true
} }
} }
/** /**
* Hack so that I can detect when the pointer is off the FastScrollerView's items * Hack so that I can detect when the pointer is on the FastScrollerView's items
* without using onItemIndicatorTouched (Which is internal) * without using onItemIndicatorTouched (Which is internal)
* @author OxygenCobalt * @author OxygenCobalt
*/ */
@ -113,7 +113,7 @@ class NoLeakThumbView @JvmOverloads constructor(
fastScrollerView.apply { fastScrollerView.apply {
children.forEach { view -> children.forEach { view ->
if (view.containsY(touchY) && (view is ImageView || view is TextView)) { if (view.containsY(touchY)) {
consumed = true consumed = true
return@forEach return@forEach
} }
@ -125,6 +125,7 @@ class NoLeakThumbView @JvmOverloads constructor(
private fun applyStyle() { private fun applyStyle() {
thumbView.backgroundTintList = thumbColor thumbView.backgroundTintList = thumbColor
if (Build.VERSION.SDK_INT == 21) { if (Build.VERSION.SDK_INT == 21) {
// Workaround for 21 background tint bug // Workaround for 21 background tint bug
(thumbView.background as GradientDrawable).apply { (thumbView.background as GradientDrawable).apply {

View file

@ -1,17 +1,12 @@
package org.oxycblt.auxio.settings package org.oxycblt.auxio.settings
import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceGroupAdapter
import androidx.preference.PreferenceScreen
import androidx.preference.PreferenceViewHolder
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
@ -97,30 +92,6 @@ class SettingsListFragment : PreferenceFragmentCompat() {
setPreferencesFromResource(R.xml.prefs_main, rootKey) setPreferencesFromResource(R.xml.prefs_main, rootKey)
} }
// Forcefully override the adapter creation process so I can get rid of the ugly
// colorPrimary ripples.
@SuppressLint("RestrictedApi")
override fun onCreateAdapter(preferenceScreen: PreferenceScreen?): RecyclerView.Adapter<*> {
return object : PreferenceGroupAdapter(preferenceScreen) {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): PreferenceViewHolder {
val holder = super.onCreateViewHolder(parent, viewType)
if (holder.itemView.id != android.R.id.title) {
holder.itemView.setBackgroundResource(R.drawable.ui_ripple)
}
return holder
}
}
}
private fun offLoad(something: String) {
Log.d(this::class.simpleName, something)
}
private fun showAccentDialog() { private fun showAccentDialog() {
MaterialDialog(requireActivity()).show { MaterialDialog(requireActivity()).show {
title(R.string.setting_accent) title(R.string.setting_accent)
@ -149,6 +120,7 @@ class SettingsListFragment : PreferenceFragmentCompat() {
) )
} }
// TODO: Implement dialog edge-to-edge
layoutManager = LinearLayoutManager( layoutManager = LinearLayoutManager(
requireContext() requireContext()
).also { it.orientation = LinearLayoutManager.HORIZONTAL } ).also { it.orientation = LinearLayoutManager.HORIZONTAL }

View file

@ -177,7 +177,7 @@ fun PopupMenu.setupAlbumActions(
setOnMenuItemClickListener { setOnMenuItemClickListener {
when (it.itemId) { when (it.itemId) {
R.id.action_queue_add -> { R.id.action_queue_add -> {
playbackModel.addToUserQueue(album.songs) playbackModel.addToUserQueue(album)
context.getString(R.string.label_queue_added).createToast(context) context.getString(R.string.label_queue_added).createToast(context)
true true

View file

@ -6,6 +6,7 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:theme="@style/ThemeOverlay.Accented"
android:orientation="vertical"> android:orientation="vertical">
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar

View file

@ -14,15 +14,17 @@
<item name="colorControlNormal">@color/control_color</item> <item name="colorControlNormal">@color/control_color</item>
<item name="alertDialogTheme">@style/Theme.CustomDialog</item> <item name="alertDialogTheme">@style/Theme.CustomDialog</item>
<item name="indicatorFastScrollerStyle">@style/FastScrollTheme</item> <item name="indicatorFastScrollerStyle">@style/FastScrollTheme</item>
<item name="colorControlHighlight">@color/selection_color</item>
<item name="colorControlActivated">?attr/colorPrimary</item> <item name="colorControlActivated">?attr/colorPrimary</item>
<item name="colorControlHighlight">?attr/colorPrimary</item>
<item name="md_background_color">@color/background</item> <item name="md_background_color">@color/background</item>
<item name="md_corner_radius">0dp</item> <item name="md_corner_radius">0dp</item>
<item name="md_color_button_text">@color/control_color</item> <item name="md_color_button_text">@color/control_color</item>
<item name="md_font_title">@font/inter_black</item> <item name="md_font_title">@font/inter_black</item>
</style>
<item name="android:activatedBackgroundIndicator">@drawable/ui_ripple</item> <style name="ThemeOverlay.Accented" parent="ThemeOverlay.AppCompat.DayNight">
<item name="android:windowBackground">@color/background</item>
</style> </style>
<!-- Hack to fix the weird icon/underline with LibraryFragment's SearchView --> <!-- Hack to fix the weird icon/underline with LibraryFragment's SearchView -->