package com.germainz.activityforcenewtask; import android.content.Context; import android.content.SharedPreferences; import android.widget.Toast; import java.util.HashSet; import java.util.Set; import de.robv.android.xposed.XSharedPreferences; public class SettingsHelper { private XSharedPreferences xSharedPreferences = null; private SharedPreferences sharedPreferences = null; private Context context = null; private Set<String> listItems; private String listType; // Called from module's classes. public SettingsHelper() { xSharedPreferences = new XSharedPreferences(Common.PACKAGE_NAME, Common.PREFS); xSharedPreferences.makeWorldReadable(); listType = getListType(); listItems = getListItems(listType); } // Called from activities. public SettingsHelper(Context context) { sharedPreferences = context.getSharedPreferences(Common.PREFS, Context.MODE_WORLD_READABLE); this.context = context; } // The methods below are only called from the module's class (XSharedPreferences) public boolean isModDisabled() { return xSharedPreferences.getBoolean(Common.PREF_DISABLED, false); } public boolean isLogEnabled() { return xSharedPreferences.getBoolean(Common.PREF_LOG_ENABLED, false); } public void reload() { if (xSharedPreferences.hasFileChanged()) { xSharedPreferences.reload(); listType = getListType(); listItems = getListItems(listType); } } public boolean isListed(String s) { return listItems.contains(s); } // The methods below are only called from activities (SharedPreferences) public boolean addListItem(String listItem, String listType) { Set<String> set = new HashSet<String>(); Set<String> listItems = getListItems(listType); if (listItems.contains(listItem)) { Toast.makeText(context, R.string.toast_duplicate, Toast.LENGTH_SHORT).show(); return false; } set.addAll(listItems); set.add(listItem); SharedPreferences.Editor prefEditor = sharedPreferences.edit(); prefEditor.putStringSet(listType, set); prefEditor.apply(); return true; } public void removeListItem(String listItem, String listType) { SharedPreferences.Editor prefEditor = sharedPreferences.edit(); Set<String> stringSet = new HashSet<String>(getListItems(listType)); stringSet.remove(listItem); prefEditor.putStringSet(listType, stringSet); prefEditor.apply(); } // These methods can be called from both public Set<String> getListItems(String listType) { Set<String> set = new HashSet<String>(); if (sharedPreferences != null) return sharedPreferences.getStringSet(listType, set); else if (xSharedPreferences != null) return xSharedPreferences.getStringSet(listType, set); return set; } public String getListType() { String listTypeValue; if (sharedPreferences != null) listTypeValue = sharedPreferences.getString(Common.PREF_LIST_TYPE, Common.PREF_LIST_DEFAULT); else if (xSharedPreferences != null) if (listType == null) listTypeValue = xSharedPreferences.getString(Common.PREF_LIST_TYPE, Common.PREF_LIST_DEFAULT); else return listType; else return null; if (listTypeValue.equals(Common.PREF_LIST_WHITELIST)) return Common.PREF_WHITELIST; else if (listTypeValue.equals(Common.PREF_LIST_BLACKLIST)) return Common.PREF_BLACKLIST; return null; } }