@@ -26,8 +26,6 @@ import kotlinx.coroutines.flow.MutableStateFlow
2626import kotlinx.coroutines.flow.update
2727import kotlinx.coroutines.launch
2828import org.vestifeed.R
29- import org.vestifeed.anim.animateVisibilityChanges
30- import org.vestifeed.anim.showSmooth
3129import org.vestifeed.app.db
3230import org.vestifeed.app.sync
3331import org.vestifeed.db.Conf
@@ -62,7 +60,6 @@ class EntriesFragment : AppFragment() {
6260 data class ShowingCachedEntries (
6361 val feed : Feed ? ,
6462 val entries : List <EntriesAdapter .Item >,
65- val showBackgroundProgress : Boolean ,
6663 ) : State()
6764 }
6865
@@ -142,29 +139,35 @@ class EntriesFragment : AppFragment() {
142139// }
143140
144141 private fun updateState (conf : Conf , syncState : Sync .State ) {
142+ binding.swipeRefresh.isRefreshing = false
143+
145144 when (syncState) {
146145 is Sync .State .InitialSync -> state.update { State .InitialSync (syncState.message) }
147146
148- else -> {
149- val showBgProgress = when (syncState) {
150- is Sync .State .FollowUpSync -> syncState.args.syncEntries
151- else -> false
152- }
147+ is Sync .State .FollowUpSync -> {
148+ binding.swipeRefresh.isRefreshing = true
149+ }
153150
151+ else -> {
154152 val rows: List <EntriesAdapterRow > = if (filter is EntriesFilter .BelongToFeed ) {
155153 db().entry.selectByFeedIdAndReadAndBookmarked(
156154 feedId = (filter as EntriesFilter .BelongToFeed ).feedId,
157155 extRead = if (conf.showReadEntries) listOf (true , false ) else listOf (false ),
158156 extBookmarked = false ,
159157 )
160158 } else {
161- val includeRead = (conf.showReadEntries || filter is EntriesFilter .Bookmarked )
162- val includeBookmarked = filter is EntriesFilter .Bookmarked
163-
164- db().entry.selectByReadAndBookmarked(
165- extRead = if (includeRead) listOf (true , false ) else listOf (false ),
166- extBookmarked = includeBookmarked,
167- )
159+ if (filter is EntriesFilter .Bookmarked ) {
160+ db().entry.selectBookmarked()
161+ } else {
162+ val includeRead =
163+ (conf.showReadEntries || filter is EntriesFilter .Bookmarked )
164+ val includeBookmarked = filter is EntriesFilter .Bookmarked
165+
166+ db().entry.selectByReadAndBookmarked(
167+ extRead = includeRead,
168+ extBookmarked = includeBookmarked,
169+ )
170+ }
168171 }
169172
170173 val sortedRows = when (conf.sortOrder) {
@@ -181,7 +184,6 @@ class EntriesFragment : AppFragment() {
181184 null
182185 },
183186 entries = sortedRows.map { it.toItem(conf) },
184- showBackgroundProgress = showBgProgress,
185187 )
186188 }
187189 }
@@ -229,8 +231,6 @@ class EntriesFragment : AppFragment() {
229231 syncEntries = false ,
230232 )
231233 )
232-
233- // refresh()
234234 }
235235 }
236236
@@ -249,8 +249,6 @@ class EntriesFragment : AppFragment() {
249249 syncEntries = false ,
250250 )
251251 )
252-
253- // refresh()
254252 }
255253 }
256254
@@ -344,43 +342,63 @@ class EntriesFragment : AppFragment() {
344342 private fun FragmentEntriesBinding.setState (state : State ) {
345343 Log .d(" entries_fragment" , state.toString())
346344
347- animateVisibilityChanges(
348- views = listOf (toolbar, progress, message, retry, swipeRefresh),
349- visibleViews = when (state) {
350- is State .InitialSync -> listOf (toolbar, progress)
351- is State .LoadingCachedEntries -> listOf (toolbar, progress)
352- is State .ShowingCachedEntries -> listOf (toolbar, swipeRefresh)
353- },
354- )
355-
356345 updateToolbar(state)
357346
347+ progress.isVisible = false
348+ message.isVisible = false
349+ swipeRefresh.isVisible = false
350+
358351 when (state) {
359352 is State .InitialSync -> {
360- if (state.message.isNotEmpty()) {
361- message.text = state.message
362- }
353+ progress.isVisible = true
354+ message.isVisible = state.message.isNotBlank()
355+ message.text = state.message
363356 }
364357
365- State .LoadingCachedEntries -> {}
358+ State .LoadingCachedEntries -> {
359+ progress.isVisible = true
360+ }
366361
367362 is State .ShowingCachedEntries -> {
368- swipeRefresh.isRefreshing = state.showBackgroundProgress
363+ Log .d( " entries_fragment " , " cached entries: ${ state.entries.size} " )
369364
370365 if (state.entries.isEmpty()) {
366+ message.isVisible = true
371367 message.text = getEmptyMessage()
368+ } else {
369+ swipeRefresh.isVisible = true
370+ adapter.submitList(state.entries)
372371 }
373-
374- adapter.submitList(state.entries)
375372 }
376373 }
377374 }
378375
379376 private fun updateToolbar (state : State ) {
380377 binding.toolbar.apply {
381378 when (filter) {
382- EntriesFilter .Bookmarked -> setTitle(R .string.bookmarks)
383- EntriesFilter .Unread -> setTitle(R .string.unread)
379+ EntriesFilter .Bookmarked -> {
380+ when (state) {
381+ is State .ShowingCachedEntries -> {
382+ setTitle(getString(R .string.bookmarks) + " (${state.entries.size} )" )
383+ }
384+
385+ else -> {
386+ setTitle(R .string.bookmarks)
387+ }
388+ }
389+ }
390+
391+ EntriesFilter .Unread -> {
392+ when (state) {
393+ is State .ShowingCachedEntries -> {
394+ setTitle(getString(R .string.unread) + " (${state.entries.size} )" )
395+ }
396+
397+ else -> {
398+ setTitle(R .string.unread)
399+ }
400+ }
401+ }
384402
385403 is EntriesFilter .BelongToFeed -> {
386404 binding.toolbar.apply {
@@ -499,7 +517,7 @@ class EntriesFragment : AppFragment() {
499517
500518 override fun onOpenGraphImageDownloaded () {
501519 super .onOpenGraphImageDownloaded()
502- // refresh( )
520+ updateState(db().conf.select(), sync().state.value )
503521 }
504522
505523 private fun getShowReadEntriesButtonVisibility (): Boolean {
@@ -536,9 +554,10 @@ class EntriesFragment : AppFragment() {
536554 }
537555
538556 private fun onListItemClick (item : EntriesAdapter .Item ) {
539- setRead(
540- entryIds = listOf (item.id),
541- read = true ,
557+ db().entry.updateReadAndReadSynced(
558+ id = item.id,
559+ extRead = true ,
560+ extReadSynced = false ,
542561 )
543562
544563 if (item.openInBrowser) {
0 commit comments