add new event button (widget + FAB), fix widget event row height

This commit is contained in:
Damocles 2026-04-22 20:55:23 +02:00
parent ca67729f43
commit 296051efb5
2 changed files with 36 additions and 2 deletions

View file

@ -16,20 +16,27 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.LargeTopAppBar import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import android.content.Intent
import android.provider.CalendarContract
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import space.darkest.nova.android.data.AgendaDay import space.darkest.nova.android.data.AgendaDay
@ -43,6 +50,7 @@ import java.util.Locale
@Composable @Composable
fun AgendaScreen(agenda: List<AgendaDay>) { fun AgendaScreen(agenda: List<AgendaDay>) {
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
val context = LocalContext.current
Scaffold( Scaffold(
topBar = { topBar = {
@ -51,6 +59,17 @@ fun AgendaScreen(agenda: List<AgendaDay>) {
scrollBehavior = scrollBehavior, scrollBehavior = scrollBehavior,
) )
}, },
floatingActionButton = {
FloatingActionButton(
onClick = {
context.startActivity(Intent(Intent.ACTION_INSERT).apply {
data = CalendarContract.Events.CONTENT_URI
})
},
) {
Icon(Icons.Default.Add, contentDescription = "New event")
}
},
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
) { innerPadding -> ) { innerPadding ->
if (agenda.isEmpty()) { if (agenda.isEmpty()) {

View file

@ -3,6 +3,7 @@ package space.darkest.nova.android.widget
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.provider.CalendarContract import android.provider.CalendarContract
import androidx.glance.appwidget.components.CircleIconButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
@ -67,6 +68,15 @@ class AgendaWidget : GlanceAppWidget() {
startIcon = ImageProvider(android.R.drawable.ic_menu_my_calendar), startIcon = ImageProvider(android.R.drawable.ic_menu_my_calendar),
title = "Agenda", title = "Agenda",
textColor = GlanceTheme.colors.onSurface, textColor = GlanceTheme.colors.onSurface,
actions = {
CircleIconButton(
imageProvider = ImageProvider(android.R.drawable.ic_input_add),
contentDescription = "New event",
contentColor = GlanceTheme.colors.onSurfaceVariant,
backgroundColor = null,
onClick = actionStartActivityIntent(newEventIntent()),
)
},
) )
}, },
backgroundColor = GlanceTheme.colors.widgetBackground, backgroundColor = GlanceTheme.colors.widgetBackground,
@ -207,10 +217,10 @@ class AgendaWidget : GlanceAppWidget() {
Spacer(GlanceModifier.width(8.dp)) Spacer(GlanceModifier.width(8.dp))
// color indicator // color indicator - height adapts to content via the row
Box( Box(
modifier = GlanceModifier modifier = GlanceModifier
.size(width = 3.dp, height = 36.dp) .width(3.dp)
.cornerRadius(2.dp) .cornerRadius(2.dp)
.background(GlanceTheme.colors.primary), .background(GlanceTheme.colors.primary),
) {} ) {}
@ -244,6 +254,11 @@ class AgendaWidget : GlanceAppWidget() {
companion object { companion object {
private val timeFormatter = DateTimeFormatter.ofPattern("HH:mm") private val timeFormatter = DateTimeFormatter.ofPattern("HH:mm")
private fun newEventIntent() = Intent(Intent.ACTION_INSERT).apply {
data = CalendarContract.Events.CONTENT_URI
flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
} }
} }