diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html
index afa571674..510e5796b 100644
--- a/app/src/main/assets/retro-changelog.html
+++ b/app/src/main/assets/retro-changelog.html
@@ -69,6 +69,7 @@
v5.6.4
What's New
+ - Added accent color extraction on Android 8.1+ devices
- Added Collapsing appbar to library tabs with an option to switch back to simple appbar
- Added Search tab
diff --git a/app/src/main/java/code/name/monkey/retromusic/App.kt b/app/src/main/java/code/name/monkey/retromusic/App.kt
index 1b46996c0..65520ca2f 100644
--- a/app/src/main/java/code/name/monkey/retromusic/App.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/App.kt
@@ -20,6 +20,7 @@ import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.Constants.PRO_VERSION_PRODUCT_ID
import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager
+import code.name.monkey.retromusic.helper.WallpaperAccentManager
import com.anjlab.android.iab.v3.BillingProcessor
import com.anjlab.android.iab.v3.PurchaseInfo
import org.koin.android.ext.koin.androidContext
@@ -28,6 +29,7 @@ import org.koin.core.context.startKoin
class App : Application() {
lateinit var billingProcessor: BillingProcessor
+ private val wallpaperAccentManager = WallpaperAccentManager(this)
override fun onCreate() {
super.onCreate()
@@ -44,6 +46,7 @@ class App : Application() {
.coloredNavigationBar(true)
.commit()
}
+ wallpaperAccentManager.init()
if (VersionUtils.hasNougatMR())
DynamicShortcutManager(this).initDynamicShortcuts()
@@ -71,6 +74,7 @@ class App : Application() {
override fun onTerminate() {
super.onTerminate()
billingProcessor.release()
+ wallpaperAccentManager.release()
}
companion object {
diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt
index 0cc842c2b..2b49d2071 100644
--- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt
@@ -159,3 +159,4 @@ const val PLAYBACK_SPEED = "playback_speed"
const val PLAYBACK_PITCH = "playback_pitch"
const val CUSTOM_FONT = "custom_font"
const val APPBAR_MODE = "appbar_mode"
+const val WALLPAPER_ACCENT = "wallpaper_accent"
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt
index 1648cd154..e8880114f 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt
@@ -147,7 +147,7 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener {
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
- if (key == GENERAL_THEME || key == MATERIAL_YOU || key == BLACK_THEME || key == ADAPTIVE_COLOR_APP || key == USER_NAME || key == TOGGLE_FULL_SCREEN || key == TOGGLE_VOLUME || key == ROUND_CORNERS || key == CAROUSEL_EFFECT || key == NOW_PLAYING_SCREEN_ID || key == TOGGLE_GENRE || key == BANNER_IMAGE_PATH || key == PROFILE_IMAGE_PATH || key == CIRCULAR_ALBUM_ART || key == KEEP_SCREEN_ON || key == TOGGLE_SEPARATE_LINE || key == TOGGLE_HOME_BANNER || key == TOGGLE_ADD_CONTROLS || key == ALBUM_COVER_STYLE || key == HOME_ARTIST_GRID_STYLE || key == ALBUM_COVER_TRANSFORM || key == DESATURATED_COLOR || key == EXTRA_SONG_INFO || key == TAB_TEXT_MODE || key == LANGUAGE_NAME || key == LIBRARY_CATEGORIES || key == CUSTOM_FONT|| key == APPBAR_MODE) {
+ if (key == GENERAL_THEME || key == MATERIAL_YOU || key == WALLPAPER_ACCENT || key == BLACK_THEME || key == ADAPTIVE_COLOR_APP || key == USER_NAME || key == TOGGLE_FULL_SCREEN || key == TOGGLE_VOLUME || key == ROUND_CORNERS || key == CAROUSEL_EFFECT || key == NOW_PLAYING_SCREEN_ID || key == TOGGLE_GENRE || key == BANNER_IMAGE_PATH || key == PROFILE_IMAGE_PATH || key == CIRCULAR_ALBUM_ART || key == KEEP_SCREEN_ON || key == TOGGLE_SEPARATE_LINE || key == TOGGLE_HOME_BANNER || key == TOGGLE_ADD_CONTROLS || key == ALBUM_COVER_STYLE || key == HOME_ARTIST_GRID_STYLE || key == ALBUM_COVER_TRANSFORM || key == DESATURATED_COLOR || key == EXTRA_SONG_INFO || key == TAB_TEXT_MODE || key == LANGUAGE_NAME || key == LIBRARY_CATEGORIES || key == CUSTOM_FONT|| key == APPBAR_MODE) {
postRecreate()
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt
index 05205b9c5..0e47a341a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt
@@ -14,6 +14,7 @@
*/
package code.name.monkey.retromusic.fragments.settings
+import android.annotation.SuppressLint
import android.os.Build
import android.os.Bundle
import androidx.preference.Preference
@@ -37,6 +38,7 @@ import com.google.android.material.color.DynamicColors
*/
class ThemeSettingsFragment : AbsSettingsFragment() {
+ @SuppressLint("CheckResult")
override fun invalidateSettings() {
val generalTheme: Preference? = findPreference(GENERAL_THEME)
generalTheme?.let {
@@ -121,6 +123,11 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
restartActivity()
true
}
+ val wallpaperAccent: ATESwitchPreference? = findPreference(WALLPAPER_ACCENT)
+ wallpaperAccent?.setOnPreferenceChangeListener { _, _ ->
+ restartActivity()
+ true
+ }
val customFont: ATESwitchPreference? = findPreference(CUSTOM_FONT)
customFont?.setOnPreferenceChangeListener { _, _ ->
restartActivity()
diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/WallpaperAccentManager.kt b/app/src/main/java/code/name/monkey/retromusic/helper/WallpaperAccentManager.kt
new file mode 100644
index 000000000..f9618474b
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/helper/WallpaperAccentManager.kt
@@ -0,0 +1,40 @@
+package code.name.monkey.retromusic.helper
+
+import android.app.WallpaperManager
+import android.content.Context
+import android.os.Build
+import android.os.Handler
+import android.os.Looper
+import androidx.annotation.RequiresApi
+import code.name.monkey.appthemehelper.ThemeStore
+import code.name.monkey.appthemehelper.util.VersionUtils
+import code.name.monkey.retromusic.util.PreferenceUtil
+
+class WallpaperAccentManager(val context: Context) {
+
+ @RequiresApi(Build.VERSION_CODES.O_MR1)
+ private val onColorsChangedListener =
+ WallpaperManager.OnColorsChangedListener { colors, which ->
+ if (which == WallpaperManager.FLAG_SYSTEM && colors != null) {
+ ThemeStore.editTheme(context).wallpaperColor(colors.primaryColor.toArgb()).commit()
+ }
+ }
+
+ fun init() {
+ if (VersionUtils.hasOreoMR1() && PreferenceUtil.wallpaperAccent) {
+ WallpaperManager.getInstance(context).apply {
+ addOnColorsChangedListener(onColorsChangedListener, Handler(Looper.getMainLooper()))
+ ThemeStore.editTheme(context).wallpaperColor(
+ getWallpaperColors(WallpaperManager.FLAG_SYSTEM)?.primaryColor?.toArgb() ?: 0
+ ).commit()
+ }
+ }
+ }
+
+ fun release() {
+ if (VersionUtils.hasOreoMR1()) {
+ WallpaperManager.getInstance(context)
+ .removeOnColorsChangedListener(onColorsChangedListener)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
index d21701cc6..184b7460a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
@@ -696,6 +696,9 @@ object PreferenceUtil {
} else {
TopAppBarLayout.AppBarMode.SIMPLE
}
+
+ val wallpaperAccent
+ get() = sharedPreferences.getBoolean(WALLPAPER_ACCENT, VersionUtils.hasOreoMR1() && !VersionUtils.hasS())
}
enum class LyricsType {
REPLACE_LYRICS, OVER_LYRICS
diff --git a/app/src/main/res/values-v27/donottranslate.xml b/app/src/main/res/values-v27/donottranslate.xml
new file mode 100644
index 000000000..a762b2d86
--- /dev/null
+++ b/app/src/main/res/values-v27/donottranslate.xml
@@ -0,0 +1,5 @@
+
+
+ true
+ true
+
\ No newline at end of file
diff --git a/app/src/main/res/values-v31/donottranslate.xml b/app/src/main/res/values-v31/donottranslate.xml
index f39fb68c1..4b3685c6e 100644
--- a/app/src/main/res/values-v31/donottranslate.xml
+++ b/app/src/main/res/values-v31/donottranslate.xml
@@ -5,4 +5,6 @@
false
0
+ false
+ false
\ No newline at end of file
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index 893f869f9..79ca523fd 100755
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -30,4 +30,7 @@
true
2
true
+
+ false
+ false
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6ec17cf94..530ab0441 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -534,4 +534,6 @@
Your account data is only used for authentication.
New Music Mix
App bar mode
+ Wallpaper accent color
+ Extract accent color from wallpaper
diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml
index 86b3e9c32..a075b334a 100755
--- a/app/src/main/res/xml/pref_general.xml
+++ b/app/src/main/res/xml/pref_general.xml
@@ -43,6 +43,14 @@
android:layout="@layout/preference_category_title"
android:title="@string/colors">
+
+
= Build.VERSION_CODES.O
}
+ /**
+ * @return true if device is running API >= 27
+ */
+ fun hasOreoMR1(): Boolean {
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1
+ }
+
/**
* @return true if device is running API >= 28
*/