2016-07-02 05:54:53 +02:00
|
|
|
package org.mariotaku.twidere.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
|
2020-04-21 10:05:56 +02:00
|
|
|
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.R
|
|
|
|
import org.mariotaku.twidere.TwidereConstants.*
|
|
|
|
import org.mariotaku.twidere.fragment.DataExportImportTypeSelectorDialogFragment
|
|
|
|
import org.mariotaku.twidere.fragment.ProgressDialogFragment
|
|
|
|
import org.mariotaku.twidere.util.DataImportExportUtils
|
2020-04-21 10:05:56 +02:00
|
|
|
import java.io.File
|
2016-07-02 05:54:53 +02:00
|
|
|
import java.io.IOException
|
|
|
|
|
|
|
|
class DataImportActivity : BaseActivity(), DataExportImportTypeSelectorDialogFragment.Callback {
|
|
|
|
|
|
|
|
private var importSettingsTask: ImportSettingsTask? = null
|
|
|
|
private var openImportTypeTask: OpenImportTypeTask? = null
|
|
|
|
private var resumeFragmentsRunnable: Runnable? = 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_FILE -> {
|
|
|
|
resumeFragmentsRunnable = Runnable {
|
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
|
|
|
if (openImportTypeTask == null || openImportTypeTask!!.status != AsyncTask.Status.RUNNING) {
|
2020-04-21 10:05:56 +02:00
|
|
|
val file = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
|
|
DocumentFile.fromSingleUri(this, path)
|
|
|
|
} else {
|
|
|
|
DocumentFile.fromFile(File(path.path))
|
|
|
|
}
|
|
|
|
openImportTypeTask = OpenImportTypeTask(this@DataImportActivity, file)
|
2016-07-02 05:54:53 +02:00
|
|
|
openImportTypeTask!!.execute()
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (!isFinishing) {
|
|
|
|
finish()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
super.onActivityResult(requestCode, resultCode, data)
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun onResumeFragments() {
|
|
|
|
super.onResumeFragments()
|
|
|
|
if (resumeFragmentsRunnable != null) {
|
|
|
|
resumeFragmentsRunnable!!.run()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
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 (importSettingsTask == null || importSettingsTask!!.status != AsyncTask.Status.RUNNING) {
|
2020-04-21 10:05:56 +02:00
|
|
|
val file = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
|
|
DocumentFile.fromSingleUri(this, path)
|
|
|
|
} else {
|
|
|
|
DocumentFile.fromFile(File(path.path))
|
|
|
|
}
|
|
|
|
importSettingsTask = ImportSettingsTask(this, file, flags)
|
2016-07-02 05:54:53 +02:00
|
|
|
importSettingsTask!!.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 = INTENT_ACTION_PICK_FILE
|
|
|
|
startActivityForResult(intent, REQUEST_PICK_FILE)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
internal class ImportSettingsTask(
|
|
|
|
private val activity: DataImportActivity,
|
2020-04-20 12:14:47 +02:00
|
|
|
private val file: DocumentFile?,
|
2016-07-02 05:54:53 +02:00
|
|
|
private val flags: Int
|
|
|
|
) : AsyncTask<Any, Any, Boolean>() {
|
|
|
|
|
|
|
|
override fun doInBackground(vararg params: Any): Boolean? {
|
2020-04-20 12:14:47 +02:00
|
|
|
if (file == null) {
|
|
|
|
return false
|
|
|
|
}
|
2016-07-02 05:54:53 +02:00
|
|
|
if (!file.isFile) return false
|
2020-06-08 23:19:10 +02:00
|
|
|
return try {
|
2016-07-02 05:54:53 +02:00
|
|
|
DataImportExportUtils.importData(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-07-02 05:54:53 +02:00
|
|
|
}
|
|
|
|
if (result != null && result) {
|
|
|
|
activity.setResult(RESULT_OK)
|
|
|
|
} else {
|
|
|
|
activity.setResult(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
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2020-04-20 12:14:47 +02:00
|
|
|
internal class OpenImportTypeTask(private val activity: DataImportActivity, private val file: DocumentFile?) : AsyncTask<Any, Any, Int>() {
|
2016-07-02 05:54:53 +02:00
|
|
|
|
|
|
|
override fun doInBackground(vararg params: Any): Int? {
|
2020-04-20 12:14:47 +02:00
|
|
|
if (file == null) {
|
|
|
|
return 0
|
|
|
|
}
|
2016-07-02 05:54:53 +02:00
|
|
|
if (!file.isFile) return 0
|
2020-06-08 23:19:10 +02:00
|
|
|
return try {
|
|
|
|
DataImportExportUtils.getImportedSettingsFlags(activity, file)
|
2016-07-02 05:54:53 +02:00
|
|
|
} catch (e: IOException) {
|
2020-06-08 23:19:10 +02:00
|
|
|
0
|
2016-07-02 05:54:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onPostExecute(flags: Int?) {
|
2017-03-27 05:08:09 +02:00
|
|
|
activity.executeAfterFragmentResumed { activity ->
|
|
|
|
activity.supportFragmentManager.dismissDialogFragment(FRAGMENT_TAG)
|
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, file?.uri)
|
2016-08-30 14:23:59 +02:00
|
|
|
args.putString(EXTRA_TITLE, activity.getString(R.string.import_settings_type_dialog_title))
|
2016-07-02 05:54:53 +02:00
|
|
|
if (flags != null) {
|
|
|
|
args.putInt(EXTRA_FLAGS, flags)
|
|
|
|
} else {
|
|
|
|
args.putInt(EXTRA_FLAGS, 0)
|
|
|
|
}
|
|
|
|
df.arguments = args
|
2016-08-30 14:23:59 +02:00
|
|
|
df.show(activity.supportFragmentManager, "select_import_type")
|
2016-07-02 05:54:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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 = "read_settings_data_dialog"
|
2016-07-02 05:54:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|