@@ -41,6 +41,11 @@ class MessageOptions {
41
41
var cancelButtonLabel: String? = null
42
42
}
43
43
44
+ @InvokeArg
45
+ class SaveFileDialogOptions {
46
+ var fileName: String? = null
47
+ }
48
+
44
49
@TauriPlugin
45
50
class DialogPlugin (private val activity : Activity ): Plugin(activity) {
46
51
var filePickerOptions: FilePickerOptions ? = null
@@ -204,4 +209,46 @@ class DialogPlugin(private val activity: Activity): Plugin(activity) {
204
209
dialog.show()
205
210
}
206
211
}
212
+
213
+ @Command
214
+ fun saveFileDialog (invoke : Invoke ) {
215
+ try {
216
+ val args = invoke.parseArgs(SaveFileDialogOptions ::class .java)
217
+
218
+ val intent = Intent (Intent .ACTION_CREATE_DOCUMENT )
219
+ intent.addCategory(Intent .CATEGORY_OPENABLE )
220
+ intent.setType(" text/plain" )
221
+ intent.putExtra(Intent .EXTRA_TITLE , args.fileName ? : " " )
222
+ startActivityForResult(invoke, intent, " saveFileDialogResult" )
223
+ } catch (ex: Exception ) {
224
+ val message = ex.message ? : " Failed to pick save file"
225
+ Logger .error(message)
226
+ invoke.reject(message)
227
+ }
228
+ }
229
+
230
+ @ActivityCallback
231
+ fun saveFileDialogResult (invoke : Invoke , result : ActivityResult ) {
232
+ try {
233
+ when (result.resultCode) {
234
+ Activity .RESULT_OK -> {
235
+ val callResult = JSObject ()
236
+ val intent: Intent ? = result.data
237
+ if (intent != null ) {
238
+ val uri = intent.data
239
+ if (uri != null ) {
240
+ callResult.put(" file" , uri.toString())
241
+ }
242
+ }
243
+ invoke.resolve(callResult)
244
+ }
245
+ Activity .RESULT_CANCELED -> invoke.reject(" File picker cancelled" )
246
+ else -> invoke.reject(" Failed to pick files" )
247
+ }
248
+ } catch (ex: java.lang.Exception ) {
249
+ val message = ex.message ? : " Failed to read file pick result"
250
+ Logger .error(message)
251
+ invoke.reject(message)
252
+ }
253
+ }
207
254
}
0 commit comments