fix warnings and add some type safety for preferences
This commit is contained in:
parent
08034e0696
commit
37eb40e79a
11 changed files with 86 additions and 44 deletions
|
|
@ -181,7 +181,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
case PreferenceUtil.ACCENT_COLOR:
|
case PreferenceUtil.ACCENT_COLOR:
|
||||||
case PreferenceUtil.GENERAL_THEME:
|
case PreferenceUtil.GENERAL_THEME:
|
||||||
// apply theme before reloading shortcuts to apply the new icon colors
|
// 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();
|
new DynamicShortcutManager(requireContext()).updateDynamicShortcuts();
|
||||||
|
|
||||||
ThemeStore.markChanged(requireContext());
|
ThemeStore.markChanged(requireContext());
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,9 @@ import com.dkanada.gramophone.util.Util;
|
||||||
public abstract class AbsThemeActivity extends ATHToolbarActivity {
|
public abstract class AbsThemeActivity extends ATHToolbarActivity {
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
setTheme(PreferenceUtil.getInstance(this).getTheme());
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
setTheme(PreferenceUtil.getInstance(this).getTheme().style);
|
||||||
MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this);
|
MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this);
|
||||||
|
|
||||||
if (!ThemeStore.coloredNavigationBar(this)) {
|
if (!ThemeStore.coloredNavigationBar(this)) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,8 @@ package com.dkanada.gramophone.model;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
|
import androidx.annotation.StringRes;
|
||||||
|
|
||||||
import com.dkanada.gramophone.R;
|
import com.dkanada.gramophone.R;
|
||||||
|
|
||||||
public class CategoryInfo implements Parcelable {
|
public class CategoryInfo implements Parcelable {
|
||||||
|
|
@ -47,6 +49,7 @@ public class CategoryInfo implements Parcelable {
|
||||||
PLAYLISTS(R.string.playlists),
|
PLAYLISTS(R.string.playlists),
|
||||||
FAVORITES(R.string.favorites);
|
FAVORITES(R.string.favorites);
|
||||||
|
|
||||||
|
@StringRes
|
||||||
public final int stringRes;
|
public final int stringRes;
|
||||||
|
|
||||||
Category(int stringRes) {
|
Category(int stringRes) {
|
||||||
|
|
|
||||||
18
app/src/main/java/com/dkanada/gramophone/model/Theme.java
Normal file
18
app/src/main/java/com/dkanada/gramophone/model/Theme.java
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,29 +1,34 @@
|
||||||
package com.dkanada.gramophone.util;
|
package com.dkanada.gramophone.util;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
|
||||||
import androidx.annotation.StyleRes;
|
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonSyntaxException;
|
import com.google.gson.JsonSyntaxException;
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import com.dkanada.gramophone.model.Theme;
|
||||||
import com.dkanada.gramophone.R;
|
import com.dkanada.gramophone.R;
|
||||||
import com.dkanada.gramophone.helper.sort.SortMethod;
|
import com.dkanada.gramophone.helper.sort.SortMethod;
|
||||||
import com.dkanada.gramophone.helper.sort.SortOrder;
|
import com.dkanada.gramophone.helper.sort.SortOrder;
|
||||||
import com.dkanada.gramophone.model.CategoryInfo;
|
import com.dkanada.gramophone.model.CategoryInfo;
|
||||||
import com.dkanada.gramophone.model.DirectPlayCodec;
|
import com.dkanada.gramophone.model.DirectPlayCodec;
|
||||||
|
import com.dkanada.gramophone.interfaces.base.PreferenceMigration;
|
||||||
import com.dkanada.gramophone.fragments.player.NowPlayingScreen;
|
import com.dkanada.gramophone.fragments.player.NowPlayingScreen;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@SuppressLint("ApplySharedPref")
|
||||||
public final class PreferenceUtil {
|
public final class PreferenceUtil {
|
||||||
|
public static final String VERSION = "version";
|
||||||
|
|
||||||
public static final String SERVER = "server";
|
public static final String SERVER = "server";
|
||||||
public static final String USER = "user";
|
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 IMAGE_CACHE_SIZE = "image_cache_size";
|
||||||
public static final String MEDIA_CACHE_SIZE = "media_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<PreferenceMigration> migrations = Collections.singletonList(Migration1);
|
||||||
|
|
||||||
private static PreferenceUtil instance;
|
private static PreferenceUtil instance;
|
||||||
|
|
||||||
private final SharedPreferences mPreferences;
|
private final SharedPreferences mPreferences;
|
||||||
|
|
@ -94,6 +115,13 @@ public final class PreferenceUtil {
|
||||||
private PreferenceUtil(final Context context) {
|
private PreferenceUtil(final Context context) {
|
||||||
mPreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
mPreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
mContext = 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) {
|
public static PreferenceUtil getInstance(final Context context) {
|
||||||
|
|
@ -112,22 +140,8 @@ public final class PreferenceUtil {
|
||||||
mPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
mPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@StyleRes
|
public Theme getTheme() {
|
||||||
public int getTheme() {
|
return Theme.valueOf(mPreferences.getString(GENERAL_THEME, Theme.DARK.toString()));
|
||||||
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 void setPrimaryColor(int color) {
|
public void setPrimaryColor(int color) {
|
||||||
|
|
@ -138,6 +152,7 @@ public final class PreferenceUtil {
|
||||||
mPreferences.edit().putInt(ACCENT_COLOR, color).apply();
|
mPreferences.edit().putInt(ACCENT_COLOR, color).apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("ConstantConditions")
|
||||||
public final int getPageSize() {
|
public final int getPageSize() {
|
||||||
return Integer.parseInt(mPreferences.getString(PAGE_SIZE, "100"));
|
return Integer.parseInt(mPreferences.getString(PAGE_SIZE, "100"));
|
||||||
}
|
}
|
||||||
|
|
@ -389,12 +404,14 @@ public final class PreferenceUtil {
|
||||||
return mPreferences.getString(LOCATION_CACHE, mContext.getCacheDir().toString());
|
return mPreferences.getString(LOCATION_CACHE, mContext.getCacheDir().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("ConstantConditions")
|
||||||
public final long getImageCacheSize() {
|
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() {
|
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<CategoryInfo> getCategories() {
|
public List<CategoryInfo> getCategories() {
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
package com.dkanada.gramophone.views.widgets;
|
package com.dkanada.gramophone.views.widgets;
|
||||||
|
|
||||||
import android.app.PendingIntent;
|
|
||||||
import android.appwidget.AppWidgetManager;
|
import android.appwidget.AppWidgetManager;
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.graphics.Point;
|
import android.graphics.Point;
|
||||||
|
|
@ -25,7 +22,6 @@ import com.dkanada.gramophone.R;
|
||||||
import com.dkanada.gramophone.glide.CustomGlideRequest;
|
import com.dkanada.gramophone.glide.CustomGlideRequest;
|
||||||
import com.dkanada.gramophone.model.Song;
|
import com.dkanada.gramophone.model.Song;
|
||||||
import com.dkanada.gramophone.service.MusicService;
|
import com.dkanada.gramophone.service.MusicService;
|
||||||
import com.dkanada.gramophone.activities.MainActivity;
|
|
||||||
import com.dkanada.gramophone.util.ImageUtil;
|
import com.dkanada.gramophone.util.ImageUtil;
|
||||||
import com.dkanada.gramophone.util.Util;
|
import com.dkanada.gramophone.util.Util;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
package com.dkanada.gramophone.views.widgets;
|
package com.dkanada.gramophone.views.widgets;
|
||||||
|
|
||||||
import android.app.PendingIntent;
|
|
||||||
import android.appwidget.AppWidgetManager;
|
import android.appwidget.AppWidgetManager;
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.graphics.drawable.Drawable;
|
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.glide.palette.BitmapPaletteWrapper;
|
||||||
import com.dkanada.gramophone.model.Song;
|
import com.dkanada.gramophone.model.Song;
|
||||||
import com.dkanada.gramophone.service.MusicService;
|
import com.dkanada.gramophone.service.MusicService;
|
||||||
import com.dkanada.gramophone.activities.MainActivity;
|
|
||||||
import com.dkanada.gramophone.util.ImageUtil;
|
import com.dkanada.gramophone.util.ImageUtil;
|
||||||
|
|
||||||
public class AppWidgetCard extends BaseAppWidget {
|
public class AppWidgetCard extends BaseAppWidget {
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
package com.dkanada.gramophone.views.widgets;
|
package com.dkanada.gramophone.views.widgets;
|
||||||
|
|
||||||
import android.app.PendingIntent;
|
|
||||||
import android.appwidget.AppWidgetManager;
|
import android.appwidget.AppWidgetManager;
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.graphics.drawable.Drawable;
|
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.glide.palette.BitmapPaletteWrapper;
|
||||||
import com.dkanada.gramophone.model.Song;
|
import com.dkanada.gramophone.model.Song;
|
||||||
import com.dkanada.gramophone.service.MusicService;
|
import com.dkanada.gramophone.service.MusicService;
|
||||||
import com.dkanada.gramophone.activities.MainActivity;
|
|
||||||
import com.dkanada.gramophone.util.ImageUtil;
|
import com.dkanada.gramophone.util.ImageUtil;
|
||||||
|
|
||||||
public class AppWidgetClassic extends BaseAppWidget {
|
public class AppWidgetClassic extends BaseAppWidget {
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="pref_theme_values">
|
<string-array name="pref_theme_values">
|
||||||
<item>light</item>
|
<item>LIGHT</item>
|
||||||
<item>dark</item>
|
<item>DARK</item>
|
||||||
<item>black</item>
|
<item>BLACK</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="pref_transcode_codec_titles">
|
<string-array name="pref_transcode_codec_titles">
|
||||||
|
|
@ -61,11 +61,11 @@
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="pref_cache_size_values">
|
<string-array name="pref_cache_size_values">
|
||||||
<item>10000000000</item>
|
<item>10000</item>
|
||||||
<item>2000000000</item>
|
<item>2000</item>
|
||||||
<item>1000000000</item>
|
<item>1000</item>
|
||||||
<item>400000000</item>
|
<item>400</item>
|
||||||
<item>200000000</item>
|
<item>200</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<com.kabouzeid.appthemehelper.common.prefs.supportv7.ATEListPreference
|
<com.kabouzeid.appthemehelper.common.prefs.supportv7.ATEListPreference
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
android:defaultValue="400000000"
|
android:defaultValue="400"
|
||||||
android:entries="@array/pref_cache_size_titles"
|
android:entries="@array/pref_cache_size_titles"
|
||||||
android:entryValues="@array/pref_cache_size_values"
|
android:entryValues="@array/pref_cache_size_values"
|
||||||
android:key="image_cache_size"
|
android:key="image_cache_size"
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
<com.kabouzeid.appthemehelper.common.prefs.supportv7.ATEListPreference
|
<com.kabouzeid.appthemehelper.common.prefs.supportv7.ATEListPreference
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
android:defaultValue="400000000"
|
android:defaultValue="400"
|
||||||
android:entries="@array/pref_cache_size_titles"
|
android:entries="@array/pref_cache_size_titles"
|
||||||
android:entryValues="@array/pref_cache_size_values"
|
android:entryValues="@array/pref_cache_size_values"
|
||||||
android:key="media_cache_size"
|
android:key="media_cache_size"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue