feat: HA/Google edit, full-page event detail, KW+zigzag divider, HSV picker, splash

- Home Assistant & Google events now editable/deletable (server PUT/DELETE
  endpoints wired; saveEvent had no HA/Google update branch -> created dupes)
- Event detail is now a full screen (Scaffold) instead of a bottom sheet:
  long notes scroll, action buttons no longer hidden behind the system nav bar;
  distinct calendar vs notes icons
- Month view: calendar-week number on Mondays, month-boundary divider with
  zigzag step (month_divider_color), month label in month_label_color,
  text/line contrast applied
- Compact top bar with smaller title; prev/next chevrons present in month view
  and scroll one month at a time
- Real HSV colour picker (SV field + hue slider + hex) for primary, accent,
  today, month-divider and month-label colours
- Black status/navigation bars; portrait-locked; crisp custom splash with app
  name, high-res icon and © Scarriffle

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Guido Schmit
2026-05-31 14:19:56 +02:00
parent 608580fc7e
commit b8eb6597ec
18 changed files with 738 additions and 315 deletions

View File

@@ -5,8 +5,12 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.hilt.navigation.compose.hiltViewModel
import com.scarriffle.calendarr.ui.auth.LoginScreen
@@ -19,12 +23,22 @@ fun CalendarrRoot(vm: MainViewModel = hiltViewModel()) {
val route by vm.route.collectAsState()
val settings by vm.settings.collectAsState()
var showSplash by remember { mutableStateOf(true) }
LaunchedEffect(Unit) {
kotlinx.coroutines.delay(1200)
showSplash = false
}
CalendarrTheme(settings) {
CompositionLocalProvider(
LocalLang provides L10n.resolved(settings.language),
LocalAppSettings provides settings,
) {
Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) {
if (showSplash) {
SplashScreen()
return@Surface
}
when (route) {
AppRoute.SETUP -> ServerSetupScreen(onConfigured = vm::onServerConfigured)
AppRoute.LOGIN -> LoginScreen(