diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt index 695dea2ac..8d654bf02 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt @@ -369,6 +369,9 @@ class PlaybackService : Service(), Player.Listener, PlaybackStateManager.Callbac onLoopUpdate(playbackManager.loopMode) onSongUpdate(playbackManager.song) onSeek(playbackManager.position) + + // Notify other classes that rely on this service to also update. + widgets.update() } /** @@ -495,9 +498,11 @@ class PlaybackService : Service(), Player.Listener, PlaybackStateManager.Callbac } } - BaseWidget.ACTION_WIDGET_UPDATE -> widgets.initWidget( - intent.getIntExtra(BaseWidget.ACTION_WIDGET_UPDATE, -1) - ) + BaseWidget.ACTION_WIDGET_UPDATE -> { + widgets.initWidget( + intent.getIntExtra(BaseWidget.KEY_WIDGET_TYPE, -1) + ) + } } } 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 96ddd4dbb..27873057c 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/SortMode.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/SortMode.kt @@ -155,8 +155,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/BaseWidget.kt b/app/src/main/java/org/oxycblt/auxio/widgets/BaseWidget.kt index a732a0bf8..9ea8baf26 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/BaseWidget.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/BaseWidget.kt @@ -45,8 +45,6 @@ abstract class BaseWidget : AppWidgetProvider() { * Update the widget based on the playback state. */ fun update(context: Context, playbackManager: PlaybackStateManager) { - logD("Dispatching playback state update") - val manager = AppWidgetManager.getInstance(context) // View updates are often async due to image loading, so only push the views @@ -57,10 +55,10 @@ abstract class BaseWidget : AppWidgetProvider() { } /* - * Stop this widget, reverting it to its default state. + * Revert this widget to its default view */ - fun stop(context: Context) { - logD("Stopping widget") + fun reset(context: Context) { + logD("Resetting widget") val manager = AppWidgetManager.getInstance(context) manager.applyViews(context, defaultViews(context)) @@ -71,10 +69,10 @@ abstract class BaseWidget : AppWidgetProvider() { appWidgetManager: AppWidgetManager, appWidgetIds: IntArray ) { - appWidgetManager.applyViews(context, defaultViews(context)) - logD("Sending update intent to PlaybackService") + appWidgetManager.applyViews(context, defaultViews(context)) + val intent = Intent(ACTION_WIDGET_UPDATE) .putExtra(KEY_WIDGET_TYPE, type) .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY) diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/MinimalWidgetProvider.kt b/app/src/main/java/org/oxycblt/auxio/widgets/MinimalWidgetProvider.kt index 7f6e4f2f2..c69b9f293 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/MinimalWidgetProvider.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/MinimalWidgetProvider.kt @@ -51,7 +51,7 @@ class MinimalWidgetProvider : BaseWidget() { val song = playbackManager.song if (song != null) { - logD("updating view to ${song.name}") + logD("Updating view to ${song.name}") val views = createViews(context, R.layout.widget_minimal) @@ -88,6 +88,8 @@ class MinimalWidgetProvider : BaseWidget() { onDone(views) } } else { + logD("No song playing, reverting to default view") + onDone(defaultViews(context)) } } diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetController.kt b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetController.kt index b25ce4751..3ace8aeb7 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetController.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetController.kt @@ -1,33 +1,44 @@ package org.oxycblt.auxio.widgets import android.content.Context +import org.oxycblt.auxio.logD import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.playback.state.PlaybackStateManager class WidgetController(private val context: Context) : PlaybackStateManager.Callback { - private val manager = PlaybackStateManager.getInstance() + private val playbackManager = PlaybackStateManager.getInstance() private val minimal = MinimalWidgetProvider() init { - manager.addCallback(this) + playbackManager.addCallback(this) } fun initWidget(type: Int) { + logD("Updating new widget $type") + when (type) { - MinimalWidgetProvider.TYPE -> minimal.update(context, manager) + MinimalWidgetProvider.TYPE -> minimal.update(context, playbackManager) } } + fun update() { + logD("Updating all widgets") + + minimal.update(context, playbackManager) + } + fun release() { - minimal.stop(context) - manager.removeCallback(this) + logD("Resetting widgets") + + minimal.reset(context) + playbackManager.removeCallback(this) } override fun onSongUpdate(song: Song?) { - minimal.update(context, manager) + minimal.update(context, playbackManager) } override fun onPlayingUpdate(isPlaying: Boolean) { - minimal.update(context, manager) + minimal.update(context, playbackManager) } } diff --git a/app/src/main/res/drawable-v31/ui_rounded_cutout.xml b/app/src/main/res/drawable-v31/ui_rounded_cutout.xml new file mode 100644 index 000000000..db565eb70 --- /dev/null +++ b/app/src/main/res/drawable-v31/ui_rounded_cutout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-v31/widget_minimal.xml b/app/src/main/res/layout-v31/widget_minimal.xml index b17bc2162..a053cb33a 100644 --- a/app/src/main/res/layout-v31/widget_minimal.xml +++ b/app/src/main/res/layout-v31/widget_minimal.xml @@ -15,13 +15,13 @@ android:background="?attr/colorSurface" android:scaleType="centerCrop" tools:ignore="contentDescription" - tools:src="@drawable/ic_song" /> + android:src="@drawable/ic_song" /> @@ -35,7 +35,7 @@ android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6" android:textColor="?android:attr/textColorPrimary" android:textStyle="bold" - tools:text="Song Name" /> + android:text="@string/placeholder_widget_song" /> + android:text="@string/placeholder_widget_artist" /> + android:layout_marginTop="@dimen/spacing_small"> A simple, rational music player for android. Music Playback @@ -137,6 +138,8 @@ Unknown Album No Date No music playing + Song Name + Artist Name Red diff --git a/app/src/main/res/xml-v31/widget_minimal.xml b/app/src/main/res/xml-v31/widget_minimal.xml index a4255ba1a..d33f98501 100644 --- a/app/src/main/res/xml-v31/widget_minimal.xml +++ b/app/src/main/res/xml-v31/widget_minimal.xml @@ -5,6 +5,7 @@ android:targetCellHeight="2" android:minResizeWidth="110dp" android:minResizeHeight="110dp" + android:previewLayout="@layout/widget_minimal" android:resizeMode="horizontal|vertical" android:updatePeriodMillis="0" android:widgetCategory="home_screen">