@ -29,8 +29,8 @@ import androidx.navigation.compose.rememberNavController
import androidx.navigation.navOptions
import androidx.navigation.navOptions
import androidx.tracing.trace
import androidx.tracing.trace
import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository
import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository
import com.google.samples.apps.nowinandroid.core.data.util.ErrorMessage
import com.google.samples.apps.nowinandroid.core.data.util.ErrorMonitor
import com.google.samples.apps.nowinandroid.core.data.util.ErrorMonitor
import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor
import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor
import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor
import com.google.samples.apps.nowinandroid.core.ui.TrackDisposableJank
import com.google.samples.apps.nowinandroid.core.ui.TrackDisposableJank
import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.BOOKMARKS_ROUTE
import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.BOOKMARKS_ROUTE
@ -48,13 +48,11 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.stateIn
import kotlinx.datetime.TimeZone
import kotlinx.datetime.TimeZone
@Composable
@Composable
fun rememberNiaAppState (
fun rememberNiaAppState (
networkMonitor : NetworkMonitor ,
errorMonitor : ErrorMonitor ,
errorMonitor : ErrorMonitor ,
userNewsResourceRepository : UserNewsResourceRepository ,
userNewsResourceRepository : UserNewsResourceRepository ,
timeZoneMonitor : TimeZoneMonitor ,
timeZoneMonitor : TimeZoneMonitor ,
@ -65,7 +63,6 @@ fun rememberNiaAppState(
return remember (
return remember (
navController ,
navController ,
coroutineScope ,
coroutineScope ,
networkMonitor ,
errorMonitor ,
errorMonitor ,
userNewsResourceRepository ,
userNewsResourceRepository ,
timeZoneMonitor ,
timeZoneMonitor ,
@ -73,7 +70,6 @@ fun rememberNiaAppState(
NiaAppState (
NiaAppState (
navController = navController ,
navController = navController ,
coroutineScope = coroutineScope ,
coroutineScope = coroutineScope ,
networkMonitor = networkMonitor ,
errorMonitor = errorMonitor ,
errorMonitor = errorMonitor ,
userNewsResourceRepository = userNewsResourceRepository ,
userNewsResourceRepository = userNewsResourceRepository ,
timeZoneMonitor = timeZoneMonitor ,
timeZoneMonitor = timeZoneMonitor ,
@ -85,7 +81,6 @@ fun rememberNiaAppState(
class NiaAppState (
class NiaAppState (
val navController : NavHostController ,
val navController : NavHostController ,
coroutineScope : CoroutineScope ,
coroutineScope : CoroutineScope ,
networkMonitor : NetworkMonitor ,
errorMonitor : ErrorMonitor ,
errorMonitor : ErrorMonitor ,
userNewsResourceRepository : UserNewsResourceRepository ,
userNewsResourceRepository : UserNewsResourceRepository ,
timeZoneMonitor : TimeZoneMonitor ,
timeZoneMonitor : TimeZoneMonitor ,
@ -102,21 +97,17 @@ class NiaAppState(
else -> null
else -> null
}
}
val isOffline = networkMonitor . isOnline
val isOfflineState : StateFlow < Boolean > = isOffline . stateIn (
. map ( Boolean :: not )
scope = coroutineScope ,
. stateIn (
started = SharingStarted . WhileSubscribed ( 5 _000 ) ,
scope = coroutineScope ,
initialValue = false ,
started = SharingStarted . WhileSubscribed ( 5 _000 ) ,
)
initialValue = false ,
)
val snackbarMessage : StateFlow < ErrorMessage ? > = errorMessage . stateIn (
scope = coroutineScope ,
val snackbarMessage = errorMessages
started = SharingStarted . WhileSubscribed ( 5 _000 ) ,
. map { it . firstOrNull ( ) }
initialValue = null ,
. stateIn (
)
scope = coroutineScope ,
started = SharingStarted . WhileSubscribed ( 5 _000 ) ,
initialValue = null ,
)
/ * *
/ * *
* Map of top level destinations to be used in the TopBar , BottomBar and NavRail . The key is the
* Map of top level destinations to be used in the TopBar , BottomBar and NavRail . The key is the