summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Kast <julian@livio.com>2021-05-25 12:39:46 -0400
committerJulian Kast <julian@livio.com>2021-05-25 12:39:46 -0400
commit6a6a45e0f2ccd7390d8a111cad316997e4d0429a (patch)
tree1493a1fd24ef3799818f16daa3aadc678c6dc828
parent7f849507185fdbc53f0add1a4bbdcd67bbc2dcef (diff)
downloadsdl_android-6a6a45e0f2ccd7390d8a111cad316997e4d0429a.tar.gz
Add clone method to VoiceCommand and update the handling of comparing voiceCommands in VoiceCommandManager
-rw-r--r--base/src/main/java/com/smartdevicelink/managers/screen/menu/BaseVoiceCommandManager.java17
-rw-r--r--base/src/main/java/com/smartdevicelink/managers/screen/menu/VoiceCommand.java22
2 files changed, 32 insertions, 7 deletions
diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/menu/BaseVoiceCommandManager.java b/base/src/main/java/com/smartdevicelink/managers/screen/menu/BaseVoiceCommandManager.java
index 6cb5fdc0b..700f0c5fb 100644
--- a/base/src/main/java/com/smartdevicelink/managers/screen/menu/BaseVoiceCommandManager.java
+++ b/base/src/main/java/com/smartdevicelink/managers/screen/menu/BaseVoiceCommandManager.java
@@ -56,7 +56,7 @@ import java.util.List;
abstract class BaseVoiceCommandManager extends BaseSubManager {
private static final String TAG = "BaseVoiceCommandManager";
- List<VoiceCommand> voiceCommands, currentVoiceCommands, originalVoiceCommands;
+ List<VoiceCommand> voiceCommands, currentVoiceCommands;
int lastVoiceCommandId;
private static final int voiceCommandIdMin = 1900000000;
@@ -132,12 +132,18 @@ abstract class BaseVoiceCommandManager extends BaseSubManager {
public void setVoiceCommands(List<VoiceCommand> voiceCommands) {
// we actually need voice commands to set.
- if (voiceCommands == null || voiceCommands.equals(this.originalVoiceCommands)) {
- DebugTool.logInfo(TAG, "Voice commands list was null or matches the current voice commands");
+ if (voiceCommands == null) {
+ DebugTool.logInfo(TAG, "Voice commands list was null");
return;
}
- List<VoiceCommand> validatedVoiceCommands = removeEmptyVoiceCommands(voiceCommands);
+ // Clone voice commands
+ this.voiceCommands = new ArrayList<>();
+ for (VoiceCommand voiceCommand : voiceCommands) {
+ this.voiceCommands.add(voiceCommand.clone());
+ }
+
+ List<VoiceCommand> validatedVoiceCommands = removeEmptyVoiceCommands(this.voiceCommands);
if (validatedVoiceCommands.size() == 0) {
DebugTool.logError(TAG, "New voice commands are invalid, skipping...");
@@ -147,10 +153,9 @@ abstract class BaseVoiceCommandManager extends BaseSubManager {
if (!isVoiceCommandsUnique(validatedVoiceCommands)) {
DebugTool.logError(TAG, "Not all voice command strings are unique across all voice commands. Voice commands will not be set.");
return;
+
}
- this.originalVoiceCommands = new ArrayList<>(voiceCommands);
- this.voiceCommands = validatedVoiceCommands;
updateIdsOnVoiceCommands(this.voiceCommands);
cleanTransactionQueue();
diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/menu/VoiceCommand.java b/base/src/main/java/com/smartdevicelink/managers/screen/menu/VoiceCommand.java
index 40260c595..b171a702d 100644
--- a/base/src/main/java/com/smartdevicelink/managers/screen/menu/VoiceCommand.java
+++ b/base/src/main/java/com/smartdevicelink/managers/screen/menu/VoiceCommand.java
@@ -36,11 +36,13 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import com.smartdevicelink.util.DebugTool;
+
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
-public class VoiceCommand {
+public class VoiceCommand implements Cloneable {
/**
* The strings the user can say to activate this voice command
@@ -162,4 +164,22 @@ public class VoiceCommand {
// return comparison
return hashCode() == o.hashCode();
}
+
+ /**
+ * Creates a deep copy of the object
+ *
+ * @return deep copy of the object, null if an exception occurred
+ */
+ @Override
+ public VoiceCommand clone() {
+ try {
+ VoiceCommand clone = (VoiceCommand) super.clone();
+ return clone;
+ } catch (CloneNotSupportedException e) {
+ if (DebugTool.isDebugEnabled()) {
+ throw new RuntimeException("Clone not supported by super class");
+ }
+ }
+ return null;
+ }
}