From edd8859f2db7f50deaee88bdbd9f35020170076d Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Tue, 30 Nov 2021 19:35:47 +0100 Subject: [PATCH] ExtraCore can now deal all kinds of values The extraListener is now an interface --- .../pojavlaunch/PojavLauncherActivity.java | 13 +++++-------- .../net/kdt/pojavlaunch/extra/ExtraCore.java | 16 +++++++++++----- .../kdt/pojavlaunch/extra/ExtraListener.java | 19 ++++++------------- 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavLauncherActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavLauncherActivity.java index 7f95c8bec..026d46d38 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavLauncherActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavLauncherActivity.java @@ -118,15 +118,12 @@ public class PojavLauncherActivity extends BaseLauncherActivity initTabs(0); //Setup listener to the backPreference system - backPreferenceListener = new ExtraListener() { - @Override - public boolean onValueSet(String key, String value) { - if(value.equals("true")){ - onBackPressed(); - ExtraCore.setValue(key, "false"); - } - return false; + backPreferenceListener = (key, value) -> { + if(value.equals("true")){ + onBackPressed(); + ExtraCore.setValue(key, "false"); } + return false; }; ExtraCore.addExtraListener("back_preference", backPreferenceListener); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/extra/ExtraCore.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/extra/ExtraCore.java index eabb85aa1..a2f45fb6e 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/extra/ExtraCore.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/extra/ExtraCore.java @@ -8,6 +8,7 @@ import java.util.concurrent.ConcurrentLinkedQueue; /** * Class providing callback across all of a program * to allow easy thread safe implementations of UI update without context leak + * It is also perfectly engineered to make it unpleasant to use. * * This class uses a singleton pattern to simplify access to it */ @@ -16,7 +17,7 @@ public final class ExtraCore { private ExtraCore(){} // Store the key-value pair - private final Map valueMap = new ConcurrentHashMap<>(); + private final Map valueMap = new ConcurrentHashMap<>(); // Store what each ExtraListener listen to private final Map>> listenerMap = new ConcurrentHashMap<>(); @@ -36,20 +37,25 @@ public final class ExtraCore { * @param key The key * @param value The value */ - public static void setValue(String key, String value){ + public static void setValue(String key, Object value){ getInstance().valueMap.put(key, value); ConcurrentLinkedQueue> extraListenerList = getInstance().listenerMap.get(key); + if(extraListenerList == null) return; //No listeners for(WeakReference listener : extraListenerList){ if(listener.get() == null){ extraListenerList.remove(listener); continue; } - listener.get().notifyDataChanged(key, value); + + //Notify the listener about a state change and remove it if asked for + if(listener.get().onValueSet(key, value)){ + ExtraCore.removeExtraListenerFromValue(key, listener.get()); + } } } /** @return The value behind the key */ - public static String getValue(String key){ + public static Object getValue(String key){ return getInstance().valueMap.get(key); } @@ -126,4 +132,4 @@ public final class ExtraCore { getInstance().listenerMap.clear(); } -} +} \ No newline at end of file diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/extra/ExtraListener.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/extra/ExtraListener.java index 4c310bdae..a3df5cc12 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/extra/ExtraListener.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/extra/ExtraListener.java @@ -1,20 +1,12 @@ package net.kdt.pojavlaunch.extra; +import androidx.annotation.Nullable; + /** * Listener class for the ExtraCore * An ExtraListener can listen to a virtually unlimited amount of values */ -public abstract class ExtraListener { - - /** - * Called by the ExtraCore after a value is set. - * Technically, it can be triggered from outside but is seems pointless - */ - public final void notifyDataChanged(String key, String value){ - if(onValueSet(key, value)){ - ExtraCore.removeExtraListenerFromValue(key, this); - } - } +public interface ExtraListener { /** * Called upon a new value being set @@ -22,5 +14,6 @@ public abstract class ExtraListener { * @param value The new value as a string * @return Whether you consume the Listener (stop listening) */ - public abstract boolean onValueSet(String key, String value); -} + boolean onValueSet(String key, @Nullable T value); + +} \ No newline at end of file