From b320f4b1bde8819d59183da8fcefec14ca3903f0 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Tue, 24 May 2022 17:10:23 -0600 Subject: [PATCH] widgets: add thin widget Rework the smallest widgets to have no textual metadata, alongside adding a new widget size class. Turns out the last tiny widget redesign made the controls far too small. Instead, remove the textual metadata and make these widgets more akin to the small and wide widgets. This also introduces a new side class alongside that with more controls, again to make it similar to the other size classes. --- .../java/org/oxycblt/auxio/widgets/Forms.kt | 13 +- .../oxycblt/auxio/widgets/WidgetProvider.kt | 10 +- app/src/main/res/layout/widget_thin.xml | 116 ++++++++++++++ app/src/main/res/layout/widget_tiny.xml | 150 ++++++++++-------- 4 files changed, 212 insertions(+), 77 deletions(-) create mode 100644 app/src/main/res/layout/widget_thin.xml diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt b/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt index 20c5321ea..fc36fb2d0 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt @@ -33,14 +33,21 @@ import org.oxycblt.auxio.util.newMainIntent fun createDefaultWidget(context: Context) = createViews(context, R.layout.widget_default) /** - * The tiny widget is for an edge-case situation where a widget falls under the size class of the - * small widget, either via landscape mode or exceptionally small screens. + * The tiny widget like a small or medium widget, but for landscape or exceptionally small screens. */ fun createTinyWidget(context: Context, state: WidgetComponent.WidgetState) = createViews(context, R.layout.widget_tiny) - .applyMeta(context, state) + .applyCover(context, state) .applyBasicControls(context, state) +/** + * The thin widget is like a wide or large widget, but for landscape or exceptionally small screens. + */ +fun createThinWidget(context: Context, state: WidgetComponent.WidgetState) = + createViews(context, R.layout.widget_thin) + .applyCover(context, state) + .applyFullControls(context, state) + /** * The small widget is for 2x2 widgets and just shows the cover art and playback controls. This is * generally because a Medium widget is too large for this widget size and a text-only widget is too diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt index 8658d5a42..9b327c96f 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt @@ -42,6 +42,8 @@ import org.oxycblt.auxio.util.unlikelyToBeNull * changes. This is tolerable. * * For more specific details about these sub-widgets, see Forms.kt. + * + * @author OxygenCobalt */ class WidgetProvider : AppWidgetProvider() { /* @@ -57,6 +59,7 @@ class WidgetProvider : AppWidgetProvider() { val views = mapOf( SizeF(180f, 100f) to createTinyWidget(context, state), + SizeF(372f, 100f) to createThinWidget(context, state), SizeF(180f, 152f) to createSmallWidget(context, state), SizeF(272f, 152f) to createWideWidget(context, state), SizeF(180f, 270f) to createMediumWidget(context, state), @@ -122,13 +125,6 @@ class WidgetProvider : AppWidgetProvider() { val name = ComponentName(context, WidgetProvider::class.java) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - for (id in getAppWidgetIds(name)) { - val options = getAppWidgetOptions(id) - logD( - options.getParcelableArrayList(AppWidgetManager.OPTION_APPWIDGET_SIZES) - ?: "no sizes") - } - // Widgets are automatically responsive on Android 12, no need to do anything. updateAppWidget(name, RemoteViews(views)) } else { diff --git a/app/src/main/res/layout/widget_thin.xml b/app/src/main/res/layout/widget_thin.xml new file mode 100644 index 000000000..e1ae8224f --- /dev/null +++ b/app/src/main/res/layout/widget_thin.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/widget_tiny.xml b/app/src/main/res/layout/widget_tiny.xml index 2aa3a0b35..5fc01ab16 100644 --- a/app/src/main/res/layout/widget_tiny.xml +++ b/app/src/main/res/layout/widget_tiny.xml @@ -1,83 +1,99 @@ - + android:theme="@style/Theme.Widget" + android:orientation="horizontal" + android:baselineAligned="false"> - + + + + + + + - - + + + + + + + + android:contentDescription="@string/desc_skip_prev" + android:src="@drawable/ic_skip_prev" /> - + - + - - - - - - - - - - - + + +