Drop a notifyDataSetChanged

This commit is contained in:
tarsin committed 2023-07-04 09:08:29 +08:00
1 parent da9de7a823
commit 88be232e70
3 files changed
+30 -13

No files matched your search

@@ -18,6 +18,13 @@ package com.hippo.ehviewer
import android.annotation.SuppressLint
import com.hippo.ehviewer.client.data.GalleryInfo
import com.hippo.ehviewer.yorozuya.IntIdGenerator
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.shareIn
object FavouriteStatusRouter {
private val idGenerator = IntIdGenerator(Settings.dataMapNextId)
@@ -59,4 +66,18 @@ object FavouriteStatusRouter {
fun interface Listener {
fun onModifyFavourites(gid: Long, slot: Int)
}
private val listenerScope = CoroutineScope(Dispatchers.IO)
private val _stateFlow = callbackFlow {
val listener = Listener { gid, slot ->
trySend(gid to slot)
}
addListener(listener)
awaitClose {
removeListener(listener)
}
}.shareIn(listenerScope, SharingStarted.Eagerly)
fun stateFlow(gid: Long) = _stateFlow.filter { (gid1) -> gid1 == gid }
}
@@ -22,6 +22,8 @@ import androidx.compose.material3.ProvideTextStyle
import androidx.compose.material3.Text
import androidx.compose.material3.contentColorFor
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.currentRecomposeScope
import androidx.compose.runtime.getValue
import androidx.compose.runtime.produceState
import androidx.compose.ui.Alignment
@@ -32,6 +34,7 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.constraintlayout.compose.ConstraintLayout
import com.hippo.ehviewer.FavouriteStatusRouter
import com.hippo.ehviewer.client.EhUtils
import com.hippo.ehviewer.client.data.GalleryInfo
import com.hippo.ehviewer.download.DownloadManager
@@ -60,6 +63,12 @@ fun GalleryInfoListItem(
modifier = Modifier.aspectRatio(0.6666667F).fillMaxSize(),
)
}
val scope = currentRecomposeScope
LaunchedEffect(info.gid) {
FavouriteStatusRouter.stateFlow(info.gid).collect {
scope.invalidate()
}
}
val showFav = info.favoriteSlot != -2 && !isInFavScene
ConstraintLayout(modifier = Modifier.padding(8.dp, 4.dp).fillMaxSize()) {
val (titleRef, uploaderRef, ratingRef, categoryRef, postedRef, favRef, iconsRef) = createRefs()
@@ -53,7 +53,6 @@ import com.google.android.material.datepicker.DateValidatorPointForward
import com.google.android.material.datepicker.MaterialDatePicker
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.hippo.ehviewer.EhDB
import com.hippo.ehviewer.FavouriteStatusRouter
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.client.EhEngine
@@ -153,12 +152,6 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, OnClickFabList
}
private var mHasFirstRefresh = false
@SuppressLint("NotifyDataSetChanged")
private val mFavouriteStatusRouterListener: FavouriteStatusRouter.Listener =
FavouriteStatusRouter.Listener { _: Long, _: Int ->
mAdapter?.notifyDataSetChanged()
}
private var mIsTopList = false
override fun getMenuResId(): Int {
return R.menu.scene_gallery_list_searchbar_menu
@@ -188,7 +181,6 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, OnClickFabList
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
FavouriteStatusRouter.addListener(mFavouriteStatusRouterListener)
if (savedInstanceState == null) {
onInit()
} else {
@@ -223,11 +215,6 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, OnClickFabList
outState.putInt(KEY_STATE, mState)
}
override fun onDestroy() {
super.onDestroy()
FavouriteStatusRouter.removeListener(mFavouriteStatusRouterListener)
}
private fun setSearchBarHint() {
setEditTextHint(getString(if (EhUtils.isExHentai) R.string.gallery_list_search_bar_hint_exhentai else R.string.gallery_list_search_bar_hint_e_hentai))
}