From 8b28065f5673523d401f8ec9b08da291aede2596 Mon Sep 17 00:00:00 2001 From: Walter Huf Date: Sat, 27 Jan 2024 10:24:00 -0800 Subject: [PATCH] Show a loading label during sync --- .../io/bimmergestalt/reader/carapp/CarApp.kt | 6 ++++-- .../bimmergestalt/reader/carapp/CarAppService.kt | 5 ++++- .../java/io/bimmergestalt/reader/carapp/Model.kt | 11 ++++++++++- .../reader/carapp/views/HomeView.kt | 16 +++++++++++++--- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/app/src/gestalt/java/io/bimmergestalt/reader/carapp/CarApp.kt b/app/src/gestalt/java/io/bimmergestalt/reader/carapp/CarApp.kt index b9730530e..331434dcb 100644 --- a/app/src/gestalt/java/io/bimmergestalt/reader/carapp/CarApp.kt +++ b/app/src/gestalt/java/io/bimmergestalt/reader/carapp/CarApp.kt @@ -1,6 +1,7 @@ package io.bimmergestalt.reader.carapp import android.util.Log +import androidx.work.WorkManager import com.google.gson.Gson import com.google.gson.JsonSyntaxException import de.bmw.idrive.BMWRemoting @@ -25,13 +26,14 @@ import me.ash.reader.domain.service.RssService const val TAG = "ReaderGestalt" class CarApp(val iDriveConnectionStatus: IDriveConnectionStatus, securityAccess: SecurityAccess, - val carAppResources: CarAppSharedAssetResources, val rssService: RssService + val carAppResources: CarAppSharedAssetResources, + val rssService: RssService, workManager: WorkManager ) { val carConnection: BMWRemotingServer val carApp: RHMIApplication val readoutController: ReadoutController - val model: Model = Model() + val model: Model = Model(workManager) val homeView: HomeView val feedView: FeedView val readView: ReadView diff --git a/app/src/gestalt/java/io/bimmergestalt/reader/carapp/CarAppService.kt b/app/src/gestalt/java/io/bimmergestalt/reader/carapp/CarAppService.kt index 9a4804a58..110a4667d 100644 --- a/app/src/gestalt/java/io/bimmergestalt/reader/carapp/CarAppService.kt +++ b/app/src/gestalt/java/io/bimmergestalt/reader/carapp/CarAppService.kt @@ -4,6 +4,7 @@ import android.app.Service import android.content.Intent import android.os.IBinder import android.util.Log +import androidx.work.WorkManager import dagger.hilt.android.AndroidEntryPoint import io.bimmergestalt.idriveconnectkit.android.CarAppAssetResources import io.bimmergestalt.idriveconnectkit.android.IDriveConnectionReceiver @@ -19,6 +20,8 @@ class CarAppService: Service() { var app: CarApp? = null @Inject lateinit var rssService: RssService + @Inject + lateinit var workManager: WorkManager override fun onCreate() { super.onCreate() @@ -75,7 +78,7 @@ class CarAppService: Service() { iDriveConnectionStatus, securityAccess, CarAppSharedAssetResources(applicationContext, "news"), - rssService + rssService, workManager ) } thread?.start() diff --git a/app/src/gestalt/java/io/bimmergestalt/reader/carapp/Model.kt b/app/src/gestalt/java/io/bimmergestalt/reader/carapp/Model.kt index 336b1a152..33e52af98 100644 --- a/app/src/gestalt/java/io/bimmergestalt/reader/carapp/Model.kt +++ b/app/src/gestalt/java/io/bimmergestalt/reader/carapp/Model.kt @@ -1,9 +1,14 @@ package io.bimmergestalt.reader.carapp +import androidx.lifecycle.asFlow +import androidx.work.WorkInfo +import androidx.work.WorkManager import io.bimmergestalt.reader.L import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.map import me.ash.reader.domain.model.article.ArticleWithFeed +import me.ash.reader.domain.service.SyncWorker data class FeedConfig(val groupId: String?, val feedId: String?, val isStarred: Boolean, val isUnread: Boolean) { @@ -19,7 +24,11 @@ data class FeedConfig(val groupId: String?, val feedId: String?, } class FeedSelection(val name: String, val feedConfig: FeedConfig) -class Model { +class Model(workManager: WorkManager) { + val isSyncing = workManager.getWorkInfosByTagLiveData(SyncWorker.WORK_NAME) + .asFlow().map { it.any { workInfo -> + workInfo.state == WorkInfo.State.RUNNING + } } var feed = MutableStateFlow(FeedSelection(L.UNREAD, FeedConfig.UNREAD)) var articles = MutableStateFlow(emptyList()) var articleIndex = MutableStateFlow(-1) diff --git a/app/src/gestalt/java/io/bimmergestalt/reader/carapp/views/HomeView.kt b/app/src/gestalt/java/io/bimmergestalt/reader/carapp/views/HomeView.kt index 780c83494..ae96f6515 100644 --- a/app/src/gestalt/java/io/bimmergestalt/reader/carapp/views/HomeView.kt +++ b/app/src/gestalt/java/io/bimmergestalt/reader/carapp/views/HomeView.kt @@ -51,8 +51,18 @@ class HomeView(state: RHMIState, val rssService: RssService, val model: Model): fun getEntryListDest() = entriesList.getAction()?.asHMIAction()?.target!! override suspend fun onFocus() { - val account = rssService.get() entriesList.setProperty(RHMIProperty.PropertyId.LABEL_WAITINGANIMATION, true) + model.isSyncing.collectLatest { active -> + loadingLabel.setVisible(active) + + if (!active) { + showFeed() + } + } + } + + suspend fun showFeed() { + val account = rssService.get() model.feed.collectLatest { feedSelection -> feedButton.getModel()?.asRaDataModel()?.value = feedSelection.name @@ -68,8 +78,8 @@ class HomeView(state: RHMIState, val rssService: RssService, val model: Model): entriesList.getModel()?.value = object: RHMIModel.RaListModel.RHMIListAdapter(2, data) { override fun convertRow(index: Int, item: ArticleWithFeed): Array { val icon = if (item.article.isUnread) "•" - else if (item.article.isStarred) "★" - else "" + else if (item.article.isStarred) "★" + else "" return arrayOf(icon, item.article.title) } }