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.core.*
|
||||
import androidx.datastore.preferences.preferencesDataStore
|
||||
import androidx.preference.PreferenceDataStore
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.MainScope
|
||||
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 {
|
||||
var resultValue = defaultValue
|
||||
|
||||
|
|
@ -135,3 +144,88 @@ fun DataStore<Preferences>.getLong(key: String, defaultValue: Long): Long {
|
|||
|
||||
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.snackbar.Snackbar
|
||||
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.SingleChooseAdapter
|
||||
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.retrofit.doIfFailure
|
||||
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.OnRefreshedListener
|
||||
import com.huanchengfly.tieba.post.goToActivity
|
||||
import com.huanchengfly.tieba.post.interfaces.Refreshable
|
||||
import com.huanchengfly.tieba.post.interfaces.ScrollTopable
|
||||
import com.huanchengfly.tieba.post.models.PhotoViewBean
|
||||
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.addZoomAnimation
|
||||
import com.huanchengfly.tieba.post.ui.common.animation.buildPressAnimator
|
||||
|
|
@ -210,8 +207,7 @@ class ForumActivity : BaseActivity(), View.OnClickListener, OnRefreshedListener,
|
|||
private fun getSortType(): ForumSortType {
|
||||
val defaultSortType = appPreferences.defaultSortType!!.toInt()
|
||||
return ForumSortType.valueOf(
|
||||
SharedPreferencesUtil.get(this, SharedPreferencesUtil.SP_SETTINGS)
|
||||
.getInt(forumName + "_sort_type", defaultSortType)
|
||||
dataStore.getInt(forumName + "_sort_type", defaultSortType)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -223,10 +219,7 @@ class ForumActivity : BaseActivity(), View.OnClickListener, OnRefreshedListener,
|
|||
}
|
||||
}
|
||||
refresh()
|
||||
SharedPreferencesUtil.get(this, SharedPreferencesUtil.SP_SETTINGS)
|
||||
.edit()
|
||||
.putInt(forumName + "_sort_type", sortType.value)
|
||||
.apply()
|
||||
dataStore.putInt(forumName + "_sort_type", sortType.value)
|
||||
}
|
||||
|
||||
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.dialogs.DislikeDialog;
|
||||
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.DisplayUtil;
|
||||
import com.huanchengfly.tieba.post.utils.ImageUtil;
|
||||
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.widgets.MarkedImageView;
|
||||
import com.huanchengfly.tieba.post.widgets.VideoPlayerStandard;
|
||||
|
|
@ -243,7 +243,7 @@ public class PersonalizedFeedAdapter extends BaseMultiTypeAdapter<PersonalizedBe
|
|||
case TYPE_THREAD_MULTI_PIC:
|
||||
GridLayout gridLayout = viewHolder.getView(R.id.forum_item_content_pics);
|
||||
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 secondImageView = viewHolder.getView(R.id.forum_item_content_pic_2);
|
||||
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.components.MyViewHolder;
|
||||
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.DateTimeUtils;
|
||||
import com.huanchengfly.tieba.post.utils.DisplayUtil;
|
||||
import com.huanchengfly.tieba.post.utils.ImageUtil;
|
||||
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.Util;
|
||||
import com.huanchengfly.tieba.post.utils.preload.PreloadUtil;
|
||||
|
|
@ -256,7 +256,12 @@ public class NewForumAdapter extends BaseMultiTypeDelegateAdapter<ForumPageBean.
|
|||
case TYPE_THREAD_MULTI_PIC:
|
||||
GridLayout gridLayout = viewHolder.getView(R.id.forum_item_content_pics);
|
||||
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 secondImageView = viewHolder.getView(R.id.forum_item_content_pic_2);
|
||||
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.models.database.TopForum
|
||||
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.loaders.ForumLoader
|
||||
import com.scwang.smart.refresh.header.MaterialHeader
|
||||
|
|
@ -148,8 +149,7 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
|
|||
private fun getSortType(forumName: String): ForumSortType {
|
||||
val defaultSortType = appPreferences.defaultSortType!!.toInt()
|
||||
return ForumSortType.valueOf(
|
||||
SharedPreferencesUtil.get(attachContext, SharedPreferencesUtil.SP_SETTINGS)
|
||||
.getInt(forumName + "_sort_type", defaultSortType)
|
||||
dataStore.getInt(forumName + "_sort_type", defaultSortType)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,10 +12,12 @@ import android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
|
|||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.datastore.preferences.core.*
|
||||
import androidx.preference.*
|
||||
import androidx.preference.EditTextPreference
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.SwitchPreference
|
||||
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.activities.BlockListActivity
|
||||
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.models.database.Account
|
||||
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.utils.*
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class PreferencesFragment : PreferencesFragment() {
|
||||
private var loginInfo: Account? = null
|
||||
|
|
@ -297,89 +297,4 @@ class PreferencesFragment : PreferencesFragment() {
|
|||
companion object {
|
||||
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.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
import com.huanchengfly.tieba.post.R;
|
||||
import com.huanchengfly.tieba.post.adapters.ThreadStoreAdapter;
|
||||
import com.huanchengfly.tieba.post.api.TiebaApi;
|
||||
import com.huanchengfly.tieba.post.api.models.CommonResponse;
|
||||
import com.huanchengfly.tieba.post.api.models.ThreadStoreBean;
|
||||
import com.huanchengfly.tieba.post.components.MyLinearLayoutManager;
|
||||
import com.huanchengfly.tieba.post.models.database.Account;
|
||||
import com.huanchengfly.tieba.post.utils.AccountUtil;
|
||||
import com.huanchengfly.tieba.post.utils.NavigationHelper;
|
||||
import com.huanchengfly.tieba.post.utils.SharedPreferencesUtil;
|
||||
import com.huanchengfly.tieba.post.utils.ThemeUtil;
|
||||
import com.huanchengfly.tieba.post.utils.Util;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.scwang.smart.refresh.layout.api.RefreshLayout;
|
||||
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashMap;
|
||||
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 {
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import butterknife.BindView
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.huanchengfly.tieba.post.R
|
||||
import com.huanchengfly.tieba.post.adapters.ThreadStoreAdapter
|
||||
import com.huanchengfly.tieba.post.adapters.base.OnItemClickListener
|
||||
import com.huanchengfly.tieba.post.api.TiebaApi.getInstance
|
||||
import com.huanchengfly.tieba.post.api.booleanToString
|
||||
import com.huanchengfly.tieba.post.api.models.CommonResponse
|
||||
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.MyViewHolder
|
||||
import com.huanchengfly.tieba.post.dataStore
|
||||
import com.huanchengfly.tieba.post.getBoolean
|
||||
import com.huanchengfly.tieba.post.utils.AccountUtil.getLoginInfo
|
||||
import com.huanchengfly.tieba.post.utils.NavigationHelper
|
||||
import com.huanchengfly.tieba.post.utils.ThemeUtil.setThemeForSmartRefreshLayout
|
||||
import com.huanchengfly.tieba.post.utils.Util
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout
|
||||
import com.scwang.smart.refresh.layout.api.RefreshLayout
|
||||
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
|
||||
import retrofit2.Call
|
||||
import retrofit2.Callback
|
||||
import retrofit2.Response
|
||||
|
||||
class ThreadStoreFragment : BaseFragment() {
|
||||
@JvmField
|
||||
@BindView(R.id.thread_store_recycler_view)
|
||||
public RecyclerView recyclerView;
|
||||
var recyclerView: RecyclerView? = null
|
||||
|
||||
@JvmField
|
||||
@BindView(R.id.thread_store_refresh_layout)
|
||||
public SmartRefreshLayout refreshLayout;
|
||||
|
||||
public NavigationHelper navigationHelper;
|
||||
private ThreadStoreAdapter threadStoreAdapter;
|
||||
private int page = 0;
|
||||
private boolean hasMore = true;
|
||||
private String tbs;
|
||||
|
||||
public ThreadStoreFragment() {
|
||||
var refreshLayout: SmartRefreshLayout? = null
|
||||
val navigationHelper: NavigationHelper by lazy { NavigationHelper.newInstance(attachContext) }
|
||||
private val threadStoreAdapter: ThreadStoreAdapter by lazy { ThreadStoreAdapter(attachContext) }
|
||||
private var page = 0
|
||||
private var hasMore = true
|
||||
private var tbs: String? = null
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
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
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
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 fun getLayoutId(): Int {
|
||||
return R.layout.fragment_thread_store
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLayoutId() {
|
||||
return R.layout.fragment_thread_store;
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
setThemeForSmartRefreshLayout(refreshLayout!!)
|
||||
refreshLayout!!.setOnRefreshLoadMoreListener(object : OnRefreshLoadMoreListener {
|
||||
override fun onLoadMore(refreshLayout: RefreshLayout) {
|
||||
loadMore()
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
ThemeUtil.setThemeForSmartRefreshLayout(refreshLayout);
|
||||
refreshLayout.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
|
||||
@Override
|
||||
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
|
||||
loadMore();
|
||||
override fun onRefresh(refreshLayout: RefreshLayout) {
|
||||
refresh()
|
||||
}
|
||||
})
|
||||
recyclerView!!.layoutManager = MyLinearLayoutManager(attachContext)
|
||||
val mItemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() {
|
||||
override fun clearView(
|
||||
recyclerView: RecyclerView,
|
||||
viewHolder: RecyclerView.ViewHolder
|
||||
) {
|
||||
super.clearView(recyclerView, viewHolder)
|
||||
viewHolder.itemView.setBackgroundColor(Color.TRANSPARENT)
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
|
||||
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);
|
||||
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
|
||||
super.onSelectedChanged(viewHolder, actionState)
|
||||
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
|
||||
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
|
||||
int dragFlags = 0, swiped = ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT;
|
||||
return makeMovementFlags(dragFlags, swiped);
|
||||
override fun getMovementFlags(
|
||||
recyclerView: RecyclerView,
|
||||
viewHolder: RecyclerView.ViewHolder
|
||||
): Int {
|
||||
val dragFlags = 0
|
||||
val swiped = ItemTouchHelper.RIGHT or ItemTouchHelper.LEFT
|
||||
return makeMovementFlags(dragFlags, swiped)
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
|
||||
return true;
|
||||
override fun onMove(
|
||||
recyclerView: RecyclerView,
|
||||
viewHolder: RecyclerView.ViewHolder,
|
||||
target: RecyclerView.ViewHolder
|
||||
): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
|
||||
int position = viewHolder.getAdapterPosition();
|
||||
ThreadStoreBean.ThreadStoreInfo threadStoreInfo = threadStoreAdapter.getItem(position);
|
||||
threadStoreAdapter.remove(position);
|
||||
Util.createSnackbar(recyclerView, R.string.toast_deleted, Snackbar.LENGTH_LONG)
|
||||
.addCallback(new Snackbar.Callback() {
|
||||
@Override
|
||||
public void onDismissed(Snackbar snackbar, int event) {
|
||||
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
|
||||
val position = viewHolder.adapterPosition
|
||||
val threadStoreInfo = threadStoreAdapter.getItem(position)
|
||||
threadStoreAdapter.remove(position)
|
||||
Util.createSnackbar(recyclerView!!, R.string.toast_deleted, Snackbar.LENGTH_LONG)
|
||||
.addCallback(object : Snackbar.Callback() {
|
||||
override fun onDismissed(snackbar: Snackbar, event: Int) {
|
||||
if (event != DISMISS_EVENT_ACTION) {
|
||||
TiebaApi.getInstance()
|
||||
.removeStore(threadStoreInfo.getThreadId(), tbs)
|
||||
.enqueue(new Callback<CommonResponse>() {
|
||||
@Override
|
||||
public void onResponse(@NotNull Call<CommonResponse> call, @NotNull Response<CommonResponse> response) {
|
||||
getInstance()
|
||||
.removeStore(threadStoreInfo.threadId, tbs!!)
|
||||
.enqueue(object : Callback<CommonResponse?> {
|
||||
override fun onResponse(
|
||||
call: Call<CommonResponse?>,
|
||||
response: Response<CommonResponse?>
|
||||
) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NotNull Call<CommonResponse> call, @NotNull Throwable t) {
|
||||
Toast.makeText(getAttachContext(), getAttachContext().getString(R.string.toast_delete_error, t.getMessage()), Toast.LENGTH_SHORT).show();
|
||||
threadStoreAdapter.insert(threadStoreInfo, position);
|
||||
override fun onFailure(
|
||||
call: Call<CommonResponse?>,
|
||||
t: Throwable
|
||||
) {
|
||||
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
|
||||
)
|
||||
}
|
||||
});
|
||||
mItemTouchHelper.attachToRecyclerView(recyclerView);
|
||||
recyclerView.setAdapter(threadStoreAdapter);
|
||||
.show()
|
||||
}
|
||||
})
|
||||
mItemTouchHelper.attachToRecyclerView(recyclerView)
|
||||
recyclerView!!.adapter = threadStoreAdapter
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFragmentFirstVisible() {
|
||||
refreshLayout.autoRefresh();
|
||||
override fun onFragmentFirstVisible() {
|
||||
refreshLayout!!.autoRefresh()
|
||||
}
|
||||
|
||||
private void refresh() {
|
||||
page = 0;
|
||||
TiebaApi.getInstance()
|
||||
private fun refresh() {
|
||||
page = 0
|
||||
getInstance()
|
||||
.threadStore(page, 20)
|
||||
.enqueue(new Callback<ThreadStoreBean>() {
|
||||
@Override
|
||||
public void onResponse(@NotNull Call<ThreadStoreBean> call, @NotNull Response<ThreadStoreBean> response) {
|
||||
ThreadStoreBean data = response.body();
|
||||
refreshLayout.finishRefresh();
|
||||
refreshLayout.setNoMoreData(!hasMore);
|
||||
List<ThreadStoreBean.ThreadStoreInfo> storeInfoList = data.getStoreThread();
|
||||
if (storeInfoList == null) {
|
||||
return;
|
||||
}
|
||||
threadStoreAdapter.reset();
|
||||
threadStoreAdapter.setData(storeInfoList);
|
||||
hasMore = storeInfoList.size() > 0;
|
||||
.enqueue(object : Callback<ThreadStoreBean?> {
|
||||
override fun onResponse(
|
||||
call: Call<ThreadStoreBean?>,
|
||||
response: Response<ThreadStoreBean?>
|
||||
) {
|
||||
val data = response.body()
|
||||
refreshLayout!!.finishRefresh()
|
||||
refreshLayout!!.setNoMoreData(!hasMore)
|
||||
val storeInfoList = data!!.storeThread ?: return
|
||||
threadStoreAdapter.reset()
|
||||
threadStoreAdapter.setData(storeInfoList)
|
||||
hasMore = storeInfoList.size > 0
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NotNull Call<ThreadStoreBean> call, @NotNull Throwable t) {
|
||||
refreshLayout.finishRefresh(false);
|
||||
override fun onFailure(call: Call<ThreadStoreBean?>, t: Throwable) {
|
||||
refreshLayout!!.finishRefresh(false)
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
private void loadMore() {
|
||||
private fun loadMore() {
|
||||
if (!hasMore) {
|
||||
return;
|
||||
return
|
||||
}
|
||||
TiebaApi.getInstance()
|
||||
getInstance()
|
||||
.threadStore(page + 1, 20)
|
||||
.enqueue(new Callback<ThreadStoreBean>() {
|
||||
@Override
|
||||
public void onResponse(@NotNull Call<ThreadStoreBean> call, @NotNull Response<ThreadStoreBean> response) {
|
||||
page += 1;
|
||||
ThreadStoreBean data = response.body();
|
||||
List<ThreadStoreBean.ThreadStoreInfo> storeInfoList = data.getStoreThread();
|
||||
if (storeInfoList == null) {
|
||||
return;
|
||||
}
|
||||
threadStoreAdapter.insert(storeInfoList);
|
||||
refreshLayout.finishLoadMore();
|
||||
refreshLayout.setNoMoreData(!hasMore);
|
||||
hasMore = storeInfoList.size() > 0;
|
||||
.enqueue(object : Callback<ThreadStoreBean?> {
|
||||
override fun onResponse(
|
||||
call: Call<ThreadStoreBean?>,
|
||||
response: Response<ThreadStoreBean?>
|
||||
) {
|
||||
page += 1
|
||||
val data = response.body()
|
||||
val storeInfoList = data!!.storeThread ?: return
|
||||
threadStoreAdapter.insert(storeInfoList)
|
||||
refreshLayout!!.finishLoadMore()
|
||||
refreshLayout!!.setNoMoreData(!hasMore)
|
||||
hasMore = storeInfoList.size > 0
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NotNull Call<ThreadStoreBean> call, @NotNull Throwable t) {
|
||||
refreshLayout.finishLoadMore(false);
|
||||
Toast.makeText(getAttachContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
|
||||
override fun onFailure(call: Call<ThreadStoreBean?>, t: Throwable) {
|
||||
refreshLayout!!.finishLoadMore(false)
|
||||
Toast.makeText(attachContext, t.message, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -7,7 +7,6 @@ import androidx.annotation.Nullable;
|
|||
import com.huanchengfly.tieba.post.R;
|
||||
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.utils.SharedPreferencesUtil;
|
||||
|
||||
public class CustomSettingsFragment extends BaseIntroFragment {
|
||||
@Override
|
||||
|
|
@ -51,7 +50,7 @@ public class CustomSettingsFragment extends BaseIntroFragment {
|
|||
protected void initCustomLayout(ViewGroup container) {
|
||||
super.initCustomLayout(container);
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import androidx.annotation.Nullable;
|
|||
import com.huanchengfly.tieba.post.R;
|
||||
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.utils.SharedPreferencesUtil;
|
||||
|
||||
public class HabitSettingsFragment extends BaseIntroFragment {
|
||||
@Override
|
||||
|
|
@ -51,7 +50,7 @@ public class HabitSettingsFragment extends BaseIntroFragment {
|
|||
protected void initCustomLayout(ViewGroup container) {
|
||||
super.initCustomLayout(container);
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,21 +5,20 @@ import android.os.Bundle;
|
|||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.XmlRes;
|
||||
|
||||
import com.huanchengfly.tieba.post.DataStorePreference;
|
||||
import com.huanchengfly.tieba.post.fragments.preference.PreferencesFragment;
|
||||
|
||||
public class IntroSettingsFragment extends PreferencesFragment {
|
||||
private String spName;
|
||||
private @XmlRes
|
||||
int res;
|
||||
|
||||
private IntroSettingsFragment() {
|
||||
}
|
||||
|
||||
public static IntroSettingsFragment newInstance(@XmlRes int res, String spName) {
|
||||
public static IntroSettingsFragment newInstance(@XmlRes int res) {
|
||||
IntroSettingsFragment fragment = new IntroSettingsFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt("res", res);
|
||||
bundle.putString("spName", spName);
|
||||
fragment.setArguments(bundle);
|
||||
return fragment;
|
||||
}
|
||||
|
|
@ -28,7 +27,6 @@ public class IntroSettingsFragment extends PreferencesFragment {
|
|||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
Bundle bundle = getArguments();
|
||||
if (bundle != null) {
|
||||
spName = bundle.getString("spName");
|
||||
res = bundle.getInt("res");
|
||||
}
|
||||
super.onCreate(savedInstanceState);
|
||||
|
|
@ -36,7 +34,7 @@ public class IntroSettingsFragment extends PreferencesFragment {
|
|||
|
||||
@Override
|
||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||
getPreferenceManager().setSharedPreferencesName(spName);
|
||||
getPreferenceManager().setPreferenceDataStore(new DataStorePreference());
|
||||
addPreferencesFromResource(res);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -452,7 +452,7 @@ public class ImageUtil {
|
|||
}
|
||||
|
||||
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) {
|
||||
|
|
@ -482,7 +482,7 @@ public class ImageUtil {
|
|||
if (!Util.canLoadGlide(imageView.getContext())) {
|
||||
return;
|
||||
}
|
||||
int radius = SharedPreferencesUtil.get(imageView.getContext(), SharedPreferencesUtil.SP_SETTINGS).getInt("radius", 8);
|
||||
int radius = getRadiusDp(imageView.getContext());
|
||||
RequestBuilder<Drawable> requestBuilder;
|
||||
if (skipNetworkCheck ||
|
||||
type == LOAD_TYPE_AVATAR ||
|
||||
|
|
@ -570,7 +570,7 @@ public class ImageUtil {
|
|||
|
||||
@ImageLoadSettings
|
||||
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) {
|
||||
|
|
|
|||
|
|
@ -238,11 +238,13 @@ public final class NavigationHelper {
|
|||
if (!path.contains("android_asset")) {
|
||||
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");
|
||||
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));
|
||||
return true;
|
||||
} else {
|
||||
if (SharedPreferencesUtil.get(mContext, SharedPreferencesUtil.SP_SETTINGS).getBoolean("use_custom_tabs", true)) {
|
||||
if (AppPreferencesUtilsKt.getAppPreferences(mContext).getUseCustomTabs()) {
|
||||
CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder()
|
||||
.setShowTitle(true)
|
||||
.setToolbarColor(ThemeUtils.getColorByAttr(mContext, R.attr.colorToolbar));
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ public class SharedPreferencesUtil {
|
|||
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)
|
||||
public @interface Preferences {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ public class StringUtil {
|
|||
}
|
||||
|
||||
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)) {
|
||||
return TextUtils.isEmpty(username) ? "" : username;
|
||||
} else if (showBoth && !TextUtils.isEmpty(username) && !TextUtils.equals(username, nickname)) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue