From 7d54512962ad863a3ea961a53ee57bb825db92ad Mon Sep 17 00:00:00 2001
From: MM20 <15646950+MM2-0@users.noreply.github.com>
Date: Sun, 14 May 2023 14:45:30 +0200
Subject: [PATCH] Add widget resize tooltip
---
.../launcher/sheets/ConfigureWidgetSheet.kt | 74 +++++++++++--------
core/i18n/src/main/res/values/strings.xml | 1 +
2 files changed, 46 insertions(+), 29 deletions(-)
diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/ConfigureWidgetSheet.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/ConfigureWidgetSheet.kt
index 632093db..6118a398 100644
--- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/ConfigureWidgetSheet.kt
+++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/ConfigureWidgetSheet.kt
@@ -7,6 +7,7 @@ import android.appwidget.AppWidgetProviderInfo
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.draggable
import androidx.compose.foundation.gestures.rememberDraggableState
@@ -19,7 +20,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.requiredSize
-import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardOptions
@@ -36,14 +36,17 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.OutlinedCard
import androidx.compose.material3.OutlinedTextField
+import androidx.compose.material3.PlainTooltipBox
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
+import androidx.compose.material3.rememberPlainTooltipState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
@@ -55,7 +58,6 @@ import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
-import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import de.mm20.launcher2.calendar.CalendarRepository
import de.mm20.launcher2.ktx.isAtLeastApiLevel
@@ -77,6 +79,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 kotlinx.coroutines.launchg
import org.koin.androidx.compose.get
import kotlin.math.roundToInt
@@ -348,34 +351,46 @@ fun ColumnScope.ConfigureAppWidget(
.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
- Box(
- modifier = Modifier
- .padding(end = 16.dp)
- .clip(MaterialTheme.shapes.small)
- .background(MaterialTheme.colorScheme.primaryContainer)
- .height(36.dp)
- .width(48.dp)
- .draggable(
- state = draggableState,
- orientation = Orientation.Vertical,
- startDragImmediately = true,
- onDragStopped = {
- onWidgetUpdated(
- widget.copy(
- config = widget.config.copy(
- height = widget.config.height + dragDelta
+ val scope = rememberCoroutineScope()
+ val tooltipState = rememberPlainTooltipState()
+ PlainTooltipBox(
+ tooltipState = tooltipState,
+ tooltip = { Text(stringResource(R.string.widget_config_appwidget_resize_hint)) }
+ ) {
+ Box(
+ modifier = Modifier
+ .padding(end = 16.dp)
+ .clip(MaterialTheme.shapes.small)
+ .background(MaterialTheme.colorScheme.primaryContainer)
+ .height(36.dp)
+ .width(48.dp)
+ .draggable(
+ state = draggableState,
+ orientation = Orientation.Vertical,
+ onDragStopped = {
+ onWidgetUpdated(
+ widget.copy(
+ config = widget.config.copy(
+ height = widget.config.height + dragDelta
+ )
)
)
- )
- dragDelta = 0
- }
- ),
- contentAlignment = Alignment.Center
- ) {
- Icon(
- imageVector = Icons.Rounded.UnfoldMore,
- contentDescription = null,
- )
+ dragDelta = 0
+ }
+ )
+ .clickable {
+ scope.launch {
+ tooltipState.show()
+ }
+ },
+ contentAlignment = Alignment.Center
+ ) {
+ Icon(
+ imageVector = Icons.Rounded.UnfoldMore,
+ contentDescription = null,
+ )
+ }
+
}
var textFieldValue by remember(widget.config.height) { mutableStateOf(widget.config.height.toString()) }
OutlinedTextField(
@@ -445,7 +460,8 @@ fun ColumnScope.ConfigureAppWidget(
)
}) {
Text(
- stringResource(id = R.string.widget_config_appwidget_configure))
+ stringResource(id = R.string.widget_config_appwidget_configure)
+ )
Icon(
modifier = Modifier
.padding(start = ButtonDefaults.IconSpacing)
diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml
index 07fcf417..4c850ebd 100644
--- a/core/i18n/src/main/res/values/strings.xml
+++ b/core/i18n/src/main/res/values/strings.xml
@@ -796,6 +796,7 @@
Height
Borderless
Configure widget
+ Drag to resize
Weather integration settings
No calendars found
App widget failed to load.