diff options
author | Julian Kast <julian@livio.com> | 2020-03-16 10:34:13 -0400 |
---|---|---|
committer | Julian Kast <julian@livio.com> | 2020-03-16 10:34:13 -0400 |
commit | f23ed45aa7ff17030a473269f1db2164799f8542 (patch) | |
tree | 8596d3efdcef589a38c1fc092f1962493a95c184 | |
parent | 31fb9eb8dad2da868ada0307f3cc627909f0cd88 (diff) | |
parent | f8a9b3229795ad1abff756261a177cff3308dfb1 (diff) | |
download | sdl_android-f23ed45aa7ff17030a473269f1db2164799f8542.tar.gz |
Merge branch 'develop' into bugfix/issue_1289
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 |