diff options
author | Julian Kast <julian@livio.com> | 2021-05-25 12:39:46 -0400 |
---|---|---|
committer | Julian Kast <julian@livio.com> | 2021-05-25 12:39:46 -0400 |
commit | 6a6a45e0f2ccd7390d8a111cad316997e4d0429a (patch) | |
tree | 1493a1fd24ef3799818f16daa3aadc678c6dc828 | |
parent | 7f849507185fdbc53f0add1a4bbdcd67bbc2dcef (diff) | |
download | sdl_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.java | 17 | ||||
-rw-r--r-- | base/src/main/java/com/smartdevicelink/managers/screen/menu/VoiceCommand.java | 22 |
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; + } } |