implement data store for extension prefs
This commit is contained in:
@@ -8,6 +8,7 @@ package androidx.preference;
|
|||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -25,6 +26,10 @@ public class Preference {
|
|||||||
private CharSequence summary;
|
private CharSequence summary;
|
||||||
private Object defaultValue;
|
private Object defaultValue;
|
||||||
|
|
||||||
|
/** Tachidesk specific API */
|
||||||
|
@JsonIgnore
|
||||||
|
private SharedPreferences sharedPreferences;
|
||||||
|
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
public OnPreferenceChangeListener onChangeListener;
|
public OnPreferenceChangeListener onChangeListener;
|
||||||
|
|
||||||
@@ -89,6 +94,16 @@ public class Preference {
|
|||||||
return defaultValue.getClass().getSimpleName();
|
return defaultValue.getClass().getSimpleName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Tachidesk specific API */
|
||||||
|
public SharedPreferences getSharedPreferences() {
|
||||||
|
return sharedPreferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Tachidesk specific API */
|
||||||
|
public void setSharedPreferences(SharedPreferences sharedPreferences) {
|
||||||
|
this.sharedPreferences = sharedPreferences;
|
||||||
|
}
|
||||||
|
|
||||||
public interface OnPreferenceChangeListener {
|
public interface OnPreferenceChangeListener {
|
||||||
boolean onPreferenceChange(Preference preference, Object newValue);
|
boolean onPreferenceChange(Preference preference, Object newValue);
|
||||||
}
|
}
|
||||||
@@ -96,4 +111,30 @@ public class Preference {
|
|||||||
public interface OnPreferenceClickListener {
|
public interface OnPreferenceClickListener {
|
||||||
boolean onPreferenceClick(Preference preference);
|
boolean onPreferenceClick(Preference preference);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Tachidesk specific API */
|
||||||
|
public Object getCurrentValue() {
|
||||||
|
switch (getDefaultValueType()) {
|
||||||
|
case "String":
|
||||||
|
return sharedPreferences.getString(key, (String)defaultValue);
|
||||||
|
case "Boolean":
|
||||||
|
return sharedPreferences.getBoolean(key, (Boolean)defaultValue);
|
||||||
|
default:
|
||||||
|
throw new RuntimeException("Unsupported type");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Tachidesk specific API */
|
||||||
|
public void saveNewValue(Object value) {
|
||||||
|
switch (getDefaultValueType()) {
|
||||||
|
case "String":
|
||||||
|
sharedPreferences.edit().putString(key, (String)value).apply();
|
||||||
|
break;
|
||||||
|
case "Boolean":
|
||||||
|
sharedPreferences.edit().putBoolean(key, (Boolean)value).apply();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new RuntimeException("Unsupported type");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ public class PreferenceScreen extends Preference {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean addPreference(Preference preference) {
|
public boolean addPreference(Preference preference) {
|
||||||
|
// propagate own shared preferences
|
||||||
|
preference.setSharedPreferences(getSharedPreferences());
|
||||||
|
|
||||||
preferences.add(preference);
|
preferences.add(preference);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -44,4 +44,4 @@ interface Source {
|
|||||||
|
|
||||||
// fun Source.icon(): Drawable? = Injekt.get<ExtensionManager>().getAppIconForSource(this)
|
// fun Source.icon(): Drawable? = Injekt.get<ExtensionManager>().getAppIconForSource(this)
|
||||||
|
|
||||||
// fun Source.getPreferenceKey(): String = "source_$id"
|
fun Source.getPreferenceKey(): String = "source_$id"
|
||||||
|
|||||||
@@ -7,8 +7,11 @@ package suwayomi.tachidesk.manga.impl
|
|||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
import android.app.Application
|
||||||
|
import android.content.Context
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.source.ConfigurableSource
|
import eu.kanade.tachiyomi.source.ConfigurableSource
|
||||||
|
import eu.kanade.tachiyomi.source.getPreferenceKey
|
||||||
import mu.KotlinLogging
|
import mu.KotlinLogging
|
||||||
import org.jetbrains.exposed.sql.select
|
import org.jetbrains.exposed.sql.select
|
||||||
import org.jetbrains.exposed.sql.selectAll
|
import org.jetbrains.exposed.sql.selectAll
|
||||||
@@ -22,6 +25,8 @@ import suwayomi.tachidesk.manga.impl.util.GetHttpSource.invalidateSourceCache
|
|||||||
import suwayomi.tachidesk.manga.model.dataclass.SourceDataClass
|
import suwayomi.tachidesk.manga.model.dataclass.SourceDataClass
|
||||||
import suwayomi.tachidesk.manga.model.table.ExtensionTable
|
import suwayomi.tachidesk.manga.model.table.ExtensionTable
|
||||||
import suwayomi.tachidesk.manga.model.table.SourceTable
|
import suwayomi.tachidesk.manga.model.table.SourceTable
|
||||||
|
import uy.kohesive.injekt.Injekt
|
||||||
|
import uy.kohesive.injekt.api.get
|
||||||
import xyz.nulldev.androidcompat.androidimpl.CustomContext
|
import xyz.nulldev.androidcompat.androidimpl.CustomContext
|
||||||
|
|
||||||
object Source {
|
object Source {
|
||||||
@@ -80,7 +85,10 @@ object Source {
|
|||||||
val source = getHttpSource(sourceId)
|
val source = getHttpSource(sourceId)
|
||||||
|
|
||||||
if (source is ConfigurableSource) {
|
if (source is ConfigurableSource) {
|
||||||
|
val sourceShardPreferences = Injekt.get<Application>().getSharedPreferences(source.getPreferenceKey(), Context.MODE_PRIVATE)
|
||||||
|
|
||||||
val screen = PreferenceScreen(context)
|
val screen = PreferenceScreen(context)
|
||||||
|
screen.sharedPreferences = sourceShardPreferences
|
||||||
|
|
||||||
source.setupPreferenceScreen(screen)
|
source.setupPreferenceScreen(screen)
|
||||||
|
|
||||||
@@ -112,6 +120,7 @@ object Source {
|
|||||||
else -> throw RuntimeException("Unsupported type conversion")
|
else -> throw RuntimeException("Unsupported type conversion")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pref.saveNewValue(newValue)
|
||||||
pref.callChangeListener(newValue)
|
pref.callChangeListener(newValue)
|
||||||
|
|
||||||
// must reload the source cache because a preference was changed
|
// must reload the source cache because a preference was changed
|
||||||
|
|||||||
Reference in New Issue
Block a user