From 1a2177cc561690da781784c6de86f8a894e08ba6 Mon Sep 17 00:00:00 2001 From: Josh Date: Tue, 10 Sep 2024 16:56:01 -0400 Subject: [PATCH] fix regression on notification before first play --- .../muckabout/RemoteStreamerPlugin.java | 30 ++++++++++++++----- .../muckabout/RemoteStreamerService.java | 8 ++--- package-lock.json | 4 +-- package.json | 2 +- 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/android/src/main/java/co/broadcastapp/muckabout/RemoteStreamerPlugin.java b/android/src/main/java/co/broadcastapp/muckabout/RemoteStreamerPlugin.java index 186e4ef..7eefe4c 100644 --- a/android/src/main/java/co/broadcastapp/muckabout/RemoteStreamerPlugin.java +++ b/android/src/main/java/co/broadcastapp/muckabout/RemoteStreamerPlugin.java @@ -84,8 +84,6 @@ public void load() { dataSourceFactory = new DefaultDataSource.Factory(context); mediaSession = new MediaSessionCompat(context, "wnyc"); - startMediaService(); - AudioAttributes audioAttributes = new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) @@ -112,7 +110,18 @@ public void play(PluginCall call) { call.reject("URL is required"); return; } - + + if (service == null) { + startMediaService(); + while (service == null) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + handler.post(() -> { releasePlayer(); player = new ExoPlayer.Builder(getContext()).build(); @@ -162,8 +171,7 @@ public void onPlaybackStateChanged(int state) { break; case Player.STATE_ENDED: stopUpdatingTime(); - service.setPlaybackState(PlaybackStateCompat.STATE_NONE); - service.update(); + stop(); notifyListeners("stop", new JSObject()); break; } @@ -249,11 +257,17 @@ private void seekTo(Long position) { @PluginMethod public void stop(PluginCall call) { + stop(); + call.resolve(); + } + + public void stop() { releasePlayer(); - service.setPlaybackState(PlaybackStateCompat.STATE_NONE); - service.update(); + if (service != null) { + // stop may be called before the service is started + service.destroy(); + } notifyListeners("stop", new JSObject()); - call.resolve(); } @PluginMethod diff --git a/android/src/main/java/co/broadcastapp/muckabout/RemoteStreamerService.java b/android/src/main/java/co/broadcastapp/muckabout/RemoteStreamerService.java index 93ce9a8..b201b85 100644 --- a/android/src/main/java/co/broadcastapp/muckabout/RemoteStreamerService.java +++ b/android/src/main/java/co/broadcastapp/muckabout/RemoteStreamerService.java @@ -17,6 +17,7 @@ import android.support.v4.media.session.PlaybackStateCompat; import androidx.core.app.NotificationCompat; +import androidx.core.content.ContextCompat; import androidx.media.session.MediaButtonReceiver; import androidx.media.app.NotificationCompat.MediaStyle; @@ -146,6 +147,8 @@ public void connectAndInitialize(RemoteStreamerPlugin plugin, Intent intent) { public void destroy() { stopForeground(true); + //mediaSession.setActive(false); + notificationManager.cancel(NOTIFICATION_ID); stopSelf(); } @@ -218,11 +221,6 @@ public void setPlaybackSpeed(float playbackSpeed) { @SuppressLint("RestrictedApi") public void update() { if (possibleActionsUpdate) { - if (playbackState == PlaybackStateCompat.STATE_NONE) { - mediaSession.setActive(false); - notificationManager.cancel(NOTIFICATION_ID); - return; - } if (notificationBuilder != null) { notificationBuilder.mActions.clear(); } diff --git a/package-lock.json b/package-lock.json index 75c467e..4edc443 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@nypublicradio/capacitor-remote-streamer", - "version": "0.2.5", + "version": "0.2.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@nypublicradio/capacitor-remote-streamer", - "version": "0.2.5", + "version": "0.2.6", "license": "MIT", "devDependencies": { "@capacitor/android": "^6.1.0", diff --git a/package.json b/package.json index 9ca4d03..40479e1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@nypublicradio/capacitor-remote-streamer", "repository": "git://github.com/nypublicradio/capacitor-remote-streamer.git", - "version": "0.2.5", + "version": "0.2.6", "description": "Stream remote HLS and MP3 streams on iOS and Android. Capacitor 6.", "main": "dist/plugin.cjs.js", "repository": {