3131import java .util .HashSet ;
3232import java .util .List ;
3333import java .util .Set ;
34+ import kotlin .Result ;
35+ import kotlin .Unit ;
36+ import kotlin .jvm .functions .Function1 ;
37+ import org .jetbrains .annotations .NotNull ;
3438
35- public class FileSelectorApiImpl implements GeneratedFileSelectorApi . FileSelectorApi {
39+ public class FileSelectorApiImpl implements FileSelectorApi {
3640 private static final String TAG = "FileSelectorApiImpl" ;
3741 // Request code for selecting a file.
3842 private static final int OPEN_FILE = 221 ;
@@ -91,9 +95,8 @@ public FileSelectorApiImpl(@NonNull ActivityPluginBinding activityPluginBinding)
9195 @ Override
9296 public void openFile (
9397 @ Nullable String initialDirectory ,
94- @ NonNull GeneratedFileSelectorApi .FileTypes allowedTypes ,
95- @ NonNull
96- GeneratedFileSelectorApi .NullableResult <GeneratedFileSelectorApi .FileResponse > result ) {
98+ @ NonNull FileTypes allowedTypes ,
99+ @ NonNull Function1 <? super Result <FileResponse >, Unit > callback ) {
97100 final Intent intent = objectFactory .newIntent (Intent .ACTION_OPEN_DOCUMENT );
98101 intent .addCategory (Intent .CATEGORY_OPENABLE );
99102
@@ -111,32 +114,37 @@ public void onResult(int resultCode, @Nullable Intent data) {
111114 final Uri uri = data .getData ();
112115 if (uri == null ) {
113116 // No data retrieved from opening file.
114- result .error (new Exception ("Failed to retrieve data from opening file." ));
117+ ResultUtilsKt .<FileResponse >completeWithError (
118+ callback , new Exception ("Failed to retrieve data from opening file." ));
115119 return ;
116120 }
117121
118- final GeneratedFileSelectorApi . FileResponse file = toFileResponse (uri );
122+ final FileResponse file = toFileResponse (uri );
119123 if (file != null ) {
120- result . success ( file );
124+ ResultUtilsKt .< FileResponse > completeWithValue ( callback , file );
121125 } else {
122- result .error (new Exception ("Failed to read file: " + uri ));
126+ ResultUtilsKt .completeWithError (
127+ callback , new Exception ("Failed to read file: " + uri ));
123128 }
124129 } else {
125- result . success ( null );
130+ ResultUtilsKt . completeWithValue ( callback , null );
126131 }
127132 }
128133 });
129134 } catch (Exception exception ) {
130- result . error ( exception );
135+ ResultUtilsKt . completeWithError ( callback , exception );
131136 }
132137 }
133138
134139 @ Override
135140 public void openFiles (
136141 @ Nullable String initialDirectory ,
137- @ NonNull GeneratedFileSelectorApi . FileTypes allowedTypes ,
142+ @ NonNull FileTypes allowedTypes ,
138143 @ NonNull
139- GeneratedFileSelectorApi .Result <List <GeneratedFileSelectorApi .FileResponse >> result ) {
144+ Function1 <
145+ ? super @ NotNull Result <? extends @ NotNull List <@ NotNull FileResponse >>,
146+ @ NotNull Unit >
147+ callback ) {
140148 final Intent intent = objectFactory .newIntent (Intent .ACTION_OPEN_DOCUMENT );
141149 intent .addCategory (Intent .CATEGORY_OPENABLE );
142150 intent .putExtra (Intent .EXTRA_ALLOW_MULTIPLE , true );
@@ -155,46 +163,46 @@ public void onResult(int resultCode, @Nullable Intent data) {
155163 // Only one file was returned.
156164 final Uri uri = data .getData ();
157165 if (uri != null ) {
158- final GeneratedFileSelectorApi . FileResponse file = toFileResponse (uri );
166+ final FileResponse file = toFileResponse (uri );
159167 if (file != null ) {
160- result . success ( Collections .singletonList (file ));
168+ ResultUtilsKt . completeWithValue ( callback , Collections .singletonList (file ));
161169 } else {
162- result .error (new Exception ("Failed to read file: " + uri ));
170+ ResultUtilsKt .completeWithError (
171+ callback , new Exception ("Failed to read file: " + uri ));
163172 }
164173 }
165174
166175 // Multiple files were returned.
167176 final ClipData clipData = data .getClipData ();
168177 if (clipData != null ) {
169- final List <GeneratedFileSelectorApi .FileResponse > files =
170- new ArrayList <>(clipData .getItemCount ());
178+ final List <FileResponse > files = new ArrayList <>(clipData .getItemCount ());
171179 for (int i = 0 ; i < clipData .getItemCount (); i ++) {
172180 final ClipData .Item clipItem = clipData .getItemAt (i );
173- final GeneratedFileSelectorApi .FileResponse file =
174- toFileResponse (clipItem .getUri ());
181+ final FileResponse file = toFileResponse (clipItem .getUri ());
175182 if (file != null ) {
176183 files .add (file );
177184 } else {
178- result .error (new Exception ("Failed to read file: " + uri ));
185+ ResultUtilsKt .completeWithError (
186+ callback , new Exception ("Failed to read file: " + uri ));
179187 return ;
180188 }
181189 }
182- result . success ( files );
190+ ResultUtilsKt . completeWithValue ( callback , files );
183191 }
184192 } else {
185- result . success ( new ArrayList <>());
193+ ResultUtilsKt . completeWithValue ( callback , new ArrayList <>());
186194 }
187195 }
188196 });
189197 } catch (Exception exception ) {
190- result . error ( exception );
198+ ResultUtilsKt . completeWithError ( callback , exception );
191199 }
192200 }
193201
194202 @ Override
195203 public void getDirectoryPath (
196204 @ Nullable String initialDirectory ,
197- @ NonNull GeneratedFileSelectorApi . NullableResult < String > result ) {
205+ @ NonNull Function1 <? super @ NotNull Result < String >, @ NotNull Unit > callback ) {
198206 final Intent intent = objectFactory .newIntent (Intent .ACTION_OPEN_DOCUMENT_TREE );
199207 trySetInitialDirectory (intent , initialDirectory );
200208
@@ -209,7 +217,8 @@ public void onResult(int resultCode, @Nullable Intent data) {
209217 final Uri uri = data .getData ();
210218 if (uri == null ) {
211219 // No data retrieved from opening directory.
212- result .error (new Exception ("Failed to retrieve data from opening directory." ));
220+ ResultUtilsKt .completeWithError (
221+ callback , new Exception ("Failed to retrieve data from opening directory." ));
213222 return ;
214223 }
215224
@@ -219,17 +228,17 @@ public void onResult(int resultCode, @Nullable Intent data) {
219228 try {
220229 final String path =
221230 FileUtils .getPathFromUri (activityPluginBinding .getActivity (), docUri );
222- result . success ( path );
231+ ResultUtilsKt . completeWithValue ( callback , path );
223232 } catch (UnsupportedOperationException exception ) {
224- result . error ( exception );
233+ ResultUtilsKt . completeWithError ( callback , exception );
225234 }
226235 } else {
227- result . success ( null );
236+ ResultUtilsKt .< String > completeWithValue ( callback , null );
228237 }
229238 }
230239 });
231240 } catch (Exception exception ) {
232- result . error ( exception );
241+ ResultUtilsKt . completeWithError ( callback , exception );
233242 }
234243 }
235244
@@ -240,8 +249,7 @@ public void setActivityPluginBinding(@Nullable ActivityPluginBinding activityPlu
240249 // Setting the mimeType with `setType` is required when opening files. This handles setting the
241250 // mimeType based on the `mimeTypes` list and converts extensions to mimeTypes.
242251 // See https://developer.android.com/guide/components/intents-common#OpenFile
243- private void setMimeTypes (
244- @ NonNull Intent intent , @ NonNull GeneratedFileSelectorApi .FileTypes allowedTypes ) {
252+ private void setMimeTypes (@ NonNull Intent intent , @ NonNull FileTypes allowedTypes ) {
245253 final Set <String > allMimetypes = new HashSet <>();
246254 allMimetypes .addAll (allowedTypes .getMimeTypes ());
247255 allMimetypes .addAll (tryConvertExtensionsToMimetypes (allowedTypes .getExtensions ()));
@@ -307,7 +315,7 @@ public boolean onActivityResult(int requestCode, int resultCode, @Nullable Inten
307315 }
308316
309317 @ Nullable
310- GeneratedFileSelectorApi . FileResponse toFileResponse (@ NonNull Uri uri ) {
318+ FileResponse toFileResponse (@ NonNull Uri uri ) {
311319 if (activityPluginBinding == null ) {
312320 Log .d (TAG , "Activity is not available." );
313321 return null ;
@@ -351,7 +359,7 @@ GeneratedFileSelectorApi.FileResponse toFileResponse(@NonNull Uri uri) {
351359 }
352360
353361 String uriPath ;
354- GeneratedFileSelectorApi . FileSelectorNativeException nativeError = null ;
362+ FileSelectorNativeException nativeError = null ;
355363
356364 try {
357365 uriPath = FileUtils .getPathFromCopyOfFileFromUri (activityPluginBinding .getActivity (), uri );
@@ -370,20 +378,11 @@ GeneratedFileSelectorApi.FileResponse toFileResponse(@NonNull Uri uri) {
370378 } catch (IllegalArgumentException e ) {
371379 uriPath = FILE_SELECTOR_EXCEPTION_PLACEHOLDER_PATH ;
372380 nativeError =
373- new GeneratedFileSelectorApi .FileSelectorNativeException .Builder ()
374- .setMessage (e .getMessage () == null ? "" : e .getMessage ())
375- .setFileSelectorExceptionCode (
376- GeneratedFileSelectorApi .FileSelectorExceptionCode .ILLEGAL_ARGUMENT_EXCEPTION )
377- .build ();
381+ new FileSelectorNativeException (
382+ FileSelectorExceptionCode .ILLEGAL_ARGUMENT_EXCEPTION ,
383+ e .getMessage () == null ? "" : e .getMessage ());
378384 }
379385
380- return new GeneratedFileSelectorApi .FileResponse .Builder ()
381- .setName (name )
382- .setBytes (bytes )
383- .setPath (uriPath )
384- .setMimeType (contentResolver .getType (uri ))
385- .setSize (size .longValue ())
386- .setFileSelectorNativeException (nativeError )
387- .build ();
386+ return new FileResponse (uriPath , contentResolver .getType (uri ), name , size , bytes , nativeError );
388387 }
389388}
0 commit comments