Drop a notifyDataSetChanged
This commit is contained in:
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))
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user