From 0f75391e6b325013ca73b43c4c7c5041609e48f9 Mon Sep 17 00:00:00 2001 From: Joey Grover Date: Wed, 23 Mar 2022 11:52:23 -0400 Subject: Fix LCM to close down properly (#1796) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add UAI request to clean method in LCM This makes sure to send an UAI request when the LCM is shutting down to clear it from the head unit. Also removed redundent code to cose services and ignore the UAI response because there’s nothing the library can do at that point anyways. * Add missing initilize to JavaSE LCM * Fix incorrect start call when should stop in SdlManager * Add states to LCM * Prevent duplicate calls to SdlManager.dispose * Fix formatting issues for shutdown fix #1796 Co-authored-by: Julian Kast Co-authored-by: Julian Kast --- .../src/main/java/com/smartdevicelink/managers/SdlManager.java | 7 ++++++- .../com/smartdevicelink/managers/lifecycle/LifecycleManager.java | 7 +++++-- 2 files changed, 11 insertions(+), 3 deletions(-) (limited to 'android') diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java index 9fcb65b12..6dc3ce4aa 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java @@ -237,6 +237,11 @@ public class SdlManager extends BaseSdlManager { @SuppressLint("NewApi") @Override public synchronized void dispose() { + int state = getState(); + if (state == BaseSubManager.SHUTDOWN || state == BaseSubManager.ERROR) { + DebugTool.logInfo(TAG, "SdlManager already disposed"); + return; + } if (this.permissionManager != null) { this.permissionManager.dispose(); } @@ -414,7 +419,7 @@ public class SdlManager extends BaseSdlManager { @Override public void stop() { - lifecycleManager.getInternalInterface(SdlManager.this).start(); + lifecycleManager.getInternalInterface(SdlManager.this).stop(); } @Override 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 8324e6344..bfe73c19f 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 @@ -32,6 +32,8 @@ package com.smartdevicelink.managers.lifecycle; +import static com.smartdevicelink.managers.BaseSubManager.SETTING_UP; + import android.content.Context; import androidx.annotation.RestrictTo; @@ -89,12 +91,13 @@ public class LifecycleManager extends BaseLifecycleManager { @Override void cycle(SdlDisconnectedReason disconnectedReason) { - clean(); - initialize(); + clean(true); if (!SdlDisconnectedReason.LEGACY_BLUETOOTH_MODE_ENABLED.equals(disconnectedReason) && !SdlDisconnectedReason.PRIMARY_TRANSPORT_CYCLE_REQUEST.equals(disconnectedReason)) { //We don't want to alert higher if we are just cycling for legacy bluetooth onClose("Sdl Proxy Cycled", new SdlException("Sdl Proxy Cycled", SdlExceptionCause.SDL_PROXY_CYCLED), disconnectedReason); } + transitionToState(SETTING_UP); + initialize(); synchronized (SESSION_LOCK) { if (session != null) { try { -- cgit v1.2.1