summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Grover <joeygrover@gmail.com>2022-09-07 14:59:40 -0400
committerGitHub <noreply@github.com>2022-09-07 14:59:40 -0400
commitb99a2cabbf5d19c027e2443d68b21e7881d55ef6 (patch)
treefa5fd0062839e43c8e522db45a1b98064c90535d
parent77db6569f76535f3546da92e2b2d71a42be20d5f (diff)
downloadsdl_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
-rwxr-xr-xandroid/hello_sdl_android/build.gradle9
-rwxr-xr-xandroid/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java6
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/managers/lifecycle/LifecycleManager.java13
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/session/SdlSession.java20
4 files changed, 44 insertions, 4 deletions
diff --git a/android/hello_sdl_android/build.gradle b/android/hello_sdl_android/build.gradle
index e647f52a6..fa8a08a93 100755
--- a/android/hello_sdl_android/build.gradle
+++ b/android/hello_sdl_android/build.gradle
@@ -8,6 +8,8 @@ android {
targetSdkVersion 33
versionCode 1
versionName "1.0"
+ buildConfigField 'String', 'APP_TYPE', '"DEFAULT"'
+ buildConfigField 'String', 'REQUIRE_AUDIO_OUTPUT', '"FALSE"'
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
buildTypes {
@@ -42,6 +44,13 @@ android {
buildConfigField 'String', 'TRANSPORT', '"TCP"'
buildConfigField 'String', 'SECURITY', '"OFF"'
}
+ requiresAudioOutput {
+ buildConfigField 'String', 'TRANSPORT', '"MULTI"'
+ buildConfigField 'String', 'SECURITY', '"OFF"'
+ buildConfigField 'String', 'APP_TYPE', '"MEDIA"'
+ buildConfigField 'String', 'REQUIRE_AUDIO_OUTPUT', '"TRUE"'
+
+ }
}
lintOptions {
disable 'GoogleAppIndexingWarning'
diff --git a/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java b/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java
index 59daf2050..be147af0b 100755
--- a/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java
+++ b/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java
@@ -162,6 +162,9 @@ public class SdlService extends Service {
securityLevel = MultiplexTransportConfig.FLAG_MULTI_SECURITY_OFF;
}
transport = new MultiplexTransportConfig(this, APP_ID, securityLevel);
+ if (BuildConfig.REQUIRE_AUDIO_OUTPUT.equals("TRUE") ) {
+ ((MultiplexTransportConfig)transport).setRequiresAudioSupport(true);
+ }
} else if (BuildConfig.TRANSPORT.equals("TCP")) {
transport = new TCPTransportConfig(TCP_PORT, DEV_MACHINE_IP_ADDRESS, true);
} else if (BuildConfig.TRANSPORT.equals("MULTI_HB")) {
@@ -172,7 +175,8 @@ public class SdlService extends Service {
// The app type to be used
Vector<AppHMIType> appType = new Vector<>();
- appType.add(AppHMIType.DEFAULT);
+ appType.add(AppHMIType.valueForString(BuildConfig.APP_TYPE));
+
// The manager listener helps you know when certain events that pertain to the SDL Manager happen
// Here we will listen for ON_HMI_STATUS and ON_COMMAND notifications
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");
+ }
}
});
}