diff options
author | BrettyWhite <geekman3454@protonmail.com> | 2019-06-05 16:19:48 -0400 |
---|---|---|
committer | BrettyWhite <geekman3454@protonmail.com> | 2019-06-05 16:19:48 -0400 |
commit | 02ac67ce159b0896d0d7c1653cb2d0fa2e32749e (patch) | |
tree | 81ccc5afc3ce5c33ea1ac659f8c68196629c4aa1 | |
parent | 9a308aad87973485692d7247938d40536caf3076 (diff) | |
download | sdl_android-02ac67ce159b0896d0d7c1653cb2d0fa2e32749e.tar.gz |
allow adding preload choices to the queue while in state CHECKING_VOICE
3 files changed, 13 insertions, 6 deletions
diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/BaseScreenManager.java b/base/src/main/java/com/smartdevicelink/managers/screen/BaseScreenManager.java index ad2a43544..936f507f0 100644 --- a/base/src/main/java/com/smartdevicelink/managers/screen/BaseScreenManager.java +++ b/base/src/main/java/com/smartdevicelink/managers/screen/BaseScreenManager.java @@ -72,7 +72,7 @@ abstract class BaseScreenManager extends BaseSubManager { @Override public synchronized void onComplete(boolean success) { if (softButtonManager != null && textAndGraphicManager != null && voiceCommandManager != null && menuManager != null && choiceSetManager != null) { - if (softButtonManager.getState() == BaseSubManager.READY && textAndGraphicManager.getState() == BaseSubManager.READY && voiceCommandManager.getState() == BaseSubManager.READY && menuManager.getState() == BaseSubManager.READY && choiceSetManager.getState() == BaseSubManager.READY) { + if (softButtonManager.getState() == BaseSubManager.READY && textAndGraphicManager.getState() == BaseSubManager.READY && voiceCommandManager.getState() == BaseSubManager.READY && menuManager.getState() == BaseSubManager.READY) { DebugTool.logInfo("Starting screen manager, all sub managers are in ready state"); transitionToState(READY); } else if (softButtonManager.getState() == BaseSubManager.ERROR && textAndGraphicManager.getState() == BaseSubManager.ERROR && voiceCommandManager.getState() == BaseSubManager.ERROR && menuManager.getState() == BaseSubManager.ERROR && choiceSetManager.getState() == BaseSubManager.ERROR) { diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/BaseChoiceSetManager.java b/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/BaseChoiceSetManager.java index c6eafc1bc..5bfd6f2dc 100644 --- a/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/BaseChoiceSetManager.java +++ b/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/BaseChoiceSetManager.java @@ -111,9 +111,9 @@ abstract class BaseChoiceSetManager extends BaseSubManager { @Override public void start(CompletionListener listener){ - transitionToState(READY); - super.start(listener); + transitionToState(CHECKING_VOICE); checkVoiceOptional(); + super.start(listener); } @Override @@ -134,7 +134,6 @@ abstract class BaseChoiceSetManager extends BaseSubManager { } private void checkVoiceOptional(){ - transitionToState(CHECKING_VOICE); CheckChoiceVROptionalOperation checkChoiceVR = new CheckChoiceVROptionalOperation(internalInterface, new CheckChoiceVROptionalInterface() { @Override public void onCheckChoiceVROperationComplete(boolean vrOptional) { @@ -145,15 +144,20 @@ abstract class BaseChoiceSetManager extends BaseSubManager { @Override public void onError(String error) { + // At this point, there were errors trying to send a test CICS + // If we reach this state, we cannot use the manager DebugTool.logError(error); transitionToState(ERROR); + // checking VR will always be first in the queue. + // If pre-load operations were added while this was in progress + // clear it from the queue onError. + operationScheduler.clearQueue(); } }); operationScheduler.submit(checkChoiceVR); } public void preloadChoices(List<ChoiceCell> choices, CompletionListener listener){ - if (!isReady()){ return; } HashSet<ChoiceCell> choicesToUpload = choicesToBeUploadedWithArray(choices); choicesToUpload.removeAll(preloadedMutableChoices); diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/OperationScheduler.java b/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/OperationScheduler.java index fbd235600..4746d7052 100644 --- a/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/OperationScheduler.java +++ b/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/OperationScheduler.java @@ -38,9 +38,10 @@ import java.util.concurrent.TimeUnit; class OperationScheduler { private PausableThreadPoolExecutor pausableThreadPoolExecutor; + private LinkedBlockingQueue<Runnable> operationQueue; OperationScheduler() { - LinkedBlockingQueue<Runnable> operationQueue = new LinkedBlockingQueue<>(); + operationQueue = new LinkedBlockingQueue<>(); pausableThreadPoolExecutor = new PausableThreadPoolExecutor(1, 10, 10, TimeUnit.SECONDS, operationQueue); } @@ -48,6 +49,8 @@ class OperationScheduler { pausableThreadPoolExecutor.execute(operation); } + void clearQueue() { operationQueue.clear(); } + void suspend() { pausableThreadPoolExecutor.pause(); } |