Note widget: add action to create new note
This commit is contained in:
parent
10d4b02798
commit
b217dad7c8
@ -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)
|
||||
|
||||
@ -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 -> {
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
|
||||
@ -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)) },
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user