From d850c88c63deccf66016f756fb8d6259d77b42cf Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Fri, 28 Aug 2020 21:52:43 -0400 Subject: [PATCH] Support ordered set in DPreference Note the ordered set need to be stored internally as String, not string set --- .../me/dozen/dpreference/DPreference.java | 22 +++++++++++++++---- .../dozen/dpreference/StringSetConverter.java | 5 +++-- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/V2rayNG/dpreference/src/main/java/me/dozen/dpreference/DPreference.java b/V2rayNG/dpreference/src/main/java/me/dozen/dpreference/DPreference.java index b5916b7f..fdc7eafe 100644 --- a/V2rayNG/dpreference/src/main/java/me/dozen/dpreference/DPreference.java +++ b/V2rayNG/dpreference/src/main/java/me/dozen/dpreference/DPreference.java @@ -2,7 +2,9 @@ package me.dozen.dpreference; import android.content.Context; +import android.text.TextUtils; +import java.util.LinkedHashSet; import java.util.Set; /** @@ -45,10 +47,6 @@ public class DPreference { PrefAccessor.setInt(mContext, mName, key, value); } - public void setPrefStringSet(final String key, final Set value) { - PrefAccessor.setStringSet(mContext, mName, key, value); - } - public int getPrefInt(final String key, final int defaultValue) { return PrefAccessor.getInt(mContext, mName, key, defaultValue); } @@ -61,10 +59,26 @@ public class DPreference { return PrefAccessor.getLong(mContext, mName, key, defaultValue); } + public void setPrefStringSet(final String key, final Set value) { + PrefAccessor.setStringSet(mContext, mName, key, value); + } + public Set getPrefStringSet(final String key, final Set defaultValue) { return PrefAccessor.getStringSet(mContext, mName, key, defaultValue); } + public void setPrefStringOrderedSet(final String key, final LinkedHashSet value) { + PrefAccessor.setString(mContext, mName, key, StringSetConverter.encode(value)); + } + + public LinkedHashSet getPrefStringOrderedSet(final String key, final LinkedHashSet defaultValue) { + String value = PrefAccessor.getString(mContext, mName, key, ""); + if (TextUtils.isEmpty(value)) { + return defaultValue; + } + return StringSetConverter.decode(value); + } + public void removePreference(final String key) { PrefAccessor.remove(mContext, mName, key); } diff --git a/V2rayNG/dpreference/src/main/java/me/dozen/dpreference/StringSetConverter.java b/V2rayNG/dpreference/src/main/java/me/dozen/dpreference/StringSetConverter.java index ae29ad56..8350d46b 100644 --- a/V2rayNG/dpreference/src/main/java/me/dozen/dpreference/StringSetConverter.java +++ b/V2rayNG/dpreference/src/main/java/me/dozen/dpreference/StringSetConverter.java @@ -4,6 +4,7 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.util.LinkedHashSet; import java.util.Set; public class StringSetConverter { @@ -13,8 +14,8 @@ public class StringSetConverter { return gson.toJson(src); } - public static Set decode(String json) { - Type setType = new TypeToken>() { + public static LinkedHashSet decode(String json) { + Type setType = new TypeToken>() { }.getType(); return gson.fromJson(json, setType); }