Bringup notes widget
This commit is contained in:
@@ -74,6 +74,7 @@ import de.mm20.launcher2.widgets.AppWidget
|
||||
import de.mm20.launcher2.widgets.CalendarWidget
|
||||
import de.mm20.launcher2.widgets.FavoritesWidget
|
||||
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 org.koin.androidx.compose.get
|
||||
@@ -110,6 +111,7 @@ fun ConfigureWidgetSheet(
|
||||
is CalendarWidget -> ConfigureCalendarWidget(widget, onWidgetUpdated)
|
||||
is FavoritesWidget -> ConfigureFavoritesWidget(widget, onWidgetUpdated)
|
||||
is MusicWidget -> ConfigureMusicWidget()
|
||||
is NotesWidget -> ConfigureNotesWidget(widget, onWidgetUpdated)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -304,6 +306,7 @@ fun ColumnScope.ConfigureAppWidget(
|
||||
is MusicWidget -> it.copy(id = widget.id)
|
||||
is CalendarWidget -> it.copy(id = widget.id)
|
||||
is FavoritesWidget -> it.copy(id = widget.id)
|
||||
is NotesWidget -> it.copy(id = widget.id)
|
||||
}
|
||||
onWidgetUpdated(updatedWidget)
|
||||
replaceWidget = false
|
||||
@@ -537,4 +540,12 @@ fun ColumnScope.ConfigureCalendarWidget(
|
||||
text = stringResource(R.string.widget_config_calendar_no_calendars)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ConfigureNotesWidget(
|
||||
widget: NotesWidget,
|
||||
onWidgetUpdated: (NotesWidget) -> Unit
|
||||
) {
|
||||
|
||||
}
|
||||
@@ -30,6 +30,7 @@ import androidx.compose.material.icons.rounded.LightMode
|
||||
import androidx.compose.material.icons.rounded.MusicNote
|
||||
import androidx.compose.material.icons.rounded.Search
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.StickyNote2
|
||||
import androidx.compose.material.icons.rounded.Today
|
||||
import androidx.compose.material.icons.rounded.Widgets
|
||||
import androidx.compose.material.icons.rounded.Work
|
||||
@@ -64,6 +65,7 @@ import de.mm20.launcher2.widgets.AppWidget
|
||||
import de.mm20.launcher2.widgets.AppWidgetConfig
|
||||
import de.mm20.launcher2.widgets.FavoritesWidget
|
||||
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
|
||||
@@ -287,6 +289,7 @@ fun WidgetPickerSheet(
|
||||
CalendarWidget.Type -> CalendarWidget(id)
|
||||
MusicWidget.Type -> MusicWidget(id)
|
||||
FavoritesWidget.Type -> FavoritesWidget(id)
|
||||
NotesWidget.Type -> NotesWidget(id)
|
||||
else -> return@OutlinedCard
|
||||
}
|
||||
onWidgetSelected(widget)
|
||||
@@ -302,6 +305,7 @@ fun WidgetPickerSheet(
|
||||
CalendarWidget.Type -> Icons.Rounded.Today
|
||||
MusicWidget.Type -> Icons.Rounded.MusicNote
|
||||
FavoritesWidget.Type -> Icons.Rounded.Star
|
||||
NotesWidget.Type -> Icons.Rounded.StickyNote2
|
||||
else -> Icons.Rounded.Widgets
|
||||
},
|
||||
contentDescription = null,
|
||||
|
||||
@@ -45,11 +45,13 @@ import de.mm20.launcher2.ui.launcher.widgets.calendar.CalendarWidget
|
||||
import de.mm20.launcher2.ui.launcher.widgets.external.ExternalWidget
|
||||
import de.mm20.launcher2.ui.launcher.widgets.favorites.FavoritesWidget
|
||||
import de.mm20.launcher2.ui.launcher.widgets.music.MusicWidget
|
||||
import de.mm20.launcher2.ui.launcher.widgets.notes.NotesWidget
|
||||
import de.mm20.launcher2.ui.launcher.widgets.weather.WeatherWidget
|
||||
import de.mm20.launcher2.widgets.AppWidget
|
||||
import de.mm20.launcher2.widgets.CalendarWidget
|
||||
import de.mm20.launcher2.widgets.FavoritesWidget
|
||||
import de.mm20.launcher2.widgets.MusicWidget
|
||||
import de.mm20.launcher2.widgets.NotesWidget
|
||||
import de.mm20.launcher2.widgets.WeatherWidget
|
||||
import de.mm20.launcher2.widgets.Widget
|
||||
|
||||
@@ -107,6 +109,7 @@ fun WidgetItem(
|
||||
is MusicWidget -> stringResource(R.string.widget_name_music)
|
||||
is CalendarWidget -> stringResource(R.string.widget_name_calendar)
|
||||
is FavoritesWidget -> stringResource(R.string.widget_name_favorites)
|
||||
is NotesWidget -> stringResource(R.string.widget_name_notes)
|
||||
is AppWidget -> remember(widget.config.widgetId) {
|
||||
appWidget?.loadLabel(
|
||||
context.packageManager
|
||||
@@ -155,6 +158,10 @@ fun WidgetItem(
|
||||
FavoritesWidget(widget)
|
||||
}
|
||||
|
||||
is NotesWidget -> {
|
||||
NotesWidget(widget)
|
||||
}
|
||||
|
||||
is AppWidget -> {
|
||||
val widgetInfo = remember(widget.config.widgetId) {
|
||||
AppWidgetManager.getInstance(context)
|
||||
@@ -193,6 +200,7 @@ fun WidgetItem(
|
||||
is MusicWidget -> it.copy(id = widget.id)
|
||||
is CalendarWidget -> it.copy(id = widget.id)
|
||||
is FavoritesWidget -> it.copy(id = widget.id)
|
||||
is NotesWidget -> it.copy(id = widget.id)
|
||||
}
|
||||
onWidgetUpdate(updatedWidget)
|
||||
replaceWidget = false
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package de.mm20.launcher2.ui.launcher.widgets.notes
|
||||
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.text.BasicTextField
|
||||
import androidx.compose.material3.LocalContentColor
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.text.input.TextFieldValue
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import de.mm20.launcher2.widgets.NotesWidget
|
||||
|
||||
@Composable
|
||||
fun NotesWidget(widget: NotesWidget) {
|
||||
val viewModel: NotesWidgetVM = viewModel(key = "notes-widget-${widget.id}", factory = NotesWidgetVM.Factory)
|
||||
|
||||
LaunchedEffect(widget) {
|
||||
viewModel.updateWidget(widget)
|
||||
}
|
||||
|
||||
val text by viewModel.noteText
|
||||
|
||||
BasicTextField(
|
||||
value = text,
|
||||
onValueChange = { viewModel.setText(it) },
|
||||
modifier = Modifier.fillMaxWidth().padding(16.dp),
|
||||
textStyle = MaterialTheme.typography.bodyMedium.copy(
|
||||
color = LocalContentColor.current,
|
||||
),
|
||||
cursorBrush = SolidColor(MaterialTheme.colorScheme.primary),
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package de.mm20.launcher2.ui.launcher.widgets.notes
|
||||
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.initializer
|
||||
import androidx.lifecycle.viewmodel.viewModelFactory
|
||||
import de.mm20.launcher2.services.widgets.WidgetsService
|
||||
import de.mm20.launcher2.widgets.NotesWidget
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.get
|
||||
|
||||
class NotesWidgetVM(
|
||||
private val widgetsService: WidgetsService,
|
||||
) : ViewModel() {
|
||||
private val widget = MutableStateFlow<NotesWidget?>(null)
|
||||
|
||||
val noteText = mutableStateOf(widget.value?.config?.storedText ?: "")
|
||||
|
||||
fun updateWidget(widget: NotesWidget) {
|
||||
val oldId = this.widget.value?.id
|
||||
this.widget.value = widget
|
||||
if (widget.id != oldId) noteText.value = widget.config.storedText
|
||||
}
|
||||
|
||||
private var updateJob: Job? = null
|
||||
fun setText(text: String) {
|
||||
noteText.value = text
|
||||
updateJob?.cancel()
|
||||
val widget = widget.value ?: return
|
||||
updateJob = viewModelScope.launch {
|
||||
delay(1000)
|
||||
widgetsService.updateWidget(widget.copy(config = widget.config.copy(storedText = text)))
|
||||
}
|
||||
}
|
||||
|
||||
companion object: KoinComponent {
|
||||
val Factory = viewModelFactory {
|
||||
initializer {
|
||||
NotesWidgetVM(get())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user