[Android] Set widgets broadcast explicits.
Geoffrey Métais
git at videolan.org
Tue Dec 19 18:19:43 CET 2017
vlc-android | branch: master | Geoffrey Métais <geoffrey.metais at gmail.com> | Tue Dec 19 18:18:57 2017 +0100| [3aaec78a4dd4197b6e3de008dcff2d131214235e] | committer: Geoffrey Métais
Set widgets broadcast explicits.
Oreo refuses the subscription of implicit broadcasts via the app
manifest
> https://code.videolan.org/videolan/vlc-android/commit/3aaec78a4dd4197b6e3de008dcff2d131214235e
---
.../src/org/videolan/vlc/PlaybackService.java | 24 ++++++++++++++--------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/vlc-android/src/org/videolan/vlc/PlaybackService.java b/vlc-android/src/org/videolan/vlc/PlaybackService.java
index 6878fa673..cecb75b82 100644
--- a/vlc-android/src/org/videolan/vlc/PlaybackService.java
+++ b/vlc-android/src/org/videolan/vlc/PlaybackService.java
@@ -186,7 +186,7 @@ public class PlaybackService extends MediaBrowserServiceCompat implements IVLCVo
| PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID | PlaybackStateCompat.ACTION_PLAY_FROM_URI
| PlaybackStateCompat.ACTION_PLAY_PAUSE;
- private boolean mHasWidget;
+ private int mWidget = 0;
private boolean mShuffling = false;
private int mRepeating = Constants.REPEAT_NONE;
private Random mRandom = null; // Used in shuffling process
@@ -298,9 +298,10 @@ public class PlaybackService extends MediaBrowserServiceCompat implements IVLCVo
}
private void updateHasWidget() {
- AppWidgetManager manager = AppWidgetManager.getInstance(this);
- mHasWidget = manager.getAppWidgetIds(new ComponentName(this, VLCAppWidgetProviderWhite.class)).length != 0
- || manager.getAppWidgetIds(new ComponentName(this, VLCAppWidgetProviderBlack.class)).length != 0;
+ final AppWidgetManager manager = AppWidgetManager.getInstance(this);
+ if (manager.getAppWidgetIds(new ComponentName(this, VLCAppWidgetProviderWhite.class)).length != 0) mWidget = 1;
+ else if (manager.getAppWidgetIds(new ComponentName(this, VLCAppWidgetProviderBlack.class)).length != 0) mWidget = 2;
+ else mWidget = 0;
}
@Override
@@ -1553,12 +1554,17 @@ public class PlaybackService extends MediaBrowserServiceCompat implements IVLCVo
}
private void updateWidget() {
- if (mHasWidget && !isVideoPlaying()) {
+ if (mWidget != 0 && !isVideoPlaying()) {
updateWidgetState();
updateWidgetCover();
}
}
+ private void sendWidgetBroadcast(Intent intent) {
+ intent.setComponent(new ComponentName(PlaybackService.this, mWidget == 1 ? VLCAppWidgetProviderWhite.class : VLCAppWidgetProviderBlack.class));
+ sendBroadcast(intent);
+ }
+
private void updateWidgetState() {
final MediaWrapper media = getCurrentMedia();
final Intent widgetIntent = new Intent(VLCAppWidgetProvider.ACTION_WIDGET_UPDATE);
@@ -1572,7 +1578,7 @@ public class PlaybackService extends MediaBrowserServiceCompat implements IVLCVo
widgetIntent.putExtra("artist", "");
}
widgetIntent.putExtra("isplaying", isPlaying());
- sendBroadcast(widgetIntent);
+ sendWidgetBroadcast(widgetIntent);
}
private String mCurrentWidgetCover = null;
@@ -1580,20 +1586,20 @@ public class PlaybackService extends MediaBrowserServiceCompat implements IVLCVo
String newWidgetCover = hasCurrentMedia() ? getCurrentMedia().getArtworkMrl() : null;
if (!TextUtils.equals(mCurrentWidgetCover, newWidgetCover)) {
mCurrentWidgetCover = newWidgetCover;
- sendBroadcast(new Intent(VLCAppWidgetProvider.ACTION_WIDGET_UPDATE_COVER)
+ sendWidgetBroadcast(new Intent(VLCAppWidgetProvider.ACTION_WIDGET_UPDATE_COVER)
.putExtra("artworkMrl", newWidgetCover));
}
}
private void updateWidgetPosition(final float pos) {
- if (!mHasWidget || isVideoPlaying())
+ if (mWidget == 0 || isVideoPlaying())
return;
// no more than one widget mUpdateMeta for each 1/50 of the song
long timestamp = System.currentTimeMillis();
if (!hasCurrentMedia() || timestamp - mWidgetPositionTimestamp < getCurrentMedia().getLength() / 50)
return;
mWidgetPositionTimestamp = timestamp;
- sendBroadcast(new Intent(VLCAppWidgetProvider.ACTION_WIDGET_UPDATE_POSITION)
+ sendWidgetBroadcast(new Intent(VLCAppWidgetProvider.ACTION_WIDGET_UPDATE_POSITION)
.putExtra("position", pos));
}
More information about the Android
mailing list