From b217dad7c812ee6c2d21a25d50c6e657ed9b3c0d Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Wed, 26 Apr 2023 21:58:34 +0200 Subject: [PATCH] Note widget: add action to create new note --- .../launcher2/ui/launcher/widgets/WidgetColumn.kt | 7 +++---- .../launcher2/ui/launcher/widgets/WidgetItem.kt | 13 ++++++++++++- .../mm20/launcher2/ui/launcher/widgets/WidgetsVM.kt | 8 ++++++-- .../ui/launcher/widgets/notes/NotesWidget.kt | 12 +++++++++--- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetColumn.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetColumn.kt index 995107a8..2d9f0687 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetColumn.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetColumn.kt @@ -1,10 +1,6 @@ package de.mm20.launcher2.ui.launcher.widgets -import android.app.Activity import android.appwidget.AppWidgetHost -import android.appwidget.AppWidgetManager -import androidx.activity.compose.rememberLauncherForActivityResult -import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.animation.graphics.res.animatedVectorResource import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter import androidx.compose.animation.graphics.vector.AnimatedImageVector @@ -95,6 +91,9 @@ fun WidgetColumn( widget = widget, appWidgetHost = widgetHost, editMode = editMode, + onWidgetAdd = { + viewModel.addWidget(it, i + 1) + }, onWidgetRemove = { if (widget is AppWidget) { widgetHost.deleteAppWidgetId(widget.config.widgetId) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetItem.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetItem.kt index 6f3fa00e..ece74ab1 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetItem.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetItem.kt @@ -54,6 +54,7 @@ import de.mm20.launcher2.widgets.MusicWidget import de.mm20.launcher2.widgets.NotesWidget import de.mm20.launcher2.widgets.WeatherWidget import de.mm20.launcher2.widgets.Widget +import java.util.UUID @Composable fun WidgetItem( @@ -61,6 +62,7 @@ fun WidgetItem( appWidgetHost: AppWidgetHost, modifier: Modifier = Modifier, editMode: Boolean = false, + onWidgetAdd: (widget: Widget) -> Unit = {}, onWidgetUpdate: (widget: Widget) -> Unit = {}, onWidgetRemove: () -> Unit = {}, draggableState: DraggableState = rememberDraggableState {}, @@ -159,7 +161,16 @@ fun WidgetItem( } is NotesWidget -> { - NotesWidget(widget) + NotesWidget( + widget, + onNewNote = { + val newWidget = NotesWidget( + id = UUID.randomUUID(), + widget.config.copy(storedText = "") + ) + onWidgetAdd(newWidget) + } + ) } is AppWidget -> { diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetsVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetsVM.kt index 06ef81e5..6820cedd 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetsVM.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetsVM.kt @@ -23,9 +23,13 @@ class WidgetsVM : ViewModel(), KoinComponent { val widgets = widgetRepository.get() .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), emptyList()) - fun addWidget(widget: Widget) { + fun addWidget(widget: Widget, index: Int? = null) { val widgets = widgets.value.toMutableList() - widgets.add(widget) + if (index == null) { + widgets.add(widget) + } else { + widgets.add(index.coerceAtMost(widgets.size), widget) + } widgetRepository.set(widgets) } diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/notes/NotesWidget.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/notes/NotesWidget.kt index d00d5aac..e3f23d82 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/notes/NotesWidget.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/notes/NotesWidget.kt @@ -36,7 +36,10 @@ import java.time.ZonedDateTime import java.time.format.DateTimeFormatter @Composable -fun NotesWidget(widget: NotesWidget) { +fun NotesWidget( + widget: NotesWidget, + onNewNote: () -> Unit, +) { val context = LocalContext.current val viewModel: NotesWidgetVM = viewModel(key = "notes-widget-${widget.id}", factory = NotesWidgetVM.Factory) @@ -74,11 +77,14 @@ fun NotesWidget(widget: NotesWidget) { } DropdownMenu(expanded = showMenu, onDismissRequest = { showMenu = false }) { DropdownMenuItem( - text = { Text("New note") }, + text = { Text(stringResource(R.string.notes_widget_action_new)) }, leadingIcon = { Icon(Icons.Rounded.Add, null) }, - onClick = { /*TODO*/ }, + onClick = { + onNewNote() + showMenu = false + }, ) DropdownMenuItem( text = { Text(stringResource(R.string.notes_widget_action_save)) },