@@ -72,14 +72,22 @@ public RNDocumentPickerModule(ReactApplicationContext reactContext) {
72
72
private final ActivityEventListener activityEventListener = new BaseActivityEventListener () {
73
73
@ Override
74
74
public void onActivityResult (Activity activity , int requestCode , int resultCode , Intent data ) {
75
+ boolean isForeignResult = requestCode != READ_REQUEST_CODE && requestCode != PICK_DIR_REQUEST_CODE ;
76
+ if (isForeignResult ) {
77
+ return ;
78
+ }
75
79
final Promise storedPromise = promise ;
76
80
if (storedPromise == null ) {
77
81
Log .e (NAME , "promise was null in onActivityResult" );
78
82
return ;
79
83
}
84
+ if (resultCode == Activity .RESULT_CANCELED ) {
85
+ sendError (E_DOCUMENT_PICKER_CANCELED , "User canceled directory picker" );
86
+ return ;
87
+ }
80
88
if (requestCode == READ_REQUEST_CODE ) {
81
89
onShowActivityResult (resultCode , data , storedPromise );
82
- } else if ( requestCode == PICK_DIR_REQUEST_CODE ) {
90
+ } else {
83
91
onPickDirectoryResult (resultCode , data );
84
92
}
85
93
}
@@ -96,8 +104,8 @@ private String[] readableArrayToStringArray(ReadableArray readableArray) {
96
104
97
105
@ Override
98
106
public void onCatalystInstanceDestroy () {
99
- super .onCatalystInstanceDestroy ();
100
107
getReactApplicationContext ().removeActivityEventListener (activityEventListener );
108
+ super .onCatalystInstanceDestroy ();
101
109
}
102
110
103
111
@ NonNull
@@ -170,10 +178,7 @@ public void releaseSecureAccess(ReadableArray uris, Promise promise) {
170
178
}
171
179
172
180
private void onPickDirectoryResult (int resultCode , Intent data ) {
173
- if (resultCode == Activity .RESULT_CANCELED ) {
174
- sendError (E_DOCUMENT_PICKER_CANCELED , "User canceled directory picker" );
175
- return ;
176
- } else if (resultCode != Activity .RESULT_OK ) {
181
+ if (resultCode != Activity .RESULT_OK ) {
177
182
sendError (E_UNKNOWN_ACTIVITY_RESULT , "Unknown activity result: " + resultCode );
178
183
return ;
179
184
}
@@ -190,39 +195,37 @@ private void onPickDirectoryResult(int resultCode, Intent data) {
190
195
}
191
196
192
197
public void onShowActivityResult (int resultCode , Intent data , Promise promise ) {
193
- if (resultCode == Activity .RESULT_CANCELED ) {
194
- sendError (E_DOCUMENT_PICKER_CANCELED , "User canceled document picker" );
195
- } else if (resultCode == Activity .RESULT_OK ) {
196
- Uri uri = null ;
197
- ClipData clipData = null ;
198
-
199
- if (data != null ) {
200
- uri = data .getData ();
201
- clipData = data .getClipData ();
202
- }
198
+ if (resultCode != Activity .RESULT_OK ) {
199
+ sendError (E_UNKNOWN_ACTIVITY_RESULT , "Unknown activity result: " + resultCode );
200
+ return ;
201
+ }
202
+ Uri uri = null ;
203
+ ClipData clipData = null ;
203
204
204
- try {
205
- List <Uri > uris = new ArrayList <>();
206
- // condition order seems to matter: https://github.com/rnmods/react-native-document-picker/issues/317#issuecomment-645222635
207
- if (clipData != null && clipData .getItemCount () > 0 ) {
208
- final int length = clipData .getItemCount ();
209
- for (int i = 0 ; i < length ; ++i ) {
210
- ClipData .Item item = clipData .getItemAt (i );
211
- uris .add (item .getUri ());
212
- }
213
- } else if (uri != null ) {
214
- uris .add (uri );
215
- } else {
216
- sendError (E_INVALID_DATA_RETURNED , "Invalid data returned by intent" );
217
- return ;
218
- }
205
+ if (data != null ) {
206
+ uri = data .getData ();
207
+ clipData = data .getClipData ();
208
+ }
219
209
220
- new ProcessDataTask (getReactApplicationContext (), uris , copyTo , promise ).execute ();
221
- } catch (Exception e ) {
222
- sendError (E_UNEXPECTED_EXCEPTION , e .getLocalizedMessage (), e );
210
+ try {
211
+ List <Uri > uris = new ArrayList <>();
212
+ // condition order seems to matter: https://github.com/rnmods/react-native-document-picker/issues/317#issuecomment-645222635
213
+ if (clipData != null && clipData .getItemCount () > 0 ) {
214
+ final int length = clipData .getItemCount ();
215
+ for (int i = 0 ; i < length ; ++i ) {
216
+ ClipData .Item item = clipData .getItemAt (i );
217
+ uris .add (item .getUri ());
218
+ }
219
+ } else if (uri != null ) {
220
+ uris .add (uri );
221
+ } else {
222
+ sendError (E_INVALID_DATA_RETURNED , "Invalid data returned by intent" );
223
+ return ;
223
224
}
224
- } else {
225
- sendError (E_UNKNOWN_ACTIVITY_RESULT , "Unknown activity result: " + resultCode );
225
+
226
+ new ProcessDataTask (getReactApplicationContext (), uris , copyTo , promise ).execute ();
227
+ } catch (Exception e ) {
228
+ sendError (E_UNEXPECTED_EXCEPTION , e .getLocalizedMessage (), e );
226
229
}
227
230
}
228
231
0 commit comments