fix: 迁移 DataStore

This commit is contained in:
HuanCheng65 2022-08-05 16:34:17 +08:00
parent 45c0fcf721
commit 54bd414e52
No known key found for this signature in database
GPG Key ID: E9031EF91A805148
14 changed files with 314 additions and 301 deletions

View File

@ -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)
}
}

View File

@ -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() {

View File

@ -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);

View File

@ -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);

View File

@ -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)
)
}

View File

@ -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)
}
}
}

View File

@ -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()
}
});
})
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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) {

View File

@ -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));

View File

@ -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 {
}

View File

@ -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)) {