M app/src/main/java/kvj/taskw/ui/AnnotationDialog.kt => app/src/main/java/kvj/taskw/ui/AnnotationDialog.kt +42 -26
@@ 1,28 1,31 @@
package kvj.taskw.ui
+import android.app.Activity
+import android.content.Intent
import java.util.UUID
import android.os.Bundle
+import android.os.Parcelable
import android.text.TextUtils
import kvj.taskw.App
import kvj.taskw.R
import kvj.taskw.data.Controller
+import kotlinx.android.parcel.Parcelize
import kotlinx.android.synthetic.main.dialog_add_annotation.*
class AnnotationDialog : AppDialog() {
internal var controller = App.controller<Controller>()
- private val form = Form()
+ private lateinit var form: Form
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.dialog_add_annotation)
- form.load(intent.extras)
- if (!form.valid) form.load(savedInstanceState)
- if (!form.valid) finish()
+ if (!loadForm(intent.extras))
+ loadForm(savedInstanceState)
ann_cancel_btn.setOnClickListener { doFinish() }
ann_ok_btn.setOnClickListener { doSave() }
@@ 32,10 35,11 @@ class AnnotationDialog : AppDialog() {
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- form.save(outState)
+ saveForm(outState)
}
private fun doSave() {
+ applyToForm()
val text = form.annotation
if (TextUtils.isEmpty(text)) { // Nothing to save
@@ 47,6 51,8 @@ class AnnotationDialog : AppDialog() {
}
private fun doFinish() {
+ applyToForm()
+
if (!TextUtils.isEmpty(form.annotation)) { // Ask for confirmation
controller.question(this,
"There are some changes, discard?",
@@ 57,31 63,41 @@ class AnnotationDialog : AppDialog() {
}
}
- private inner class Form {
- var account: String? = null
- var uuid: UUID? = null
-
- var annotation: String
- get() = ann_text.text.toString()
- set(value) { ann_text.setText(value) }
- val valid: Boolean
- get() = account != null && uuid != null
-
- fun load(data: Bundle?) {
- data ?: return
- account = data.getString(App.KEY_ACCOUNT)
- uuid = data.getSerializable(App.KEY_EDIT_UUID) as UUID
- annotation = data.getString(App.KEY_TEXT_INPUT) ?: ""
- }
+ private fun loadForm(data: Bundle?): Boolean {
+ val stored = data?.getParcelable<Form?>(App.KEY_EDIT_DATA)
+ stored?.let { form = it }
- fun save(data: Bundle) {
- data.putString(App.KEY_ACCOUNT, account)
- data.putSerializable(App.KEY_EDIT_UUID, uuid)
- data.putString(App.KEY_TEXT_INPUT, annotation)
- }
+ ann_text.setText(form.annotation)
+
+ return stored != null
}
+ private fun applyToForm() {
+ form.annotation = ann_text.text.toString()
+ }
+
+ private fun saveForm(data: Bundle) {
+ applyToForm()
+ data.putParcelable(App.KEY_EDIT_DATA, form)
+ }
+
+ @Parcelize
+ data class Form @JvmOverloads constructor(
+ val account: String,
+ val uuid: UUID,
+ var annotation: String? = null
+ ) : Parcelable
+
companion object {
+ @JvmStatic
+ fun start(activity: Activity, form: Form) {
+ val intent = Intent(activity, AnnotationDialog::class.java).apply {
+ putExtra(App.KEY_EDIT_DATA, form)
+ }
+
+ activity.startActivityForResult(intent, App.ANNOTATE_REQUEST)
+ }
+
private class SaveTask(activity: AnnotationDialog)
: StaticAsyncTask<AnnotationDialog, String, Void, String?>(activity) {
override fun AnnotationDialog.background(vararg params: String): String? {
M app/src/main/java/kvj/taskw/ui/MainActivity.java => app/src/main/java/kvj/taskw/ui/MainActivity.java +4 -4
@@ 174,10 174,10 @@ public class MainActivity extends AppActivity implements Controller.ToastMessage
}
private void annotate(@NotNull Task task) {
- Intent dialog = new Intent(this, AnnotationDialog.class);
- dialog.putExtra(App.KEY_ACCOUNT, form.getValue(App.KEY_ACCOUNT, String.class));
- dialog.putExtra(App.KEY_EDIT_UUID, task.uuid);
- startActivityForResult(dialog, App.ANNOTATE_REQUEST);
+ AnnotationDialog.start(this, new AnnotationDialog.Form(
+ form.getValue(App.KEY_ACCOUNT, String.class),
+ task.uuid
+ ));
}
private void showAccountMenu(View btn) {
M app/src/main/java/kvj/taskw/ui/TaskActivity.kt => app/src/main/java/kvj/taskw/ui/TaskActivity.kt +4 -5
@@ 119,12 119,11 @@ class TaskActivity : AppActivity() {
}
annotate.setOnClickListener {
- val intent = Intent(this, AnnotationDialog::class.java).apply {
- putExtra(App.KEY_ACCOUNT, task.account.toString())
- putExtra(App.KEY_EDIT_UUID, task.uuid)
- }
+ AnnotationDialog.start(this, AnnotationDialog.Form(
+ task.account.toString(),
+ task.uuid
+ ))
- startActivityForResult(intent, App.ANNOTATE_REQUEST)
hideEditList()
}