summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrettyWhite <geekman3454@protonmail.com>2019-06-05 16:19:48 -0400
committerBrettyWhite <geekman3454@protonmail.com>2019-06-05 16:19:48 -0400
commit02ac67ce159b0896d0d7c1653cb2d0fa2e32749e (patch)
tree81ccc5afc3ce5c33ea1ac659f8c68196629c4aa1
parent9a308aad87973485692d7247938d40536caf3076 (diff)
downloadsdl_android-02ac67ce159b0896d0d7c1653cb2d0fa2e32749e.tar.gz
allow adding preload choices to the queue while in state CHECKING_VOICE
-rw-r--r--base/src/main/java/com/smartdevicelink/managers/screen/BaseScreenManager.java2
-rw-r--r--base/src/main/java/com/smartdevicelink/managers/screen/choiceset/BaseChoiceSetManager.java12
-rw-r--r--base/src/main/java/com/smartdevicelink/managers/screen/choiceset/OperationScheduler.java5
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();
}