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
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)

View File

@ -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 -> {

View File

@ -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)
}

View File

@ -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)) },