Twidere-App-Android-Twitter.../twidere/src/main/kotlin/org/mariotaku/twidere/activity/DataExportActivity.kt

142 lines
4.9 KiB
Kotlin
Raw Normal View History

2016-07-02 05:54:53 +02:00
package org.mariotaku.twidere.activity
import android.app.Activity
import android.content.Intent
2020-04-20 12:14:47 +02:00
import android.net.Uri
2016-07-02 05:54:53 +02:00
import android.os.AsyncTask
import android.os.Build
2016-07-02 05:54:53 +02:00
import android.os.Bundle
import android.util.Log
2020-04-20 12:14:47 +02:00
import androidx.documentfile.provider.DocumentFile
import androidx.fragment.app.DialogFragment
2017-03-27 05:08:09 +02:00
import org.mariotaku.ktextension.dismissDialogFragment
2016-07-02 05:54:53 +02:00
import org.mariotaku.twidere.Constants.*
import org.mariotaku.twidere.R
import org.mariotaku.twidere.constant.IntentConstants
import org.mariotaku.twidere.fragment.DataExportImportTypeSelectorDialogFragment
import org.mariotaku.twidere.fragment.ProgressDialogFragment
import org.mariotaku.twidere.util.DataImportExportUtils
import java.io.File
2016-07-02 05:54:53 +02:00
import java.io.IOException
import java.text.SimpleDateFormat
import java.util.*
class DataExportActivity : BaseActivity(), DataExportImportTypeSelectorDialogFragment.Callback {
private var task: ExportSettingsTask? = null
override fun onCancelled(df: DialogFragment) {
if (!isFinishing) {
finish()
}
}
override fun onDismissed(df: DialogFragment) {
if (df is DataExportImportTypeSelectorDialogFragment) {
finish()
}
}
2016-07-08 06:46:54 +02:00
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
2016-07-02 05:54:53 +02:00
when (requestCode) {
REQUEST_PICK_DIRECTORY -> {
executeAfterFragmentResumed {
2016-07-08 06:46:54 +02:00
if (resultCode == RESULT_OK && data != null) {
2020-04-20 12:14:47 +02:00
val path = data.data
2016-07-02 05:54:53 +02:00
val df = DataExportImportTypeSelectorDialogFragment()
val args = Bundle()
2020-04-20 12:14:47 +02:00
args.putParcelable(EXTRA_PATH, path)
2016-07-02 05:54:53 +02:00
args.putString(EXTRA_TITLE, getString(R.string.export_settings_type_dialog_title))
df.arguments = args
df.show(supportFragmentManager, "select_export_type")
} else {
if (!isFinishing) {
finish()
}
}
}
return
}
}
super.onActivityResult(requestCode, resultCode, data)
}
2020-04-20 12:14:47 +02:00
override fun onPositiveButtonClicked(path: Uri?, flags: Int) {
2016-07-02 05:54:53 +02:00
if (path == null || flags == 0) {
finish()
return
}
if (task == null || task!!.status != AsyncTask.Status.RUNNING) {
val folder = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
DocumentFile.fromTreeUri(this, path)
} else {
DocumentFile.fromFile(File(path.path))
}
task = ExportSettingsTask(this, folder, flags)
2016-07-02 05:54:53 +02:00
task!!.execute()
}
}
override fun onStart() {
super.onStart()
setVisible(true)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState == null) {
val intent = Intent(this, FileSelectorActivity::class.java)
intent.action = IntentConstants.INTENT_ACTION_PICK_DIRECTORY
startActivityForResult(intent, REQUEST_PICK_DIRECTORY)
}
}
2017-03-05 09:08:09 +01:00
internal class ExportSettingsTask(
private val activity: DataExportActivity,
2020-04-20 12:14:47 +02:00
private val folder: DocumentFile?,
2017-03-05 09:08:09 +01:00
private val flags: Int
) : AsyncTask<Any, Any, Boolean>() {
2016-07-02 05:54:53 +02:00
override fun doInBackground(vararg params: Any): Boolean? {
2020-04-20 12:14:47 +02:00
if (folder == null || !folder.isDirectory) return false
2016-07-02 05:54:53 +02:00
val sdf = SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.US)
val fileName = String.format("Twidere_Settings_%s.zip", sdf.format(Date()))
2020-04-20 12:14:47 +02:00
val file = folder.findFile(fileName) ?: folder.createFile("application/zip", fileName)
?: return false
// val file = File(folder, fileName)
// file.delete()
2020-06-08 23:19:10 +02:00
return try {
2017-03-05 09:08:09 +01:00
DataImportExportUtils.exportData(activity, file, flags)
2020-06-08 23:19:10 +02:00
true
2016-07-02 05:54:53 +02:00
} catch (e: IOException) {
Log.w(LOGTAG, e)
2020-06-08 23:19:10 +02:00
false
2016-07-02 05:54:53 +02:00
}
}
override fun onPostExecute(result: Boolean?) {
2017-03-27 05:08:09 +02:00
activity.executeAfterFragmentResumed { activity ->
activity.supportFragmentManager.dismissDialogFragment(FRAGMENT_TAG)
2016-08-30 14:23:59 +02:00
}
2016-07-02 05:54:53 +02:00
if (result != null && result) {
activity.setResult(Activity.RESULT_OK)
} else {
activity.setResult(Activity.RESULT_CANCELED)
}
activity.finish()
}
override fun onPreExecute() {
2016-08-30 14:23:59 +02:00
activity.executeAfterFragmentResumed {
2017-03-22 13:00:29 +01:00
ProgressDialogFragment.show(it.supportFragmentManager, FRAGMENT_TAG).isCancelable = false
2016-08-30 14:23:59 +02:00
}
2016-07-02 05:54:53 +02:00
}
companion object {
2020-06-08 23:11:06 +02:00
private const val FRAGMENT_TAG = "import_settings_dialog"
2016-07-02 05:54:53 +02:00
}
}
}