From 8d78e1910a840c1703b46d6254d3d5d6fb7ef7a5 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Tue, 13 Feb 2024 21:39:19 +0530 Subject: [PATCH] refactor(android): centralize widget display logic --- .../dev/msfjarvis/claw/android/glance/SavedPostsWidget.kt | 7 +++++-- .../dev/msfjarvis/claw/android/glance/WidgetReceiver.kt | 6 ++---- .../dev/msfjarvis/claw/android/viewmodel/ClawViewModel.kt | 6 +----- .../msfjarvis/claw/android/work/SavedPostUpdaterWorker.kt | 3 ++- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/glance/SavedPostsWidget.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/glance/SavedPostsWidget.kt index 88ec9474..6cce8bca 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/glance/SavedPostsWidget.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/glance/SavedPostsWidget.kt @@ -31,15 +31,18 @@ import dev.msfjarvis.claw.common.theme.LightThemeColors import dev.msfjarvis.claw.model.UIPost import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.first -class SavedPostsWidget(private val posts: List) : GlanceAppWidget() { +class SavedPostsWidget(private val posts: Flow>) : GlanceAppWidget() { override suspend fun provideGlance(context: Context, id: GlanceId) { + val postWindow = posts.first().take(50).toImmutableList() provideContent { GlanceTheme( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) GlanceTheme.colors else ColorProviders(light = LightThemeColors, dark = DarkThemeColors) ) { - WidgetHost(posts.toImmutableList()) + WidgetHost(postWindow) } } } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/glance/WidgetReceiver.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/glance/WidgetReceiver.kt index 0a7a619c..a290300d 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/glance/WidgetReceiver.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/glance/WidgetReceiver.kt @@ -1,5 +1,5 @@ /* - * Copyright © 2023 Harsh Shandilya. + * Copyright © 2023-2024 Harsh Shandilya. * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. @@ -14,8 +14,6 @@ import com.deliveryhero.whetstone.Whetstone import com.deliveryhero.whetstone.broadcastreceiver.ContributesBroadcastReceiverInjector import dev.msfjarvis.claw.android.viewmodel.ClawViewModel import javax.inject.Inject -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.runBlocking @ContributesBroadcastReceiverInjector class WidgetReceiver : GlanceAppWidgetReceiver() { @@ -23,7 +21,7 @@ class WidgetReceiver : GlanceAppWidgetReceiver() { @Inject lateinit var viewModel: ClawViewModel override val glanceAppWidget: GlanceAppWidget - get() = SavedPostsWidget(runBlocking { viewModel.savedPosts.first().take(50) }) + get() = SavedPostsWidget(viewModel.savedPosts) override fun onReceive(context: Context, intent: Intent) { Whetstone.inject(this, context) diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/ClawViewModel.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/ClawViewModel.kt index 3252dbcf..6184dbbe 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/ClawViewModel.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/ClawViewModel.kt @@ -53,7 +53,6 @@ import kotlinx.collections.immutable.toImmutableMap import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.launch @@ -161,10 +160,7 @@ constructor( } else { savedPostsRepository.savePost(post.toSavedPost()) } - val newPosts = savedPosts.first() - withContext(mainDispatcher) { - SavedPostsWidget(newPosts.take(50)).updateAll(getApplication()) - } + withContext(mainDispatcher) { SavedPostsWidget(savedPosts).updateAll(getApplication()) } } } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/work/SavedPostUpdaterWorker.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/work/SavedPostUpdaterWorker.kt index eeb73858..18f58d9d 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/work/SavedPostUpdaterWorker.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/work/SavedPostUpdaterWorker.kt @@ -23,6 +23,7 @@ import dev.msfjarvis.claw.model.fromSavedPost import dev.msfjarvis.claw.model.toSavedPost import javax.inject.Inject import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map /** * WorkManager-backed [CoroutineWorker] that gets all the posts from [SavedPostsRepository], fetches @@ -47,7 +48,7 @@ constructor( .map { result -> result.value.toSavedPost() } .let { savedPostsRepository.savePosts(it) } SavedPostsWidget( - savedPostsRepository.savedPosts.first().take(50).map(UIPost.Companion::fromSavedPost) + savedPostsRepository.savedPosts.map { it.map(UIPost.Companion::fromSavedPost) } ) .updateAll(applicationContext) return Result.success()