From 96cb8acfeffd53ecf20a80a8295ed113436e7a4a Mon Sep 17 00:00:00 2001 From: HuanCheng65 <22636177+HuanCheng65@users.noreply.github.com> Date: Fri, 5 May 2023 16:38:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E9=97=AA=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/adapters/RecyclerFloorAdapter.java | 2 +- .../base/BaseMultiTypeDelegateAdapter.kt | 15 +++++++-- .../tieba/post/arch/ComposeHolder.kt | 33 ++++++++++++++++++- .../tieba/post/fragments/FloorFragment.kt | 3 +- .../tieba/post/utils/AppPreferencesUtils.kt | 5 +-- 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/adapters/RecyclerFloorAdapter.java b/app/src/main/java/com/huanchengfly/tieba/post/adapters/RecyclerFloorAdapter.java index 87cae683..32245772 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/adapters/RecyclerFloorAdapter.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/adapters/RecyclerFloorAdapter.java @@ -174,7 +174,7 @@ public class RecyclerFloorAdapter extends BaseSingleTypeAdapter { PluginManager.INSTANCE.initPluginMenu(menu, PluginManager.MENU_SUB_POST_ITEM); - if (TextUtils.equals(AccountUtil.getLoginInfo().getUid(), postInfo.getAuthor().getId())) { + if (AccountUtil.isLoggedIn() && TextUtils.equals(AccountUtil.getLoginInfo().getUid(), postInfo.getAuthor().getId())) { menu.findItem(R.id.menu_delete).setVisible(true); } }) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/adapters/base/BaseMultiTypeDelegateAdapter.kt b/app/src/main/java/com/huanchengfly/tieba/post/adapters/base/BaseMultiTypeDelegateAdapter.kt index dee61081..fb979767 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/adapters/base/BaseMultiTypeDelegateAdapter.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/adapters/base/BaseMultiTypeDelegateAdapter.kt @@ -30,14 +30,23 @@ abstract class BaseMultiTypeDelegateAdapter @JvmOverloads constructor( override fun onBindViewHolder(holder: MyViewHolder, position: Int) { holder.setItemOnClickListener { - onItemClickListener?.onClick(holder, getItem(position), position) + if (position in 0 until itemCount) onItemClickListener?.onClick( + holder, + getItem(position), + position + ) } holder.setItemOnLongClickListener { - onItemLongClickListener?.onLongClick(holder, getItem(position), position) ?: false + if (position !in 0 until itemCount) false + else onItemLongClickListener?.onLongClick(holder, getItem(position), position) ?: false } onItemChildClickListeners.forEach { holder.setOnClickListener(it.key) { _ -> - it.value?.onItemChildClick(holder, getItem(position), position) + if (position in 0 until itemCount) it.value?.onItemChildClick( + holder, + getItem(position), + position + ) } } convert(holder, getItem(position), position, getItemViewType(position)) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/arch/ComposeHolder.kt b/app/src/main/java/com/huanchengfly/tieba/post/arch/ComposeHolder.kt index 51a76250..b7095780 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/arch/ComposeHolder.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/arch/ComposeHolder.kt @@ -6,13 +6,44 @@ import androidx.compose.runtime.Stable @Stable class StableHolder(val item: T) { operator fun component1(): T = item + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as StableHolder<*> + + if (item != other.item) return false + + return true + } + + override fun hashCode(): Int { + return item?.hashCode() ?: 0 + } } @Immutable class ImmutableHolder(val item: T) { operator fun component1(): T = item + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as ImmutableHolder<*> + + if (item != other.item) return false + + return true + } + + override fun hashCode(): Int { + return item?.hashCode() ?: 0 + } } fun wrapStable(item: T): StableHolder = StableHolder(item) -fun wrapImmutable(item: T): ImmutableHolder = ImmutableHolder(item) \ No newline at end of file +fun wrapImmutable(item: T): ImmutableHolder = ImmutableHolder(item) + +fun List.wrapImmutable(): List> = map { wrapImmutable(it) } \ No newline at end of file diff --git a/app/src/main/java/com/huanchengfly/tieba/post/fragments/FloorFragment.kt b/app/src/main/java/com/huanchengfly/tieba/post/fragments/FloorFragment.kt index 0c2922f9..c8a9fccf 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/fragments/FloorFragment.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/fragments/FloorFragment.kt @@ -22,6 +22,7 @@ import com.huanchengfly.tieba.post.activities.ThreadActivity import com.huanchengfly.tieba.post.adapters.RecyclerFloorAdapter import com.huanchengfly.tieba.post.api.TiebaApi import com.huanchengfly.tieba.post.api.models.SubFloorListBean +import com.huanchengfly.tieba.post.api.retrofit.exception.getErrorMessage import com.huanchengfly.tieba.post.components.MyLinearLayoutManager import com.huanchengfly.tieba.post.components.dividers.ThreadDivider import com.huanchengfly.tieba.post.components.transformations.RadiusTransformation @@ -184,7 +185,7 @@ class FloorFragment : BaseBottomSheetDialogFragment() { .floor(tid, pn, pid, spid) .enqueue(object : Callback { override fun onFailure(call: Call, t: Throwable) { - Toast.makeText(attachContext, t.message, Toast.LENGTH_SHORT).show() + Toast.makeText(attachContext, t.getErrorMessage(), Toast.LENGTH_SHORT).show() refreshLayout.finishRefresh(false) } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/AppPreferencesUtils.kt b/app/src/main/java/com/huanchengfly/tieba/post/utils/AppPreferencesUtils.kt index 61705796..a6135b6e 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/AppPreferencesUtils.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/AppPreferencesUtils.kt @@ -26,8 +26,9 @@ import kotlin.properties.ReadWriteProperty import kotlin.reflect.KProperty -open class AppPreferencesUtils(context: Context) { - private val preferencesDataStore: DataStore = context.dataStore +open class AppPreferencesUtils(private val context: Context) { + private val preferencesDataStore: DataStore + get() = context.dataStore private val coroutineScope: CoroutineScope = CoroutineScope(Dispatchers.IO + SupervisorJob()) var userLikeLastRequestUnix by DataStoreDelegates.long(defaultValue = 0L)