From a24d3cf1dda31a8ba49ef5b0e6ca41eefa79ebac Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Sat, 11 Dec 2021 22:29:45 +0100 Subject: [PATCH] Extended MCOptionUtils to support list values --- .../kdt/pojavlaunch/utils/MCOptionUtils.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/MCOptionUtils.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/MCOptionUtils.java index 579cbbf43..353f5343f 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/MCOptionUtils.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/MCOptionUtils.java @@ -16,7 +16,9 @@ import java.io.FileReader; import java.io.IOException; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; public class MCOptionUtils { @@ -56,9 +58,28 @@ public class MCOptionUtils parameterMap.put(key,value); } + /** Set an array of String, instead of a simple value. Not supported on all options */ + public static void set(String key, List values){ + parameterMap.put(key, values.toString()); + } + public static String get(String key){ return parameterMap.get(key); } + + /** @return A list of values from an array stored as a string */ + public static List getAsList(String key){ + String value = get(key); + + // Fallback if the value doesn't exist + if (value == null) return new ArrayList<>(); + + // Remove the edges + value = value.replace("[", "").replace("]", ""); + if (value.isEmpty()) return new ArrayList<>(); + + return Arrays.asList(value.split(",")); + } public static void save() { StringBuilder result = new StringBuilder(); @@ -89,6 +110,8 @@ public class MCOptionUtils return guiScale; } + /** Add a file observer to reload options on file change + * Listeners get notified of the change */ private static void setupFileObserver(){ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){ fileObserver = new FileObserver(new File(Tools.DIR_GAME_NEW + "/options.txt"), FileObserver.MODIFY) { @@ -111,6 +134,7 @@ public class MCOptionUtils fileObserver.startWatching(); } + /** Notify the option listeners */ public static void notifyListeners(){ for(WeakReference weakReference : optionListeners){ MCOptionListener optionListener = weakReference.get(); @@ -120,10 +144,12 @@ public class MCOptionUtils } } + /** Add an option listener, notice how we don't have a reference to it */ public static void addMCOptionListener(MCOptionListener listener){ optionListeners.add(new WeakReference<>(listener)); } + /** Remove a listener from existence, or at least, its reference here */ public static void removeMCOptionListener(MCOptionListener listener){ for(WeakReference weakReference : optionListeners){ MCOptionListener optionListener = weakReference.get();