|
|
|
@ -22,6 +22,7 @@ import androidx.activity.SystemBarStyle
|
|
|
|
import androidx.activity.compose.setContent
|
|
|
|
import androidx.activity.compose.setContent
|
|
|
|
import androidx.activity.enableEdgeToEdge
|
|
|
|
import androidx.activity.enableEdgeToEdge
|
|
|
|
import androidx.activity.viewModels
|
|
|
|
import androidx.activity.viewModels
|
|
|
|
|
|
|
|
import androidx.appcompat.app.AppCompatDelegate
|
|
|
|
import androidx.compose.runtime.CompositionLocalProvider
|
|
|
|
import androidx.compose.runtime.CompositionLocalProvider
|
|
|
|
import androidx.compose.runtime.getValue
|
|
|
|
import androidx.compose.runtime.getValue
|
|
|
|
import androidx.compose.runtime.mutableStateOf
|
|
|
|
import androidx.compose.runtime.mutableStateOf
|
|
|
|
@ -34,6 +35,7 @@ import androidx.lifecycle.repeatOnLifecycle
|
|
|
|
import androidx.metrics.performance.JankStats
|
|
|
|
import androidx.metrics.performance.JankStats
|
|
|
|
import androidx.tracing.trace
|
|
|
|
import androidx.tracing.trace
|
|
|
|
import com.google.samples.apps.nowinandroid.MainActivityUiState.Loading
|
|
|
|
import com.google.samples.apps.nowinandroid.MainActivityUiState.Loading
|
|
|
|
|
|
|
|
import com.google.samples.apps.nowinandroid.MainActivityUiState.Success
|
|
|
|
import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper
|
|
|
|
import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper
|
|
|
|
import com.google.samples.apps.nowinandroid.core.analytics.LocalAnalyticsHelper
|
|
|
|
import com.google.samples.apps.nowinandroid.core.analytics.LocalAnalyticsHelper
|
|
|
|
import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository
|
|
|
|
import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository
|
|
|
|
@ -41,12 +43,14 @@ 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.designsystem.theme.NiaTheme
|
|
|
|
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
|
|
|
|
import com.google.samples.apps.nowinandroid.core.ui.LocalTimeZone
|
|
|
|
import com.google.samples.apps.nowinandroid.core.ui.LocalTimeZone
|
|
|
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.ui.toNightMode
|
|
|
|
import com.google.samples.apps.nowinandroid.ui.NiaApp
|
|
|
|
import com.google.samples.apps.nowinandroid.ui.NiaApp
|
|
|
|
import com.google.samples.apps.nowinandroid.ui.rememberNiaAppState
|
|
|
|
import com.google.samples.apps.nowinandroid.ui.rememberNiaAppState
|
|
|
|
import com.google.samples.apps.nowinandroid.util.isSystemInDarkTheme
|
|
|
|
import com.google.samples.apps.nowinandroid.util.isSystemInDarkTheme
|
|
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
|
import kotlinx.coroutines.flow.combine
|
|
|
|
import kotlinx.coroutines.flow.combine
|
|
|
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
|
|
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
|
|
|
|
|
|
|
import kotlinx.coroutines.flow.filterIsInstance
|
|
|
|
import kotlinx.coroutines.flow.map
|
|
|
|
import kotlinx.coroutines.flow.map
|
|
|
|
import kotlinx.coroutines.flow.onEach
|
|
|
|
import kotlinx.coroutines.flow.onEach
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
@ -79,6 +83,18 @@ class MainActivity : ComponentActivity() {
|
|
|
|
val splashScreen = installSplashScreen()
|
|
|
|
val splashScreen = installSplashScreen()
|
|
|
|
super.onCreate(savedInstanceState)
|
|
|
|
super.onCreate(savedInstanceState)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Apply the saved dark theme config at startup to ensure the splash screen
|
|
|
|
|
|
|
|
// uses the correct theme. This addresses issue #633.
|
|
|
|
|
|
|
|
lifecycleScope.launch {
|
|
|
|
|
|
|
|
viewModel.uiState
|
|
|
|
|
|
|
|
.filterIsInstance<Success>()
|
|
|
|
|
|
|
|
.map { it.userData.darkThemeConfig.toNightMode() }
|
|
|
|
|
|
|
|
.first()
|
|
|
|
|
|
|
|
.let { mode ->
|
|
|
|
|
|
|
|
AppCompatDelegate.setDefaultNightMode(mode)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// We keep this as a mutable state, so that we can track changes inside the composition.
|
|
|
|
// We keep this as a mutable state, so that we can track changes inside the composition.
|
|
|
|
// This allows us to react to dark/light mode changes.
|
|
|
|
// This allows us to react to dark/light mode changes.
|
|
|
|
var themeSettings by mutableStateOf(
|
|
|
|
var themeSettings by mutableStateOf(
|
|
|
|
|