Skip to content

Commit b99a2ca

Browse files
authored
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
1 parent 77db656 commit b99a2ca

File tree

4 files changed

+44
-4
lines changed

4 files changed

+44
-4
lines changed

android/hello_sdl_android/build.gradle

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ android {
88
targetSdkVersion 33
99
versionCode 1
1010
versionName "1.0"
11+
buildConfigField 'String', 'APP_TYPE', '"DEFAULT"'
12+
buildConfigField 'String', 'REQUIRE_AUDIO_OUTPUT', '"FALSE"'
1113
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
1214
}
1315
buildTypes {
@@ -42,6 +44,13 @@ android {
4244
buildConfigField 'String', 'TRANSPORT', '"TCP"'
4345
buildConfigField 'String', 'SECURITY', '"OFF"'
4446
}
47+
requiresAudioOutput {
48+
buildConfigField 'String', 'TRANSPORT', '"MULTI"'
49+
buildConfigField 'String', 'SECURITY', '"OFF"'
50+
buildConfigField 'String', 'APP_TYPE', '"MEDIA"'
51+
buildConfigField 'String', 'REQUIRE_AUDIO_OUTPUT', '"TRUE"'
52+
53+
}
4554
}
4655
lintOptions {
4756
disable 'GoogleAppIndexingWarning'

android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ private void startProxy() {
162162
securityLevel = MultiplexTransportConfig.FLAG_MULTI_SECURITY_OFF;
163163
}
164164
transport = new MultiplexTransportConfig(this, APP_ID, securityLevel);
165+
if (BuildConfig.REQUIRE_AUDIO_OUTPUT.equals("TRUE") ) {
166+
((MultiplexTransportConfig)transport).setRequiresAudioSupport(true);
167+
}
165168
} else if (BuildConfig.TRANSPORT.equals("TCP")) {
166169
transport = new TCPTransportConfig(TCP_PORT, DEV_MACHINE_IP_ADDRESS, true);
167170
} else if (BuildConfig.TRANSPORT.equals("MULTI_HB")) {
@@ -172,7 +175,8 @@ private void startProxy() {
172175

173176
// The app type to be used
174177
Vector<AppHMIType> appType = new Vector<>();
175-
appType.add(AppHMIType.DEFAULT);
178+
appType.add(AppHMIType.valueForString(BuildConfig.APP_TYPE));
179+
176180

177181
// The manager listener helps you know when certain events that pertain to the SDL Manager happen
178182
// Here we will listen for ON_HMI_STATUS and ON_COMMAND notifications

android/sdl_android/src/main/java/com/smartdevicelink/managers/lifecycle/LifecycleManager.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import com.smartdevicelink.transport.utl.TransportRecord;
5656
import com.smartdevicelink.util.AndroidTools;
5757
import com.smartdevicelink.util.DebugTool;
58+
import com.smartdevicelink.util.MediaStreamingStatus;
5859

5960
import java.lang.ref.WeakReference;
6061
import java.util.List;
@@ -80,7 +81,17 @@ void initialize() {
8081

8182
synchronized (SESSION_LOCK) {
8283
if (_transportConfig != null && _transportConfig.getTransportType().equals(TransportType.MULTIPLEX)) {
83-
this.session = new SdlSession(sdlSessionListener, (MultiplexTransportConfig) _transportConfig);
84+
MultiplexTransportConfig multiplexTransportConfig = (MultiplexTransportConfig) _transportConfig;
85+
this.session = new SdlSession(sdlSessionListener, multiplexTransportConfig);
86+
if (multiplexTransportConfig.requiresAudioSupport()) {
87+
this.session.setMediaStreamingStatusCallback(new MediaStreamingStatus.Callback() {
88+
@Override
89+
public void onAudioNoLongerAvailable() {
90+
clean(true);
91+
onClose("Audio output no longer available", null, SdlDisconnectedReason.DEFAULT);
92+
}
93+
});
94+
}
8495
} else if (_transportConfig != null && _transportConfig.getTransportType().equals(TransportType.TCP)) {
8596
this.session = new SdlSession(sdlSessionListener, (TCPTransportConfig) _transportConfig);
8697
} else {

android/sdl_android/src/main/java/com/smartdevicelink/session/SdlSession.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public class SdlSession extends BaseSdlSession {
6262
WeakReference<Context> contextWeakReference;
6363
MediaStreamingStatus mediaStreamingStatus;
6464
boolean requiresAudioSupport = false;
65+
MediaStreamingStatus.Callback mediaStreamingStatusCallback;
6566

6667
public SdlSession(ISdlSessionListener listener, MultiplexTransportConfig config) {
6768
super(listener, config);
@@ -79,6 +80,17 @@ public SdlSession(ISdlSessionListener listener, TCPTransportConfig config) {
7980
this.sessionListener = listener;
8081
}
8182

83+
/**
84+
* Sets a callback that is triggered when there are no audio output methods available. If this
85+
* is set then the caller of this method will be responsible for shutting the session down.
86+
*
87+
* @param mediaStreamingStatusCallback the callback that will be triggered when audio output is
88+
* no longer available.
89+
*/
90+
public void setMediaStreamingStatusCallback(MediaStreamingStatus.Callback mediaStreamingStatusCallback) {
91+
this.mediaStreamingStatusCallback = mediaStreamingStatusCallback;
92+
}
93+
8294
protected SdlProtocolBase getSdlProtocolImplementation() {
8395
if (transportConfig instanceof MultiplexTransportConfig) {
8496
return new SdlProtocol(this, (MultiplexTransportConfig) transportConfig);
@@ -94,8 +106,12 @@ boolean isAudioRequirementMet() {
94106
mediaStreamingStatus = new MediaStreamingStatus(contextWeakReference.get(), new MediaStreamingStatus.Callback() {
95107
@Override
96108
public void onAudioNoLongerAvailable() {
97-
close();
98-
shutdown("Audio output no longer available");
109+
if (mediaStreamingStatusCallback != null) {
110+
mediaStreamingStatusCallback.onAudioNoLongerAvailable();
111+
} else {
112+
close();
113+
shutdown("Audio output no longer available");
114+
}
99115
}
100116
});
101117
}

0 commit comments

Comments
 (0)