diff options
author | Joel Fischer <joeljfischer@gmail.com> | 2020-07-14 15:21:17 -0400 |
---|---|---|
committer | Joel Fischer <joeljfischer@gmail.com> | 2020-07-14 15:21:17 -0400 |
commit | 63bc43727589fd370893243478c7b81d3fa3f2f7 (patch) | |
tree | fc82f7dc59b914447d14d582d3496681ef9055b1 | |
parent | d03bf4d880eb933f24be608ce938d36de3da3442 (diff) | |
download | sdl_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.swift | 19 | ||||
-rw-r--r-- | SmartDeviceLink/SDLLifecycleManager.m | 8 |
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]; |