From 9087be6282af293e260d247bd37fb4e5db19a694 Mon Sep 17 00:00:00 2001 From: Ricky Cheung Date: Wed, 26 Jun 2024 13:27:16 +0800 Subject: [PATCH] Add wide variant of dual pod widget * Wide variant activates when the widget is larger than 3 columns in length Signed-off-by: Ricky Cheung --- .../capod/main/ui/widget/WidgetProvider.kt | 24 +++- ...xml => widget_pod_dual_compact_layout.xml} | 0 .../layout/widget_pod_dual_wide_layout.xml | 123 ++++++++++++++++++ 3 files changed, 145 insertions(+), 2 deletions(-) rename app/src/main/res/layout/{widget_pod_dual_layout.xml => widget_pod_dual_compact_layout.xml} (100%) create mode 100644 app/src/main/res/layout/widget_pod_dual_wide_layout.xml diff --git a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetProvider.kt b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetProvider.kt index ace9f44a..7726e1db 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetProvider.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetProvider.kt @@ -41,6 +41,7 @@ import kotlinx.coroutines.withTimeout import java.time.Duration import javax.inject.Inject + @AndroidEntryPoint class WidgetProvider : AppWidgetProvider() { @@ -95,6 +96,14 @@ class WidgetProvider : AppWidgetProvider() { } } + private fun getCellsForSize(size: Int): Int { + var n = 2 + while (70 * n - 30 < size) { + ++n + } + return n - 1 + } + private suspend fun updateWidget( context: Context, widgetManager: AppWidgetManager, @@ -107,7 +116,17 @@ class WidgetProvider : AppWidgetProvider() { val layout = when { !upgradeRepo.isPro() -> createUpgradeRequiredLayout(context) - device is DualPodDevice -> createDualPodLayout(context, device) + device is DualPodDevice -> { + val minWidth = widgetManager.getAppWidgetOptions(widgetId) + .getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH) + val columns = getCellsForSize(minWidth) + val layout = when (columns) { + 2, 3 -> R.layout.widget_pod_dual_compact_layout + else -> R.layout.widget_pod_dual_wide_layout + } + + createDualPodLayout(context, device, layout) + } device is SinglePodDevice -> createSinglePodLayout(context, device) device is PodDevice -> createUnknownPodLayout(context, device) else -> createNoDeviceLayout(context) @@ -169,7 +188,8 @@ class WidgetProvider : AppWidgetProvider() { private fun createDualPodLayout( context: Context, podDevice: DualPodDevice, - ): RemoteViews = RemoteViews(context.packageName, R.layout.widget_pod_dual_layout).apply { + layout: Int + ): RemoteViews = RemoteViews(context.packageName, layout).apply { log(TAG, VERBOSE) { "createSinglePodLayout(context=$context, podDevice=$podDevice)" } val pendingIntent: PendingIntent = PendingIntent.getActivity( context, diff --git a/app/src/main/res/layout/widget_pod_dual_layout.xml b/app/src/main/res/layout/widget_pod_dual_compact_layout.xml similarity index 100% rename from app/src/main/res/layout/widget_pod_dual_layout.xml rename to app/src/main/res/layout/widget_pod_dual_compact_layout.xml diff --git a/app/src/main/res/layout/widget_pod_dual_wide_layout.xml b/app/src/main/res/layout/widget_pod_dual_wide_layout.xml new file mode 100644 index 00000000..44f35303 --- /dev/null +++ b/app/src/main/res/layout/widget_pod_dual_wide_layout.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file