From 54bd414e524c8d74691aaa8a55d8ea2f96f6e456 Mon Sep 17 00:00:00 2001 From: HuanCheng65 <22636177+HuanCheng65@users.noreply.github.com> Date: Fri, 5 Aug 2022 16:34:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=BF=81=E7=A7=BB=20DataStore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/huanchengfly/tieba/post/DataStore.kt | 94 +++++ .../tieba/post/activities/ForumActivity.kt | 13 +- .../adapters/PersonalizedFeedAdapter.java | 4 +- .../post/adapters/forum/NewForumAdapter.java | 9 +- .../post/fragments/MainForumListFragment.kt | 4 +- .../post/fragments/PreferencesFragment.kt | 97 +---- .../post/fragments/ThreadStoreFragment.kt | 364 +++++++++--------- .../intro/CustomSettingsFragment.java | 3 +- .../intro/HabitSettingsFragment.java | 3 +- .../intro/IntroSettingsFragment.java | 8 +- .../tieba/post/utils/ImageUtil.java | 6 +- .../tieba/post/utils/NavigationHelper.java | 6 +- .../post/utils/SharedPreferencesUtil.java | 2 +- .../tieba/post/utils/StringUtil.java | 2 +- 14 files changed, 314 insertions(+), 301 deletions(-) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/DataStore.kt b/app/src/main/java/com/huanchengfly/tieba/post/DataStore.kt index e4a159f3..18075c3e 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/DataStore.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/DataStore.kt @@ -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.putBoolean(key: String, value: Boolean) { } } +fun DataStore.putInt(key: String, value: Int) { + MainScope().launch(Dispatchers.IO) { + BaseApplication.INSTANCE.dataStore.edit { + it[intPreferencesKey(key)] = value + } + } +} + fun DataStore.getInt(key: String, defaultValue: Int): Int { var resultValue = defaultValue @@ -134,4 +143,89 @@ fun DataStore.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?) { + 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? + ): MutableSet? { + 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) + } } \ No newline at end of file diff --git a/app/src/main/java/com/huanchengfly/tieba/post/activities/ForumActivity.kt b/app/src/main/java/com/huanchengfly/tieba/post/activities/ForumActivity.kt index b4b414b4..cacb082d 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/activities/ForumActivity.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/activities/ForumActivity.kt @@ -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() { diff --git a/app/src/main/java/com/huanchengfly/tieba/post/adapters/PersonalizedFeedAdapter.java b/app/src/main/java/com/huanchengfly/tieba/post/adapters/PersonalizedFeedAdapter.java index 8fcf463b..8faae800 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/adapters/PersonalizedFeedAdapter.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/adapters/PersonalizedFeedAdapter.java @@ -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?) { - 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? - ): MutableSet? { - 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) - } - } } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/fragments/ThreadStoreFragment.kt b/app/src/main/java/com/huanchengfly/tieba/post/fragments/ThreadStoreFragment.kt index e44232ef..fbc7b4fd 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/fragments/ThreadStoreFragment.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/fragments/ThreadStoreFragment.kt @@ -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 { + override fun onClick(viewHolder: MyViewHolder, item: ThreadStoreInfo, position: Int) { + val map: MutableMap = 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 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 - 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 onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setThemeForSmartRefreshLayout(refreshLayout!!) + refreshLayout!!.setOnRefreshLoadMoreListener(object : OnRefreshLoadMoreListener { + override fun onLoadMore(refreshLayout: RefreshLayout) { + loadMore() } - @Override - public void onRefresh(@NonNull RefreshLayout refreshLayout) { - refresh(); + override fun onRefresh(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); + }) + 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 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) { - if (event != DISMISS_EVENT_ACTION) { - TiebaApi.getInstance() - .removeStore(threadStoreInfo.getThreadId(), tbs) - .enqueue(new Callback() { - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) { - } + 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) { + getInstance() + .removeStore(threadStoreInfo.threadId, tbs!!) + .enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + } - @Override - public void onFailure(@NotNull Call 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, + 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 + ) + } + .show() } - }); - mItemTouchHelper.attachToRecyclerView(recyclerView); - recyclerView.setAdapter(threadStoreAdapter); + }) + mItemTouchHelper.attachToRecyclerView(recyclerView) + recyclerView!!.adapter = threadStoreAdapter } - @Override - protected void onFragmentFirstVisible() { - refreshLayout.autoRefresh(); + override fun onFragmentFirstVisible() { + refreshLayout!!.autoRefresh() } - private void refresh() { - page = 0; - TiebaApi.getInstance() - .threadStore(page, 20) - .enqueue(new Callback() { - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) { - ThreadStoreBean data = response.body(); - refreshLayout.finishRefresh(); - refreshLayout.setNoMoreData(!hasMore); - List storeInfoList = data.getStoreThread(); - if (storeInfoList == null) { - return; - } - threadStoreAdapter.reset(); - threadStoreAdapter.setData(storeInfoList); - hasMore = storeInfoList.size() > 0; - } + private fun refresh() { + page = 0 + getInstance() + .threadStore(page, 20) + .enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + 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 call, @NotNull Throwable t) { - refreshLayout.finishRefresh(false); - } - }); + override fun onFailure(call: Call, t: Throwable) { + refreshLayout!!.finishRefresh(false) + } + }) } - private void loadMore() { + private fun loadMore() { if (!hasMore) { - return; + return } - TiebaApi.getInstance() - .threadStore(page + 1, 20) - .enqueue(new Callback() { - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) { - page += 1; - ThreadStoreBean data = response.body(); - List storeInfoList = data.getStoreThread(); - if (storeInfoList == null) { - return; - } - threadStoreAdapter.insert(storeInfoList); - refreshLayout.finishLoadMore(); - refreshLayout.setNoMoreData(!hasMore); - hasMore = storeInfoList.size() > 0; - } + getInstance() + .threadStore(page + 1, 20) + .enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + 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 call, @NotNull Throwable t) { - refreshLayout.finishLoadMore(false); - Toast.makeText(getAttachContext(), t.getMessage(), Toast.LENGTH_SHORT).show(); - } - }); + override fun onFailure(call: Call, t: Throwable) { + refreshLayout!!.finishLoadMore(false) + Toast.makeText(attachContext, t.message, Toast.LENGTH_SHORT).show() + } + }) } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/huanchengfly/tieba/post/fragments/intro/CustomSettingsFragment.java b/app/src/main/java/com/huanchengfly/tieba/post/fragments/intro/CustomSettingsFragment.java index 1468cfcb..88194758 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/fragments/intro/CustomSettingsFragment.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/fragments/intro/CustomSettingsFragment.java @@ -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(); } } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/fragments/intro/HabitSettingsFragment.java b/app/src/main/java/com/huanchengfly/tieba/post/fragments/intro/HabitSettingsFragment.java index 233b1d18..04cc9476 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/fragments/intro/HabitSettingsFragment.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/fragments/intro/HabitSettingsFragment.java @@ -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(); } } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/fragments/intro/IntroSettingsFragment.java b/app/src/main/java/com/huanchengfly/tieba/post/fragments/intro/IntroSettingsFragment.java index 98de28db..14fbdcdc 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/fragments/intro/IntroSettingsFragment.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/fragments/intro/IntroSettingsFragment.java @@ -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); } } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/ImageUtil.java b/app/src/main/java/com/huanchengfly/tieba/post/utils/ImageUtil.java index 4da15454..6c971c01 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/ImageUtil.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/ImageUtil.java @@ -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 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) { diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/NavigationHelper.java b/app/src/main/java/com/huanchengfly/tieba/post/utils/NavigationHelper.java index 4a3c3b69..ff3b6f54 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/NavigationHelper.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/NavigationHelper.java @@ -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)); diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/SharedPreferencesUtil.java b/app/src/main/java/com/huanchengfly/tieba/post/utils/SharedPreferencesUtil.java index 195fd2a2..a6edf7f8 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/SharedPreferencesUtil.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/SharedPreferencesUtil.java @@ -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 { } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/StringUtil.java b/app/src/main/java/com/huanchengfly/tieba/post/utils/StringUtil.java index 2e7229bc..556791b2 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/StringUtil.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/StringUtil.java @@ -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)) {