From 97459fdcca094bd7f392cebad9e7fdb732effa51 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Sun, 8 Aug 2021 15:09:28 -0600 Subject: [PATCH] widgets: improve preview Use a 5x5 instead of a 4x5 preview for the widget so that it lines up better with most default launcher configurations. --- .../org/oxycblt/auxio/recycler/SortMode.kt | 4 +- .../java/org/oxycblt/auxio/widgets/Forms.kt | 44 ++++--- .../oxycblt/auxio/widgets/WidgetProvider.kt | 113 ++++++++---------- .../res/drawable-nodpi/ui_widget_preview.png | Bin 0 -> 16260 bytes .../main/res/drawable/ui_widget_preview.png | Bin 17213 -> 0 bytes .../main/res/values-v31/styles_component.xml | 1 - app/src/main/res/values/colors.xml | 2 +- 7 files changed, 82 insertions(+), 82 deletions(-) create mode 100644 app/src/main/res/drawable-nodpi/ui_widget_preview.png delete mode 100755 app/src/main/res/drawable/ui_widget_preview.png diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/SortMode.kt b/app/src/main/java/org/oxycblt/auxio/recycler/SortMode.kt index 24549b7e4..a3645debc 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/SortMode.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/SortMode.kt @@ -173,8 +173,8 @@ enum class SortMode(@DrawableRes val iconRes: Int) { val list = mutableListOf() songs.groupBy { it.album }.entries.sortedWith(compareByDescending { it.key.year }).forEach { entry -> - list.addAll(entry.value.sortedWith(compareBy { it.track })) - } + list.addAll(entry.value.sortedWith(compareBy { it.track })) + } list } 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 6618f5c97..8bf4036fc 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt @@ -29,8 +29,7 @@ import org.oxycblt.auxio.ui.newMainIntent private fun createViews( context: Context, - @LayoutRes layout: Int, - state: WidgetState + @LayoutRes layout: Int ): RemoteViews { val views = RemoteViews(context.packageName, layout) @@ -39,31 +38,35 @@ private fun createViews( context.newMainIntent() ) - views.setOnClickPendingIntent( + return views +} + +private fun RemoteViews.applyState(context: Context, state: WidgetState) { + setOnClickPendingIntent( R.id.widget_skip_prev, context.newBroadcastIntent( PlaybackService.ACTION_SKIP_PREV ) ) - views.setOnClickPendingIntent( + setOnClickPendingIntent( R.id.widget_play_pause, context.newBroadcastIntent( PlaybackService.ACTION_PLAY_PAUSE ) ) - views.setOnClickPendingIntent( + setOnClickPendingIntent( R.id.widget_skip_next, context.newBroadcastIntent( PlaybackService.ACTION_SKIP_NEXT ) ) - views.setTextViewText(R.id.widget_song, state.song.name) - views.setTextViewText(R.id.widget_artist, state.song.album.artist.name) + setTextViewText(R.id.widget_song, state.song.name) + setTextViewText(R.id.widget_artist, state.song.album.artist.name) - views.setImageViewResource( + setImageViewResource( R.id.widget_play_pause, if (state.isPlaying) { R.drawable.ic_pause @@ -73,24 +76,29 @@ private fun createViews( ) if (state.albumArt != null) { - views.setImageViewBitmap(R.id.widget_cover, state.albumArt) - views.setContentDescription( + setImageViewBitmap(R.id.widget_cover, state.albumArt) + setContentDescription( R.id.widget_cover, context.getString(R.string.desc_album_cover, state.song.album.name) ) } else { - views.setImageViewResource(R.id.widget_cover, R.drawable.ic_song) - views.setContentDescription(R.id.widget_cover, context.getString(R.string.desc_no_cover)) + setImageViewResource(R.id.widget_cover, R.drawable.ic_song) + setContentDescription(R.id.widget_cover, context.getString(R.string.desc_no_cover)) } +} - return views +fun createDefaultWidget(context: Context): RemoteViews { + return createViews(context, R.layout.widget_default) } fun createSmallWidget(context: Context, state: WidgetState): RemoteViews { - return createViews(context, R.layout.widget_small, state) + val views = createViews(context, R.layout.widget_small) + views.applyState(context, state) + return views } fun createFullWidget(context: Context, state: WidgetState): RemoteViews { - val views = createViews(context, R.layout.widget_full, state) + val views = createViews(context, R.layout.widget_full) + views.applyState(context, state) views.setOnClickPendingIntent( R.id.widget_loop, @@ -107,9 +115,9 @@ fun createFullWidget(context: Context, state: WidgetState): RemoteViews { ) // The main way the large widget differs from the other widgets is the addition of extra - // controls. However, since the context we use to load attributes is from the main process, - // attempting to dynamically color anything will result in an error. More duplicate - // resources it is. This is getting really tiring. + // controls. However, since we can't retrieve the context of our views here, we cant + // dynamically set the image view attributes. More duplicate resources it is. This is + // getting really tiring. val shuffleRes = when { state.isShuffled -> R.drawable.ic_shuffle_tinted 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 7c4ac2de7..da3933872 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt @@ -18,7 +18,6 @@ package org.oxycblt.auxio.widgets -import android.annotation.SuppressLint import android.appwidget.AppWidgetHostView import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetProvider @@ -30,12 +29,10 @@ import android.os.Bundle import android.util.SizeF import android.widget.RemoteViews import org.oxycblt.auxio.BuildConfig -import org.oxycblt.auxio.R import org.oxycblt.auxio.coil.loadBitmap import org.oxycblt.auxio.logD import org.oxycblt.auxio.playback.state.PlaybackStateManager import org.oxycblt.auxio.ui.isLandscape -import org.oxycblt.auxio.ui.newMainIntent /** * Auxio's one and only appwidget. This widget follows a more unorthodox approach, effectively @@ -44,15 +41,61 @@ import org.oxycblt.auxio.ui.newMainIntent * - For widgets Wx2 or higher, show an expanded view with album art and basic controls * - For widgets 4x2 or higher, show a complete view with all playback controls * + * Other widget variants might be added if there is sufficient demand. + * * For more specific details about these sub-widgets, see Forms.kt. */ class WidgetProvider : AppWidgetProvider() { + /* + * Update the widget based on the playback state. + */ + fun update(context: Context, playbackManager: PlaybackStateManager) { + val appWidgetManager = AppWidgetManager.getInstance(context) + val song = playbackManager.song + + if (song == null) { + reset(context) + return + } + + loadBitmap(context, song) { bitmap -> + val state = WidgetState( + song, + bitmap, + playbackManager.isPlaying, + playbackManager.isShuffling, + playbackManager.loopMode + ) + + // Map each widget form to the cells where it would look at least okay. + val views = mapOf( + SizeF(180f, 110f) to createSmallWidget(context, state), + SizeF(250f, 110f) to createFullWidget(context, state) + ) + + appWidgetManager.applyViewsCompat(context, views) + } + } + + /* + * Revert this widget to its default view + */ + fun reset(context: Context) { + logD("Resetting widget") + + AppWidgetManager.getInstance(context).updateAppWidget( + ComponentName(context, this::class.java), createDefaultWidget(context) + ) + } + + // / --- OVERRIDES --- + override fun onUpdate( context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray ) { - applyDefaultViews(context, appWidgetManager) + reset(context) requestUpdate(context) } @@ -71,44 +114,15 @@ class WidgetProvider : AppWidgetProvider() { } } - /* - * Update the widget based on the playback state. - */ - fun update(context: Context, playbackManager: PlaybackStateManager) { - val appWidgetManager = AppWidgetManager.getInstance(context) - val song = playbackManager.song + // / --- INTERNAL METHODS --- - if (song == null) { - applyDefaultViews(context, appWidgetManager) - return - } + private fun requestUpdate(context: Context) { + logD("Sending update intent to PlaybackService") - loadBitmap(context, song) { bitmap -> - val state = WidgetState( - song, - bitmap, - playbackManager.isPlaying, - playbackManager.isShuffling, - playbackManager.loopMode - ) + val intent = Intent(ACTION_WIDGET_UPDATE) + .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY) - // Map each widget form to the rough dimensions where it would look at least okay. - val views = mapOf( - SizeF(110f, 110f) to createSmallWidget(context, state), - SizeF(250f, 110f) to createFullWidget(context, state) - ) - - appWidgetManager.applyViewsCompat(context, views) - } - } - - /* - * Revert this widget to its default view - */ - fun reset(context: Context) { - logD("Resetting widget") - - applyDefaultViews(context, AppWidgetManager.getInstance(context)) + context.sendBroadcast(intent) } private fun AppWidgetManager.applyViewsCompat( @@ -190,27 +204,6 @@ class WidgetProvider : AppWidgetProvider() { } } - @SuppressLint("RemoteViewLayout") - private fun applyDefaultViews(context: Context, manager: AppWidgetManager) { - val views = RemoteViews(context.packageName, R.layout.widget_default) - - views.setOnClickPendingIntent( - android.R.id.background, - context.newMainIntent() - ) - - manager.updateAppWidget(ComponentName(context, this::class.java), views) - } - - private fun requestUpdate(context: Context) { - logD("Sending update intent to PlaybackService") - - val intent = Intent(ACTION_WIDGET_UPDATE) - .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY) - - context.sendBroadcast(intent) - } - companion object { const val ACTION_WIDGET_UPDATE = BuildConfig.APPLICATION_ID + ".action.WIDGET_UPDATE" } diff --git a/app/src/main/res/drawable-nodpi/ui_widget_preview.png b/app/src/main/res/drawable-nodpi/ui_widget_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..c79c6b3d35b5c211ddb67a5c50e3b69c6da08b45 GIT binary patch literal 16260 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

ID-oes-Pv^@YZ-NA>p@2<5qa@^rMKi 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 - diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 474403059..c2a0f09b1 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,7 +1,7 @@ #fffafafa - #ff121212 + #ff151515 #ff000000 @color/surface_day