| 
				
			 | 
			
			
				@@ -1,9 +1,12 @@ 
			 | 
		
	
		
			
			| 
				1
			 | 
			
				1
			 | 
			
			
				 package com.RNFetchBlob; 
			 | 
		
	
		
			
			| 
				2
			 | 
			
				2
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				3
			 | 
			
			
				+import android.app.Activity; 
			 | 
		
	
		
			
			| 
				3
			 | 
			
				4
			 | 
			
			
				 import android.content.Intent; 
			 | 
		
	
		
			
			| 
				4
			 | 
			
				5
			 | 
			
			
				 import android.net.Uri; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				6
			 | 
			
			
				+import android.util.Log; 
			 | 
		
	
		
			
			| 
				5
			 | 
			
				7
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				6
			 | 
			
				8
			 | 
			
			
				 import com.RNFetchBlob.Utils.RNFBCookieJar; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				9
			 | 
			
			
				+import com.facebook.react.bridge.ActivityEventListener; 
			 | 
		
	
		
			
			| 
				7
			 | 
			
				10
			 | 
			
			
				 import com.facebook.react.bridge.Callback; 
			 | 
		
	
		
			
			| 
				8
			 | 
			
				11
			 | 
			
			
				 import com.facebook.react.bridge.LifecycleEventListener; 
			 | 
		
	
		
			
			| 
				9
			 | 
			
				12
			 | 
			
			
				 import com.facebook.react.bridge.Promise; 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -15,11 +18,16 @@ import com.facebook.react.bridge.ReadableMap; 
			 | 
		
	
		
			
			| 
				15
			 | 
			
				18
			 | 
			
			
				 import com.facebook.react.bridge.WritableArray; 
			 | 
		
	
		
			
			| 
				16
			 | 
			
				19
			 | 
			
			
				 import com.facebook.react.bridge.WritableMap; 
			 | 
		
	
		
			
			| 
				17
			 | 
			
				20
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				21
			 | 
			
			
				+import java.util.HashMap; 
			 | 
		
	
		
			
			| 
				18
			 | 
			
				22
			 | 
			
			
				 import java.util.Map; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				23
			 | 
			
			
				+import java.util.UUID; 
			 | 
		
	
		
			
			| 
				19
			 | 
			
				24
			 | 
			
			
				 import java.util.concurrent.LinkedBlockingQueue; 
			 | 
		
	
		
			
			| 
				20
			 | 
			
				25
			 | 
			
			
				 import java.util.concurrent.ThreadPoolExecutor; 
			 | 
		
	
		
			
			| 
				21
			 | 
			
				26
			 | 
			
			
				 import java.util.concurrent.TimeUnit; 
			 | 
		
	
		
			
			| 
				22
			 | 
			
				27
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				28
			 | 
			
			
				+import static android.app.Activity.RESULT_OK; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				29
			 | 
			
			
				+import static com.RNFetchBlob.RNFetchBlobConst.GET_CONTENT_INTENT; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				30
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				23
			 | 
			
				31
			 | 
			
			
				 public class RNFetchBlob extends ReactContextBaseJavaModule { 
			 | 
		
	
		
			
			| 
				24
			 | 
			
				32
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				25
			 | 
			
				33
			 | 
			
			
				     static ReactApplicationContext RCTContext; 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -28,12 +36,28 @@ public class RNFetchBlob extends ReactContextBaseJavaModule { 
			 | 
		
	
		
			
			| 
				28
			 | 
			
				36
			 | 
			
			
				     static LinkedBlockingQueue<Runnable> fsTaskQueue = new LinkedBlockingQueue<>(); 
			 | 
		
	
		
			
			| 
				29
			 | 
			
				37
			 | 
			
			
				     static ThreadPoolExecutor fsThreadPool = new ThreadPoolExecutor(2, 10, 5000, TimeUnit.MILLISECONDS, taskQueue); 
			 | 
		
	
		
			
			| 
				30
			 | 
			
				38
			 | 
			
			
				     static public boolean ActionViewVisible = false; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				39
			 | 
			
			
				+    static HashMap<Integer, Promise> promiseTable = new HashMap<>(); 
			 | 
		
	
		
			
			| 
				31
			 | 
			
				40
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				32
			 | 
			
				41
			 | 
			
			
				     public RNFetchBlob(ReactApplicationContext reactContext) { 
			 | 
		
	
		
			
			| 
				33
			 | 
			
				42
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				34
			 | 
			
				43
			 | 
			
			
				         super(reactContext); 
			 | 
		
	
		
			
			| 
				35
			 | 
			
				44
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				36
			 | 
			
				45
			 | 
			
			
				         RCTContext = reactContext; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				46
			 | 
			
			
				+        reactContext.addActivityEventListener(new ActivityEventListener() { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				47
			 | 
			
			
				+            @Override 
			 | 
		
	
		
			
			| 
				
			 | 
			
				48
			 | 
			
			
				+            public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				49
			 | 
			
			
				+                if(requestCode == GET_CONTENT_INTENT && resultCode == RESULT_OK) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				50
			 | 
			
			
				+                    Uri d = data.getData(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				51
			 | 
			
			
				+                    promiseTable.get(GET_CONTENT_INTENT).resolve(d.toString()); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				52
			 | 
			
			
				+                    promiseTable.remove(GET_CONTENT_INTENT); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				53
			 | 
			
			
				+                } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				54
			 | 
			
			
				+            } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				55
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				56
			 | 
			
			
				+            @Override 
			 | 
		
	
		
			
			| 
				
			 | 
			
				57
			 | 
			
			
				+            public void onNewIntent(Intent intent) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				58
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				59
			 | 
			
			
				+            } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				60
			 | 
			
			
				+        }); 
			 | 
		
	
		
			
			| 
				37
			 | 
			
				61
			 | 
			
			
				     } 
			 | 
		
	
		
			
			| 
				38
			 | 
			
				62
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				39
			 | 
			
				63
			 | 
			
			
				     @Override 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -322,4 +346,16 @@ public class RNFetchBlob extends ReactContextBaseJavaModule { 
			 | 
		
	
		
			
			| 
				322
			 | 
			
				346
			 | 
			
			
				         new RNFetchBlobReq(options, taskId, method, url, headers, null, body, callback).run(); 
			 | 
		
	
		
			
			| 
				323
			 | 
			
				347
			 | 
			
			
				     } 
			 | 
		
	
		
			
			| 
				324
			 | 
			
				348
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				349
			 | 
			
			
				+    @ReactMethod 
			 | 
		
	
		
			
			| 
				
			 | 
			
				350
			 | 
			
			
				+    public void getContentIntent(String mime, Promise promise) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				351
			 | 
			
			
				+        Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				352
			 | 
			
			
				+        if(mime != null) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				353
			 | 
			
			
				+            i.setType(mime); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				354
			 | 
			
			
				+        else 
			 | 
		
	
		
			
			| 
				
			 | 
			
				355
			 | 
			
			
				+            i.setType("*/*"); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				356
			 | 
			
			
				+        promiseTable.put(GET_CONTENT_INTENT, promise); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				357
			 | 
			
			
				+        this.getReactApplicationContext().startActivityForResult(i, GET_CONTENT_INTENT, null); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				358
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				359
			 | 
			
			
				+    } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				360
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				325
			 | 
			
				361
			 | 
			
			
				 } 
			 |