diff --git a/src/pandroid/app/src/main/AndroidManifest.xml b/src/pandroid/app/src/main/AndroidManifest.xml index 291496f4..15bf6270 100644 --- a/src/pandroid/app/src/main/AndroidManifest.xml +++ b/src/pandroid/app/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ android:glEsVersion="0x0030001"/> <application + android:name=".app.PandroidApplication" android:requestLegacyExternalStorage="true" android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/PandroidApplication.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/PandroidApplication.java new file mode 100644 index 00000000..0e284db6 --- /dev/null +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/PandroidApplication.java @@ -0,0 +1,21 @@ +package com.panda3ds.pandroid.app; + +import android.app.Application; +import android.content.Context; + +import com.panda3ds.pandroid.data.config.GlobalConfig; + +public class PandroidApplication extends Application { + private static Context appContext; + + @Override + public void onCreate() { + super.onCreate(); + appContext = this; + GlobalConfig.initialize(); + } + + public static Context getAppContext() { + return appContext; + } +} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java new file mode 100644 index 00000000..d25e34c7 --- /dev/null +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java @@ -0,0 +1,60 @@ +package com.panda3ds.pandroid.data.config; + +import android.content.Context; +import android.content.SharedPreferences; + +import com.panda3ds.pandroid.app.PandroidApplication; +import com.panda3ds.pandroid.utils.Constants; + +import java.io.Serializable; + +public class GlobalConfig { + private static SharedPreferences data; + + public static void initialize() { + data = PandroidApplication.getAppContext() + .getSharedPreferences(Constants.PREF_GLOBAL_CONFIG, Context.MODE_PRIVATE); + } + + public static <T extends Serializable> T get(Key<T> key) { + Serializable value; + if (key.defaultValue instanceof String) { + value = data.getString(key.name, (String) key.defaultValue); + } else if (key.defaultValue instanceof Integer) { + value = data.getInt(key.name, (int) key.defaultValue); + } else if (key.defaultValue instanceof Boolean) { + value = data.getBoolean(key.name, (boolean) key.defaultValue); + } else if (key.defaultValue instanceof Long) { + value = data.getLong(key.name, (long) key.defaultValue); + } else { + value = data.getFloat(key.name, (float) key.defaultValue); + } + return (T) value; + } + + public static synchronized <T extends Serializable> void set(Key<T> key, T value) { + if (value instanceof String) { + data.edit().putString(key.name, (String) value).apply(); + } else if (value instanceof Integer) { + data.edit().putInt(key.name, (int) value).apply(); + } else if (value instanceof Boolean) { + data.edit().putBoolean(key.name, (boolean) value).apply(); + } else if (value instanceof Long) { + data.edit().putLong(key.name, (long) value).apply(); + } else if (value instanceof Float) { + data.edit().putFloat(key.name, (float) value).apply(); + } else { + throw new IllegalArgumentException("Invalid global config value instance"); + } + } + + private static class Key<T extends Serializable> { + private final String name; + private final T defaultValue; + + private Key(String name, T defaultValue) { + this.name = name; + this.defaultValue = defaultValue; + } + } +} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/Constants.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/Constants.java index d94164c7..1aac0a4d 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/Constants.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/Constants.java @@ -20,4 +20,6 @@ public class Constants { public static final String ACTIVITY_PARAMETER_PATH = "path"; public static final String LOG_TAG = "pandroid"; + + public static final String PREF_GLOBAL_CONFIG = "app.GlobalConfig"; }