summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Fischer <joeljfischer@gmail.com>2020-07-14 15:21:17 -0400
committerJoel Fischer <joeljfischer@gmail.com>2020-07-14 15:21:17 -0400
commit63bc43727589fd370893243478c7b81d3fa3f2f7 (patch)
treefc82f7dc59b914447d14d582d3496681ef9055b1
parentd03bf4d880eb933f24be608ce938d36de3da3442 (diff)
downloadsdl_ios-63bc43727589fd370893243478c7b81d3fa3f2f7.tar.gz
Fix lifecycle manager bug when multiple managers are presentbugfix/issue-1710-sdlmanager-crash-restart
* Lifecycle manager should only listen to its own notification dispatcher * Make swift example app work like Obj-C and run even if the transport type is changed
-rw-r--r--Example Apps/Example Swift/ProxyManager.swift19
-rw-r--r--SmartDeviceLink/SDLLifecycleManager.m8
2 files changed, 11 insertions, 16 deletions
diff --git a/Example Apps/Example Swift/ProxyManager.swift b/Example Apps/Example Swift/ProxyManager.swift
index ae2f8286f..fdad60360 100644
--- a/Example Apps/Example Swift/ProxyManager.swift
+++ b/Example Apps/Example Swift/ProxyManager.swift
@@ -21,14 +21,15 @@ enum ProxyState {
}
class ProxyManager: NSObject {
- fileprivate var sdlManager: SDLManager!
- fileprivate var buttonManager: ButtonManager!
- fileprivate var subscribeButtonManager: SubscribeButtonManager!
- fileprivate var vehicleDataManager: VehicleDataManager!
- fileprivate var performInteractionManager: PerformInteractionManager!
- fileprivate var firstHMILevelState: SDLHMILevel
+ private var sdlManager: SDLManager!
+ private var buttonManager: ButtonManager!
+ private var subscribeButtonManager: SubscribeButtonManager!
+ private var vehicleDataManager: VehicleDataManager!
+ private var performInteractionManager: PerformInteractionManager!
+ private var firstHMILevelState: SDLHMILevel
weak var delegate: ProxyManagerDelegate?
+
// Singleton
static let sharedManager = ProxyManager()
private override init() {
@@ -44,12 +45,6 @@ extension ProxyManager {
///
/// - Parameter connectionType: The type of transport layer to use.
func start(with proxyTransportType: ProxyTransportType) {
- guard sdlManager == nil else {
- // Manager already created, just start it again.
- startManager()
- return
- }
-
delegate?.didChangeProxyState(ProxyState.searching)
sdlManager = SDLManager(configuration: proxyTransportType == .iap ? ProxyManager.connectIAP() : ProxyManager.connectTCP(), delegate: self)
startManager()
diff --git a/SmartDeviceLink/SDLLifecycleManager.m b/SmartDeviceLink/SDLLifecycleManager.m
index 5a1ab9337..f6896133c 100644
--- a/SmartDeviceLink/SDLLifecycleManager.m
+++ b/SmartDeviceLink/SDLLifecycleManager.m
@@ -190,10 +190,10 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
_mobileHMIStateHandler = [[SDLLifecycleMobileHMIStateHandler alloc] initWithConnectionManager:self];
// Notifications
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_rpcServiceDidConnect) name:SDLRPCServiceDidConnect object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_transportDidDisconnect) name:SDLTransportDidDisconnect object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hmiStatusDidChange:) name:SDLDidChangeHMIStatusNotification object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(remoteHardwareDidUnregister:) name:SDLDidReceiveAppUnregisteredNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_rpcServiceDidConnect) name:SDLRPCServiceDidConnect object:_notificationDispatcher];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_transportDidDisconnect) name:SDLTransportDidDisconnect object:_notificationDispatcher];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hmiStatusDidChange:) name:SDLDidChangeHMIStatusNotification object:_notificationDispatcher];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(remoteHardwareDidUnregister:) name:SDLDidReceiveAppUnregisteredNotification object:_notificationDispatcher];
_backgroundTaskManager = [[SDLBackgroundTaskManager alloc] initWithBackgroundTaskName:BackgroundTaskTransportName];