From 7284ed9a91a622b3f10c1250f48547dbe0e40ec1 Mon Sep 17 00:00:00 2001 From: tychota Date: Thu, 10 Nov 2016 14:56:03 +0100 Subject: [PATCH] Add url, progress and duration for iOS parity Fix #35 --- .../com/audioStreaming/EventsReceiver.java | 11 +++++ .../ReactNativeAudioStreamingModule.java | 4 ++ .../main/java/com/audioStreaming/Signal.java | 48 ++++++++++++++++--- 3 files changed, 57 insertions(+), 6 deletions(-) diff --git a/android/src/main/java/com/audioStreaming/EventsReceiver.java b/android/src/main/java/com/audioStreaming/EventsReceiver.java index 516abf8..0637356 100644 --- a/android/src/main/java/com/audioStreaming/EventsReceiver.java +++ b/android/src/main/java/com/audioStreaming/EventsReceiver.java @@ -25,6 +25,17 @@ public void onReceive(Context context, Intent intent) { params.putString("value", intent.getStringExtra("value")); } + + if (intent.getAction().equals(Mode.PLAYING) || intent.getAction().equals(Mode.BUFFERING_START)) { + params.putString("url", intent.getStringExtra("url")); + params.putDouble("duration", intent.getDoubleExtra("duration", -1.0)); + params.putDouble("progress", intent.getDoubleExtra("progress", -1.0)); + } + + if (intent.getAction().equals(Mode.ERROR)) { + params.putString("stacktrace", intent.getStringExtra("stacktrace")); + } + this.module.sendEvent(this.module.getReactApplicationContextModule(), "AudioBridgeEvent", params); } } diff --git a/android/src/main/java/com/audioStreaming/ReactNativeAudioStreamingModule.java b/android/src/main/java/com/audioStreaming/ReactNativeAudioStreamingModule.java index 00921ef..68ed583 100644 --- a/android/src/main/java/com/audioStreaming/ReactNativeAudioStreamingModule.java +++ b/android/src/main/java/com/audioStreaming/ReactNativeAudioStreamingModule.java @@ -120,6 +120,10 @@ private void playInternal() { @ReactMethod public void getStatus(Callback callback) { WritableMap state = Arguments.createMap(); state.putString("status", signal != null && signal.isPlaying ? Mode.PLAYING : Mode.STOPPED); + state.putString("url", signal.getStreamingURL()); + state.putDouble("duration", signal.duration); + state.putDouble("progress", signal.progress); + callback.invoke(null, state); } } diff --git a/android/src/main/java/com/audioStreaming/Signal.java b/android/src/main/java/com/audioStreaming/Signal.java index 7bf4262..49a4ea4 100644 --- a/android/src/main/java/com/audioStreaming/Signal.java +++ b/android/src/main/java/com/audioStreaming/Signal.java @@ -26,6 +26,9 @@ import com.spoledge.aacdecoder.MultiPlayer; import com.spoledge.aacdecoder.PlayerCallback; +import java.io.PrintWriter; +import java.io.StringWriter; + public class Signal extends Service implements OnErrorListener, OnCompletionListener, OnPreparedListener, @@ -53,11 +56,14 @@ public class Signal extends Service implements OnErrorListener, private final SignalReceiver receiver = new SignalReceiver(this); private Context context; private String streamingURL; - public boolean isPlaying = false; private boolean isPreparingStarted = false; private EventsReceiver eventsReceiver; private ReactNativeAudioStreamingModule module; + public boolean isPlaying = false; + public double duration; + public double progress; + private TelephonyManager phoneManager; private PhoneListener phoneStateListener; @@ -133,6 +139,8 @@ public void setURLStreaming(String streamingURL) { this.streamingURL = streamingURL; } + public String getStreamingURL() { return this.streamingURL; } + public void play() { if (isConnected()) { this.prepare(); @@ -237,9 +245,13 @@ public IBinder onBind(Intent intent) { @Override public int onStartCommand(Intent intent, int flags, int startId) { if (this.isPlaying) { - sendBroadcast(new Intent(Mode.PLAYING)); + Intent BroadcastIntent = new Intent(Mode.PLAYING); + BroadcastIntent.putExtra("url", this.streamingURL); + sendBroadcast(BroadcastIntent); } else if (this.isPreparingStarted) { - sendBroadcast(new Intent(Mode.START_PREPARING)); + Intent BroadcastIntent = new Intent(Mode.START_PREPARING); + BroadcastIntent.putExtra("url", this.streamingURL); + sendBroadcast(BroadcastIntent); } else { sendBroadcast(new Intent(Mode.STARTED)); } @@ -300,17 +312,36 @@ public void playerPCMFeedBuffer(boolean isPlaying, int bufSizeMs, int bufCapacit this.isPreparingStarted = false; if (bufSizeMs < 500) { this.isPlaying = false; - sendBroadcast(new Intent(Mode.BUFFERING_START)); + Intent BroadcastIntent = new Intent(Mode.BUFFERING_START); + BroadcastIntent.putExtra("url", this.streamingURL); + this.duration = bufCapacityMs / 1000.0; + this.progress = (bufCapacityMs - bufSizeMs) / 1000.0; + BroadcastIntent.putExtra("duration", this.duration); + BroadcastIntent.putExtra("progress", this.progress); + sendBroadcast(BroadcastIntent); //buffering } else { this.isPlaying = true; - sendBroadcast(new Intent(Mode.PLAYING)); + Intent BroadcastIntent = new Intent(Mode.PLAYING); + BroadcastIntent.putExtra("url", this.streamingURL); + this.duration = bufCapacityMs / 1000.0; + this.progress = (bufCapacityMs - bufSizeMs) / 1000.0; + BroadcastIntent.putExtra("duration", this.duration); + BroadcastIntent.putExtra("progress", this.progress); + + sendBroadcast(BroadcastIntent); //playing } } else { //buffering this.isPlaying = false; - sendBroadcast(new Intent(Mode.BUFFERING_START)); + Intent BroadcastIntent = new Intent(Mode.BUFFERING_START); + BroadcastIntent.putExtra("url", this.streamingURL); + this.duration = bufCapacityMs / 1000.0; + this.progress = (bufCapacityMs - bufSizeMs) / 1000.0; + BroadcastIntent.putExtra("duration", this.duration); + BroadcastIntent.putExtra("progress", this.progress); + sendBroadcast(BroadcastIntent); } } @@ -318,6 +349,11 @@ public void playerPCMFeedBuffer(boolean isPlaying, int bufSizeMs, int bufCapacit public void playerException(final Throwable t) { this.isPlaying = false; this.isPreparingStarted = false; + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + t.printStackTrace(pw); + Intent BroadcastIntent = new Intent(Mode.ERROR); + BroadcastIntent.putExtra("stacktrace", sw.toString()); sendBroadcast(new Intent(Mode.ERROR)); // TODO }