Fix crashing when changing theme
This commit is contained in:
parent
d87c95b7b2
commit
6065c994ad
6 changed files with 59 additions and 17 deletions
|
@ -99,6 +99,11 @@ android {
|
|||
kapt {
|
||||
generateStubs = true
|
||||
}
|
||||
kotlin {
|
||||
experimental {
|
||||
coroutines "enable"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -168,6 +173,9 @@ dependencies {
|
|||
def kotlin_coroutines_version = "1.3.3"
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version"
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version"
|
||||
def arch_version = '2.2.0'
|
||||
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$arch_version"
|
||||
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$arch_version"
|
||||
|
||||
implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:3.4.0.201406110918-r'
|
||||
|
||||
|
@ -184,4 +192,6 @@ dependencies {
|
|||
def dagger_version = "2.23.1"
|
||||
implementation "com.google.dagger:dagger:$dagger_version"
|
||||
kapt "com.google.dagger:dagger-compiler:$dagger_version"
|
||||
|
||||
implementation 'com.github.ologe:scroll-helper:1.1.5'
|
||||
}
|
|
@ -4,8 +4,10 @@ import android.app.Activity
|
|||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.DiffUtil
|
||||
import androidx.recyclerview.widget.ListAdapter
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.adapter.GenreAdapter.ViewHolder
|
||||
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder
|
||||
import code.name.monkey.retromusic.model.Genre
|
||||
import code.name.monkey.retromusic.util.NavigationUtil
|
||||
|
@ -19,7 +21,7 @@ class GenreAdapter(
|
|||
private val activity: Activity,
|
||||
var dataSet: List<Genre>,
|
||||
private val mItemLayoutRes: Int
|
||||
) : RecyclerView.Adapter<GenreAdapter.ViewHolder>() {
|
||||
) : ListAdapter<Genre, ViewHolder>(GenreDiffCallback()) {
|
||||
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||
|
@ -54,3 +56,19 @@ class GenreAdapter(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback for calculating the diff between two non-null items in a list.
|
||||
*
|
||||
* Used by ListAdapter to calculate the minimum number of changes between and old list and a new
|
||||
* list that's been passed to `submitList`.
|
||||
*/
|
||||
class GenreDiffCallback : DiffUtil.ItemCallback<Genre>() {
|
||||
override fun areItemsTheSame(oldItem: Genre, newItem: Genre): Boolean {
|
||||
return oldItem.id == newItem.id
|
||||
}
|
||||
|
||||
override fun areContentsTheSame(oldItem: Genre, newItem: Genre): Boolean {
|
||||
return oldItem == newItem
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@ import android.util.DisplayMetrics
|
|||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import code.name.monkey.retromusic.App
|
||||
import code.name.monkey.retromusic.Constants
|
||||
|
@ -44,6 +45,8 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
|
|||
import kotlinx.android.synthetic.main.abs_playlists.*
|
||||
import kotlinx.android.synthetic.main.fragment_banner_home.*
|
||||
import kotlinx.android.synthetic.main.home_content.*
|
||||
import kotlinx.coroutines.async
|
||||
import kotlinx.coroutines.launch
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
@ -119,7 +122,10 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
|
|||
}
|
||||
|
||||
actionShuffle.setOnClickListener {
|
||||
MusicPlayerRemote.openAndShuffleQueue(SongLoader.getAllSongs(requireActivity()), true)
|
||||
lifecycleScope.launch {
|
||||
val songs = async { SongLoader.getAllSongs(requireContext()) }
|
||||
MusicPlayerRemote.openAndShuffleQueue(songs.await(), true)
|
||||
}
|
||||
}
|
||||
|
||||
history.setOnClickListener {
|
||||
|
|
|
@ -16,7 +16,6 @@ package code.name.monkey.retromusic.fragments.settings
|
|||
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.TwoStatePreference
|
||||
import code.name.monkey.appthemehelper.ACCENT_COLORS
|
||||
|
@ -54,9 +53,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
|
|||
requireActivity().setTheme(PreferenceUtil.getThemeResFromPrefValue(theme))
|
||||
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
|
||||
}
|
||||
Handler().postDelayed({
|
||||
requireActivity().recreate()
|
||||
}, 400)
|
||||
requireActivity().recreate()
|
||||
true
|
||||
}
|
||||
}
|
||||
|
@ -78,9 +75,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
|
|||
ThemeStore.editTheme(requireContext()).accentColor(color).commit()
|
||||
if (VersionUtils.hasNougatMR())
|
||||
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
|
||||
Handler().postDelayed({
|
||||
requireActivity().recreate()
|
||||
}, 400)
|
||||
requireActivity().recreate()
|
||||
}
|
||||
}
|
||||
return@setOnPreferenceClickListener true
|
||||
|
@ -96,9 +91,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
|
|||
requireActivity().setTheme(PreferenceUtil.getThemeResFromPrefValue("black"))
|
||||
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
|
||||
}
|
||||
Handler().postDelayed({
|
||||
requireActivity().recreate()
|
||||
}, 400)
|
||||
requireActivity().recreate()
|
||||
true
|
||||
}
|
||||
|
||||
|
@ -109,9 +102,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
|
|||
ThemeStore.prefs(requireContext()).edit().putBoolean("desaturated_color", desaturated)
|
||||
.apply()
|
||||
PreferenceUtil.getInstance(requireContext()).setDesaturatedColor(desaturated)
|
||||
Handler().postDelayed({
|
||||
requireActivity().recreate()
|
||||
}, 400)
|
||||
requireActivity().recreate()
|
||||
true
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
package code.name.monkey.retromusic.util
|
||||
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
||||
const val THREAD_COUNT = 3
|
||||
|
||||
/**
|
||||
* Global executor pools for the whole application.
|
||||
*
|
||||
* Grouping tasks like this avoids the effects of task starvation (e.g. disk reads don't wait behind
|
||||
* webservice requests).
|
||||
*/
|
||||
open class AppExecutors constructor(
|
||||
val ioContext: CoroutineDispatcher = Dispatchers.IO
|
||||
)
|
|
@ -97,7 +97,8 @@
|
|||
app:retroCornerSize="36dp"
|
||||
app:srcCompat="@drawable/ic_person_flat"
|
||||
app:strokeColor="?attr/colorSurface"
|
||||
app:strokeWidth="2dp" />
|
||||
app:strokeWidth="2dp"
|
||||
tools:src="@tools:sample/avatars" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="wrap_content"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue