diff --git a/app/src/main/java/com/dkanada/gramophone/activities/SettingsActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/SettingsActivity.java index 75837db8..7287fced 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/SettingsActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/SettingsActivity.java @@ -181,7 +181,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia case PreferenceUtil.ACCENT_COLOR: case PreferenceUtil.GENERAL_THEME: // apply theme before reloading shortcuts to apply the new icon colors - requireActivity().setTheme(PreferenceUtil.getThemeResource(key)); + requireActivity().setTheme(PreferenceUtil.getInstance(getContext()).getTheme().style); new DynamicShortcutManager(requireContext()).updateDynamicShortcuts(); ThemeStore.markChanged(requireContext()); diff --git a/app/src/main/java/com/dkanada/gramophone/activities/base/AbsThemeActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/base/AbsThemeActivity.java index 5c7506f0..cadfa91d 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/base/AbsThemeActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/base/AbsThemeActivity.java @@ -18,8 +18,9 @@ import com.dkanada.gramophone.util.Util; public abstract class AbsThemeActivity extends ATHToolbarActivity { @Override protected void onCreate(Bundle savedInstanceState) { - setTheme(PreferenceUtil.getInstance(this).getTheme()); super.onCreate(savedInstanceState); + + setTheme(PreferenceUtil.getInstance(this).getTheme().style); MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this); if (!ThemeStore.coloredNavigationBar(this)) { diff --git a/app/src/main/java/com/dkanada/gramophone/interfaces/base/PreferenceMigration.java b/app/src/main/java/com/dkanada/gramophone/interfaces/base/PreferenceMigration.java new file mode 100644 index 00000000..88658673 --- /dev/null +++ b/app/src/main/java/com/dkanada/gramophone/interfaces/base/PreferenceMigration.java @@ -0,0 +1,15 @@ +package com.dkanada.gramophone.interfaces.base; + +import android.content.SharedPreferences; + +public abstract class PreferenceMigration { + public final int startVersion; + public final int endVersion; + + public PreferenceMigration(int startVersion, int endVersion) { + this.startVersion = startVersion; + this.endVersion = endVersion; + } + + public abstract void migrate(SharedPreferences preferences); +} diff --git a/app/src/main/java/com/dkanada/gramophone/model/CategoryInfo.java b/app/src/main/java/com/dkanada/gramophone/model/CategoryInfo.java index 0b112a6e..6d2c7321 100644 --- a/app/src/main/java/com/dkanada/gramophone/model/CategoryInfo.java +++ b/app/src/main/java/com/dkanada/gramophone/model/CategoryInfo.java @@ -3,6 +3,8 @@ package com.dkanada.gramophone.model; import android.os.Parcel; import android.os.Parcelable; +import androidx.annotation.StringRes; + import com.dkanada.gramophone.R; public class CategoryInfo implements Parcelable { @@ -47,6 +49,7 @@ public class CategoryInfo implements Parcelable { PLAYLISTS(R.string.playlists), FAVORITES(R.string.favorites); + @StringRes public final int stringRes; Category(int stringRes) { diff --git a/app/src/main/java/com/dkanada/gramophone/model/Theme.java b/app/src/main/java/com/dkanada/gramophone/model/Theme.java new file mode 100644 index 00000000..2318d6aa --- /dev/null +++ b/app/src/main/java/com/dkanada/gramophone/model/Theme.java @@ -0,0 +1,18 @@ +package com.dkanada.gramophone.model; + +import androidx.annotation.StyleRes; + +import com.dkanada.gramophone.R; + +public enum Theme { + LIGHT(R.style.Theme_Phonograph_Light), + DARK(R.style.Theme_Phonograph), + BLACK(R.style.Theme_Phonograph_Black); + + @StyleRes + public final int style; + + Theme(int style) { + this.style = style; + } +} diff --git a/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java index d5cbf547..e47aad86 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java @@ -1,29 +1,34 @@ package com.dkanada.gramophone.util; +import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.os.Build; import android.preference.PreferenceManager; -import androidx.annotation.StyleRes; - import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; +import com.dkanada.gramophone.model.Theme; import com.dkanada.gramophone.R; import com.dkanada.gramophone.helper.sort.SortMethod; import com.dkanada.gramophone.helper.sort.SortOrder; import com.dkanada.gramophone.model.CategoryInfo; import com.dkanada.gramophone.model.DirectPlayCodec; +import com.dkanada.gramophone.interfaces.base.PreferenceMigration; import com.dkanada.gramophone.fragments.player.NowPlayingScreen; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; +@SuppressLint("ApplySharedPref") public final class PreferenceUtil { + public static final String VERSION = "version"; + public static final String SERVER = "server"; public static final String USER = "user"; @@ -86,6 +91,22 @@ public final class PreferenceUtil { public static final String IMAGE_CACHE_SIZE = "image_cache_size"; public static final String MEDIA_CACHE_SIZE = "media_cache_size"; + @SuppressWarnings("ConstantConditions") + private static final PreferenceMigration Migration1 = new PreferenceMigration(0, 1) { + @Override + public void migrate(SharedPreferences preferences) { + String theme = preferences.getString(GENERAL_THEME, "DARK"); + String imageSize = preferences.getString(IMAGE_CACHE_SIZE, "400"); + String mediaSize = preferences.getString(MEDIA_CACHE_SIZE, "400"); + + preferences.edit().putString(GENERAL_THEME, Theme.valueOf(theme.toUpperCase()).toString()).commit(); + preferences.edit().putString(IMAGE_CACHE_SIZE, imageSize.substring(0, imageSize.length() - 6)).commit(); + preferences.edit().putString(MEDIA_CACHE_SIZE, mediaSize.substring(0, imageSize.length() - 6)).commit(); + } + }; + + private static final List migrations = Collections.singletonList(Migration1); + private static PreferenceUtil instance; private final SharedPreferences mPreferences; @@ -94,6 +115,13 @@ public final class PreferenceUtil { private PreferenceUtil(final Context context) { mPreferences = PreferenceManager.getDefaultSharedPreferences(context); mContext = context; + + for (PreferenceMigration migration : migrations) { + if (mPreferences.getInt(VERSION, 0) == migration.startVersion) { + migration.migrate(mPreferences); + mPreferences.edit().putInt(VERSION, migration.endVersion).commit(); + } + } } public static PreferenceUtil getInstance(final Context context) { @@ -112,22 +140,8 @@ public final class PreferenceUtil { mPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } - @StyleRes - public int getTheme() { - return getThemeResource(mPreferences.getString(GENERAL_THEME, "dark")); - } - - @StyleRes - public static int getThemeResource(String themePrefValue) { - switch (themePrefValue) { - case "light": - return R.style.Theme_Phonograph_Light; - case "black": - return R.style.Theme_Phonograph_Black; - case "dark": - default: - return R.style.Theme_Phonograph; - } + public Theme getTheme() { + return Theme.valueOf(mPreferences.getString(GENERAL_THEME, Theme.DARK.toString())); } public void setPrimaryColor(int color) { @@ -138,6 +152,7 @@ public final class PreferenceUtil { mPreferences.edit().putInt(ACCENT_COLOR, color).apply(); } + @SuppressWarnings("ConstantConditions") public final int getPageSize() { return Integer.parseInt(mPreferences.getString(PAGE_SIZE, "100")); } @@ -389,12 +404,14 @@ public final class PreferenceUtil { return mPreferences.getString(LOCATION_CACHE, mContext.getCacheDir().toString()); } + @SuppressWarnings("ConstantConditions") public final long getImageCacheSize() { - return Long.parseLong(mPreferences.getString(IMAGE_CACHE_SIZE, "400000000")); + return Long.parseLong(mPreferences.getString(IMAGE_CACHE_SIZE, "400")) * 100000; } + @SuppressWarnings("ConstantConditions") public final long getMediaCacheSize() { - return Long.parseLong(mPreferences.getString(MEDIA_CACHE_SIZE, "400000000")); + return Long.parseLong(mPreferences.getString(MEDIA_CACHE_SIZE, "400")) * 100000; } public List getCategories() { diff --git a/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetAlbum.java b/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetAlbum.java index 2dfd3d4c..eef9a1da 100644 --- a/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetAlbum.java +++ b/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetAlbum.java @@ -1,10 +1,7 @@ package com.dkanada.gramophone.views.widgets; -import android.app.PendingIntent; import android.appwidget.AppWidgetManager; -import android.content.ComponentName; import android.content.Context; -import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Point; @@ -25,7 +22,6 @@ import com.dkanada.gramophone.R; import com.dkanada.gramophone.glide.CustomGlideRequest; import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.service.MusicService; -import com.dkanada.gramophone.activities.MainActivity; import com.dkanada.gramophone.util.ImageUtil; import com.dkanada.gramophone.util.Util; diff --git a/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetCard.java b/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetCard.java index 51ac92ec..4fdd188d 100644 --- a/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetCard.java +++ b/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetCard.java @@ -1,10 +1,7 @@ package com.dkanada.gramophone.views.widgets; -import android.app.PendingIntent; import android.appwidget.AppWidgetManager; -import android.content.ComponentName; import android.content.Context; -import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; @@ -26,7 +23,6 @@ import com.dkanada.gramophone.glide.CustomGlideRequest; import com.dkanada.gramophone.glide.palette.BitmapPaletteWrapper; import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.service.MusicService; -import com.dkanada.gramophone.activities.MainActivity; import com.dkanada.gramophone.util.ImageUtil; public class AppWidgetCard extends BaseAppWidget { diff --git a/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetClassic.java b/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetClassic.java index 99dad6f0..ec872ebd 100644 --- a/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetClassic.java +++ b/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetClassic.java @@ -1,10 +1,7 @@ package com.dkanada.gramophone.views.widgets; -import android.app.PendingIntent; import android.appwidget.AppWidgetManager; -import android.content.ComponentName; import android.content.Context; -import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; @@ -26,7 +23,6 @@ import com.dkanada.gramophone.glide.CustomGlideRequest; import com.dkanada.gramophone.glide.palette.BitmapPaletteWrapper; import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.service.MusicService; -import com.dkanada.gramophone.activities.MainActivity; import com.dkanada.gramophone.util.ImageUtil; public class AppWidgetClassic extends BaseAppWidget { diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 6250af3f..b37f3946 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -7,9 +7,9 @@ - light - dark - black + LIGHT + DARK + BLACK @@ -61,11 +61,11 @@ - 10000000000 - 2000000000 - 1000000000 - 400000000 - 200000000 + 10000 + 2000 + 1000 + 400 + 200 diff --git a/app/src/main/res/xml/pref_cache.xml b/app/src/main/res/xml/pref_cache.xml index f426fde2..6fdd66a7 100644 --- a/app/src/main/res/xml/pref_cache.xml +++ b/app/src/main/res/xml/pref_cache.xml @@ -6,7 +6,7 @@