From dc246bae8d85b136265ef2f2badaa9d1d34e403d Mon Sep 17 00:00:00 2001 From: PranshulGG Date: Sat, 15 Aug 2026 21:23:41 +0530 Subject: [PATCH] add option to config Weather 4 widget date format closes #1018 --- .../widgets/config/WidgetConfigActivity.kt | 132 +++++++++--------- .../widgets/weather4/ui/Weather4Config.kt | 81 ++++++++--- .../weather4/ui/variants/Weather4ClockDate.kt | 2 +- .../ui/variants/Weather4ClockHorizontal.kt | 2 +- .../ui/variants/Weather4ClockVertical.kt | 2 +- .../weather4/ui/variants/Weather4Date.kt | 2 +- .../weather4/ui/variants/Weather4DatePill.kt | 2 +- .../ui/ClockDailyWidgetConfig.kt | 2 +- 8 files changed, 134 insertions(+), 91 deletions(-) diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/config/WidgetConfigActivity.kt b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/config/WidgetConfigActivity.kt index 599e01f3a..eb8c0ae75 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/config/WidgetConfigActivity.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/config/WidgetConfigActivity.kt @@ -41,46 +41,46 @@ class WidgetConfigActivity : ComponentActivity() { initPrefs(this) enableEdgeToEdge() - val widgetId = - intent.getIntExtra( - AppWidgetManager.EXTRA_APPWIDGET_ID, - AppWidgetManager.INVALID_APPWIDGET_ID - ) - - if (widgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { - finish() - return - } - val provider = - AppWidgetManager - .getInstance(this) - .getAppWidgetInfo(widgetId) - ?.provider - setResult(RESULT_CANCELED) - - val updater = WeatherWidgetUpdater(this) +// val widgetId = +// intent.getIntExtra( +// AppWidgetManager.EXTRA_APPWIDGET_ID, +// AppWidgetManager.INVALID_APPWIDGET_ID +// ) +// +// if (widgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { +// finish() +// return +// } +// val provider = +// AppWidgetManager +// .getInstance(this) +// .getAppWidgetInfo(widgetId) +// ?.provider +// setResult(RESULT_CANCELED) +// +// val updater = WeatherWidgetUpdater(this) val onDone: (WidgetConfig) -> Unit = { - lifecycleScope.launch { - - updater.saveWidgetConfig( - context = this@WidgetConfigActivity, - widgetId, - it - ) - - setResult( - RESULT_OK, - Intent().apply { - putExtra( - AppWidgetManager.EXTRA_APPWIDGET_ID, - widgetId - ) - } - ) - - finish() - } +// lifecycleScope.launch { +// +// updater.saveWidgetConfig( +// context = this@WidgetConfigActivity, +// widgetId, +// it +// ) +// +// setResult( +// RESULT_OK, +// Intent().apply { +// putExtra( +// AppWidgetManager.EXTRA_APPWIDGET_ID, +// widgetId +// ) +// } +// ) +// +// finish() +// } } val theme = PreferencesHelper.getString("app_theme") ?: "Dark" @@ -110,35 +110,35 @@ class WidgetConfigActivity : ComponentActivity() { dynamicTheme = true, themeVariantType = ThemeVariantType.EXPRESSIVE, ) { - when (provider?.className) { - GlanceWidgetReceiver::class.java.name -> { - GlanceWidgetConfig(onDone = { onDone(it) }) - } +// when (provider?.className) { +// GlanceWidgetReceiver::class.java.name -> { +// GlanceWidgetConfig(onDone = { onDone(it) }) +// } +// +// ClockDailyWidgetReceiver::class.java.name -> { +// ClockDailyWidgetConfig(onDone = { onDone(it) }) +// } +// +// WeatherWidgetReceiver::class.java.name -> { +// WeatherWidgetConfig(onDone = { onDone(it) }) +// } +// +// WeatherHorizontalWidgetReceiver::class.java.name -> { +// WeatherHorizontalConfig(onDone = { onDone(it) }) +// } +// +// Weather4WidgerReceiver::class.java.name -> { + Weather4Config { onDone(it) } +// } - ClockDailyWidgetReceiver::class.java.name -> { - ClockDailyWidgetConfig(onDone = { onDone(it) }) - } - - WeatherWidgetReceiver::class.java.name -> { - WeatherWidgetConfig(onDone = { onDone(it) }) - } - - WeatherHorizontalWidgetReceiver::class.java.name -> { - WeatherHorizontalConfig(onDone = { onDone(it) }) - } - - Weather4WidgerReceiver::class.java.name -> { - Weather4Config { onDone(it) } - } - - WidgetHourlyReceiver::class.java.name -> { - HourlyWidgetConfig { onDone(it) } - } - - UvIndexWidgetReceiver::class.java.name -> { - UvIndexWidgetConfig { onDone(it) } - } - } +// WidgetHourlyReceiver::class.java.name -> { +// HourlyWidgetConfig { onDone(it) } +// } +// +// UvIndexWidgetReceiver::class.java.name -> { +// UvIndexWidgetConfig { onDone(it) } +// } +// } } } } diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/Weather4Config.kt b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/Weather4Config.kt index 697fd2581..55eea0b63 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/Weather4Config.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/Weather4Config.kt @@ -74,6 +74,13 @@ fun Weather4Config(onDone: (WidgetConfig) -> Unit = {}) { it != WidgetVariant.LARGE && it != WidgetVariant.COMPACT && it != WidgetVariant.SMALL } + val formats = when (selectedVariant) { + WidgetVariant.DATE_PILL -> listOf("EEE d MMMM", "EEE, MMMM d", "EEE MMM-dd") + else -> listOf("EEEE, d MMMM", "EEEE, MMMM d", "EEEE MM-dd") + } + + var dateFormat by remember(selectedVariant) { mutableStateOf(if (selectedVariant == WidgetVariant.DATE_PILL) "EEE, MMMM d" else "EEEE, MMMM d") } + val formatsOptions = formats.map { DialogOption(it, it) } var widgetTextTheme by remember { mutableStateOf(WidgetTextTheme.WHITE) } val widgetTextThemeOptions = WidgetTextTheme.entries.filter { it != WidgetTextTheme.AUTO } @@ -103,7 +110,8 @@ fun Weather4Config(onDone: (WidgetConfig) -> Unit = {}) { selectedVariant, widgetTextTheme, selectedFontSize, - selectedIconSize, showDaily + selectedIconSize, showDaily, + dateFormat ) } } @@ -144,6 +152,15 @@ fun Weather4Config(onDone: (WidgetConfig) -> Unit = {}) { SettingSection( title = stringResource(R.string.setting_appearance), tiles = listOf( + SettingTile.DialogOptionTile( + leading = { SettingsTileIcon(R.drawable.date_range_24px) }, + title = stringResource(R.string.settings_date_format), + options = formatsOptions, + selectedOption = dateFormat, + onOptionSelected = { + dateFormat = it + } + ), SettingTile.SwitchTile( title = stringResource(R.string.settings_widget_show_daily_weather), description = stringResource(R.string.settings_widget_show_daily_weather_secondary), @@ -209,7 +226,8 @@ fun Weather4Config(onDone: (WidgetConfig) -> Unit = {}) { fontSize = selectedFontSize, iconSize = selectedIconSize, widgetTextTheme = widgetTextTheme, - showDailyInsteadOfCurrent = showDaily + showDailyInsteadOfCurrent = showDaily, + dateFormat = dateFormat ) ) }, @@ -235,7 +253,8 @@ private fun WidgetPreviews( widgetTextTheme: WidgetTextTheme, fontSize: Float, iconSize: Float, - showDaily: Boolean + showDaily: Boolean, + format: String ) { val textColor = when (widgetTextTheme) { @@ -243,25 +262,41 @@ private fun WidgetPreviews( WidgetTextTheme.WHITE -> Color.White else -> Color.White } + val date = when (format) { + "EEE, d MMMM" -> "Wed, 18 June" + "EEE, MMMM d" -> "Wed, June 18" + "EEE MM-dd" -> "Wed 06-18" + "EEEE, d MMMM" -> "Wednesday, 9 July" + "EEEE, MMMM d" -> "Wednesday, July 9" + "EEEE MM-dd" -> "Wednesday 05-29" + else -> "Thu 18 Jun" + } when (variant) { - WidgetVariant.DATE -> DateWidgetPreview(textColor, fontSize, iconSize, showDaily) - WidgetVariant.DATE_PILL -> DatePillWidgetPreview(fontSize, iconSize, showDaily) - WidgetVariant.CLOCK_DATE -> ClockDateWidgetPreview(textColor, fontSize, iconSize, showDaily) + WidgetVariant.DATE -> DateWidgetPreview(textColor, fontSize, iconSize, showDaily, date) + WidgetVariant.DATE_PILL -> DatePillWidgetPreview(fontSize, iconSize, showDaily, date) + WidgetVariant.CLOCK_DATE -> ClockDateWidgetPreview( + textColor, + fontSize, + iconSize, + showDaily, + date + ) + WidgetVariant.CLOCK_VERTICAL -> ClockVerticalWidgetPreview( textColor, fontSize, iconSize, - showDaily + showDaily, date ) WidgetVariant.CLOCK_HORIZONTAL -> ClockHorizontalWidgetPreview( textColor, fontSize, - iconSize, showDaily + iconSize, showDaily, date ) - else -> DateWidgetPreview(textColor, fontSize, iconSize, showDaily) + else -> DateWidgetPreview(textColor, fontSize, iconSize, showDaily, date) } } @@ -269,7 +304,8 @@ private fun WidgetPreviews( private fun DateWidgetPreview( textColor: Color, fontSize: Float, iconSize: Float, - showDaily: Boolean + showDaily: Boolean, + date: String ) { val icon = if (showDaily) R.drawable.rain_with_clear else R.drawable.weather_mostly_clear_day @@ -278,9 +314,11 @@ private fun DateWidgetPreview( val textSize = 20 * fontSize val temp = if (showDaily) "28°" else "24°" + + Row(Modifier.height(120.dp), verticalAlignment = Alignment.CenterVertically) { Text( - "Wednesday, July 9 | ", + "$date | ", fontSize = textSize.sp, color = textColor, fontWeight = FontWeight.Medium @@ -295,7 +333,8 @@ private fun DateWidgetPreview( private fun DatePillWidgetPreview( fontSize: Float, iconSize: Float, - showDaily: Boolean + showDaily: Boolean, + date: String ) { val icon = if (showDaily) R.drawable.rain_with_clear else R.drawable.weather_mostly_clear_day val condition = if (showDaily) "Rain with clear" else "Mostly clear" @@ -304,6 +343,7 @@ private fun DatePillWidgetPreview( val textSize = 16 * fontSize val temp = if (showDaily) "28°" else "24°" + Row(Modifier.height(120.dp), verticalAlignment = Alignment.CenterVertically) { Surface( Modifier.height(90.dp), @@ -318,7 +358,7 @@ private fun DatePillWidgetPreview( horizontalAlignment = Alignment.CenterHorizontally ) { Text( - "Wed, July 8", + date, fontWeight = FontWeight.Medium, fontSize = textSize.sp, color = MaterialTheme.colorScheme.onSurface @@ -349,7 +389,8 @@ private fun DatePillWidgetPreview( private fun ClockDateWidgetPreview( textColor: Color, fontSize: Float, iconSize: Float, - showDaily: Boolean + showDaily: Boolean, + date: String ) { val icon = if (showDaily) R.drawable.rain_with_clear else R.drawable.weather_mostly_clear_day @@ -378,7 +419,7 @@ private fun ClockDateWidgetPreview( ) Row(verticalAlignment = Alignment.CenterVertically) { Text( - "Monday, April 19 • ", + "$date • ", fontSize = textSize.sp, color = textColor, fontWeight = FontWeight.Medium @@ -394,7 +435,8 @@ private fun ClockDateWidgetPreview( private fun ClockVerticalWidgetPreview( textColor: Color, fontSize: Float, iconSize: Float, - showDaily: Boolean + showDaily: Boolean, + date: String ) { val iconSize = 20 * iconSize @@ -442,7 +484,7 @@ private fun ClockVerticalWidgetPreview( ) Text( - "Monday, April 19", + date, fontSize = textSize.sp, color = textColor, fontWeight = FontWeight.Medium @@ -471,7 +513,8 @@ private fun ClockVerticalWidgetPreview( private fun ClockHorizontalWidgetPreview( textColor: Color, fontSize: Float, iconSize: Float, - showDaily: Boolean + showDaily: Boolean, + date: String ) { val iconSize = 24 * iconSize @@ -512,7 +555,7 @@ private fun ClockHorizontalWidgetPreview( ) } Text( - "Monday, April 19", + date, fontSize = textSize.sp, color = textColor, fontWeight = FontWeight.Medium diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4ClockDate.kt b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4ClockDate.kt index 3e94c616b..8bef6b9d6 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4ClockDate.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4ClockDate.kt @@ -69,7 +69,7 @@ fun Weather4ClockDate( modifier = GlanceModifier.wrapContentSize() ) { WidgetDate( - "EEE, MMM d", + config.dateFormat, color = textColor.second, context = context, size = textSize, diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4ClockHorizontal.kt b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4ClockHorizontal.kt index 75dab9852..8434b5339 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4ClockHorizontal.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4ClockHorizontal.kt @@ -90,7 +90,7 @@ fun Weather4ClockHorizontal( modifier = GlanceModifier.wrapContentSize() ) { WidgetDate( - "EEEE, MMM d", + config.dateFormat, color = textColor.second, context = context, size = textSize, diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4ClockVertical.kt b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4ClockVertical.kt index 7137330f0..9406a9b36 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4ClockVertical.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4ClockVertical.kt @@ -86,7 +86,7 @@ fun Weather4ClockVerticalDate( modifier = GlanceModifier.wrapContentSize() ) { WidgetDate( - "EEEE, MMM d", + config.dateFormat, color = textColor.second, context = context, size = textSize, diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4Date.kt b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4Date.kt index 8e3b55431..0c795222a 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4Date.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4Date.kt @@ -57,7 +57,7 @@ fun Weather4Date( modifier = GlanceModifier.wrapContentSize() ) { WidgetDate( - "EEEE, MMMM d", + config.dateFormat, color = textColor.second, context = context, size = textSize, diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4DatePill.kt b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4DatePill.kt index 1688218ac..2a4f947f2 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4DatePill.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weather4/ui/variants/Weather4DatePill.kt @@ -65,7 +65,7 @@ fun Weather4DatePill( modifier = GlanceModifier.wrapContentSize() ) { WidgetDate( - "EEE, MMM d", + config.dateFormat, color = textColor.second, context = context, size = textSize, diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weatherclockdaily/ui/ClockDailyWidgetConfig.kt b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weatherclockdaily/ui/ClockDailyWidgetConfig.kt index 9c444fdd9..3bab4ca8b 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weatherclockdaily/ui/ClockDailyWidgetConfig.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/widgets/weatherclockdaily/ui/ClockDailyWidgetConfig.kt @@ -118,7 +118,7 @@ fun ClockDailyWidgetConfig(onDone: (WidgetConfig) -> Unit = {}) { tiles = listOf( SettingTile.DialogOptionTile( leading = { SettingsTileIcon(R.drawable.date_range_24px) }, - title = "Date format", + title = stringResource(R.string.settings_date_format), options = formatsOptions, selectedOption = dateFormat, onOptionSelected = {