~williamvds/taskwarrior-android

cd1a87418095cd61fa7e81bb3fc28ca925d308a9 — williamvds 4 years ago fe8f23d
Use AnnotationDialog.Form data class
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()
        }