diff options
author | Austin Kirk <askirk@umich.edu> | 2018-07-19 12:44:39 -0400 |
---|---|---|
committer | Austin Kirk <askirk@umich.edu> | 2018-07-19 12:44:39 -0400 |
commit | a256dbacc69925e9d350d728b4d0991af6f585a5 (patch) | |
tree | bda2e9e1296b23a5db0ec4dfcba131518994e8ae | |
parent | b4fd386ba80bf7e04f3f10d4becd241193db6fcb (diff) | |
download | sdl_android-a256dbacc69925e9d350d728b4d0991af6f585a5.tar.gz |
Updated per review comments
- Fixed potential NPE in start()
- added state for SdlManager
- synchronized onComplete method in shared subManagerListener
- removed subManager counter, now checks the state of each subManager to determine if they are initialized
- SdlManager class now creates a hidden lifecycleListener inside of its proxyBridge, instead of implementing it directly (hides onProxyConnected)
- Added javadoc to start() method
- subManagerListener is final
-rw-r--r-- | sdl_android/src/main/java/com/smartdevicelink/api/SdlManager.java | 114 |
1 files changed, 71 insertions, 43 deletions
diff --git a/sdl_android/src/main/java/com/smartdevicelink/api/SdlManager.java b/sdl_android/src/main/java/com/smartdevicelink/api/SdlManager.java index 50defe985..a34a2819b 100644 --- a/sdl_android/src/main/java/com/smartdevicelink/api/SdlManager.java +++ b/sdl_android/src/main/java/com/smartdevicelink/api/SdlManager.java @@ -47,7 +47,7 @@ import java.util.Vector; * 3. Sending Requests <br> * 4. Helper methods */ -public class SdlManager implements ProxyBridge.LifecycleListener { +public class SdlManager{ private static String TAG = "Sdl Manager"; private SdlProxyBase proxy; @@ -63,13 +63,13 @@ public class SdlManager implements ProxyBridge.LifecycleListener { private Vector<TTSChunk> ttsChunks; private TemplateColorScheme dayColorScheme, nightColorScheme; - private final ProxyBridge proxyBridge= new ProxyBridge(this); private CompletionListener initListener; - private boolean initialized = false; + private int state = -1; //public LockScreenConfig lockScreenConfig; // Managers + /* private FileManager fileManager; private VideoStreamingManager videoStreamingManager; @@ -79,21 +79,55 @@ public class SdlManager implements ProxyBridge.LifecycleListener { private PermissionManager permissionManager; */ - CompletionListener subManagerListener = new CompletionListener() { - boolean allSucceeded = true; - int subManagerCount = 1; // Update per amount of sub managers implemented + // Initialize proxyBridge with anonymous lifecycleListener + private final ProxyBridge proxyBridge= new ProxyBridge(new ProxyBridge.LifecycleListener() { + @Override + public void onProxyConnected() { + Log.d(TAG, "Proxy is connected. Now initializing."); + initialize(); + } + + @Override + public void onProxyClosed(String info, Exception e, SdlDisconnectedReason reason){ + dispose(); + } + + @Override + public void onServiceEnded(OnServiceEnded serviceEnded){ + + } + + @Override + public void onServiceNACKed(OnServiceNACKed serviceNACKed){ + + } + + @Override + public void onError(String info, Exception e){ + + } + }); + + // Sub manager listener + private final CompletionListener subManagerListener = new CompletionListener() { @Override - public void onComplete(boolean success) { + public synchronized void onComplete(boolean success) { if(!success){ - allSucceeded = false; + Log.d(TAG, "Sub manager failed to initialize"); } - subManagerCount--; - if(subManagerCount <= 0){ - if(allSucceeded){ - initialized = true; - } + if( + true + /* + fileManager.getState() != BaseSubManager.SETTING_UP && + videoStreamingManager.getState() != BaseSubManager.SETTING_UP && + audioStreamManager.getState() != BaseSubManager.SETTING_UP && + lockscreenManager.getState() != BaseSubManager.SETTING_UP && + screenManager.getState() != BaseSubManager.SETTING_UP + permissionManager.getState() != BaseSubManager.SETTING_UP + */ ){ + state = BaseSubManager.READY; if(initListener != null){ - initListener.onComplete(allSucceeded); + initListener.onComplete(true); initListener = null; } } @@ -105,12 +139,21 @@ public class SdlManager implements ProxyBridge.LifecycleListener { /* this.fileManager = new FileManager(_internalInterface, context); + this.fileManager.start(subManagerListener); this.lockscreenManager = new LockscreenManager(lockScreenConfig, context, _internalInterface); + this.lockscreenManager.start(subManagerListener); this.screenManager = new ScreenManager(_internalInterface, this.fileManager); + this.screenManager.start(subManagerListener); this.permissionManager = new PermissionManager(_internalInterface); + this.permissionManager.start(subManagerListener); this.videoStreamingManager = new VideoStreamingManager(context, _internalInterface); + this.videoStreamingManager.start(subManagerListener); this.audioStreamManager = new AudioStreamManager(_internalInterface); + this.audioStreamManager.start(subManagerListener); */ + + // If no managers, just call subManagerListener's onComplete + subManagerListener.onComplete(true); } private void dispose() { @@ -279,6 +322,7 @@ public class SdlManager implements ProxyBridge.LifecycleListener { } sdlManager.proxy = new SdlProxyBase(sdlManager.proxyBridge, sdlManager.appName, sdlManager.shortAppName, sdlManager.isMediaApp, sdlManager.hmiLanguage, sdlManager.hmiLanguage, sdlManager.hmiTypes, sdlManager.appId, sdlManager.transport, sdlManager.vrSynonyms, sdlManager.ttsChunks, sdlManager.dayColorScheme, sdlManager.nightColorScheme) {}; + sdlManager.state = BaseSubManager.SETTING_UP; } catch (SdlException e) { e.printStackTrace(); } @@ -405,37 +449,21 @@ public class SdlManager implements ProxyBridge.LifecycleListener { // LIFECYCLE / OTHER // STARTUP + + /** + * Starts up a SdlManager, and calls provided callback once all sub managers are no longer SETTING_UP + * @param listener CompletionListener that is called once the SdlManager is READY or SHUTDOWN + */ public void start(CompletionListener listener){ - initListener = listener; - if(initialized){ - listener.onComplete(true); + if(listener == null){ + return; + } + if(state != BaseSubManager.SETTING_UP && state != -1){ + listener.onComplete(state == BaseSubManager.READY); + initListener = null; + }else{ + initListener = listener; } - } - - @Override - public void onProxyConnected() { - Log.d(TAG, "Proxy is connected. Now initializing."); - this.initialize(); - } - - @Override - public void onProxyClosed(String info, Exception e, SdlDisconnectedReason reason){ - this.dispose(); - } - - @Override - public void onServiceEnded(OnServiceEnded serviceEnded){ - - } - - @Override - public void onServiceNACKed(OnServiceNACKed serviceNACKed){ - - } - - @Override - public void onError(String info, Exception e){ - } // INTERNAL INTERFACE |