diff options
author | Joey Grover <joeygrover@gmail.com> | 2022-09-07 14:59:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-07 14:59:40 -0400 |
commit | b99a2cabbf5d19c027e2443d68b21e7881d55ef6 (patch) | |
tree | fa5fd0062839e43c8e522db45a1b98064c90535d /android/sdl_android/src | |
parent | 77db6569f76535f3546da92e2b2d71a42be20d5f (diff) | |
download | sdl_android-b99a2cabbf5d19c027e2443d68b21e7881d55ef6.tar.gz |
Bugfix/issue 1802 Unregister apps when audio output becomes unavailable (#1827)
* Add audio output status callback set to SdlSession
Add to Andoroid’s SdlSession since it is only an Android feature
* Add callback for audio output status in LCM
Closes LCM if audio outpput is required and no longer available. Properly clears apps off IVI.
* Add helloSDL buildFlavor for audio output required
Diffstat (limited to 'android/sdl_android/src')
-rw-r--r-- | android/sdl_android/src/main/java/com/smartdevicelink/managers/lifecycle/LifecycleManager.java | 13 | ||||
-rw-r--r-- | android/sdl_android/src/main/java/com/smartdevicelink/session/SdlSession.java | 20 |
2 files changed, 30 insertions, 3 deletions
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/lifecycle/LifecycleManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/lifecycle/LifecycleManager.java index bfe73c19f..ae8ba7b23 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/lifecycle/LifecycleManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/lifecycle/LifecycleManager.java @@ -55,6 +55,7 @@ import com.smartdevicelink.transport.enums.TransportType; import com.smartdevicelink.transport.utl.TransportRecord; import com.smartdevicelink.util.AndroidTools; import com.smartdevicelink.util.DebugTool; +import com.smartdevicelink.util.MediaStreamingStatus; import java.lang.ref.WeakReference; import java.util.List; @@ -80,7 +81,17 @@ public class LifecycleManager extends BaseLifecycleManager { synchronized (SESSION_LOCK) { if (_transportConfig != null && _transportConfig.getTransportType().equals(TransportType.MULTIPLEX)) { - this.session = new SdlSession(sdlSessionListener, (MultiplexTransportConfig) _transportConfig); + MultiplexTransportConfig multiplexTransportConfig = (MultiplexTransportConfig) _transportConfig; + this.session = new SdlSession(sdlSessionListener, multiplexTransportConfig); + if (multiplexTransportConfig.requiresAudioSupport()) { + this.session.setMediaStreamingStatusCallback(new MediaStreamingStatus.Callback() { + @Override + public void onAudioNoLongerAvailable() { + clean(true); + onClose("Audio output no longer available", null, SdlDisconnectedReason.DEFAULT); + } + }); + } } else if (_transportConfig != null && _transportConfig.getTransportType().equals(TransportType.TCP)) { this.session = new SdlSession(sdlSessionListener, (TCPTransportConfig) _transportConfig); } else { diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/session/SdlSession.java b/android/sdl_android/src/main/java/com/smartdevicelink/session/SdlSession.java index 74701c867..633904bb0 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/session/SdlSession.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/session/SdlSession.java @@ -62,6 +62,7 @@ public class SdlSession extends BaseSdlSession { WeakReference<Context> contextWeakReference; MediaStreamingStatus mediaStreamingStatus; boolean requiresAudioSupport = false; + MediaStreamingStatus.Callback mediaStreamingStatusCallback; public SdlSession(ISdlSessionListener listener, MultiplexTransportConfig config) { super(listener, config); @@ -79,6 +80,17 @@ public class SdlSession extends BaseSdlSession { this.sessionListener = listener; } + /** + * Sets a callback that is triggered when there are no audio output methods available. If this + * is set then the caller of this method will be responsible for shutting the session down. + * + * @param mediaStreamingStatusCallback the callback that will be triggered when audio output is + * no longer available. + */ + public void setMediaStreamingStatusCallback(MediaStreamingStatus.Callback mediaStreamingStatusCallback) { + this.mediaStreamingStatusCallback = mediaStreamingStatusCallback; + } + protected SdlProtocolBase getSdlProtocolImplementation() { if (transportConfig instanceof MultiplexTransportConfig) { return new SdlProtocol(this, (MultiplexTransportConfig) transportConfig); @@ -94,8 +106,12 @@ public class SdlSession extends BaseSdlSession { mediaStreamingStatus = new MediaStreamingStatus(contextWeakReference.get(), new MediaStreamingStatus.Callback() { @Override public void onAudioNoLongerAvailable() { - close(); - shutdown("Audio output no longer available"); + if (mediaStreamingStatusCallback != null) { + mediaStreamingStatusCallback.onAudioNoLongerAvailable(); + } else { + close(); + shutdown("Audio output no longer available"); + } } }); } |