diff options
| author | Austin Kirk <askirk@umich.edu> | 2018-07-24 16:02:00 -0400 |
|---|---|---|
| committer | Austin Kirk <askirk@umich.edu> | 2018-07-24 16:02:00 -0400 |
| commit | dba373e5264da8d1370bd6be002ba412c6d8692e (patch) | |
| tree | d6c71a5fa4970fedbae1df6ba82eb3dfe4c71c01 | |
| parent | f484f8483e9deab1948699f4750920e964bf683b (diff) | |
| download | sdl_android-feature/issue_782_file_manager.tar.gz | |
Add hasUploadedFile() method to match iOSfeature/issue_782_file_manager
- Add method and supporting list structure in FileManager
- Add corresponding unit test
- Fix logic where remoteFiles list was not being updated on multiple delete file operation. Add unit test to cover such a case
| -rw-r--r-- | sdl_android/src/androidTest/java/com/smartdevicelink/api/FileManagerTests.java | 38 | ||||
| -rw-r--r-- | sdl_android/src/main/java/com/smartdevicelink/api/FileManager.java | 31 |
2 files changed, 58 insertions, 11 deletions
diff --git a/sdl_android/src/androidTest/java/com/smartdevicelink/api/FileManagerTests.java b/sdl_android/src/androidTest/java/com/smartdevicelink/api/FileManagerTests.java index dfe7259f4..6c297c1df 100644 --- a/sdl_android/src/androidTest/java/com/smartdevicelink/api/FileManagerTests.java +++ b/sdl_android/src/androidTest/java/com/smartdevicelink/api/FileManagerTests.java @@ -47,6 +47,7 @@ public class FileManagerTests extends AndroidTestCase { validFile = new SdlFile(); validFile.setName(Test.GENERAL_STRING); validFile.setFileData(Test.GENERAL_BYTE_ARRAY); + validFile.setPersistent(false); } @Override @@ -184,6 +185,7 @@ public class FileManagerTests extends AndroidTestCase { public void onComplete(boolean success) { assertTrue(success); assertTrue(fileManager.getRemoteFileNames().contains(validFile.getName())); + assertTrue(fileManager.hasUploadedFile(validFile)); } }); } @@ -206,6 +208,7 @@ public class FileManagerTests extends AndroidTestCase { public void onComplete(boolean success) { assertFalse(success); assertFalse(fileManager.getRemoteFileNames().contains(validFile.getName())); + assertFalse(fileManager.hasUploadedFile(validFile)); } }); } @@ -281,7 +284,7 @@ public class FileManagerTests extends AndroidTestCase { } } - public void testMultipleFileUploadSuccess(){ + public void testMultipleFileUploadThenDeleteSuccess(){ ISdl internalInterface = mock(ISdl.class); doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class)); @@ -305,22 +308,25 @@ public class FileManagerTests extends AndroidTestCase { sdlFile.setResourceId(com.smartdevicelink.test.R.drawable.ic_sdl); filesToUpload.add(sdlFile); - sdlFile = new SdlFile(); - sdlFile.setName("file" + fileNum++); - sdlFile.setFileData(Test.GENERAL_BYTE_ARRAY); - sdlFile.setPersistent(true); - sdlFile.setType(FileType.BINARY); - filesToUpload.add(sdlFile); - fileManager.uploadFiles(filesToUpload, new MultipleFileCompletionListener() { @Override public void onComplete(Map<String, String> errors) { assertNull(errors); - List < String > uploadedFileNames = fileManager.getRemoteFileNames(); + List <String> uploadedFileNames = fileManager.getRemoteFileNames(); for(SdlFile file : filesToUpload){ assertTrue(uploadedFileNames.contains(file.getName())); } + fileManager.deleteRemoteFilesWithNames(uploadedFileNames, new MultipleFileCompletionListener() { + @Override + public void onComplete(Map<String, String> errors) { + assertNull(errors); + List <String> uploadedFileNames = fileManager.getRemoteFileNames(); + for(SdlFile file : filesToUpload){ + assertFalse(uploadedFileNames.contains(file.getName())); + } + } + }); } }); } @@ -454,4 +460,18 @@ public class FileManagerTests extends AndroidTestCase { } }); } + + public void testPersistentFileUploaded(){ + ISdl internalInterface = mock(ISdl.class); + + doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class)); + + SdlFile file = new SdlFile(); + file.setName(Test.GENERAL_STRING_LIST.get(0)); + file.setPersistent(true); + + final FileManager fileManager = new FileManager(internalInterface, mTestContext); + assertTrue(fileManager.hasUploadedFile(file)); + assertFalse(fileManager.hasUploadedFile(null)); + } }
\ No newline at end of file diff --git a/sdl_android/src/main/java/com/smartdevicelink/api/FileManager.java b/sdl_android/src/main/java/com/smartdevicelink/api/FileManager.java index 2bb18da1c..51ae49f58 100644 --- a/sdl_android/src/main/java/com/smartdevicelink/api/FileManager.java +++ b/sdl_android/src/main/java/com/smartdevicelink/api/FileManager.java @@ -46,7 +46,7 @@ import java.util.Map; public class FileManager extends BaseSubManager { private static String TAG = "FileManager"; - private List<String> remoteFiles; + private List<String> remoteFiles, uploadedEphemeralFileNames; private WeakReference<Context> context; FileManager(ISdl internalInterface, Context context) { @@ -57,6 +57,7 @@ public class FileManager extends BaseSubManager { // prepare manager - don't set state to ready until we have list of files retrieveRemoteFiles(); + uploadedEphemeralFileNames = new ArrayList<>(); } // GETTERS @@ -114,6 +115,7 @@ public class FileManager extends BaseSubManager { public void onResponse(int correlationId, RPCResponse response) { if(response.getSuccess()){ remoteFiles.remove(fileName); + uploadedEphemeralFileNames.remove(fileName); } listener.onComplete(response.getSuccess()); } @@ -242,7 +244,13 @@ public class FileManager extends BaseSubManager { public void onResponse(int correlationId, RPCResponse response) { if(response.getSuccess()){ if(fileNameMap.get(correlationId) != null){ - remoteFiles.add(fileNameMap.get(correlationId)); + if(deletionOperation){ + remoteFiles.remove(fileNameMap.get(correlationId)); + uploadedEphemeralFileNames.remove(fileNameMap.get(correlationId)); + }else{ + remoteFiles.add(fileNameMap.get(correlationId)); + uploadedEphemeralFileNames.add(fileNameMap.get(correlationId)); + } } } } @@ -266,6 +274,7 @@ public class FileManager extends BaseSubManager { public void onResponse(int correlationId, RPCResponse response) { if(response.getSuccess()){ remoteFiles.add(file.getName()); + uploadedEphemeralFileNames.add(file.getName()); } listener.onComplete(response.getSuccess()); } @@ -314,6 +323,24 @@ public class FileManager extends BaseSubManager { uploadFiles(files, listener); } + /** + * Check if an SdlFile has been uploaded to core + * @param file SdlFile + * @return boolean that tells whether file has been uploaded to core (true) or not (false) + */ + public boolean hasUploadedFile(SdlFile file){ + if(file == null){ + return false; + } + if(file.isPersistent() && remoteFiles.contains(file.getName())){ + return true; + }else if(!file.isPersistent() && remoteFiles.contains(file.getName()) + && uploadedEphemeralFileNames.contains(file.getName())){ + return true; + } + return false; + } + // HELPERS /** |
