package org.joinmastodon.android; import static org.joinmastodon.android.api.MastodonAPIController.gson; import android.content.Context; import android.content.SharedPreferences; import android.os.Build; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.HashMap; import java.util.List; import java.util.Map; public class GlobalUserPreferences{ public static boolean playGifs; public static boolean useCustomTabs; public static boolean trueBlackTheme; public static boolean showReplies; public static boolean showBoosts; public static boolean loadNewPosts; public static boolean showFederatedTimeline; public static boolean showInteractionCounts; public static boolean alwaysExpandContentWarnings; public static boolean disableMarquee; public static boolean voteButtonForSingleChoice; public static ThemePreference theme; public static ColorPreference color; private final static Type recentLanguagesType = new TypeToken>>() {}.getType(); public static Map> recentLanguages; public static Map defaultLanguages; private static SharedPreferences getPrefs(){ return MastodonApp.context.getSharedPreferences("global", Context.MODE_PRIVATE); } private static T fromJson(String json, Type type, T orElse) { try { return gson.fromJson(json, type); } catch (JsonSyntaxException ignored) { return orElse; } } public static void load(){ SharedPreferences prefs=getPrefs(); playGifs=prefs.getBoolean("playGifs", true); useCustomTabs=prefs.getBoolean("useCustomTabs", true); trueBlackTheme=prefs.getBoolean("trueBlackTheme", false); showReplies=prefs.getBoolean("showReplies", true); showBoosts=prefs.getBoolean("showBoosts", true); loadNewPosts=prefs.getBoolean("loadNewPosts", true); showFederatedTimeline=prefs.getBoolean("showFederatedTimeline", !BuildConfig.BUILD_TYPE.equals("playRelease")); showInteractionCounts=prefs.getBoolean("showInteractionCounts", false); alwaysExpandContentWarnings=prefs.getBoolean("alwaysExpandContentWarnings", false); disableMarquee=prefs.getBoolean("disableMarquee", false); voteButtonForSingleChoice=prefs.getBoolean("voteButtonForSingleChoice", true); theme=ThemePreference.values()[prefs.getInt("theme", 0)]; recentLanguages=fromJson(prefs.getString("recentLanguages", "{}"), recentLanguagesType, new HashMap<>()); if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){ color=ColorPreference.values()[prefs.getInt("color", 0)]; }else{ color=ColorPreference.values()[prefs.getInt("color", 1)]; } } public static void save(){ getPrefs().edit() .putBoolean("playGifs", playGifs) .putBoolean("useCustomTabs", useCustomTabs) .putBoolean("showReplies", showReplies) .putBoolean("showBoosts", showBoosts) .putBoolean("loadNewPosts", loadNewPosts) .putBoolean("showFederatedTimeline", showFederatedTimeline) .putBoolean("trueBlackTheme", trueBlackTheme) .putBoolean("showInteractionCounts", showInteractionCounts) .putBoolean("alwaysExpandContentWarnings", alwaysExpandContentWarnings) .putBoolean("disableMarquee", disableMarquee) .putInt("theme", theme.ordinal()) .putString("recentLanguages", gson.toJson(recentLanguages)) .putInt("color", color.ordinal()) .apply(); } public enum ColorPreference{ MATERIAL3, PURPLE, PINK, GREEN, BLUE, ORANGE, YELLOW } public enum ThemePreference{ AUTO, LIGHT, DARK } }