summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Kirk <askirk@umich.edu>2018-07-24 16:02:00 -0400
committerAustin Kirk <askirk@umich.edu>2018-07-24 16:02:00 -0400
commitdba373e5264da8d1370bd6be002ba412c6d8692e (patch)
treed6c71a5fa4970fedbae1df6ba82eb3dfe4c71c01
parentf484f8483e9deab1948699f4750920e964bf683b (diff)
downloadsdl_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.java38
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/api/FileManager.java31
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
/**