fix: 迁移 DataStore
This commit is contained in:
parent
45c0fcf721
commit
54bd414e52
|
|
@ -5,6 +5,7 @@ import androidx.datastore.core.DataStore
|
||||||
import androidx.datastore.preferences.SharedPreferencesMigration
|
import androidx.datastore.preferences.SharedPreferencesMigration
|
||||||
import androidx.datastore.preferences.core.*
|
import androidx.datastore.preferences.core.*
|
||||||
import androidx.datastore.preferences.preferencesDataStore
|
import androidx.datastore.preferences.preferencesDataStore
|
||||||
|
import androidx.preference.PreferenceDataStore
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.MainScope
|
import kotlinx.coroutines.MainScope
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
|
|
@ -42,6 +43,14 @@ fun DataStore<Preferences>.putBoolean(key: String, value: Boolean) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun DataStore<Preferences>.putInt(key: String, value: Int) {
|
||||||
|
MainScope().launch(Dispatchers.IO) {
|
||||||
|
BaseApplication.INSTANCE.dataStore.edit {
|
||||||
|
it[intPreferencesKey(key)] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun DataStore<Preferences>.getInt(key: String, defaultValue: Int): Int {
|
fun DataStore<Preferences>.getInt(key: String, defaultValue: Int): Int {
|
||||||
var resultValue = defaultValue
|
var resultValue = defaultValue
|
||||||
|
|
||||||
|
|
@ -135,3 +144,88 @@ fun DataStore<Preferences>.getLong(key: String, defaultValue: Long): Long {
|
||||||
|
|
||||||
return resultValue
|
return resultValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -43,7 +43,7 @@ import com.google.android.material.button.MaterialButton
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import com.google.android.material.tabs.TabLayout
|
import com.google.android.material.tabs.TabLayout
|
||||||
import com.huanchengfly.tieba.post.R
|
import com.huanchengfly.tieba.post.*
|
||||||
import com.huanchengfly.tieba.post.adapters.FragmentTabViewPagerAdapter
|
import com.huanchengfly.tieba.post.adapters.FragmentTabViewPagerAdapter
|
||||||
import com.huanchengfly.tieba.post.adapters.SingleChooseAdapter
|
import com.huanchengfly.tieba.post.adapters.SingleChooseAdapter
|
||||||
import com.huanchengfly.tieba.post.api.ForumSortType
|
import com.huanchengfly.tieba.post.api.ForumSortType
|
||||||
|
|
@ -53,15 +53,12 @@ import com.huanchengfly.tieba.post.api.models.ForumPageBean
|
||||||
import com.huanchengfly.tieba.post.api.models.LikeForumResultBean
|
import com.huanchengfly.tieba.post.api.models.LikeForumResultBean
|
||||||
import com.huanchengfly.tieba.post.api.retrofit.doIfFailure
|
import com.huanchengfly.tieba.post.api.retrofit.doIfFailure
|
||||||
import com.huanchengfly.tieba.post.api.retrofit.doIfSuccess
|
import com.huanchengfly.tieba.post.api.retrofit.doIfSuccess
|
||||||
import com.huanchengfly.tieba.post.dpToPxFloat
|
|
||||||
import com.huanchengfly.tieba.post.fragments.ForumFragment
|
import com.huanchengfly.tieba.post.fragments.ForumFragment
|
||||||
import com.huanchengfly.tieba.post.fragments.ForumFragment.OnRefreshedListener
|
import com.huanchengfly.tieba.post.fragments.ForumFragment.OnRefreshedListener
|
||||||
import com.huanchengfly.tieba.post.goToActivity
|
|
||||||
import com.huanchengfly.tieba.post.interfaces.Refreshable
|
import com.huanchengfly.tieba.post.interfaces.Refreshable
|
||||||
import com.huanchengfly.tieba.post.interfaces.ScrollTopable
|
import com.huanchengfly.tieba.post.interfaces.ScrollTopable
|
||||||
import com.huanchengfly.tieba.post.models.PhotoViewBean
|
import com.huanchengfly.tieba.post.models.PhotoViewBean
|
||||||
import com.huanchengfly.tieba.post.models.database.History
|
import com.huanchengfly.tieba.post.models.database.History
|
||||||
import com.huanchengfly.tieba.post.toastShort
|
|
||||||
import com.huanchengfly.tieba.post.ui.common.animation.addMaskAnimation
|
import com.huanchengfly.tieba.post.ui.common.animation.addMaskAnimation
|
||||||
import com.huanchengfly.tieba.post.ui.common.animation.addZoomAnimation
|
import com.huanchengfly.tieba.post.ui.common.animation.addZoomAnimation
|
||||||
import com.huanchengfly.tieba.post.ui.common.animation.buildPressAnimator
|
import com.huanchengfly.tieba.post.ui.common.animation.buildPressAnimator
|
||||||
|
|
@ -210,8 +207,7 @@ class ForumActivity : BaseActivity(), View.OnClickListener, OnRefreshedListener,
|
||||||
private fun getSortType(): ForumSortType {
|
private fun getSortType(): ForumSortType {
|
||||||
val defaultSortType = appPreferences.defaultSortType!!.toInt()
|
val defaultSortType = appPreferences.defaultSortType!!.toInt()
|
||||||
return ForumSortType.valueOf(
|
return ForumSortType.valueOf(
|
||||||
SharedPreferencesUtil.get(this, SharedPreferencesUtil.SP_SETTINGS)
|
dataStore.getInt(forumName + "_sort_type", defaultSortType)
|
||||||
.getInt(forumName + "_sort_type", defaultSortType)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -223,10 +219,7 @@ class ForumActivity : BaseActivity(), View.OnClickListener, OnRefreshedListener,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
refresh()
|
refresh()
|
||||||
SharedPreferencesUtil.get(this, SharedPreferencesUtil.SP_SETTINGS)
|
dataStore.putInt(forumName + "_sort_type", sortType.value)
|
||||||
.edit()
|
|
||||||
.putInt(forumName + "_sort_type", sortType.value)
|
|
||||||
.apply()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun refresh() {
|
private fun refresh() {
|
||||||
|
|
|
||||||
|
|
@ -21,11 +21,11 @@ import com.huanchengfly.tieba.post.api.models.PersonalizedBean;
|
||||||
import com.huanchengfly.tieba.post.components.MyViewHolder;
|
import com.huanchengfly.tieba.post.components.MyViewHolder;
|
||||||
import com.huanchengfly.tieba.post.components.dialogs.DislikeDialog;
|
import com.huanchengfly.tieba.post.components.dialogs.DislikeDialog;
|
||||||
import com.huanchengfly.tieba.post.models.PhotoViewBean;
|
import com.huanchengfly.tieba.post.models.PhotoViewBean;
|
||||||
|
import com.huanchengfly.tieba.post.utils.AppPreferencesUtilsKt;
|
||||||
import com.huanchengfly.tieba.post.utils.DateTimeUtils;
|
import com.huanchengfly.tieba.post.utils.DateTimeUtils;
|
||||||
import com.huanchengfly.tieba.post.utils.DisplayUtil;
|
import com.huanchengfly.tieba.post.utils.DisplayUtil;
|
||||||
import com.huanchengfly.tieba.post.utils.ImageUtil;
|
import com.huanchengfly.tieba.post.utils.ImageUtil;
|
||||||
import com.huanchengfly.tieba.post.utils.NavigationHelper;
|
import com.huanchengfly.tieba.post.utils.NavigationHelper;
|
||||||
import com.huanchengfly.tieba.post.utils.SharedPreferencesUtil;
|
|
||||||
import com.huanchengfly.tieba.post.utils.Util;
|
import com.huanchengfly.tieba.post.utils.Util;
|
||||||
import com.huanchengfly.tieba.post.widgets.MarkedImageView;
|
import com.huanchengfly.tieba.post.widgets.MarkedImageView;
|
||||||
import com.huanchengfly.tieba.post.widgets.VideoPlayerStandard;
|
import com.huanchengfly.tieba.post.widgets.VideoPlayerStandard;
|
||||||
|
|
@ -243,7 +243,7 @@ public class PersonalizedFeedAdapter extends BaseMultiTypeAdapter<PersonalizedBe
|
||||||
case TYPE_THREAD_MULTI_PIC:
|
case TYPE_THREAD_MULTI_PIC:
|
||||||
GridLayout gridLayout = viewHolder.getView(R.id.forum_item_content_pics);
|
GridLayout gridLayout = viewHolder.getView(R.id.forum_item_content_pics);
|
||||||
CardView cardView = viewHolder.getView(R.id.forum_item_content_pics_card);
|
CardView cardView = viewHolder.getView(R.id.forum_item_content_pics_card);
|
||||||
cardView.setRadius(DisplayUtil.dp2px(getContext(), SharedPreferencesUtil.get(getContext(), SharedPreferencesUtil.SP_SETTINGS).getInt("radius", 8)));
|
cardView.setRadius(DisplayUtil.dp2px(getContext(), AppPreferencesUtilsKt.getAppPreferences(getContext()).getRadius()));
|
||||||
MarkedImageView firstImageView = viewHolder.getView(R.id.forum_item_content_pic_1);
|
MarkedImageView firstImageView = viewHolder.getView(R.id.forum_item_content_pic_1);
|
||||||
MarkedImageView secondImageView = viewHolder.getView(R.id.forum_item_content_pic_2);
|
MarkedImageView secondImageView = viewHolder.getView(R.id.forum_item_content_pic_2);
|
||||||
MarkedImageView thirdImageView = viewHolder.getView(R.id.forum_item_content_pic_3);
|
MarkedImageView thirdImageView = viewHolder.getView(R.id.forum_item_content_pic_3);
|
||||||
|
|
|
||||||
|
|
@ -27,12 +27,12 @@ import com.huanchengfly.tieba.post.adapters.base.BaseMultiTypeDelegateAdapter;
|
||||||
import com.huanchengfly.tieba.post.api.models.ForumPageBean;
|
import com.huanchengfly.tieba.post.api.models.ForumPageBean;
|
||||||
import com.huanchengfly.tieba.post.components.MyViewHolder;
|
import com.huanchengfly.tieba.post.components.MyViewHolder;
|
||||||
import com.huanchengfly.tieba.post.models.PhotoViewBean;
|
import com.huanchengfly.tieba.post.models.PhotoViewBean;
|
||||||
|
import com.huanchengfly.tieba.post.utils.AppPreferencesUtilsKt;
|
||||||
import com.huanchengfly.tieba.post.utils.BlockUtil;
|
import com.huanchengfly.tieba.post.utils.BlockUtil;
|
||||||
import com.huanchengfly.tieba.post.utils.DateTimeUtils;
|
import com.huanchengfly.tieba.post.utils.DateTimeUtils;
|
||||||
import com.huanchengfly.tieba.post.utils.DisplayUtil;
|
import com.huanchengfly.tieba.post.utils.DisplayUtil;
|
||||||
import com.huanchengfly.tieba.post.utils.ImageUtil;
|
import com.huanchengfly.tieba.post.utils.ImageUtil;
|
||||||
import com.huanchengfly.tieba.post.utils.NavigationHelper;
|
import com.huanchengfly.tieba.post.utils.NavigationHelper;
|
||||||
import com.huanchengfly.tieba.post.utils.SharedPreferencesUtil;
|
|
||||||
import com.huanchengfly.tieba.post.utils.StringUtil;
|
import com.huanchengfly.tieba.post.utils.StringUtil;
|
||||||
import com.huanchengfly.tieba.post.utils.Util;
|
import com.huanchengfly.tieba.post.utils.Util;
|
||||||
import com.huanchengfly.tieba.post.utils.preload.PreloadUtil;
|
import com.huanchengfly.tieba.post.utils.preload.PreloadUtil;
|
||||||
|
|
@ -256,7 +256,12 @@ public class NewForumAdapter extends BaseMultiTypeDelegateAdapter<ForumPageBean.
|
||||||
case TYPE_THREAD_MULTI_PIC:
|
case TYPE_THREAD_MULTI_PIC:
|
||||||
GridLayout gridLayout = viewHolder.getView(R.id.forum_item_content_pics);
|
GridLayout gridLayout = viewHolder.getView(R.id.forum_item_content_pics);
|
||||||
CardView cardView = viewHolder.getView(R.id.forum_item_content_pics_card);
|
CardView cardView = viewHolder.getView(R.id.forum_item_content_pics_card);
|
||||||
cardView.setRadius(DisplayUtil.dp2px(getContext(), SharedPreferencesUtil.get(getContext(), SharedPreferencesUtil.SP_SETTINGS).getInt("radius", 8)));
|
cardView.setRadius(
|
||||||
|
DisplayUtil.dp2px(
|
||||||
|
getContext(),
|
||||||
|
AppPreferencesUtilsKt.getAppPreferences(getContext()).getRadius()
|
||||||
|
)
|
||||||
|
);
|
||||||
MarkedImageView firstImageView = viewHolder.getView(R.id.forum_item_content_pic_1);
|
MarkedImageView firstImageView = viewHolder.getView(R.id.forum_item_content_pic_1);
|
||||||
MarkedImageView secondImageView = viewHolder.getView(R.id.forum_item_content_pic_2);
|
MarkedImageView secondImageView = viewHolder.getView(R.id.forum_item_content_pic_2);
|
||||||
MarkedImageView thirdImageView = viewHolder.getView(R.id.forum_item_content_pic_3);
|
MarkedImageView thirdImageView = viewHolder.getView(R.id.forum_item_content_pic_3);
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ import com.huanchengfly.tieba.post.components.MyViewHolder
|
||||||
import com.huanchengfly.tieba.post.interfaces.Refreshable
|
import com.huanchengfly.tieba.post.interfaces.Refreshable
|
||||||
import com.huanchengfly.tieba.post.models.database.TopForum
|
import com.huanchengfly.tieba.post.models.database.TopForum
|
||||||
import com.huanchengfly.tieba.post.utils.*
|
import com.huanchengfly.tieba.post.utils.*
|
||||||
|
import com.huanchengfly.tieba.post.utils.ThemeUtil.dataStore
|
||||||
import com.huanchengfly.tieba.post.utils.preload.PreloadUtil
|
import com.huanchengfly.tieba.post.utils.preload.PreloadUtil
|
||||||
import com.huanchengfly.tieba.post.utils.preload.loaders.ForumLoader
|
import com.huanchengfly.tieba.post.utils.preload.loaders.ForumLoader
|
||||||
import com.scwang.smart.refresh.header.MaterialHeader
|
import com.scwang.smart.refresh.header.MaterialHeader
|
||||||
|
|
@ -148,8 +149,7 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
|
||||||
private fun getSortType(forumName: String): ForumSortType {
|
private fun getSortType(forumName: String): ForumSortType {
|
||||||
val defaultSortType = appPreferences.defaultSortType!!.toInt()
|
val defaultSortType = appPreferences.defaultSortType!!.toInt()
|
||||||
return ForumSortType.valueOf(
|
return ForumSortType.valueOf(
|
||||||
SharedPreferencesUtil.get(attachContext, SharedPreferencesUtil.SP_SETTINGS)
|
dataStore.getInt(forumName + "_sort_type", defaultSortType)
|
||||||
.getInt(forumName + "_sort_type", defaultSortType)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,12 @@ 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.datastore.preferences.core.*
|
import androidx.preference.EditTextPreference
|
||||||
import androidx.preference.*
|
import androidx.preference.ListPreference
|
||||||
|
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.DataStorePreference
|
||||||
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
|
||||||
|
|
@ -23,11 +25,9 @@ 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.common.theme.utils.ThemeUtils
|
import com.huanchengfly.tieba.post.ui.common.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 PreferencesFragment : PreferencesFragment() {
|
class PreferencesFragment : PreferencesFragment() {
|
||||||
private var loginInfo: Account? = null
|
private var loginInfo: Account? = null
|
||||||
|
|
@ -297,89 +297,4 @@ class PreferencesFragment : PreferencesFragment() {
|
||||||
companion object {
|
companion object {
|
||||||
const val TAG = "PreferencesFragment"
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,214 +1,222 @@
|
||||||
package com.huanchengfly.tieba.post.fragments;
|
package com.huanchengfly.tieba.post.fragments
|
||||||
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color
|
||||||
import android.os.Bundle;
|
import android.os.Bundle
|
||||||
import android.view.View;
|
import android.view.View
|
||||||
import android.widget.Toast;
|
import android.widget.Toast
|
||||||
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import androidx.annotation.NonNull;
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.annotation.Nullable;
|
import butterknife.BindView
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import com.huanchengfly.tieba.post.R
|
||||||
|
import com.huanchengfly.tieba.post.adapters.ThreadStoreAdapter
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.huanchengfly.tieba.post.adapters.base.OnItemClickListener
|
||||||
import com.huanchengfly.tieba.post.R;
|
import com.huanchengfly.tieba.post.api.TiebaApi.getInstance
|
||||||
import com.huanchengfly.tieba.post.adapters.ThreadStoreAdapter;
|
import com.huanchengfly.tieba.post.api.booleanToString
|
||||||
import com.huanchengfly.tieba.post.api.TiebaApi;
|
import com.huanchengfly.tieba.post.api.models.CommonResponse
|
||||||
import com.huanchengfly.tieba.post.api.models.CommonResponse;
|
import com.huanchengfly.tieba.post.api.models.ThreadStoreBean
|
||||||
import com.huanchengfly.tieba.post.api.models.ThreadStoreBean;
|
import com.huanchengfly.tieba.post.api.models.ThreadStoreBean.ThreadStoreInfo
|
||||||
import com.huanchengfly.tieba.post.components.MyLinearLayoutManager;
|
import com.huanchengfly.tieba.post.components.MyLinearLayoutManager
|
||||||
import com.huanchengfly.tieba.post.models.database.Account;
|
import com.huanchengfly.tieba.post.components.MyViewHolder
|
||||||
import com.huanchengfly.tieba.post.utils.AccountUtil;
|
import com.huanchengfly.tieba.post.dataStore
|
||||||
import com.huanchengfly.tieba.post.utils.NavigationHelper;
|
import com.huanchengfly.tieba.post.getBoolean
|
||||||
import com.huanchengfly.tieba.post.utils.SharedPreferencesUtil;
|
import com.huanchengfly.tieba.post.utils.AccountUtil.getLoginInfo
|
||||||
import com.huanchengfly.tieba.post.utils.ThemeUtil;
|
import com.huanchengfly.tieba.post.utils.NavigationHelper
|
||||||
import com.huanchengfly.tieba.post.utils.Util;
|
import com.huanchengfly.tieba.post.utils.ThemeUtil.setThemeForSmartRefreshLayout
|
||||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
import com.huanchengfly.tieba.post.utils.Util
|
||||||
import com.scwang.smart.refresh.layout.api.RefreshLayout;
|
import com.scwang.smart.refresh.layout.SmartRefreshLayout
|
||||||
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener;
|
import com.scwang.smart.refresh.layout.api.RefreshLayout
|
||||||
|
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
|
||||||
import org.jetbrains.annotations.NotNull;
|
import retrofit2.Call
|
||||||
|
import retrofit2.Callback
|
||||||
import java.util.HashMap;
|
import retrofit2.Response
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import butterknife.BindView;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import retrofit2.Response;
|
|
||||||
|
|
||||||
public class ThreadStoreFragment extends BaseFragment {
|
|
||||||
|
|
||||||
|
class ThreadStoreFragment : BaseFragment() {
|
||||||
|
@JvmField
|
||||||
@BindView(R.id.thread_store_recycler_view)
|
@BindView(R.id.thread_store_recycler_view)
|
||||||
public RecyclerView recyclerView;
|
var recyclerView: RecyclerView? = null
|
||||||
|
|
||||||
|
@JvmField
|
||||||
@BindView(R.id.thread_store_refresh_layout)
|
@BindView(R.id.thread_store_refresh_layout)
|
||||||
public SmartRefreshLayout refreshLayout;
|
var refreshLayout: SmartRefreshLayout? = null
|
||||||
|
val navigationHelper: NavigationHelper by lazy { NavigationHelper.newInstance(attachContext) }
|
||||||
public NavigationHelper navigationHelper;
|
private val threadStoreAdapter: ThreadStoreAdapter by lazy { ThreadStoreAdapter(attachContext) }
|
||||||
private ThreadStoreAdapter threadStoreAdapter;
|
private var page = 0
|
||||||
private int page = 0;
|
private var hasMore = true
|
||||||
private boolean hasMore = true;
|
private var tbs: String? = null
|
||||||
private String tbs;
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
public ThreadStoreFragment() {
|
val account = getLoginInfo(attachContext)
|
||||||
|
if (account != null) tbs = account.tbs
|
||||||
|
threadStoreAdapter.setOnItemClickListener(object : OnItemClickListener<ThreadStoreInfo> {
|
||||||
|
override fun onClick(viewHolder: MyViewHolder, item: ThreadStoreInfo, position: Int) {
|
||||||
|
val map: MutableMap<String, String> = HashMap()
|
||||||
|
map["tid"] = item.threadId
|
||||||
|
map["pid"] = item.markPid
|
||||||
|
map["seeLz"] = attachContext.dataStore.getBoolean("collect_thread_see_lz", true)
|
||||||
|
.booleanToString()
|
||||||
|
map["from"] = "collect"
|
||||||
|
map["max_pid"] = item.maxPid
|
||||||
|
navigationHelper.navigationByData(NavigationHelper.ACTION_THREAD, map)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun getLayoutId(): Int {
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
return R.layout.fragment_thread_store
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
navigationHelper = NavigationHelper.newInstance(getAttachContext());
|
|
||||||
Account account = AccountUtil.getLoginInfo(getAttachContext());
|
|
||||||
if (account != null) tbs = account.getTbs();
|
|
||||||
threadStoreAdapter = new ThreadStoreAdapter(getAttachContext());
|
|
||||||
threadStoreAdapter.setOnItemClickListener((viewHolder, threadStoreInfo, i) -> {
|
|
||||||
Map<String, String> map = new HashMap<>();
|
|
||||||
map.put("tid", threadStoreInfo.getThreadId());
|
|
||||||
map.put("pid", threadStoreInfo.getMarkPid());
|
|
||||||
map.put("seeLz", SharedPreferencesUtil.get(getAttachContext(), SharedPreferencesUtil.SP_SETTINGS).getBoolean("collect_thread_see_lz", true) ? "1" : "0");
|
|
||||||
map.put("from", "collect");
|
|
||||||
map.put("max_pid", threadStoreInfo.getMaxPid());
|
|
||||||
navigationHelper.navigationByData(NavigationHelper.ACTION_THREAD, map);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
public int getLayoutId() {
|
super.onViewCreated(view, savedInstanceState)
|
||||||
return R.layout.fragment_thread_store;
|
setThemeForSmartRefreshLayout(refreshLayout!!)
|
||||||
|
refreshLayout!!.setOnRefreshLoadMoreListener(object : OnRefreshLoadMoreListener {
|
||||||
|
override fun onLoadMore(refreshLayout: RefreshLayout) {
|
||||||
|
loadMore()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun onRefresh(refreshLayout: RefreshLayout) {
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
refresh()
|
||||||
super.onViewCreated(view, savedInstanceState);
|
}
|
||||||
ThemeUtil.setThemeForSmartRefreshLayout(refreshLayout);
|
})
|
||||||
refreshLayout.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
|
recyclerView!!.layoutManager = MyLinearLayoutManager(attachContext)
|
||||||
@Override
|
val mItemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() {
|
||||||
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
|
override fun clearView(
|
||||||
loadMore();
|
recyclerView: RecyclerView,
|
||||||
|
viewHolder: RecyclerView.ViewHolder
|
||||||
|
) {
|
||||||
|
super.clearView(recyclerView, viewHolder)
|
||||||
|
viewHolder.itemView.setBackgroundColor(Color.TRANSPARENT)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
|
||||||
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
|
super.onSelectedChanged(viewHolder, actionState)
|
||||||
refresh();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
recyclerView.setLayoutManager(new MyLinearLayoutManager(getAttachContext()));
|
|
||||||
ItemTouchHelper mItemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
|
|
||||||
@Override
|
|
||||||
public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
|
|
||||||
super.clearView(recyclerView, viewHolder);
|
|
||||||
viewHolder.itemView.setBackgroundColor(Color.TRANSPARENT);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
|
|
||||||
super.onSelectedChanged(viewHolder, actionState);
|
|
||||||
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
|
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
|
||||||
viewHolder.itemView.setBackgroundColor(Util.getColorByAttr(getAttachContext(), R.attr.colorControlHighlight, R.color.transparent));
|
viewHolder!!.itemView.setBackgroundColor(
|
||||||
|
Util.getColorByAttr(
|
||||||
|
attachContext,
|
||||||
|
R.attr.colorControlHighlight,
|
||||||
|
R.color.transparent
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun getMovementFlags(
|
||||||
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
|
recyclerView: RecyclerView,
|
||||||
int dragFlags = 0, swiped = ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT;
|
viewHolder: RecyclerView.ViewHolder
|
||||||
return makeMovementFlags(dragFlags, swiped);
|
): Int {
|
||||||
|
val dragFlags = 0
|
||||||
|
val swiped = ItemTouchHelper.RIGHT or ItemTouchHelper.LEFT
|
||||||
|
return makeMovementFlags(dragFlags, swiped)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun onMove(
|
||||||
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
|
recyclerView: RecyclerView,
|
||||||
return true;
|
viewHolder: RecyclerView.ViewHolder,
|
||||||
|
target: RecyclerView.ViewHolder
|
||||||
|
): Boolean {
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
|
||||||
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
|
val position = viewHolder.adapterPosition
|
||||||
int position = viewHolder.getAdapterPosition();
|
val threadStoreInfo = threadStoreAdapter.getItem(position)
|
||||||
ThreadStoreBean.ThreadStoreInfo threadStoreInfo = threadStoreAdapter.getItem(position);
|
threadStoreAdapter.remove(position)
|
||||||
threadStoreAdapter.remove(position);
|
Util.createSnackbar(recyclerView!!, R.string.toast_deleted, Snackbar.LENGTH_LONG)
|
||||||
Util.createSnackbar(recyclerView, R.string.toast_deleted, Snackbar.LENGTH_LONG)
|
.addCallback(object : Snackbar.Callback() {
|
||||||
.addCallback(new Snackbar.Callback() {
|
override fun onDismissed(snackbar: Snackbar, event: Int) {
|
||||||
@Override
|
|
||||||
public void onDismissed(Snackbar snackbar, int event) {
|
|
||||||
if (event != DISMISS_EVENT_ACTION) {
|
if (event != DISMISS_EVENT_ACTION) {
|
||||||
TiebaApi.getInstance()
|
getInstance()
|
||||||
.removeStore(threadStoreInfo.getThreadId(), tbs)
|
.removeStore(threadStoreInfo.threadId, tbs!!)
|
||||||
.enqueue(new Callback<CommonResponse>() {
|
.enqueue(object : Callback<CommonResponse?> {
|
||||||
@Override
|
override fun onResponse(
|
||||||
public void onResponse(@NotNull Call<CommonResponse> call, @NotNull Response<CommonResponse> response) {
|
call: Call<CommonResponse?>,
|
||||||
|
response: Response<CommonResponse?>
|
||||||
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun onFailure(
|
||||||
public void onFailure(@NotNull Call<CommonResponse> call, @NotNull Throwable t) {
|
call: Call<CommonResponse?>,
|
||||||
Toast.makeText(getAttachContext(), getAttachContext().getString(R.string.toast_delete_error, t.getMessage()), Toast.LENGTH_SHORT).show();
|
t: Throwable
|
||||||
threadStoreAdapter.insert(threadStoreInfo, position);
|
) {
|
||||||
|
Toast.makeText(
|
||||||
|
attachContext,
|
||||||
|
attachContext.getString(
|
||||||
|
R.string.toast_delete_error,
|
||||||
|
t.message
|
||||||
|
),
|
||||||
|
Toast.LENGTH_SHORT
|
||||||
|
).show()
|
||||||
|
threadStoreAdapter.insert(threadStoreInfo, position)
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).setAction(R.string.button_undo, mView -> threadStoreAdapter.insert(threadStoreInfo, position)).show();
|
}).setAction(R.string.button_undo) { mView: View? ->
|
||||||
|
threadStoreAdapter.insert(
|
||||||
|
threadStoreInfo,
|
||||||
|
position
|
||||||
|
)
|
||||||
}
|
}
|
||||||
});
|
.show()
|
||||||
mItemTouchHelper.attachToRecyclerView(recyclerView);
|
}
|
||||||
recyclerView.setAdapter(threadStoreAdapter);
|
})
|
||||||
|
mItemTouchHelper.attachToRecyclerView(recyclerView)
|
||||||
|
recyclerView!!.adapter = threadStoreAdapter
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun onFragmentFirstVisible() {
|
||||||
protected void onFragmentFirstVisible() {
|
refreshLayout!!.autoRefresh()
|
||||||
refreshLayout.autoRefresh();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refresh() {
|
private fun refresh() {
|
||||||
page = 0;
|
page = 0
|
||||||
TiebaApi.getInstance()
|
getInstance()
|
||||||
.threadStore(page, 20)
|
.threadStore(page, 20)
|
||||||
.enqueue(new Callback<ThreadStoreBean>() {
|
.enqueue(object : Callback<ThreadStoreBean?> {
|
||||||
@Override
|
override fun onResponse(
|
||||||
public void onResponse(@NotNull Call<ThreadStoreBean> call, @NotNull Response<ThreadStoreBean> response) {
|
call: Call<ThreadStoreBean?>,
|
||||||
ThreadStoreBean data = response.body();
|
response: Response<ThreadStoreBean?>
|
||||||
refreshLayout.finishRefresh();
|
) {
|
||||||
refreshLayout.setNoMoreData(!hasMore);
|
val data = response.body()
|
||||||
List<ThreadStoreBean.ThreadStoreInfo> storeInfoList = data.getStoreThread();
|
refreshLayout!!.finishRefresh()
|
||||||
if (storeInfoList == null) {
|
refreshLayout!!.setNoMoreData(!hasMore)
|
||||||
return;
|
val storeInfoList = data!!.storeThread ?: return
|
||||||
}
|
threadStoreAdapter.reset()
|
||||||
threadStoreAdapter.reset();
|
threadStoreAdapter.setData(storeInfoList)
|
||||||
threadStoreAdapter.setData(storeInfoList);
|
hasMore = storeInfoList.size > 0
|
||||||
hasMore = storeInfoList.size() > 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun onFailure(call: Call<ThreadStoreBean?>, t: Throwable) {
|
||||||
public void onFailure(@NotNull Call<ThreadStoreBean> call, @NotNull Throwable t) {
|
refreshLayout!!.finishRefresh(false)
|
||||||
refreshLayout.finishRefresh(false);
|
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadMore() {
|
private fun loadMore() {
|
||||||
if (!hasMore) {
|
if (!hasMore) {
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
TiebaApi.getInstance()
|
getInstance()
|
||||||
.threadStore(page + 1, 20)
|
.threadStore(page + 1, 20)
|
||||||
.enqueue(new Callback<ThreadStoreBean>() {
|
.enqueue(object : Callback<ThreadStoreBean?> {
|
||||||
@Override
|
override fun onResponse(
|
||||||
public void onResponse(@NotNull Call<ThreadStoreBean> call, @NotNull Response<ThreadStoreBean> response) {
|
call: Call<ThreadStoreBean?>,
|
||||||
page += 1;
|
response: Response<ThreadStoreBean?>
|
||||||
ThreadStoreBean data = response.body();
|
) {
|
||||||
List<ThreadStoreBean.ThreadStoreInfo> storeInfoList = data.getStoreThread();
|
page += 1
|
||||||
if (storeInfoList == null) {
|
val data = response.body()
|
||||||
return;
|
val storeInfoList = data!!.storeThread ?: return
|
||||||
}
|
threadStoreAdapter.insert(storeInfoList)
|
||||||
threadStoreAdapter.insert(storeInfoList);
|
refreshLayout!!.finishLoadMore()
|
||||||
refreshLayout.finishLoadMore();
|
refreshLayout!!.setNoMoreData(!hasMore)
|
||||||
refreshLayout.setNoMoreData(!hasMore);
|
hasMore = storeInfoList.size > 0
|
||||||
hasMore = storeInfoList.size() > 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun onFailure(call: Call<ThreadStoreBean?>, t: Throwable) {
|
||||||
public void onFailure(@NotNull Call<ThreadStoreBean> call, @NotNull Throwable t) {
|
refreshLayout!!.finishLoadMore(false)
|
||||||
refreshLayout.finishLoadMore(false);
|
Toast.makeText(attachContext, t.message, Toast.LENGTH_SHORT).show()
|
||||||
Toast.makeText(getAttachContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -7,7 +7,6 @@ import androidx.annotation.Nullable;
|
||||||
import com.huanchengfly.tieba.post.R;
|
import com.huanchengfly.tieba.post.R;
|
||||||
import com.huanchengfly.tieba.post.ui.common.intro.fragments.BaseIntroFragment;
|
import com.huanchengfly.tieba.post.ui.common.intro.fragments.BaseIntroFragment;
|
||||||
import com.huanchengfly.tieba.post.ui.common.theme.utils.ThemeUtils;
|
import com.huanchengfly.tieba.post.ui.common.theme.utils.ThemeUtils;
|
||||||
import com.huanchengfly.tieba.post.utils.SharedPreferencesUtil;
|
|
||||||
|
|
||||||
public class CustomSettingsFragment extends BaseIntroFragment {
|
public class CustomSettingsFragment extends BaseIntroFragment {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -51,7 +50,7 @@ public class CustomSettingsFragment extends BaseIntroFragment {
|
||||||
protected void initCustomLayout(ViewGroup container) {
|
protected void initCustomLayout(ViewGroup container) {
|
||||||
super.initCustomLayout(container);
|
super.initCustomLayout(container);
|
||||||
getChildFragmentManager().beginTransaction()
|
getChildFragmentManager().beginTransaction()
|
||||||
.replace(R.id.container, IntroSettingsFragment.newInstance(R.xml.custom_preferences, SharedPreferencesUtil.SP_SETTINGS), "IntroSettingsFragment")
|
.replace(R.id.container, IntroSettingsFragment.newInstance(R.xml.custom_preferences), "IntroSettingsFragment")
|
||||||
.commit();
|
.commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import androidx.annotation.Nullable;
|
||||||
import com.huanchengfly.tieba.post.R;
|
import com.huanchengfly.tieba.post.R;
|
||||||
import com.huanchengfly.tieba.post.ui.common.intro.fragments.BaseIntroFragment;
|
import com.huanchengfly.tieba.post.ui.common.intro.fragments.BaseIntroFragment;
|
||||||
import com.huanchengfly.tieba.post.ui.common.theme.utils.ThemeUtils;
|
import com.huanchengfly.tieba.post.ui.common.theme.utils.ThemeUtils;
|
||||||
import com.huanchengfly.tieba.post.utils.SharedPreferencesUtil;
|
|
||||||
|
|
||||||
public class HabitSettingsFragment extends BaseIntroFragment {
|
public class HabitSettingsFragment extends BaseIntroFragment {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -51,7 +50,7 @@ public class HabitSettingsFragment extends BaseIntroFragment {
|
||||||
protected void initCustomLayout(ViewGroup container) {
|
protected void initCustomLayout(ViewGroup container) {
|
||||||
super.initCustomLayout(container);
|
super.initCustomLayout(container);
|
||||||
getChildFragmentManager().beginTransaction()
|
getChildFragmentManager().beginTransaction()
|
||||||
.replace(R.id.container, IntroSettingsFragment.newInstance(R.xml.habit_preferences, SharedPreferencesUtil.SP_SETTINGS), "IntroSettingsFragment")
|
.replace(R.id.container, IntroSettingsFragment.newInstance(R.xml.habit_preferences), "IntroSettingsFragment")
|
||||||
.commit();
|
.commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,21 +5,20 @@ import android.os.Bundle;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.XmlRes;
|
import androidx.annotation.XmlRes;
|
||||||
|
|
||||||
|
import com.huanchengfly.tieba.post.DataStorePreference;
|
||||||
import com.huanchengfly.tieba.post.fragments.preference.PreferencesFragment;
|
import com.huanchengfly.tieba.post.fragments.preference.PreferencesFragment;
|
||||||
|
|
||||||
public class IntroSettingsFragment extends PreferencesFragment {
|
public class IntroSettingsFragment extends PreferencesFragment {
|
||||||
private String spName;
|
|
||||||
private @XmlRes
|
private @XmlRes
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
private IntroSettingsFragment() {
|
private IntroSettingsFragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IntroSettingsFragment newInstance(@XmlRes int res, String spName) {
|
public static IntroSettingsFragment newInstance(@XmlRes int res) {
|
||||||
IntroSettingsFragment fragment = new IntroSettingsFragment();
|
IntroSettingsFragment fragment = new IntroSettingsFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putInt("res", res);
|
bundle.putInt("res", res);
|
||||||
bundle.putString("spName", spName);
|
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|
@ -28,7 +27,6 @@ public class IntroSettingsFragment extends PreferencesFragment {
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
Bundle bundle = getArguments();
|
Bundle bundle = getArguments();
|
||||||
if (bundle != null) {
|
if (bundle != null) {
|
||||||
spName = bundle.getString("spName");
|
|
||||||
res = bundle.getInt("res");
|
res = bundle.getInt("res");
|
||||||
}
|
}
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
@ -36,7 +34,7 @@ public class IntroSettingsFragment extends PreferencesFragment {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||||
getPreferenceManager().setSharedPreferencesName(spName);
|
getPreferenceManager().setPreferenceDataStore(new DataStorePreference());
|
||||||
addPreferencesFromResource(res);
|
addPreferencesFromResource(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -452,7 +452,7 @@ public class ImageUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getRadiusDp(Context context) {
|
public static int getRadiusDp(Context context) {
|
||||||
return SharedPreferencesUtil.get(context, SharedPreferencesUtil.SP_SETTINGS).getInt("radius", 8);
|
return AppPreferencesUtilsKt.getAppPreferences(context).getRadius();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void load(ImageView imageView, @LoadType int type, String url) {
|
public static void load(ImageView imageView, @LoadType int type, String url) {
|
||||||
|
|
@ -482,7 +482,7 @@ public class ImageUtil {
|
||||||
if (!Util.canLoadGlide(imageView.getContext())) {
|
if (!Util.canLoadGlide(imageView.getContext())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int radius = SharedPreferencesUtil.get(imageView.getContext(), SharedPreferencesUtil.SP_SETTINGS).getInt("radius", 8);
|
int radius = getRadiusDp(imageView.getContext());
|
||||||
RequestBuilder<Drawable> requestBuilder;
|
RequestBuilder<Drawable> requestBuilder;
|
||||||
if (skipNetworkCheck ||
|
if (skipNetworkCheck ||
|
||||||
type == LOAD_TYPE_AVATAR ||
|
type == LOAD_TYPE_AVATAR ||
|
||||||
|
|
@ -570,7 +570,7 @@ public class ImageUtil {
|
||||||
|
|
||||||
@ImageLoadSettings
|
@ImageLoadSettings
|
||||||
private static int getImageLoadSettings() {
|
private static int getImageLoadSettings() {
|
||||||
return Integer.parseInt(SharedPreferencesUtil.get(BaseApplication.getINSTANCE(), SharedPreferencesUtil.SP_SETTINGS).getString("image_load_type", String.valueOf(SETTINGS_SMART_ORIGIN)));
|
return Integer.parseInt(AppPreferencesUtilsKt.getAppPreferences(BaseApplication.getINSTANCE()).getImageLoadType());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String imageToBase64(InputStream is) {
|
public static String imageToBase64(InputStream is) {
|
||||||
|
|
|
||||||
|
|
@ -238,11 +238,13 @@ public final class NavigationHelper {
|
||||||
if (!path.contains("android_asset")) {
|
if (!path.contains("android_asset")) {
|
||||||
if (!(activityName.startsWith("WebViewActivity") || activityName.startsWith("LoginActivity"))) {
|
if (!(activityName.startsWith("WebViewActivity") || activityName.startsWith("LoginActivity"))) {
|
||||||
boolean isTiebaLink = host.contains("tieba.baidu.com") || host.contains("wappass.baidu.com") || host.contains("ufosdk.baidu.com") || host.contains("m.help.baidu.com");
|
boolean isTiebaLink = host.contains("tieba.baidu.com") || host.contains("wappass.baidu.com") || host.contains("ufosdk.baidu.com") || host.contains("m.help.baidu.com");
|
||||||
if (isTiebaLink || SharedPreferencesUtil.get(mContext, SharedPreferencesUtil.SP_SETTINGS).getBoolean("use_webview", true)) {
|
if (isTiebaLink ||
|
||||||
|
AppPreferencesUtilsKt.getAppPreferences(mContext).getUseWebView()
|
||||||
|
) {
|
||||||
startActivity(new Intent(mContext, WebViewActivity.class).putExtra("url", url));
|
startActivity(new Intent(mContext, WebViewActivity.class).putExtra("url", url));
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
if (SharedPreferencesUtil.get(mContext, SharedPreferencesUtil.SP_SETTINGS).getBoolean("use_custom_tabs", true)) {
|
if (AppPreferencesUtilsKt.getAppPreferences(mContext).getUseCustomTabs()) {
|
||||||
CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder()
|
CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder()
|
||||||
.setShowTitle(true)
|
.setShowTitle(true)
|
||||||
.setToolbarColor(ThemeUtils.getColorByAttr(mContext, R.attr.colorToolbar));
|
.setToolbarColor(ThemeUtils.getColorByAttr(mContext, R.attr.colorToolbar));
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ public class SharedPreferencesUtil {
|
||||||
return put(get(context, preference), key, value);
|
return put(get(context, preference), key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@StringDef({SP_APP_DATA, SP_IGNORE_VERSIONS, SP_PERMISSION, SP_SETTINGS, SP_WEBVIEW_INFO, SP_DRAFT, SP_PLUGINS})
|
@StringDef({SP_APP_DATA, SP_IGNORE_VERSIONS, SP_PERMISSION, SP_WEBVIEW_INFO, SP_DRAFT, SP_PLUGINS})
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
public @interface Preferences {
|
public @interface Preferences {
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ public class StringUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CharSequence getUsernameString(Context context, String username, String nickname) {
|
public static CharSequence getUsernameString(Context context, String username, String nickname) {
|
||||||
boolean showBoth = SharedPreferencesUtil.get(context, SharedPreferencesUtil.SP_SETTINGS).getBoolean("show_both_username_and_nickname", false);
|
boolean showBoth = AppPreferencesUtilsKt.getAppPreferences(context).getShowBothUsernameAndNickname();
|
||||||
if (TextUtils.isEmpty(nickname)) {
|
if (TextUtils.isEmpty(nickname)) {
|
||||||
return TextUtils.isEmpty(username) ? "" : username;
|
return TextUtils.isEmpty(username) ? "" : username;
|
||||||
} else if (showBoth && !TextUtils.isEmpty(username) && !TextUtils.equals(username, nickname)) {
|
} else if (showBoth && !TextUtils.isEmpty(username) && !TextUtils.equals(username, nickname)) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue