summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Kast <julian@livio.com>2020-03-16 10:34:13 -0400
committerJulian Kast <julian@livio.com>2020-03-16 10:34:13 -0400
commitf23ed45aa7ff17030a473269f1db2164799f8542 (patch)
tree8596d3efdcef589a38c1fc092f1962493a95c184
parent31fb9eb8dad2da868ada0307f3cc627909f0cd88 (diff)
parentf8a9b3229795ad1abff756261a177cff3308dfb1 (diff)
downloadsdl_android-f23ed45aa7ff17030a473269f1db2164799f8542.tar.gz
Merge branch 'develop' into bugfix/issue_1289
-rw-r--r--.github/workflows/android.yml7
-rw-r--r--android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java310
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlArtwork.java2
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlFile.java34
-rw-r--r--base/src/main/java/com/smartdevicelink/managers/file/BaseFileManager.java18
-rw-r--r--javaSE/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlFile.java30
6 files changed, 250 insertions, 151 deletions
diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
index a947a1129..31d0e4547 100644
--- a/.github/workflows/android.yml
+++ b/.github/workflows/android.yml
@@ -8,7 +8,7 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@v1
+ uses: actions/checkout@v2
- name: Setup JDK
uses: actions/setup-java@v1
@@ -17,7 +17,7 @@ jobs:
- name: Sdl Android Tests
# For more info, please check out: https://github.com/marketplace/actions/android-emulator-runner
- uses: reactivecircus/android-emulator-runner@v1
+ uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 29
script: ./android/gradlew -p ./android :sdl_android:connectedCheck
@@ -35,7 +35,6 @@ jobs:
run: ./javaEE/gradlew -p ./javaEE test
- name: Codecov
- uses: codecov/codecov-action@v1.0.5
+ uses: codecov/codecov-action@v1.0.6
with:
- token: ${{secrets.CODECOV_TOKEN}}
yml: ./codecov.yml
diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java
index cebe52d54..073c62845 100644
--- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java
+++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java
@@ -136,21 +136,6 @@ public class FileManagerTests extends AndroidTestCase2 {
}
};
- private Answer<Void> onListFilesFailure = new Answer<Void>() {
- @Override
- public Void answer(InvocationOnMock invocation) {
- Object[] args = invocation.getArguments();
- RPCRequest message = (RPCRequest) args[0];
- if(message instanceof ListFiles){
- int correlationId = message.getCorrelationID();
- ListFilesResponse listFilesResponse = new ListFilesResponse();
- listFilesResponse.setSuccess(false);
- message.getOnRPCResponseListener().onResponse(correlationId, listFilesResponse);
- }
- return null;
- }
- };
-
private Answer<Void> onPutFileSuccess = new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) {
@@ -182,38 +167,40 @@ public class FileManagerTests extends AndroidTestCase2 {
}
};
- private Answer<Void> onSendRequestsSuccess = new Answer<Void>() {
+ private Answer<Void> onListDeleteRequestSuccess = new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
List<RPCRequest> rpcs = (List<RPCRequest>) args[0];
OnMultipleRequestListener listener = (OnMultipleRequestListener) args[1];
- if(rpcs.get(0) instanceof PutFile){
- for(RPCRequest message : rpcs){
+ if (rpcs.get(0) instanceof DeleteFile) {
+ for (RPCRequest message : rpcs) {
int correlationId = message.getCorrelationID();
listener.addCorrelationId(correlationId);
- PutFileResponse putFileResponse = new PutFileResponse();
- putFileResponse.setSuccess(true);
- listener.onResponse(correlationId, putFileResponse);
+ DeleteFileResponse deleteFileResponse = new DeleteFileResponse();
+ deleteFileResponse.setSuccess(true);
+ listener.onResponse(correlationId, deleteFileResponse);
}
+ listener.onFinished();
}
return null;
}
};
- private Answer<Void> onListDeleteRequestSuccess = new Answer<Void>() {
+ private Answer<Void> onListDeleteRequestFail = new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
List<RPCRequest> rpcs = (List<RPCRequest>) args[0];
OnMultipleRequestListener listener = (OnMultipleRequestListener) args[1];
if (rpcs.get(0) instanceof DeleteFile) {
+ Result resultCode = Result.REJECTED;
for (RPCRequest message : rpcs) {
int correlationId = message.getCorrelationID();
listener.addCorrelationId(correlationId);
DeleteFileResponse deleteFileResponse = new DeleteFileResponse();
deleteFileResponse.setSuccess(true);
- listener.onResponse(correlationId, deleteFileResponse);
+ listener.onError(correlationId, resultCode, "Binary data empty");
}
listener.onFinished();
}
@@ -221,20 +208,28 @@ public class FileManagerTests extends AndroidTestCase2 {
}
};
- private Answer<Void> onListDeleteRequestFail = new Answer<Void>() {
+ private Answer<Void> onSendRequestsFailPartialOnError = new Answer<Void>() {
@Override
- public Void answer(InvocationOnMock invocation) {
+ public Void answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
List<RPCRequest> rpcs = (List<RPCRequest>) args[0];
OnMultipleRequestListener listener = (OnMultipleRequestListener) args[1];
- if (rpcs.get(0) instanceof DeleteFile) {
+ if (rpcs.get(0) instanceof PutFile) {
Result resultCode = Result.REJECTED;
+ boolean flip = false;
for (RPCRequest message : rpcs) {
int correlationId = message.getCorrelationID();
listener.addCorrelationId(correlationId);
- DeleteFileResponse deleteFileResponse = new DeleteFileResponse();
- deleteFileResponse.setSuccess(true);
- listener.onError(correlationId, resultCode, "Binary data empty");
+ PutFileResponse putFileResponse = new PutFileResponse();
+ if (flip) {
+ putFileResponse.setSuccess(true);
+ flip = false;
+ listener.onResponse(correlationId, putFileResponse);
+ } else {
+ flip = true;
+ putFileResponse.setSuccess(false);
+ listener.onError(correlationId, resultCode, "Binary data empty");
+ }
}
listener.onFinished();
}
@@ -436,12 +431,16 @@ public class FileManagerTests extends AndroidTestCase2 {
verify(internalInterface, times(5)).sendRequests(any(List.class),any(OnMultipleRequestListener.class));
}
- public void testInitializationSuccess(){
+ /**
+ * Testing the initialization of FileManager
+ */
+ public void testInitializationSuccess() {
ISdl internalInterface = mock(ISdl.class);
- doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class));
+ doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class));
- final FileManager fileManager = new FileManager(internalInterface, mTestContext);
+ FileManagerConfig fileManagerConfig = new FileManagerConfig();
+ final FileManager fileManager = new FileManager(internalInterface, mTestContext, fileManagerConfig);
fileManager.start(new CompletionListener() {
@Override
public void onComplete(boolean success) {
@@ -453,22 +452,6 @@ public class FileManagerTests extends AndroidTestCase2 {
});
}
- public void testInitializationFailure(){
- ISdl internalInterface = mock(ISdl.class);
-
- doAnswer(onListFilesFailure).when(internalInterface).sendRPCRequest(any(ListFiles.class));
-
- final FileManager fileManager = new FileManager(internalInterface, mTestContext);
- fileManager.start(new CompletionListener() {
- @Override
- public void onComplete(boolean success) {
- assertFalse(success);
- assertEquals(fileManager.getState(), BaseSubManager.ERROR);
- assertEquals(BaseFileManager.SPACE_AVAILABLE_MAX_VALUE, fileManager.getBytesAvailable());
- }
- });
- }
-
/**
* Test file upload, success
*/
@@ -498,13 +481,17 @@ public class FileManagerTests extends AndroidTestCase2 {
assertEquals(Test.GENERAL_INT, fileManager.getBytesAvailable());
}
+ /**
+ * Testing failed file upload.
+ */
public void testFileUploadFailure() {
ISdl internalInterface = mock(ISdl.class);
- doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class));
- doAnswer(onPutFileFailure).when(internalInterface).sendRPCRequest(any(PutFile.class));
+ doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class));
+ doAnswer(onPutFileFailure).when(internalInterface).sendRPC(any(PutFile.class));
- final FileManager fileManager = new FileManager(internalInterface, mTestContext);
+ FileManagerConfig fileManagerConfig = new FileManagerConfig();
+ final FileManager fileManager = new FileManager(internalInterface, mTestContext, fileManagerConfig);
fileManager.start(new CompletionListener() {
@Override
public void onComplete(boolean success) {
@@ -610,12 +597,16 @@ public class FileManagerTests extends AndroidTestCase2 {
verify(internalInterface, times(1)).sendRequests(any(List.class), any(OnMultipleRequestListener.class));
}
- public void testInvalidSdlFileInput(){
+ /**
+ * Test to make sure you cannot upload an SdlFile with invalid data
+ */
+ public void testInvalidSdlFileInput() {
ISdl internalInterface = mock(ISdl.class);
- doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class));
+ doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class));
- final FileManager fileManager = new FileManager(internalInterface, mTestContext);
+ FileManagerConfig fileManagerConfig = new FileManagerConfig();
+ final FileManager fileManager = new FileManager(internalInterface, mTestContext, fileManagerConfig);
fileManager.start(new CompletionListener() {
@Override
public void onComplete(boolean success) {
@@ -646,6 +637,12 @@ public class FileManagerTests extends AndroidTestCase2 {
});
}
+ /**
+ * Used to try and upload SdlFiles with invalid data, throw an assert error if file uploads
+ *
+ * @param fileManager - FileManager used to manage and upload files
+ * @param sdlFile - SdlFile with invalid data to test uploading
+ */
private void checkForUploadFailure(FileManager fileManager, SdlFile sdlFile){
boolean error = false;
@@ -661,6 +658,10 @@ public class FileManagerTests extends AndroidTestCase2 {
assertTrue(error);
}
+ /**
+ * Test Invalid SdlArtWork FileTypes
+ * SdlArtwork FileTypes can only be: GRAPHIC_BMP, GRAPHIC_PNG or GRAPHIC_JPEG
+ */
public void testInvalidSdlArtworkInput(){
SdlArtwork sdlArtwork = new SdlArtwork();
// Set invalid type
@@ -715,99 +716,65 @@ public class FileManagerTests extends AndroidTestCase2 {
});
}
- public void testMultipleFileUploadPartialFailure(){
- final String failureReason = "No space available";
-
+ /**
+ * Testing uploading multiple files with some failing.
+ */
+ public void testMultipleFileUploadPartialFailure() {
ISdl internalInterface = mock(ISdl.class);
- doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class));
+ doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class));
+ doAnswer(onSendRequestsFailPartialOnError).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class));
- Answer<Void> onSendRequestsFailure = new Answer<Void>() {
- private int responseNum = 0;
- @Override
- public Void answer(InvocationOnMock invocation) {
- Object[] args = invocation.getArguments();
- List<RPCRequest> rpcs = (List<RPCRequest>) args[0];
- OnMultipleRequestListener listener = (OnMultipleRequestListener) args[1];
- if(rpcs.get(0) instanceof PutFile){
- for(RPCRequest message : rpcs){
- int correlationId = message.getCorrelationID();
- listener.addCorrelationId(correlationId);
- PutFileResponse putFileResponse = new PutFileResponse();
- if(responseNum++ % 2 == 0){
- listener.onError(correlationId, Result.OUT_OF_MEMORY, failureReason);
- }else{
- putFileResponse.setSuccess(true);
- listener.onResponse(correlationId, putFileResponse);
- }
- }
- }
- return null;
- }
- };
- doAnswer(onSendRequestsFailure).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class));
+ SdlFile validFile2 = new SdlFile();
+ validFile2.setName(Test.GENERAL_STRING + "2");
+ validFile2.setFileData(Test.GENERAL_BYTE_ARRAY);
+ validFile2.setPersistent(false);
+ validFile2.setType(FileType.GRAPHIC_JPEG);
- final FileManager fileManager = new FileManager(internalInterface, mTestContext);
- fileManager.start(new CompletionListener() {
- @Override
- public void onComplete(boolean success) {
- assertTrue(success);
- final String baseFileName = "file";
- int fileNum = 0;
- final List<SdlFile> filesToUpload = new ArrayList<>();
- SdlFile sdlFile = new SdlFile();
- sdlFile.setName(baseFileName + fileNum++);
- Uri uri = Uri.parse("android.resource://" + mTestContext.getPackageName() + "/drawable/ic_sdl");
- sdlFile.setUri(uri);
- filesToUpload.add(sdlFile);
+ SdlFile validFile3 = new SdlFile();
+ validFile3.setName(Test.GENERAL_STRING + "3");
+ validFile3.setFileData(Test.GENERAL_BYTE_ARRAY);
+ validFile3.setPersistent(false);
+ validFile3.setType(FileType.GRAPHIC_JPEG);
- sdlFile = new SdlFile();
- sdlFile.setName(baseFileName + fileNum++);
- sdlFile.setResourceId(com.smartdevicelink.test.R.drawable.ic_sdl);
- filesToUpload.add(sdlFile);
+ validFile.setType(FileType.AUDIO_WAVE);
- sdlFile = new SdlFile();
- sdlFile.setName(baseFileName + fileNum++);
- sdlFile.setFileData(Test.GENERAL_BYTE_ARRAY);
- sdlFile.setPersistent(true);
- sdlFile.setType(FileType.BINARY);
- filesToUpload.add(sdlFile);
+ final List<SdlFile> filesToUpload = new ArrayList<>();
+ filesToUpload.add(validFile);
+ filesToUpload.add(validFile2);
+ filesToUpload.add(validFile3);
+ FileManagerConfig fileManagerConfig = new FileManagerConfig();
+ fileManagerConfig.setArtworkRetryCount(0);
+ fileManagerConfig.setFileRetryCount(0);
+ final FileManager fileManager = new FileManager(internalInterface, mTestContext, fileManagerConfig);
+ fileManager.start(new CompletionListener() {
+ @Override
+ public void onComplete(boolean success) {
fileManager.uploadFiles(filesToUpload,
new MultipleFileCompletionListener() {
@Override
public void onComplete(Map<String, String> errors) {
- assertNotNull(errors);
- for(int i = 0; i < filesToUpload.size(); i++){
- if(i % 2 == 0){
- assertTrue(errors.containsKey(filesToUpload.get(i).getName()));
- assertEquals(FileManager.buildErrorString(Result.OUT_OF_MEMORY,
- failureReason), errors.get(filesToUpload.get(i).getName()));
- }else{
- assertFalse(errors.containsKey(filesToUpload.get(i).getName()));
- }
- }
- List <String> uploadedFileNames = fileManager.getRemoteFileNames();
- for(int i = 0; i < filesToUpload.size(); i++){
- if(i % 2 == 0){
- assertFalse(uploadedFileNames.contains(filesToUpload.get(i).getName()));
- }else{
- assertTrue(uploadedFileNames.contains(filesToUpload.get(i).getName()));
- }
- }
+ assertTrue(errors.size() == 2);
}
});
}
});
+ assertFalse(fileManager.hasUploadedFile(validFile) && fileManager.hasUploadedFile(validFile3));
+ assertTrue(fileManager.hasUploadedFile(validFile2));
}
+ /**
+ * Testing uploading multiple SdlArtwork files.
+ */
public void testMultipleArtworkUploadSuccess(){
ISdl internalInterface = mock(ISdl.class);
- doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class));
- doAnswer(onSendRequestsSuccess).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class));
+ doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class));
+ doAnswer(onListFileUploadSuccess).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class));
- final FileManager fileManager = new FileManager(internalInterface, mTestContext);
+ FileManagerConfig fileManagerConfig = new FileManagerConfig();
+ final FileManager fileManager = new FileManager(internalInterface, mTestContext, fileManagerConfig);
fileManager.start(new CompletionListener() {
@Override
public void onComplete(boolean success) {
@@ -843,16 +810,20 @@ public class FileManagerTests extends AndroidTestCase2 {
});
}
+ /**
+ * Testing uploading persistent SdlFile
+ */
public void testPersistentFileUploaded(){
ISdl internalInterface = mock(ISdl.class);
- doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class));
+ doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class));
final SdlFile file = new SdlFile();
file.setName(Test.GENERAL_STRING_LIST.get(0));
file.setPersistent(true);
- final FileManager fileManager = new FileManager(internalInterface, mTestContext);
+ FileManagerConfig fileManagerConfig = new FileManagerConfig();
+ final FileManager fileManager = new FileManager(internalInterface, mTestContext, fileManagerConfig);
fileManager.start(new CompletionListener() {
@Override
public void onComplete(boolean success) {
@@ -871,4 +842,87 @@ public class FileManagerTests extends AndroidTestCase2 {
assertEquals(fileManagerConfig.getArtworkRetryCount(), 2);
assertEquals(fileManagerConfig.getFileRetryCount(), 2);
}
+
+ /**
+ * Tests overwrite property for uploading a file.
+ * Checks to make sure file does not overwrite itself if overwrite property is set to false
+ */
+ public void testOverwriteFileProperty() {
+ ISdl internalInterface = mock(ISdl.class);
+
+ doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class));
+ doAnswer(onPutFileSuccess).when(internalInterface).sendRPC(any(PutFile.class));
+
+ FileManagerConfig fileManagerConfig = new FileManagerConfig();
+
+ final FileManager fileManager = new FileManager(internalInterface, mTestContext, fileManagerConfig);
+ fileManager.start(new CompletionListener() {
+ @Override
+ public void onComplete(boolean success) {
+ assertTrue(success);
+ fileManager.uploadFile(validFile, new CompletionListener() {
+ @Override
+ public void onComplete(boolean success) {
+ assertTrue(success);
+ validFile.setOverwrite(false);
+ fileManager.uploadFile(validFile, new CompletionListener() {
+ @Override
+ public void onComplete(boolean success) {
+ assertTrue(success);
+ }
+ });
+
+ }
+ });
+ }
+ });
+ verify(internalInterface, times(2)).sendRPC(any(RPCMessage.class));
+ }
+
+ /**
+ * Tests overwrite property for uploading a list of files.
+ * Checks to make sure files do not overwrite themselves if overwrite property is set to false.
+ */
+ public void testOverWriteFilePropertyListFiles() {
+ final ISdl internalInterface = mock(ISdl.class);
+
+ doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class));
+ doAnswer(onListFileUploadSuccess).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class));
+
+ final SdlFile validFile2 = new SdlFile();
+ validFile2.setName(Test.GENERAL_STRING + "2");
+ validFile2.setFileData(Test.GENERAL_BYTE_ARRAY);
+ validFile2.setPersistent(false);
+ validFile2.setType(FileType.GRAPHIC_JPEG);
+
+ final List<SdlFile> list = new ArrayList<>();
+ list.add(validFile);
+ list.add(validFile2);
+
+ FileManagerConfig fileManagerConfig = new FileManagerConfig();
+ fileManagerConfig.setArtworkRetryCount(2);
+ fileManagerConfig.setFileRetryCount(4);
+
+ final FileManager fileManager = new FileManager(internalInterface, mTestContext, fileManagerConfig);
+ fileManager.start(new CompletionListener() {
+ @Override
+ public void onComplete(boolean success) {
+ fileManager.uploadFiles(list, new MultipleFileCompletionListener() {
+ @Override
+ public void onComplete(Map<String, String> errors) {
+ validFile.setOverwrite(false);
+ validFile2.setOverwrite(false);
+ fileManager.uploadFiles(list, new MultipleFileCompletionListener() {
+ @Override
+ public void onComplete(Map<String, String> errors) {
+ assertNull(errors);
+ }
+ });
+ }
+ });
+
+ }
+ });
+ verify(internalInterface, times(1)).sendRequests(any(List.class), any(OnMultipleRequestListener.class));
+ }
} \ No newline at end of file
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlArtwork.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlArtwork.java
index e7db70ee6..ad837aae3 100644
--- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlArtwork.java
+++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlArtwork.java
@@ -51,7 +51,7 @@ public class SdlArtwork extends SdlFile implements Cloneable{
/**
* Creates a new instance of SdlArtwork
*/
- public SdlArtwork(){}
+ public SdlArtwork() {}
/**
* Creates a new instance of SdlArtwork
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlFile.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlFile.java
index 3635c9551..ecd0cacfd 100644
--- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlFile.java
+++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlFile.java
@@ -42,18 +42,20 @@ import com.smartdevicelink.proxy.rpc.enums.StaticIconName;
* A class representing data to be uploaded to core
*/
public class SdlFile{
- private String fileName;
- private int id = -1;
- private Uri uri;
- private byte[] fileData;
- private FileType fileType;
- private boolean persistentFile;
- private boolean isStaticIcon;
+ private String fileName;
+ private int id = -1;
+ private Uri uri;
+ private byte[] fileData;
+ private FileType fileType;
+ private boolean persistentFile;
+ private boolean isStaticIcon;
+ // Overwrite property by default is set to true in SdlFile constructors indicating that a file can be overwritten
+ private boolean overwrite = true;
/**
* Creates a new instance of SdlFile
*/
- public SdlFile(){}
+ public SdlFile() { }
/**
* Creates a new instance of SdlFile
@@ -219,4 +221,20 @@ public class SdlFile{
public boolean isStaticIcon() {
return isStaticIcon;
}
+
+ /**
+ * Gets the overwrite property for an SdlFile by default its set to true
+ * @return a boolean value that indicates if a file can be overwritten.
+ */
+ public boolean getOverwrite() {
+ return overwrite;
+ }
+
+ /**
+ * Sets the overwrite property for an SdlFile by default its set to true
+ * @param overwrite a boolean value that indicates if a file can be overwritten
+ */
+ public void setOverwrite(boolean overwrite) {
+ this.overwrite = overwrite;
+ }
} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/managers/file/BaseFileManager.java b/base/src/main/java/com/smartdevicelink/managers/file/BaseFileManager.java
index 89c99d167..6dd65b40b 100644
--- a/base/src/main/java/com/smartdevicelink/managers/file/BaseFileManager.java
+++ b/base/src/main/java/com/smartdevicelink/managers/file/BaseFileManager.java
@@ -325,7 +325,12 @@ abstract class BaseFileManager extends BaseSubManager {
*/
public void uploadFile(@NonNull final SdlFile file, final CompletionListener listener) {
if (file.isStaticIcon()) {
- Log.w(TAG, "Static icons don't need to be uploaded");
+ Log.w(TAG, String.format("%s is a static icon and doesn't need to be uploaded", file.getName()));
+ listener.onComplete(true);
+ return;
+ }
+ if (!file.getOverwrite() && hasUploadedFile(file)) {
+ Log.w(TAG, String.format("%s has already been uploaded and the overwrite property is set to false. It will not be uploaded again", file.getName()));
listener.onComplete(true);
return;
}
@@ -392,13 +397,18 @@ abstract class BaseFileManager extends BaseSubManager {
}
final List<PutFile> putFileRequests = new ArrayList<>();
for (SdlFile file : files) {
- if (!file.isStaticIcon()) {
- putFileRequests.add(createPutFile(file));
+ if (file.isStaticIcon()) {
+ Log.w(TAG, String.format("%s is a static icon and doesn't need to be uploaded", file.getName()));
+ continue;
+ }
+ if (!file.getOverwrite() && hasUploadedFile(file)) {
+ Log.w(TAG, String.format("%s has already been uploaded and the overwrite property is set to false. It will not be uploaded again", file.getName()));
+ continue;
}
+ putFileRequests.add(createPutFile(file));
}
// if all files are static icons we complete listener with no errors
if (putFileRequests.isEmpty()) {
- Log.w(TAG, "Static icons don't need to be uploaded");
listener.onComplete(null);
} else {
final Map<String, String> errors = new HashMap<>();
diff --git a/javaSE/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlFile.java b/javaSE/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlFile.java
index 40bc08b74..94d44013d 100644
--- a/javaSE/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlFile.java
+++ b/javaSE/src/main/java/com/smartdevicelink/managers/file/filetypes/SdlFile.java
@@ -39,12 +39,14 @@ import com.smartdevicelink.proxy.rpc.enums.StaticIconName;
* A class representing data to be uploaded to core
*/
public class SdlFile{
- private String fileName;
- private String filePath;
- private byte[] fileData;
- private FileType fileType;
- private boolean persistentFile;
- private boolean isStaticIcon;
+ private String fileName;
+ private String filePath;
+ private byte[] fileData;
+ private FileType fileType;
+ private boolean persistentFile;
+ private boolean isStaticIcon;
+ // Overwrite property by default is set to true in SdlFile constructors indicating that a file can be overwritten
+ private boolean overwrite = true;
/**
* Creates a new instance of SdlFile
@@ -185,4 +187,20 @@ public class SdlFile{
public boolean isStaticIcon() {
return isStaticIcon;
}
+
+ /**
+ * Gets the overwrite property for an SdlFile by default its set to true
+ * @return a boolean value that indicates if a file can be overwritten.
+ */
+ public boolean getOverwrite() {
+ return overwrite;
+ }
+
+ /**
+ * Sets the overwrite property for an SdlFile by default its set to true
+ * @param overwrite a boolean value that indicates if a file can be overwritten
+ */
+ public void setOverwrite(boolean overwrite) {
+ this.overwrite = overwrite;
+ }
} \ No newline at end of file