From 808154624e5d804fcc9d94d6bed2ca21b52d4bda Mon Sep 17 00:00:00 2001 From: bhavesh Date: Fri, 15 Jun 2018 19:23:30 +0530 Subject: [PATCH 1/5] content uri handle in android for cp function --- .../java/com/RNFetchBlob/RNFetchBlobFS.java | 20 ++++++++++++++----- .../com/RNFetchBlob/Utils/PathResolver.java | 11 ++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java b/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java index 39972d066..1e6eb8a7b 100644 --- a/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java +++ b/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java @@ -1,5 +1,6 @@ package com.RNFetchBlob; +import android.content.ContentResolver; import android.content.res.AssetFileDescriptor; import android.media.MediaScannerConnection; import android.net.Uri; @@ -622,8 +623,14 @@ static void exists(String path, Callback callback) { } catch (IOException e) { callback.invoke(false, false); } - } - else { + } else if (path.startsWith(RNFetchBlobConst.FILE_PREFIX_CONTENT)) { + try { + InputStream in = RNFetchBlob.RCTContext.getContentResolver().openInputStream(Uri.parse(path)); + callback.invoke(true, false); + } catch (Exception e) { + callback.invoke(false, false); + } + } else { path = normalizePath(path); boolean exist = new File(path).exists(); boolean isDir = new File(path).isDirectory(); @@ -634,7 +641,7 @@ static void exists(String path, Callback callback) { /** * List content of folder * @param path Target folder - * @param callback JS context callback + * @param promise JS context promise */ static void ls(String path, Promise promise) { try { @@ -1051,6 +1058,8 @@ private void emitStreamEvent(String streamName, String event, String code, Strin private static InputStream inputStreamFromPath(String path) throws IOException { if (path.startsWith(RNFetchBlobConst.FILE_PREFIX_BUNDLE_ASSET)) { return RNFetchBlob.RCTContext.getAssets().open(path.replace(RNFetchBlobConst.FILE_PREFIX_BUNDLE_ASSET, "")); + } else if (path.startsWith(RNFetchBlobConst.FILE_PREFIX_CONTENT)) { + return RNFetchBlob.RCTContext.getContentResolver().openInputStream(Uri.parse(path)); } return new FileInputStream(new File(path)); } @@ -1068,8 +1077,9 @@ private static boolean isPathExists(String path) { return false; } return true; - } - else { + } else if (path.startsWith(RNFetchBlobConst.FILE_PREFIX_CONTENT)) { + return true; + } else { return new File(path).exists(); } diff --git a/android/src/main/java/com/RNFetchBlob/Utils/PathResolver.java b/android/src/main/java/com/RNFetchBlob/Utils/PathResolver.java index de72ecaa1..927d16bd6 100644 --- a/android/src/main/java/com/RNFetchBlob/Utils/PathResolver.java +++ b/android/src/main/java/com/RNFetchBlob/Utils/PathResolver.java @@ -10,6 +10,8 @@ import android.content.ContentUris; import android.os.Environment; import android.content.ContentResolver; +import android.text.TextUtils; + import com.RNFetchBlob.RNFetchBlobUtils; import java.io.File; import java.io.InputStream; @@ -31,6 +33,10 @@ public static String getRealPathFromURI(final Context context, final Uri uri) { if ("primary".equalsIgnoreCase(type)) { return Environment.getExternalStorageDirectory() + "/" + split[1]; + } else if ("raw".equalsIgnoreCase(type)) { + return split[1]; + } else if (type != null && !TextUtils.isEmpty(type)) { + return "/storage/" + type + "/" + split[1]; } // TODO handle non-primary volumes @@ -39,6 +45,9 @@ public static String getRealPathFromURI(final Context context, final Uri uri) { else if (isDownloadsDocument(uri)) { final String id = DocumentsContract.getDocumentId(uri); + if (id.startsWith("raw:")) { + return id.replaceFirst("raw:", ""); + } final Uri contentUri = ContentUris.withAppendedId( Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); @@ -57,6 +66,8 @@ else if (isMediaDocument(uri)) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } else if ("audio".equals(type)) { contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + } else if ("raw".equalsIgnoreCase(type)) { + return split[1]; } final String selection = "_id=?"; From 29bc4a82e399588b23a0f528b19d26a478da6419 Mon Sep 17 00:00:00 2001 From: bhavesh Date: Sat, 16 Jun 2018 13:25:02 +0530 Subject: [PATCH 2/5] targetSdk handle using user version --- android/build.gradle | 11 ++++++++--- .../src/main/java/com/RNFetchBlob/RNFetchBlobFS.java | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index d68693bf1..3ea0b685c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -13,12 +13,17 @@ buildscript { } } +def DEFAULT_COMPILE_SDK_VERSION = 25 +def DEFAULT_BUILD_TOOLS_VERSION = "25.0.3" +def DEFAULT_TARGET_SDK_VERSION = 25 +def DEFAULT_SUPPORT_LIB_VERSION = "25.0.0" + android { - compileSdkVersion 23 - buildToolsVersion "23.0.1" + compileSdkVersion rootProject.hasProperty('compileSdkVersion') ? rootProject.compileSdkVersion : DEFAULT_COMPILE_SDK_VERSION + buildToolsVersion rootProject.hasProperty('buildToolsVersion') ? rootProject.buildToolsVersion : DEFAULT_BUILD_TOOLS_VERSION defaultConfig { minSdkVersion 16 - targetSdkVersion 23 + targetSdkVersion rootProject.hasProperty('targetSdkVersion') ? rootProject.targetSdkVersion : DEFAULT_TARGET_SDK_VERSION versionCode 1 versionName "1.0" } diff --git a/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java b/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java index 1e6eb8a7b..2f17befd8 100644 --- a/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java +++ b/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java @@ -632,8 +632,8 @@ static void exists(String path, Callback callback) { } } else { path = normalizePath(path); - boolean exist = new File(path).exists(); - boolean isDir = new File(path).isDirectory(); + boolean exist = path != null ? new File(path).exists() : false; + boolean isDir = path != null ? new File(path).isDirectory() : false; callback.invoke(exist, isDir); } } From be763fecd750f3ac62beefb1b69b662a75de9465 Mon Sep 17 00:00:00 2001 From: bhavesh Date: Mon, 18 Jun 2018 10:51:31 +0530 Subject: [PATCH 3/5] duplicate declaration removed --- ios/RNFetchBlob/RNFetchBlob.m | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ios/RNFetchBlob/RNFetchBlob.m b/ios/RNFetchBlob/RNFetchBlob.m index 4525caad2..5399ab7c7 100644 --- a/ios/RNFetchBlob/RNFetchBlob.m +++ b/ios/RNFetchBlob/RNFetchBlob.m @@ -74,11 +74,6 @@ - (NSDictionary *)constantsToExport }; } -+ (BOOL)requiresMainQueueSetup -{ - return YES; -} - // Fetch blob data request RCT_EXPORT_METHOD(fetchBlobForm:(NSDictionary *)options taskId:(NSString *)taskId From 645c8167df9d123bf45b1b0f64a6b3bc49c9f9ea Mon Sep 17 00:00:00 2001 From: bhavesh Date: Tue, 28 Aug 2018 11:56:54 +0530 Subject: [PATCH 4/5] close inputstream --- android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java b/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java index 254c786ed..b1b6b7423 100644 --- a/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java +++ b/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java @@ -650,7 +650,12 @@ static void exists(String path, Callback callback) { } else if (path.startsWith(RNFetchBlobConst.FILE_PREFIX_CONTENT)) { try { InputStream in = RNFetchBlob.RCTContext.getContentResolver().openInputStream(Uri.parse(path)); - callback.invoke(true, false); + if (in != null) { + in.close(); + callback.invoke(true, false); + } else { + callback.invoke(false, false); + } } catch (Exception e) { callback.invoke(false, false); } From cd1664c395db00562ca704aa63315149282ee031 Mon Sep 17 00:00:00 2001 From: bhavesh Date: Tue, 28 Aug 2018 12:04:25 +0530 Subject: [PATCH 5/5] handle check in pathExists --- .../src/main/java/com/RNFetchBlob/RNFetchBlobFS.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java b/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java index b1b6b7423..7a34a8629 100644 --- a/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java +++ b/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java @@ -1107,7 +1107,17 @@ private static boolean isPathExists(String path) { } return true; } else if (path.startsWith(RNFetchBlobConst.FILE_PREFIX_CONTENT)) { - return true; + try { + InputStream in = RNFetchBlob.RCTContext.getContentResolver().openInputStream(Uri.parse(path)); + if (in != null) { + in.close(); + return true; + } else { + return false; + } + } catch (Exception e) { + return false; + } } else { return new File(path).exists(); }