Note widget: add action to create new note

This commit is contained in:
MM20 2023-04-26 21:58:34 +02:00
parent 10d4b02798
commit b217dad7c8
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
4 changed files with 30 additions and 10 deletions

View File

@ -1,10 +1,6 @@
package de.mm20.launcher2.ui.launcher.widgets package de.mm20.launcher2.ui.launcher.widgets
import android.app.Activity
import android.appwidget.AppWidgetHost 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.animatedVectorResource
import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter
import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.animation.graphics.vector.AnimatedImageVector
@ -95,6 +91,9 @@ fun WidgetColumn(
widget = widget, widget = widget,
appWidgetHost = widgetHost, appWidgetHost = widgetHost,
editMode = editMode, editMode = editMode,
onWidgetAdd = {
viewModel.addWidget(it, i + 1)
},
onWidgetRemove = { onWidgetRemove = {
if (widget is AppWidget) { if (widget is AppWidget) {
widgetHost.deleteAppWidgetId(widget.config.widgetId) widgetHost.deleteAppWidgetId(widget.config.widgetId)

View File

@ -54,6 +54,7 @@ import de.mm20.launcher2.widgets.MusicWidget
import de.mm20.launcher2.widgets.NotesWidget import de.mm20.launcher2.widgets.NotesWidget
import de.mm20.launcher2.widgets.WeatherWidget import de.mm20.launcher2.widgets.WeatherWidget
import de.mm20.launcher2.widgets.Widget import de.mm20.launcher2.widgets.Widget
import java.util.UUID
@Composable @Composable
fun WidgetItem( fun WidgetItem(
@ -61,6 +62,7 @@ fun WidgetItem(
appWidgetHost: AppWidgetHost, appWidgetHost: AppWidgetHost,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
editMode: Boolean = false, editMode: Boolean = false,
onWidgetAdd: (widget: Widget) -> Unit = {},
onWidgetUpdate: (widget: Widget) -> Unit = {}, onWidgetUpdate: (widget: Widget) -> Unit = {},
onWidgetRemove: () -> Unit = {}, onWidgetRemove: () -> Unit = {},
draggableState: DraggableState = rememberDraggableState {}, draggableState: DraggableState = rememberDraggableState {},
@ -159,7 +161,16 @@ fun WidgetItem(
} }
is NotesWidget -> { is NotesWidget -> {
NotesWidget(widget) NotesWidget(
widget,
onNewNote = {
val newWidget = NotesWidget(
id = UUID.randomUUID(),
widget.config.copy(storedText = "")
)
onWidgetAdd(newWidget)
}
)
} }
is AppWidget -> { is AppWidget -> {

View File

@ -23,9 +23,13 @@ class WidgetsVM : ViewModel(), KoinComponent {
val widgets = widgetRepository.get() val widgets = widgetRepository.get()
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), emptyList()) .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), emptyList())
fun addWidget(widget: Widget) { fun addWidget(widget: Widget, index: Int? = null) {
val widgets = widgets.value.toMutableList() val widgets = widgets.value.toMutableList()
if (index == null) {
widgets.add(widget) widgets.add(widget)
} else {
widgets.add(index.coerceAtMost(widgets.size), widget)
}
widgetRepository.set(widgets) widgetRepository.set(widgets)
} }

View File

@ -36,7 +36,10 @@ import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
@Composable @Composable
fun NotesWidget(widget: NotesWidget) { fun NotesWidget(
widget: NotesWidget,
onNewNote: () -> Unit,
) {
val context = LocalContext.current val context = LocalContext.current
val viewModel: NotesWidgetVM = val viewModel: NotesWidgetVM =
viewModel(key = "notes-widget-${widget.id}", factory = NotesWidgetVM.Factory) viewModel(key = "notes-widget-${widget.id}", factory = NotesWidgetVM.Factory)
@ -74,11 +77,14 @@ fun NotesWidget(widget: NotesWidget) {
} }
DropdownMenu(expanded = showMenu, onDismissRequest = { showMenu = false }) { DropdownMenu(expanded = showMenu, onDismissRequest = { showMenu = false }) {
DropdownMenuItem( DropdownMenuItem(
text = { Text("New note") }, text = { Text(stringResource(R.string.notes_widget_action_new)) },
leadingIcon = { leadingIcon = {
Icon(Icons.Rounded.Add, null) Icon(Icons.Rounded.Add, null)
}, },
onClick = { /*TODO*/ }, onClick = {
onNewNote()
showMenu = false
},
) )
DropdownMenuItem( DropdownMenuItem(
text = { Text(stringResource(R.string.notes_widget_action_save)) }, text = { Text(stringResource(R.string.notes_widget_action_save)) },