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 {
|
kapt {
|
||||||
generateStubs = true
|
generateStubs = true
|
||||||
}
|
}
|
||||||
|
kotlin {
|
||||||
|
experimental {
|
||||||
|
coroutines "enable"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,6 +173,9 @@ dependencies {
|
||||||
def kotlin_coroutines_version = "1.3.3"
|
def kotlin_coroutines_version = "1.3.3"
|
||||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version"
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version"
|
||||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$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'
|
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"
|
def dagger_version = "2.23.1"
|
||||||
implementation "com.google.dagger:dagger:$dagger_version"
|
implementation "com.google.dagger:dagger:$dagger_version"
|
||||||
kapt "com.google.dagger:dagger-compiler:$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.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
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.R
|
||||||
|
import code.name.monkey.retromusic.adapter.GenreAdapter.ViewHolder
|
||||||
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder
|
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder
|
||||||
import code.name.monkey.retromusic.model.Genre
|
import code.name.monkey.retromusic.model.Genre
|
||||||
import code.name.monkey.retromusic.util.NavigationUtil
|
import code.name.monkey.retromusic.util.NavigationUtil
|
||||||
|
@ -19,7 +21,7 @@ class GenreAdapter(
|
||||||
private val activity: Activity,
|
private val activity: Activity,
|
||||||
var dataSet: List<Genre>,
|
var dataSet: List<Genre>,
|
||||||
private val mItemLayoutRes: Int
|
private val mItemLayoutRes: Int
|
||||||
) : RecyclerView.Adapter<GenreAdapter.ViewHolder>() {
|
) : ListAdapter<Genre, ViewHolder>(GenreDiffCallback()) {
|
||||||
|
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
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.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import code.name.monkey.retromusic.App
|
import code.name.monkey.retromusic.App
|
||||||
import code.name.monkey.retromusic.Constants
|
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.abs_playlists.*
|
||||||
import kotlinx.android.synthetic.main.fragment_banner_home.*
|
import kotlinx.android.synthetic.main.fragment_banner_home.*
|
||||||
import kotlinx.android.synthetic.main.home_content.*
|
import kotlinx.android.synthetic.main.home_content.*
|
||||||
|
import kotlinx.coroutines.async
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -119,7 +122,10 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
|
||||||
}
|
}
|
||||||
|
|
||||||
actionShuffle.setOnClickListener {
|
actionShuffle.setOnClickListener {
|
||||||
MusicPlayerRemote.openAndShuffleQueue(SongLoader.getAllSongs(requireActivity()), true)
|
lifecycleScope.launch {
|
||||||
|
val songs = async { SongLoader.getAllSongs(requireContext()) }
|
||||||
|
MusicPlayerRemote.openAndShuffleQueue(songs.await(), true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
history.setOnClickListener {
|
history.setOnClickListener {
|
||||||
|
|
|
@ -16,7 +16,6 @@ package code.name.monkey.retromusic.fragments.settings
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.TwoStatePreference
|
import androidx.preference.TwoStatePreference
|
||||||
import code.name.monkey.appthemehelper.ACCENT_COLORS
|
import code.name.monkey.appthemehelper.ACCENT_COLORS
|
||||||
|
@ -54,9 +53,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
|
||||||
requireActivity().setTheme(PreferenceUtil.getThemeResFromPrefValue(theme))
|
requireActivity().setTheme(PreferenceUtil.getThemeResFromPrefValue(theme))
|
||||||
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
|
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
|
||||||
}
|
}
|
||||||
Handler().postDelayed({
|
requireActivity().recreate()
|
||||||
requireActivity().recreate()
|
|
||||||
}, 400)
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,9 +75,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
|
||||||
ThemeStore.editTheme(requireContext()).accentColor(color).commit()
|
ThemeStore.editTheme(requireContext()).accentColor(color).commit()
|
||||||
if (VersionUtils.hasNougatMR())
|
if (VersionUtils.hasNougatMR())
|
||||||
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
|
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
|
||||||
Handler().postDelayed({
|
requireActivity().recreate()
|
||||||
requireActivity().recreate()
|
|
||||||
}, 400)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
|
@ -96,9 +91,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
|
||||||
requireActivity().setTheme(PreferenceUtil.getThemeResFromPrefValue("black"))
|
requireActivity().setTheme(PreferenceUtil.getThemeResFromPrefValue("black"))
|
||||||
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
|
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
|
||||||
}
|
}
|
||||||
Handler().postDelayed({
|
requireActivity().recreate()
|
||||||
requireActivity().recreate()
|
|
||||||
}, 400)
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,9 +102,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
|
||||||
ThemeStore.prefs(requireContext()).edit().putBoolean("desaturated_color", desaturated)
|
ThemeStore.prefs(requireContext()).edit().putBoolean("desaturated_color", desaturated)
|
||||||
.apply()
|
.apply()
|
||||||
PreferenceUtil.getInstance(requireContext()).setDesaturatedColor(desaturated)
|
PreferenceUtil.getInstance(requireContext()).setDesaturatedColor(desaturated)
|
||||||
Handler().postDelayed({
|
requireActivity().recreate()
|
||||||
requireActivity().recreate()
|
|
||||||
}, 400)
|
|
||||||
true
|
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:retroCornerSize="36dp"
|
||||||
app:srcCompat="@drawable/ic_person_flat"
|
app:srcCompat="@drawable/ic_person_flat"
|
||||||
app:strokeColor="?attr/colorSurface"
|
app:strokeColor="?attr/colorSurface"
|
||||||
app:strokeWidth="2dp" />
|
app:strokeWidth="2dp"
|
||||||
|
tools:src="@tools:sample/avatars" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue