pref: 迁移至 DataStore
This commit is contained in:
parent
bb0ba2bc8b
commit
e33de47d34
|
|
@ -255,6 +255,7 @@ class BaseApplication : Application(), IApp {
|
||||||
|
|
||||||
//禁止app字体大小跟随系统字体大小调节
|
//禁止app字体大小跟随系统字体大小调节
|
||||||
override fun getResources(): Resources {
|
override fun getResources(): Resources {
|
||||||
|
INSTANCE = this
|
||||||
val fontScale = appPreferences.fontScale
|
val fontScale = appPreferences.fontScale
|
||||||
val resources = super.getResources()
|
val resources = super.getResources()
|
||||||
if (resources.configuration.fontScale != fontScale) {
|
if (resources.configuration.fontScale != fontScale) {
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,102 @@ package com.huanchengfly.tieba.post
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.datastore.core.DataStore
|
import androidx.datastore.core.DataStore
|
||||||
import androidx.datastore.preferences.core.Preferences
|
import androidx.datastore.preferences.SharedPreferencesMigration
|
||||||
|
import androidx.datastore.preferences.core.*
|
||||||
import androidx.datastore.preferences.preferencesDataStore
|
import androidx.datastore.preferences.preferencesDataStore
|
||||||
|
import kotlinx.coroutines.flow.first
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
|
|
||||||
object DataStoreConst {
|
object DataStoreConst {
|
||||||
const val DATA_STORE_NAME = "app_data"
|
const val DATA_STORE_NAME = "app_preferences"
|
||||||
|
|
||||||
|
val KEY_THEME = stringPreferencesKey("theme")
|
||||||
}
|
}
|
||||||
|
|
||||||
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = DataStoreConst.DATA_STORE_NAME)
|
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(
|
||||||
|
name = DataStoreConst.DATA_STORE_NAME,
|
||||||
|
produceMigrations = { context ->
|
||||||
|
listOf(SharedPreferencesMigration(context, "settings"))
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
fun DataStore<Preferences>.getInt(key: String, defaultValue: Int): Int {
|
||||||
|
var resultValue = defaultValue
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
BaseApplication.INSTANCE.dataStore.data.first {
|
||||||
|
resultValue = it[intPreferencesKey(key)] ?: resultValue
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultValue
|
||||||
|
}
|
||||||
|
|
||||||
|
fun DataStore<Preferences>.getString(key: String, defaultValue: String? = null): String? {
|
||||||
|
var resultValue = defaultValue
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
BaseApplication.INSTANCE.dataStore.data.first {
|
||||||
|
resultValue = it[stringPreferencesKey(key)] ?: resultValue
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultValue
|
||||||
|
}
|
||||||
|
|
||||||
|
fun DataStore<Preferences>.getStringSet(
|
||||||
|
key: String,
|
||||||
|
defaultValues: MutableSet<String>? = null
|
||||||
|
): MutableSet<String>? {
|
||||||
|
var resultValue = defaultValues
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
BaseApplication.INSTANCE.dataStore.data.first {
|
||||||
|
resultValue = it[stringSetPreferencesKey(key)]?.toMutableSet() ?: resultValue
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultValue
|
||||||
|
}
|
||||||
|
|
||||||
|
fun DataStore<Preferences>.getBoolean(key: String, defaultValue: Boolean): Boolean {
|
||||||
|
var resultValue = defaultValue
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
BaseApplication.INSTANCE.dataStore.data.first {
|
||||||
|
resultValue = it[booleanPreferencesKey(key)] ?: resultValue
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultValue
|
||||||
|
}
|
||||||
|
|
||||||
|
fun DataStore<Preferences>.getFloat(key: String, defaultValue: Float): Float {
|
||||||
|
var resultValue = defaultValue
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
BaseApplication.INSTANCE.dataStore.data.first {
|
||||||
|
resultValue = it[floatPreferencesKey(key)] ?: resultValue
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultValue
|
||||||
|
}
|
||||||
|
|
||||||
|
fun DataStore<Preferences>.getLong(key: String, defaultValue: Long): Long {
|
||||||
|
var resultValue = defaultValue
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
BaseApplication.INSTANCE.dataStore.data.first {
|
||||||
|
resultValue = it[longPreferencesKey(key)] ?: resultValue
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultValue
|
||||||
|
}
|
||||||
|
|
@ -7,10 +7,10 @@ import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import com.huanchengfly.tieba.post.R;
|
import com.huanchengfly.tieba.post.R;
|
||||||
import com.huanchengfly.tieba.post.fragments.SettingsFragment;
|
import com.huanchengfly.tieba.post.fragments.PreferencesFragment;
|
||||||
import com.huanchengfly.tieba.post.utils.ThemeUtil;
|
import com.huanchengfly.tieba.post.utils.ThemeUtil;
|
||||||
|
|
||||||
public class SettingsActivity extends BaseActivity {
|
public class PreferencesActivity extends BaseActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
|
@ -27,12 +27,12 @@ public class SettingsActivity extends BaseActivity {
|
||||||
}
|
}
|
||||||
String scrollToPreference = getIntent().getStringExtra("scroll_to_preference");
|
String scrollToPreference = getIntent().getStringExtra("scroll_to_preference");
|
||||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
FragmentManager fragmentManager = getSupportFragmentManager();
|
||||||
SettingsFragment settingsFragment = new SettingsFragment();
|
PreferencesFragment preferencesFragment = new PreferencesFragment();
|
||||||
fragmentManager.beginTransaction()
|
fragmentManager.beginTransaction()
|
||||||
.add(R.id.main, settingsFragment)
|
.add(R.id.main, preferencesFragment)
|
||||||
.commit();
|
.commit();
|
||||||
if (scrollToPreference != null) {
|
if (scrollToPreference != null) {
|
||||||
settingsFragment.scrollToPreference(scrollToPreference);
|
preferencesFragment.scrollToPreference(scrollToPreference);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -259,7 +259,7 @@ class UserActivity : BaseActivity() {
|
||||||
@OnClick(R.id.user_center_action_btn)
|
@OnClick(R.id.user_center_action_btn)
|
||||||
fun onActionBtnClick(view: View?) {
|
fun onActionBtnClick(view: View?) {
|
||||||
if (TextUtils.equals(profileBean!!.user!!.id, AccountUtil.getUid(this))) {
|
if (TextUtils.equals(profileBean!!.user!!.id, AccountUtil.getUid(this))) {
|
||||||
startActivity(WebViewActivity.newIntent(this, getString(R.string.url_edit_info)))
|
goToActivity<EditProfileActivity>()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if ("1" == profileBean!!.user!!.hasConcerned) {
|
if ("1" == profileBean!!.user!!.hasConcerned) {
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,10 @@ import android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.preference.EditTextPreference
|
import androidx.datastore.preferences.core.*
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.*
|
||||||
import androidx.preference.Preference
|
|
||||||
import androidx.preference.SwitchPreference
|
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
|
import com.huanchengfly.tieba.post.*
|
||||||
import com.huanchengfly.tieba.post.R
|
import com.huanchengfly.tieba.post.R
|
||||||
import com.huanchengfly.tieba.post.activities.BlockListActivity
|
import com.huanchengfly.tieba.post.activities.BlockListActivity
|
||||||
import com.huanchengfly.tieba.post.activities.LoginActivity
|
import com.huanchengfly.tieba.post.activities.LoginActivity
|
||||||
|
|
@ -24,11 +23,13 @@ import com.huanchengfly.tieba.post.components.prefs.TimePickerPreference
|
||||||
import com.huanchengfly.tieba.post.fragments.preference.PreferencesFragment
|
import com.huanchengfly.tieba.post.fragments.preference.PreferencesFragment
|
||||||
import com.huanchengfly.tieba.post.models.database.Account
|
import com.huanchengfly.tieba.post.models.database.Account
|
||||||
import com.huanchengfly.tieba.post.models.database.Block
|
import com.huanchengfly.tieba.post.models.database.Block
|
||||||
import com.huanchengfly.tieba.post.toastShort
|
|
||||||
import com.huanchengfly.tieba.post.ui.theme.utils.ThemeUtils
|
import com.huanchengfly.tieba.post.ui.theme.utils.ThemeUtils
|
||||||
import com.huanchengfly.tieba.post.utils.*
|
import com.huanchengfly.tieba.post.utils.*
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.MainScope
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class SettingsFragment : PreferencesFragment() {
|
class PreferencesFragment : PreferencesFragment() {
|
||||||
private var loginInfo: Account? = null
|
private var loginInfo: Account? = null
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
|
@ -69,7 +70,8 @@ class SettingsFragment : PreferencesFragment() {
|
||||||
|
|
||||||
@SuppressLint("ApplySharedPref")
|
@SuppressLint("ApplySharedPref")
|
||||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
preferenceManager.sharedPreferencesName = "settings"
|
//preferenceManager.sharedPreferencesName = "settings"
|
||||||
|
preferenceManager.preferenceDataStore = DataStorePreference()
|
||||||
addPreferencesFromResource(R.xml.preferences)
|
addPreferencesFromResource(R.xml.preferences)
|
||||||
val accountsPreference = findPreference<ListPreference>("switch_account")
|
val accountsPreference = findPreference<ListPreference>("switch_account")
|
||||||
accountsPreference!!.onPreferenceChangeListener =
|
accountsPreference!!.onPreferenceChangeListener =
|
||||||
|
|
@ -197,7 +199,7 @@ class SettingsFragment : PreferencesFragment() {
|
||||||
}
|
}
|
||||||
timePickerPreference.summary = attachContext.getString(
|
timePickerPreference.summary = attachContext.getString(
|
||||||
R.string.summary_auto_sign_time,
|
R.string.summary_auto_sign_time,
|
||||||
preferenceManager.sharedPreferences!!.getString("auto_sign_time", "09:00")
|
preferenceManager.preferenceDataStore!!.getString("auto_sign_time", "09:00")
|
||||||
)
|
)
|
||||||
val clearCache = findPreference<Preference>("clear_cache")
|
val clearCache = findPreference<Preference>("clear_cache")
|
||||||
clearCache!!.summary = attachContext.getString(
|
clearCache!!.summary = attachContext.getString(
|
||||||
|
|
@ -216,7 +218,7 @@ class SettingsFragment : PreferencesFragment() {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
val littleTaliPreference = findPreference<EditTextPreference>("little_tail")
|
val littleTaliPreference = findPreference<EditTextPreference>("little_tail")
|
||||||
val littleTali = preferenceManager.sharedPreferences!!.getString("little_tail", "")
|
val littleTali = preferenceManager.preferenceDataStore!!.getString("little_tail", "")
|
||||||
if (littleTali!!.isEmpty()) {
|
if (littleTali!!.isEmpty()) {
|
||||||
littleTaliPreference!!.setSummary(R.string.tip_no_little_tail)
|
littleTaliPreference!!.setSummary(R.string.tip_no_little_tail)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -238,7 +240,7 @@ class SettingsFragment : PreferencesFragment() {
|
||||||
val aboutPreference = findPreference<Preference>("about")
|
val aboutPreference = findPreference<Preference>("about")
|
||||||
val useCustomTabs = findPreference<SwitchPreference>("use_custom_tabs")
|
val useCustomTabs = findPreference<SwitchPreference>("use_custom_tabs")
|
||||||
useCustomTabs!!.isEnabled =
|
useCustomTabs!!.isEnabled =
|
||||||
!preferenceManager.sharedPreferences!!.getBoolean("use_webview", true)
|
!preferenceManager.preferenceDataStore!!.getBoolean("use_webview", true)
|
||||||
findPreference<Preference>("use_webview")!!.onPreferenceChangeListener =
|
findPreference<Preference>("use_webview")!!.onPreferenceChangeListener =
|
||||||
Preference.OnPreferenceChangeListener { _: Preference?, newValue: Any? ->
|
Preference.OnPreferenceChangeListener { _: Preference?, newValue: Any? ->
|
||||||
useCustomTabs.isEnabled = !(newValue as Boolean)
|
useCustomTabs.isEnabled = !(newValue as Boolean)
|
||||||
|
|
@ -282,17 +284,102 @@ class SettingsFragment : PreferencesFragment() {
|
||||||
defValue: Boolean = false
|
defValue: Boolean = false
|
||||||
) {
|
) {
|
||||||
val value =
|
val value =
|
||||||
preferenceManager.sharedPreferences!!.getBoolean(switchPreference!!.key, defValue)
|
preferenceManager.preferenceDataStore!!.getBoolean(switchPreference!!.key, defValue)
|
||||||
switchPreference.isChecked = value
|
switchPreference.isChecked = value
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initListPreference(key: String, defValue: String) {
|
private fun initListPreference(key: String, defValue: String) {
|
||||||
val listPreference = findPreference<ListPreference>(key)
|
val listPreference = findPreference<ListPreference>(key)
|
||||||
val value = preferenceManager.sharedPreferences!!.getString(key, defValue)
|
val value = preferenceManager.preferenceDataStore!!.getString(key, defValue)
|
||||||
listPreference!!.value = value
|
listPreference!!.value = value
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val TAG = "SettingsFragment"
|
const val TAG = "PreferencesFragment"
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
class DataStorePreference : PreferenceDataStore() {
|
||||||
|
override fun putString(key: String, value: String?) {
|
||||||
|
MainScope().launch(Dispatchers.IO) {
|
||||||
|
BaseApplication.INSTANCE.dataStore.edit {
|
||||||
|
if (value == null) {
|
||||||
|
it.remove(stringPreferencesKey(key))
|
||||||
|
} else {
|
||||||
|
it[stringPreferencesKey(key)] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun putStringSet(key: String, values: MutableSet<String>?) {
|
||||||
|
MainScope().launch(Dispatchers.IO) {
|
||||||
|
BaseApplication.INSTANCE.dataStore.edit {
|
||||||
|
if (values == null) {
|
||||||
|
it.remove(stringSetPreferencesKey(key))
|
||||||
|
} else {
|
||||||
|
it[stringSetPreferencesKey(key)] = values
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun putInt(key: String, value: Int) {
|
||||||
|
MainScope().launch(Dispatchers.IO) {
|
||||||
|
BaseApplication.INSTANCE.dataStore.edit {
|
||||||
|
it[intPreferencesKey(key)] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun putLong(key: String, value: Long) {
|
||||||
|
MainScope().launch(Dispatchers.IO) {
|
||||||
|
BaseApplication.INSTANCE.dataStore.edit {
|
||||||
|
it[longPreferencesKey(key)] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun putFloat(key: String, value: Float) {
|
||||||
|
MainScope().launch(Dispatchers.IO) {
|
||||||
|
BaseApplication.INSTANCE.dataStore.edit {
|
||||||
|
it[floatPreferencesKey(key)] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun putBoolean(key: String, value: Boolean) {
|
||||||
|
MainScope().launch(Dispatchers.IO) {
|
||||||
|
BaseApplication.INSTANCE.dataStore.edit {
|
||||||
|
it[booleanPreferencesKey(key)] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getString(key: String, defValue: String?): String? {
|
||||||
|
return BaseApplication.INSTANCE.dataStore.getString(key, defValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getStringSet(
|
||||||
|
key: String,
|
||||||
|
defValues: MutableSet<String>?
|
||||||
|
): MutableSet<String>? {
|
||||||
|
return BaseApplication.INSTANCE.dataStore.getStringSet(key, defValues)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getInt(key: String, defValue: Int): Int {
|
||||||
|
return BaseApplication.INSTANCE.dataStore.getInt(key, defValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getLong(key: String, defValue: Long): Long {
|
||||||
|
return BaseApplication.INSTANCE.dataStore.getLong(key, defValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getFloat(key: String, defValue: Float): Float {
|
||||||
|
return BaseApplication.INSTANCE.dataStore.getFloat(key, defValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getBoolean(key: String, defValue: Boolean): Boolean {
|
||||||
|
return BaseApplication.INSTANCE.dataStore.getBoolean(key, defValue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -7,7 +7,7 @@ import android.view.ViewGroup;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import com.huanchengfly.tieba.post.R;
|
import com.huanchengfly.tieba.post.R;
|
||||||
import com.huanchengfly.tieba.post.activities.SettingsActivity;
|
import com.huanchengfly.tieba.post.activities.PreferencesActivity;
|
||||||
import com.huanchengfly.tieba.post.ui.intro.fragments.BaseIntroFragment;
|
import com.huanchengfly.tieba.post.ui.intro.fragments.BaseIntroFragment;
|
||||||
import com.huanchengfly.tieba.post.ui.theme.utils.ThemeUtils;
|
import com.huanchengfly.tieba.post.ui.theme.utils.ThemeUtils;
|
||||||
|
|
||||||
|
|
@ -59,7 +59,7 @@ public class ExploreFragment extends BaseIntroFragment implements View.OnClickLi
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
switch (v.getId()) {
|
switch (v.getId()) {
|
||||||
case R.id.explore_auto_sign:
|
case R.id.explore_auto_sign:
|
||||||
startActivity(new Intent(getAttachContext(), SettingsActivity.class).putExtra("scroll_to_preference", "auto_sign"));
|
startActivity(new Intent(getAttachContext(), PreferencesActivity.class).putExtra("scroll_to_preference", "auto_sign"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,13 @@ package com.huanchengfly.tieba.post.utils
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
import androidx.datastore.core.DataStore
|
||||||
|
import androidx.datastore.preferences.core.*
|
||||||
|
import com.huanchengfly.tieba.post.*
|
||||||
import com.huanchengfly.tieba.post.utils.ThemeUtil.TRANSLUCENT_THEME_LIGHT
|
import com.huanchengfly.tieba.post.utils.ThemeUtil.TRANSLUCENT_THEME_LIGHT
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.MainScope
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import kotlin.properties.ReadWriteProperty
|
import kotlin.properties.ReadWriteProperty
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
|
|
@ -11,123 +17,216 @@ open class AppPreferencesUtils(context: Context) {
|
||||||
private val preferences: SharedPreferences =
|
private val preferences: SharedPreferences =
|
||||||
context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
|
|
||||||
var autoSign by SharedPreferenceDelegates.boolean(defaultValue = false, key = "auto_sign")
|
private val preferencesDataStore: DataStore<Preferences> = context.dataStore
|
||||||
|
|
||||||
var autoSignTime by SharedPreferenceDelegates.string(
|
var autoSign by DataStoreDelegates.boolean(defaultValue = false, key = "auto_sign")
|
||||||
|
|
||||||
|
var autoSignTime by DataStoreDelegates.string(
|
||||||
defaultValue = "09:00",
|
defaultValue = "09:00",
|
||||||
key = "auto_sign_time"
|
key = "auto_sign_time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var checkCIUpdate by SharedPreferenceDelegates.boolean(
|
var checkCIUpdate by DataStoreDelegates.boolean(
|
||||||
defaultValue = false
|
defaultValue = false
|
||||||
)
|
)
|
||||||
|
|
||||||
var collectThreadSeeLz by SharedPreferenceDelegates.boolean(
|
var collectThreadSeeLz by DataStoreDelegates.boolean(
|
||||||
defaultValue = true,
|
defaultValue = true,
|
||||||
key = "collect_thread_see_lz"
|
key = "collect_thread_see_lz"
|
||||||
)
|
)
|
||||||
|
|
||||||
var customPrimaryColor by SharedPreferenceDelegates.string(key = "custom_primary_color")
|
var customPrimaryColor by DataStoreDelegates.string(key = "custom_primary_color")
|
||||||
|
|
||||||
var customStatusBarFontDark by SharedPreferenceDelegates.boolean(
|
var customStatusBarFontDark by DataStoreDelegates.boolean(
|
||||||
defaultValue = false,
|
defaultValue = false,
|
||||||
key = "custom_status_bar_font_dark"
|
key = "custom_status_bar_font_dark"
|
||||||
)
|
)
|
||||||
|
|
||||||
var customToolbarPrimaryColor by SharedPreferenceDelegates.boolean(
|
var customToolbarPrimaryColor by DataStoreDelegates.boolean(
|
||||||
defaultValue = true,
|
defaultValue = true,
|
||||||
key = "custom_toolbar_primary_color"
|
key = "custom_toolbar_primary_color"
|
||||||
)
|
)
|
||||||
|
|
||||||
var defaultSortType by SharedPreferenceDelegates.string(
|
var defaultSortType by DataStoreDelegates.string(
|
||||||
key = "default_sort_type",
|
key = "default_sort_type",
|
||||||
defaultValue = "0"
|
defaultValue = "0"
|
||||||
)
|
)
|
||||||
|
|
||||||
var darkTheme by SharedPreferenceDelegates.string(key = "dark_theme", defaultValue = "dark")
|
var darkTheme by DataStoreDelegates.string(key = "dark_theme", defaultValue = "dark")
|
||||||
|
|
||||||
var followSystemNight by SharedPreferenceDelegates.boolean(
|
var followSystemNight by DataStoreDelegates.boolean(
|
||||||
defaultValue = true,
|
defaultValue = true,
|
||||||
key = "follow_system_night"
|
key = "follow_system_night"
|
||||||
)
|
)
|
||||||
|
|
||||||
var fontScale by SharedPreferenceDelegates.float(defaultValue = 1.0f)
|
var fontScale by DataStoreDelegates.float(defaultValue = 1.0f)
|
||||||
|
|
||||||
var forumFabFunction by SharedPreferenceDelegates.string(defaultValue = "post")
|
var forumFabFunction by DataStoreDelegates.string(defaultValue = "post")
|
||||||
|
|
||||||
var hideExplore by SharedPreferenceDelegates.boolean(defaultValue = false)
|
var hideExplore by DataStoreDelegates.boolean(defaultValue = false)
|
||||||
|
|
||||||
var hideForumIntroAndStat by SharedPreferenceDelegates.boolean(defaultValue = false)
|
var hideForumIntroAndStat by DataStoreDelegates.boolean(defaultValue = false)
|
||||||
|
|
||||||
var homePageScroll by SharedPreferenceDelegates.boolean(defaultValue = false)
|
var homePageScroll by DataStoreDelegates.boolean(defaultValue = false)
|
||||||
|
|
||||||
var imageLoadType by SharedPreferenceDelegates.string(
|
var imageLoadType by DataStoreDelegates.string(
|
||||||
key = "image_load_type",
|
key = "image_load_type",
|
||||||
defaultValue = "0"
|
defaultValue = "0"
|
||||||
)
|
)
|
||||||
|
|
||||||
var listItemsBackgroundIntermixed by SharedPreferenceDelegates.boolean(defaultValue = true)
|
var listItemsBackgroundIntermixed by DataStoreDelegates.boolean(defaultValue = true)
|
||||||
|
|
||||||
var listSingle by SharedPreferenceDelegates.boolean(defaultValue = false)
|
var listSingle by DataStoreDelegates.boolean(defaultValue = false)
|
||||||
|
|
||||||
var littleTail by SharedPreferenceDelegates.string(key = "little_tail")
|
var littleTail by DataStoreDelegates.string(key = "little_tail")
|
||||||
|
|
||||||
var loadPictureWhenScroll by SharedPreferenceDelegates.boolean(defaultValue = true)
|
var loadPictureWhenScroll by DataStoreDelegates.boolean(defaultValue = true)
|
||||||
|
|
||||||
var oldTheme by SharedPreferenceDelegates.string(key = "old_theme")
|
var oldTheme by DataStoreDelegates.string(key = "old_theme")
|
||||||
|
|
||||||
var oksignSlowMode by SharedPreferenceDelegates.boolean(
|
var oksignSlowMode by DataStoreDelegates.boolean(
|
||||||
defaultValue = true,
|
defaultValue = true,
|
||||||
key = "oksign_slow_mode"
|
key = "oksign_slow_mode"
|
||||||
)
|
)
|
||||||
|
|
||||||
var postOrReplyWarning by SharedPreferenceDelegates.boolean(defaultValue = true)
|
var postOrReplyWarning by DataStoreDelegates.boolean(defaultValue = true)
|
||||||
|
|
||||||
var radius by SharedPreferenceDelegates.int(defaultValue = 8)
|
var radius by DataStoreDelegates.int(defaultValue = 8)
|
||||||
|
|
||||||
var signDay by SharedPreferenceDelegates.int(defaultValue = -1, key = "sign_day")
|
var signDay by DataStoreDelegates.int(defaultValue = -1, key = "sign_day")
|
||||||
|
|
||||||
var showBothUsernameAndNickname by SharedPreferenceDelegates.boolean(
|
var showBothUsernameAndNickname by DataStoreDelegates.boolean(
|
||||||
defaultValue = false,
|
defaultValue = false,
|
||||||
key = "show_both_username_and_nickname"
|
key = "show_both_username_and_nickname"
|
||||||
)
|
)
|
||||||
|
|
||||||
var showShortcutInThread by SharedPreferenceDelegates.boolean(defaultValue = true)
|
var showShortcutInThread by DataStoreDelegates.boolean(defaultValue = true)
|
||||||
|
|
||||||
var showTopForumInNormalList by SharedPreferenceDelegates.boolean(
|
var showTopForumInNormalList by DataStoreDelegates.boolean(
|
||||||
defaultValue = true,
|
defaultValue = true,
|
||||||
key = "show_top_forum_in_normal_list"
|
key = "show_top_forum_in_normal_list"
|
||||||
)
|
)
|
||||||
|
|
||||||
var statusBarDarker by SharedPreferenceDelegates.boolean(
|
var statusBarDarker by DataStoreDelegates.boolean(
|
||||||
defaultValue = true,
|
defaultValue = true,
|
||||||
key = "status_bar_darker"
|
key = "status_bar_darker"
|
||||||
)
|
)
|
||||||
|
|
||||||
var theme by SharedPreferenceDelegates.string(defaultValue = ThemeUtil.THEME_WHITE)
|
var theme by DataStoreDelegates.string(defaultValue = ThemeUtil.THEME_WHITE)
|
||||||
|
|
||||||
var translucentBackgroundAlpha by SharedPreferenceDelegates.int(
|
var translucentBackgroundAlpha by DataStoreDelegates.int(
|
||||||
defaultValue = 255,
|
defaultValue = 255,
|
||||||
key = "translucent_background_alpha"
|
key = "translucent_background_alpha"
|
||||||
)
|
)
|
||||||
|
|
||||||
var translucentBackgroundBlur by SharedPreferenceDelegates.int(key = "translucent_background_blur")
|
var translucentBackgroundBlur by DataStoreDelegates.int(key = "translucent_background_blur")
|
||||||
|
|
||||||
var translucentBackgroundTheme by SharedPreferenceDelegates.int(
|
var translucentBackgroundTheme by DataStoreDelegates.int(
|
||||||
defaultValue = TRANSLUCENT_THEME_LIGHT,
|
defaultValue = TRANSLUCENT_THEME_LIGHT,
|
||||||
key = "translucent_background_theme"
|
key = "translucent_background_theme"
|
||||||
)
|
)
|
||||||
|
|
||||||
var translucentThemeBackgroundPath by SharedPreferenceDelegates.string(key = "translucent_theme_background_path")
|
var translucentThemeBackgroundPath by DataStoreDelegates.string(key = "translucent_theme_background_path")
|
||||||
|
|
||||||
var translucentPrimaryColor by SharedPreferenceDelegates.string(key = "translucent_primary_color")
|
var translucentPrimaryColor by DataStoreDelegates.string(key = "translucent_primary_color")
|
||||||
|
|
||||||
var useCustomTabs by SharedPreferenceDelegates.boolean(
|
var useCustomTabs by DataStoreDelegates.boolean(
|
||||||
defaultValue = true,
|
defaultValue = true,
|
||||||
key = "use_custom_tabs"
|
key = "use_custom_tabs"
|
||||||
)
|
)
|
||||||
|
|
||||||
var useWebView by SharedPreferenceDelegates.boolean(defaultValue = true, key = "use_webview")
|
var useWebView by DataStoreDelegates.boolean(defaultValue = true, key = "use_webview")
|
||||||
|
|
||||||
|
private object DataStoreDelegates {
|
||||||
|
fun int(
|
||||||
|
defaultValue: Int = 0,
|
||||||
|
key: String? = null
|
||||||
|
) = object : ReadWriteProperty<AppPreferencesUtils, Int> {
|
||||||
|
override fun getValue(thisRef: AppPreferencesUtils, property: KProperty<*>): Int {
|
||||||
|
return thisRef.preferencesDataStore.getInt(key ?: property.name, defaultValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setValue(
|
||||||
|
thisRef: AppPreferencesUtils,
|
||||||
|
property: KProperty<*>,
|
||||||
|
value: Int
|
||||||
|
) {
|
||||||
|
MainScope().launch(Dispatchers.IO) {
|
||||||
|
thisRef.preferencesDataStore.edit {
|
||||||
|
it[intPreferencesKey(key ?: property.name)] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun string(
|
||||||
|
defaultValue: String? = null,
|
||||||
|
key: String? = null
|
||||||
|
) = object : ReadWriteProperty<AppPreferencesUtils, String?> {
|
||||||
|
override fun getValue(thisRef: AppPreferencesUtils, property: KProperty<*>): String? {
|
||||||
|
return thisRef.preferencesDataStore.getString(key ?: property.name, defaultValue)
|
||||||
|
?: defaultValue
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setValue(
|
||||||
|
thisRef: AppPreferencesUtils,
|
||||||
|
property: KProperty<*>,
|
||||||
|
value: String?
|
||||||
|
) {
|
||||||
|
MainScope().launch(Dispatchers.IO) {
|
||||||
|
thisRef.preferencesDataStore.edit {
|
||||||
|
if (value == null) {
|
||||||
|
it.remove(stringPreferencesKey(key ?: property.name))
|
||||||
|
} else {
|
||||||
|
it[stringPreferencesKey(key ?: property.name)] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun float(
|
||||||
|
defaultValue: Float = 0F,
|
||||||
|
key: String? = null
|
||||||
|
) = object : ReadWriteProperty<AppPreferencesUtils, Float> {
|
||||||
|
override fun getValue(thisRef: AppPreferencesUtils, property: KProperty<*>): Float {
|
||||||
|
return thisRef.preferencesDataStore.getFloat(key ?: property.name, defaultValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setValue(
|
||||||
|
thisRef: AppPreferencesUtils,
|
||||||
|
property: KProperty<*>,
|
||||||
|
value: Float
|
||||||
|
) {
|
||||||
|
MainScope().launch(Dispatchers.IO) {
|
||||||
|
thisRef.preferencesDataStore.edit {
|
||||||
|
it[floatPreferencesKey(key ?: property.name)] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun boolean(
|
||||||
|
defaultValue: Boolean = false,
|
||||||
|
key: String? = null
|
||||||
|
) = object : ReadWriteProperty<AppPreferencesUtils, Boolean> {
|
||||||
|
override fun getValue(thisRef: AppPreferencesUtils, property: KProperty<*>): Boolean {
|
||||||
|
return thisRef.preferencesDataStore.getBoolean(key ?: property.name, defaultValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setValue(
|
||||||
|
thisRef: AppPreferencesUtils,
|
||||||
|
property: KProperty<*>,
|
||||||
|
value: Boolean
|
||||||
|
) {
|
||||||
|
MainScope().launch(Dispatchers.IO) {
|
||||||
|
thisRef.preferencesDataStore.edit {
|
||||||
|
it[booleanPreferencesKey(key ?: property.name)] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private object SharedPreferenceDelegates {
|
private object SharedPreferenceDelegates {
|
||||||
fun int(
|
fun int(
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
app:backgroundTint="@color/default_color_window_background"
|
app:backgroundTint="@color/default_color_window_background"
|
||||||
tools:context=".activities.SettingsActivity">
|
tools:context=".activities.PreferencesActivity">
|
||||||
|
|
||||||
<include layout="@layout/layout_appbar" />
|
<include layout="@layout/layout_appbar" />
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue