Import / Export for Android
This commit is contained in:
parent
6237032716
commit
8a3867b5b3
|
@ -46,7 +46,7 @@
|
||||||
<!--Needed to run in background (lol)-->
|
<!--Needed to run in background (lol)-->
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
|
|
||||||
<!--Meeded to check if activity is foregrounded or if messages from the service should be queued-->
|
<!--Needed to check if activity is foregrounded or if messages from the service should be queued-->
|
||||||
<uses-permission android:name="android.permission.GET_TASKS" />
|
<uses-permission android:name="android.permission.GET_TASKS" />
|
||||||
|
|
||||||
<queries>
|
<queries>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package im.cwtch.flwtch
|
package im.cwtch.flwtch
|
||||||
|
|
||||||
import android.app.*
|
import android.app.*
|
||||||
|
import android.os.Environment
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
|
@ -430,12 +431,13 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) :
|
||||||
}
|
}
|
||||||
"ExportProfile" -> {
|
"ExportProfile" -> {
|
||||||
val profileOnion = (a.get("ProfileOnion") as? String) ?: ""
|
val profileOnion = (a.get("ProfileOnion") as? String) ?: ""
|
||||||
val file = (a.get("file") as? String) ?: ""
|
val file = StringBuilder().append(this.applicationContext.cacheDir).append("/").append((a.get("file") as? String) ?: "").toString()
|
||||||
|
Log.i("FlwtchWorker", "constructing exported file " + file);
|
||||||
Cwtch.exportProfile(profileOnion,file)
|
Cwtch.exportProfile(profileOnion,file)
|
||||||
}
|
}
|
||||||
"ImportProfile" -> {
|
"ImportProfile" -> {
|
||||||
val file = (a.get("file") as? String) ?: ""
|
val file = (a.get("file") as? String) ?: ""
|
||||||
val password = (a.get("pass") as? String) ?: ""
|
val pass = (a.get("pass") as? String) ?: ""
|
||||||
return Result.success(Data.Builder().putString("result", Cwtch.importProfile(file, pass)).build());
|
return Result.success(Data.Builder().putString("result", Cwtch.importProfile(file, pass)).build());
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
|
|
|
@ -62,6 +62,7 @@ class MainActivity: FlutterActivity() {
|
||||||
// "Download to..." prompt extra arguments
|
// "Download to..." prompt extra arguments
|
||||||
private val FILEPICKER_REQUEST_CODE = 234
|
private val FILEPICKER_REQUEST_CODE = 234
|
||||||
private val PREVIEW_EXPORT_REQUEST_CODE = 235
|
private val PREVIEW_EXPORT_REQUEST_CODE = 235
|
||||||
|
private val PROFILE_EXPORT_REQUEST_CODE = 236
|
||||||
private var dlToProfile = ""
|
private var dlToProfile = ""
|
||||||
private var dlToHandle = ""
|
private var dlToHandle = ""
|
||||||
private var dlToFileKey = ""
|
private var dlToFileKey = ""
|
||||||
|
@ -110,8 +111,6 @@ class MainActivity: FlutterActivity() {
|
||||||
)), ErrorLogResult(""));//placeholder; this Result is never actually invoked
|
)), ErrorLogResult(""));//placeholder; this Result is never actually invoked
|
||||||
} else if (requestCode == PREVIEW_EXPORT_REQUEST_CODE) {
|
} else if (requestCode == PREVIEW_EXPORT_REQUEST_CODE) {
|
||||||
val targetPath = intent!!.getData().toString()
|
val targetPath = intent!!.getData().toString()
|
||||||
var srcFile = File(this.exportFromPath)
|
|
||||||
Log.i("MainActivity:PREVIEW_EXPORT", "exporting previewed file")
|
|
||||||
val sourcePath = Paths.get(this.exportFromPath);
|
val sourcePath = Paths.get(this.exportFromPath);
|
||||||
val targetUri = Uri.parse(targetPath);
|
val targetUri = Uri.parse(targetPath);
|
||||||
val os = this.applicationContext.getContentResolver().openOutputStream(targetUri);
|
val os = this.applicationContext.getContentResolver().openOutputStream(targetUri);
|
||||||
|
@ -122,6 +121,20 @@ class MainActivity: FlutterActivity() {
|
||||||
os?.close();
|
os?.close();
|
||||||
//Files.delete(sourcePath);
|
//Files.delete(sourcePath);
|
||||||
}
|
}
|
||||||
|
} else if (requestCode == PROFILE_EXPORT_REQUEST_CODE ) {
|
||||||
|
val targetPath = intent!!.getData().toString()
|
||||||
|
val srcFile = StringBuilder().append(this.applicationContext.cacheDir).append("/").append(this.exportFromPath).toString();
|
||||||
|
Log.i("MainActivity:PREVIEW_EXPORT", "exporting previewed file " + srcFile);
|
||||||
|
val sourcePath = Paths.get(srcFile);
|
||||||
|
val targetUri = Uri.parse(targetPath);
|
||||||
|
val os = this.applicationContext.getContentResolver().openOutputStream(targetUri);
|
||||||
|
val bytesWritten = Files.copy(sourcePath, os);
|
||||||
|
Log.d("MainActivity:PREVIEW_EXPORT", "copied " + bytesWritten.toString() + " bytes");
|
||||||
|
if (bytesWritten != 0L) {
|
||||||
|
os?.flush();
|
||||||
|
os?.close();
|
||||||
|
//Files.delete(sourcePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,6 +224,14 @@ class MainActivity: FlutterActivity() {
|
||||||
}
|
}
|
||||||
startActivityForResult(intent, PREVIEW_EXPORT_REQUEST_CODE)
|
startActivityForResult(intent, PREVIEW_EXPORT_REQUEST_CODE)
|
||||||
return
|
return
|
||||||
|
} else if (call.method == "ExportProfile") {
|
||||||
|
this.exportFromPath = argmap["file"] ?: ""
|
||||||
|
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
|
||||||
|
addCategory(Intent.CATEGORY_OPENABLE)
|
||||||
|
type = "application/gzip"
|
||||||
|
putExtra(Intent.EXTRA_TITLE, argmap["file"])
|
||||||
|
}
|
||||||
|
startActivityForResult(intent, PROFILE_EXPORT_REQUEST_CODE)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ...otherwise fallthru to a normal ffi method call (and return the result using the result callback)
|
// ...otherwise fallthru to a normal ffi method call (and return the result using the result callback)
|
||||||
|
|
|
@ -297,6 +297,11 @@ class _AddEditProfileViewState extends State<AddEditProfileView> {
|
||||||
message: AppLocalizations.of(context)!.exportProfileTooltip,
|
message: AppLocalizations.of(context)!.exportProfileTooltip,
|
||||||
child: ElevatedButton.icon(
|
child: ElevatedButton.icon(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
if (Platform.isAndroid) {
|
||||||
|
Provider.of<FlwtchState>(context, listen: false).cwtch.ExportProfile(ctrlrOnion.value.text, ctrlrOnion.value.text + ".tar.gz");
|
||||||
|
final snackBar = SnackBar(content: Text(AppLocalizations.of(context)!.fileSavedTo + " " + ctrlrOnion.value.text + ".tar.gz"));
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(snackBar);
|
||||||
|
} else {
|
||||||
showCreateFilePicker(context).then((name) {
|
showCreateFilePicker(context).then((name) {
|
||||||
if (name != null) {
|
if (name != null) {
|
||||||
Provider.of<FlwtchState>(context, listen: false).cwtch.ExportProfile(ctrlrOnion.value.text, name);
|
Provider.of<FlwtchState>(context, listen: false).cwtch.ExportProfile(ctrlrOnion.value.text, name);
|
||||||
|
@ -304,6 +309,7 @@ class _AddEditProfileViewState extends State<AddEditProfileView> {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(snackBar);
|
ScaffoldMessenger.of(context).showSnackBar(snackBar);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
icon: Icon(Icons.import_export),
|
icon: Icon(Icons.import_export),
|
||||||
label: Text(AppLocalizations.of(context)!.exportProfile),
|
label: Text(AppLocalizations.of(context)!.exportProfile),
|
||||||
|
|
Loading…
Reference in New Issue