M3 — calendar filter: the navigation drawer now hosts the calendar list inline (grouped by account, colour swatch + checkbox per calendar). Hidden calendars are persisted app-side and filtered centrally in the repository, so month/week/day re-filter live the moment a checkbox flips. Drawer trimmed to Today, the calendar filter, and Settings, with leading icons and a clear title/section type scale; the stubbed jump-to-date entry (M2) was removed. M4 — settings: full-screen destination with appearance (theme System/Light/ Dark, Material You dynamic colour auto-disabled < API 31, week start Auto/Mon/ Sun), language (per-app locales via AppCompat, persisted to API 29), and an about section (version, licence, source link). Theme is driven by one activity-scoped settings source so changes apply app-wide at once. Week start now drives the month grid and week view; Auto follows the locale. Also: - default view switched from month to week - Settings screen handles system back (was closing the app) - fix pre-existing NonObservableLocale/LocalContextConfigurationRead lint errors in EventDetailScreen so CI lint is green again - versionName/versionCode bumped to 0.5.0 / 5 Tests: repository hidden-filter (incl. live re-emit), SettingsPrefs round-trip + week-start resolution, filter grouping. lint + unit tests + assembleDebug green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
43 lines
1.7 KiB
Kotlin
43 lines
1.7 KiB
Kotlin
package de.jeanlucmakiola.calendula
|
|
|
|
import android.os.Bundle
|
|
import androidx.activity.ComponentActivity
|
|
import androidx.activity.compose.setContent
|
|
import androidx.activity.enableEdgeToEdge
|
|
import androidx.compose.foundation.isSystemInDarkTheme
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.hilt.navigation.compose.hiltViewModel
|
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
import de.jeanlucmakiola.calendula.data.prefs.ThemeMode
|
|
import de.jeanlucmakiola.calendula.ui.RootScreen
|
|
import de.jeanlucmakiola.calendula.ui.settings.SettingsViewModel
|
|
import de.jeanlucmakiola.calendula.ui.theme.CalendulaTheme
|
|
|
|
@AndroidEntryPoint
|
|
class MainActivity : ComponentActivity() {
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
enableEdgeToEdge()
|
|
setContent {
|
|
// One activity-scoped SettingsViewModel drives both the theme here
|
|
// and the Settings screen, so a theme change applies app-wide at once.
|
|
val settingsViewModel: SettingsViewModel = hiltViewModel()
|
|
val settings by settingsViewModel.state.collectAsStateWithLifecycle()
|
|
val darkTheme = when (settings.themeMode) {
|
|
ThemeMode.SYSTEM -> isSystemInDarkTheme()
|
|
ThemeMode.LIGHT -> false
|
|
ThemeMode.DARK -> true
|
|
}
|
|
CalendulaTheme(
|
|
darkTheme = darkTheme,
|
|
dynamicColor = settings.dynamicColor,
|
|
) {
|
|
RootScreen(modifier = Modifier.fillMaxSize())
|
|
}
|
|
}
|
|
}
|
|
}
|