From 6f4ca28ad337990a67ca6a97f4f03ac9cacf802a Mon Sep 17 00:00:00 2001 From: sameerasw Date: Fri, 23 Jan 2026 21:51:04 +0530 Subject: [PATCH 1/2] Version upgrade --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d3d57b96..3f2af7b0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -21,8 +21,8 @@ android { applicationId = "com.sameerasw.essentials" minSdk = 26 targetSdk = 36 - versionCode = 22 - versionName = "10.1" + versionCode = 23 + versionName = "10.2" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } From b7a6e957d1c7eb5acdfe7b83f6f7d6b9e3a593a1 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Fri, 23 Jan 2026 22:08:14 +0530 Subject: [PATCH 2/2] Fix #119 scaling of the battery widget --- .../services/widgets/BatteriesWidget.kt | 111 +++++++----------- .../main/res/xml/batteries_widget_info.xml | 8 +- 2 files changed, 47 insertions(+), 72 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/services/widgets/BatteriesWidget.kt b/app/src/main/java/com/sameerasw/essentials/services/widgets/BatteriesWidget.kt index df3d505f..f8342a22 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/widgets/BatteriesWidget.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/widgets/BatteriesWidget.kt @@ -157,11 +157,6 @@ class BatteriesWidget : GlanceAppWidget() { val onSurface = GlanceTheme.colors.onSurface.getColor(configContext).toArgb() val widgetBackgroundColor = GlanceTheme.colors.widgetBackground.getColor(configContext).toArgb() - val isNightMode = (systemConfig.uiMode and - android.content.res.Configuration.UI_MODE_NIGHT_MASK) == - android.content.res.Configuration.UI_MODE_NIGHT_YES - - val colors = ThemeColors( primary = basePrimary, error = baseError, @@ -171,85 +166,61 @@ class BatteriesWidget : GlanceAppWidget() { iconTint = onSurface ) - val backgroundModifier = if (isBackgroundEnabled) { GlanceModifier.background(GlanceTheme.colors.widgetBackground) } else { GlanceModifier.background(android.graphics.Color.TRANSPARENT) } - if (displayedItems.size > 1) { - val isGridCapable = width >= 200.dp && height >= 140.dp - - if (isGridCapable) { - // GRID / WRAPPING LAYOUT - val itemWidth = 72.dp - val columns = (width / itemWidth).toInt().coerceAtLeast(1) - val rows = displayedItems.chunked(columns) - - Column( - modifier = GlanceModifier - .fillMaxSize() - .then(backgroundModifier) - .padding(8.dp), - horizontalAlignment = Alignment.CenterHorizontally, - verticalAlignment = Alignment.CenterVertically - ) { - rows.forEachIndexed { rowIndex, rowItems -> - Row( - modifier = GlanceModifier.fillMaxWidth().defaultWeight(), - horizontalAlignment = Alignment.CenterHorizontally, - verticalAlignment = Alignment.CenterVertically - ) { - rowItems.forEachIndexed { colIndex, item -> - BatteryItemBox(configContext, item, colors, modifier = GlanceModifier.defaultWeight().fillMaxHeight()) - if (colIndex < rowItems.size - 1) { - Spacer(modifier = GlanceModifier.width(8.dp)) - } - } - if (rowItems.size < columns) { - repeat(columns - rowItems.size) { - Spacer(modifier = GlanceModifier.defaultWeight().fillMaxHeight()) - if (it < (columns - rowItems.size - 1)) Spacer(modifier = GlanceModifier.width(8.dp)) - } - } - } - if (rowIndex < rows.size - 1) { - Spacer(modifier = GlanceModifier.height(8.dp)) - } - } - } - } else { - // STANDARD SINGLE ROW LAYOUT + val effectivePadding = if (width < 100.dp || height < 100.dp) 4.dp else 8.dp + val isSingleItem = displayedItems.size <= 1 + val items = displayedItems.ifEmpty { listOf(BatteryItemData(androidLevel, R.drawable.rounded_mobile_24, "Android")) } + + // Dynamic Grid Calculation + val itemMinWidth = if (isSingleItem) 120.dp else 72.dp + val columns = (width / itemMinWidth).toInt().coerceIn(1, items.size) + val rows = items.chunked(columns) + + Column( + modifier = GlanceModifier + .fillMaxSize() + .then(backgroundModifier) + .padding(if (isSingleItem && width > 120.dp) 16.dp else effectivePadding), + horizontalAlignment = Alignment.CenterHorizontally, + verticalAlignment = Alignment.CenterVertically + ) { + rows.forEachIndexed { rowIndex, rowItems -> Row( - modifier = GlanceModifier - .fillMaxSize() - .then(backgroundModifier) - .padding(8.dp), + modifier = GlanceModifier.fillMaxWidth().defaultWeight(), horizontalAlignment = Alignment.CenterHorizontally, verticalAlignment = Alignment.CenterVertically ) { - displayedItems.forEachIndexed { index, item -> - BatteryItemBox(configContext, item, colors, modifier = GlanceModifier.defaultWeight().fillMaxHeight()) - - if (index < displayedItems.size - 1) { + rowItems.forEachIndexed { colIndex, item -> + val itemResolution = if (isSingleItem) 512 else 340 + BatteryItemBox( + configContext, + item, + colors, + size = itemResolution, + modifier = GlanceModifier.defaultWeight().fillMaxHeight() + ) + if (colIndex < rowItems.size - 1 || rowItems.size < columns) { Spacer(modifier = GlanceModifier.width(8.dp)) } } + // Filler for consistent sizing + if (rowItems.size < columns) { + repeat(columns - rowItems.size) { i -> + Spacer(modifier = GlanceModifier.defaultWeight().fillMaxHeight()) + if (i < (columns - rowItems.size - 1)) { + Spacer(modifier = GlanceModifier.width(8.dp)) + } + } + } + } + if (rowIndex < rows.size - 1) { + Spacer(modifier = GlanceModifier.height(8.dp)) } - } - } else { - // Single item layout (Big) - val item = displayedItems.firstOrNull() ?: BatteryItemData(androidLevel, R.drawable.rounded_mobile_24, "Android") - - Box( - modifier = GlanceModifier - .fillMaxSize() - .then(backgroundModifier) - .padding(16.dp), - contentAlignment = Alignment.Center - ) { - BatteryItemBox(configContext, item, colors, size = 512, modifier = GlanceModifier.fillMaxSize()) } } } diff --git a/app/src/main/res/xml/batteries_widget_info.xml b/app/src/main/res/xml/batteries_widget_info.xml index 936c457b..34f47dd9 100644 --- a/app/src/main/res/xml/batteries_widget_info.xml +++ b/app/src/main/res/xml/batteries_widget_info.xml @@ -2,8 +2,12 @@