change clock size selection to predefined options, fix widget layout spacing, and trigger worker on update

This commit is contained in:
PranshulGG committed 2026-06-20 15:16:18 +05:30
1 parent a7d889f8fc
commit 641bbe726c
5 files changed
+40 -20

No files matched your search

@@ -4,10 +4,8 @@ import android.annotation.SuppressLint
import android.content.Context
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.glance.ColorFilter
import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.GlanceTheme
import androidx.glance.Image
import androidx.glance.ImageProvider
import androidx.glance.LocalContext
@@ -23,16 +21,16 @@ import androidx.glance.layout.Column
import androidx.glance.layout.Row
import androidx.glance.layout.Spacer
import androidx.glance.layout.fillMaxSize
import androidx.glance.layout.fillMaxWidth
import androidx.glance.layout.height
import androidx.glance.layout.padding
import androidx.glance.layout.size
import androidx.glance.layout.width
import androidx.glance.text.Text
import androidx.glance.text.TextStyle
import androidx.glance.unit.ColorProvider
import com.pranshulgg.weather_master_app.MainActivity
import com.pranshulgg.weather_master_app.R
import com.pranshulgg.weather_master_app.core.ui.components.Gap
import com.pranshulgg.weather_master_app.core.ui.components.WeatherIconBox
import com.pranshulgg.weather_master_app.widgets.WeatherWidgetStateDefinition
import com.pranshulgg.weather_master_app.widgets.WeatherWidgetStateJson
import com.pranshulgg.weather_master_app.widgets.model.WidgetWeather
@@ -72,7 +70,7 @@ class GlanceWidget : GlanceAppWidget() {
.clickable(actionStartActivity<MainActivity>())
) {
if (state != null)
Column() {
Column(GlanceModifier.fillMaxWidth().padding(16.dp)) {
if (config.showClock) {
WidgetClock(config.clockSize, context)
}
@@ -86,7 +84,7 @@ class GlanceWidget : GlanceAppWidget() {
contentDescription = null,
modifier = GlanceModifier.size(24.dp)
)
Spacer(GlanceModifier.height(5.dp))
Spacer(GlanceModifier.width(5.dp))
Box {
Text(
text = "${state.currentTemp} • ",
@@ -1,9 +1,21 @@
package com.pranshulgg.weather_master_app.widgets.glance
import android.appwidget.AppWidgetManager
import android.content.Context
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import com.pranshulgg.weather_master_app.data.worker.WeatherWorker
import com.pranshulgg.weather_master_app.widgets.weather.WeatherWidget
class GlanceWidgetReceiver : GlanceAppWidgetReceiver() {
override val glanceAppWidget = GlanceWidget()
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray
) {
super.onUpdate(context, appWidgetManager, appWidgetIds)
WeatherWorker.runWorkerOnce(context)
}
}
@@ -42,6 +42,7 @@ import com.pranshulgg.weather_master_app.core.ui.components.SettingsTileIcon
import com.pranshulgg.weather_master_app.core.ui.components.WeatherIconBox
import com.pranshulgg.weather_master_app.core.ui.components.tiles.DialogOption
import com.pranshulgg.weather_master_app.core.ui.theme.ShapeRadius
import com.pranshulgg.weather_master_app.core.utils.formatters.toSafeDouble
import com.pranshulgg.weather_master_app.widgets.config.WidgetConfig
import kotlin.math.roundToInt
@@ -49,15 +50,29 @@ import kotlin.math.roundToInt
@Composable
fun GlanceWidgetConfig(onDone: (WidgetConfig) -> Unit = {}) {
var clockSize by remember { mutableFloatStateOf(32f) }
var clockSize by remember { mutableFloatStateOf(36f) }
var showClock by remember { mutableStateOf(true) }
var dateFormat by remember { mutableStateOf("EEE d MMM") }
val formats = listOf("EEE d MMM", "EEE MMM d", "EEE MM-dd")
val clockSizes = listOf(
20f,
28f,
36f,
44f,
56f,
72f,
88f,
104f,
120f
)
val btnSize = ButtonDefaults.MediumContainerHeight
val formatsOptions = formats.map { DialogOption(it, it) }
val clockSizeOptions = clockSizes.map { DialogOption(it.toString(), "${it.roundToInt()}.sp") }
Scaffold(
containerColor = MaterialTheme.colorScheme.surfaceContainer
) { paddingValues ->
@@ -76,17 +91,13 @@ fun GlanceWidgetConfig(onDone: (WidgetConfig) -> Unit = {}) {
SettingSection(
title = stringResource(R.string.setting_appearance),
tiles = listOf(
SettingTile.DialogSliderTile(
title = "Clock size",
dialogTitle = "Clock size",
initialValue = 32f,
valueRange = 20f..120f,
description = "${clockSize.roundToInt()}sp",
isDescriptionAsValue = true,
SettingTile.DialogOptionTile(
leading = { SettingsTileIcon(R.drawable.format_size_24px) },
labelFormatter = { "${it.roundToInt()}sp" },
onValueSubmitted = {
clockSize = it
title = "Clock size",
options = clockSizeOptions,
selectedOption = clockSize.toString(),
onOptionSelected = {
clockSize = it.toSafeDouble()?.toFloat() ?: 36f
}
),
SettingTile.SwitchTile(
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+2 -3
View File
@@ -1,9 +1,8 @@
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="40dp"
android:minWidth="100dp"
android:minHeight="40dp"
android:updatePeriodMillis="0"
android:resizeMode="horizontal|vertical"
android:widgetCategory="home_screen"
android:configure="com.pranshulgg.weather_master_app.widgets.config.WidgetConfigActivity"
/>
android:previewImage="@drawable/glance_widget_preview" />