~williamvds/taskwarrior-android

99840de4a55c3b47c514765d5ee3182971a1aba6 — williamvds 4 years ago c231335
Make StaticAsyncTask callbacks use Context as this
M app/src/main/java/kvj/taskw/ui/AnnotationDialog.kt => app/src/main/java/kvj/taskw/ui/AnnotationDialog.kt +7 -7
@@ 84,17 84,17 @@ class AnnotationDialog : AppDialog() {
    companion object {
        private class SaveTask(activity: AnnotationDialog)
            : StaticAsyncTask<AnnotationDialog, String, Void, String?>(activity) {
            override fun background(context: AnnotationDialog, vararg params: String): String? {
                val accountController = context.controller.accountController(context.form.account)
                return accountController.taskAnnotate(context.form.uuid!!, params[0])
            override fun AnnotationDialog.background(vararg params: String): String? {
                val accountController = controller.accountController(form.account)
                return accountController.taskAnnotate(form.uuid!!, params[0])
            }

            override fun finish(context: AnnotationDialog, result: String?) {
            override fun AnnotationDialog.finish(result: String?) {
                if (result != null) { // Error
                    context.controller.messageShort(result)
                    controller.messageShort(result)
                } else {
                    context.setResult(RESULT_OK)
                    context.finish()
                    setResult(RESULT_OK)
                    finish()
                }
            }
        }

M app/src/main/java/kvj/taskw/ui/StaticAsyncTask.kt => app/src/main/java/kvj/taskw/ui/StaticAsyncTask.kt +4 -4
@@ 11,16 11,16 @@ abstract class StaticAsyncTask<Context, Params, Progress, Result>(activityContex
    protected val context: Context?
        get() = contextReference.get()

    protected abstract fun background(context: Context, vararg params: Params): Result
    protected abstract fun finish(context: Context, result: Result)
    protected abstract fun Context.background(vararg params: Params): Result
    protected abstract fun Context.finish(result: Result)

    override fun doInBackground(vararg params: Params): Result? {
        val context = context ?: return null
        return background(context, *params)
        return context.background(*params)
    }

    override fun onPostExecute(result: Result) {
        val context = context ?: return
        finish(context, result)
        context.finish(result)
    }
}

M app/src/main/java/kvj/taskw/ui/TagDialog.kt => app/src/main/java/kvj/taskw/ui/TagDialog.kt +7 -7
@@ 59,17 59,17 @@ class TagDialog : AppDialog() {
    companion object {
        private class SaveTask(activity: TagDialog)
            : StaticAsyncTask<TagDialog, String, Void, String?>(activity) {
            override fun background(context: TagDialog, vararg params: String): String? {
                val accountController = context.controller.accountController(context.form.account)
                return accountController.taskAddTag(context.form.uuid!!, params[0])
            override fun TagDialog.background(vararg params: String): String? {
                val accountController = controller.accountController(form.account)
                return accountController.taskAddTag(form.uuid!!, params[0])
            }

            override fun finish(context: TagDialog, result: String?) {
            override fun TagDialog.finish(result: String?) {
                if (result != null) { // Error
                    context.controller.messageShort(result)
                    controller.messageShort(result)
                } else {
                    context.setResult(RESULT_OK)
                    context.finish()
                    setResult(RESULT_OK)
                    finish()
                }
            }
        }

M app/src/main/java/kvj/taskw/ui/TaskActivity.kt => app/src/main/java/kvj/taskw/ui/TaskActivity.kt +23 -25
@@ 85,8 85,8 @@ class TaskActivity : AppActivity() {
        edit.setOnClickListener {
            if (editExpanded) {
                EditTask(this@TaskActivity) {
                    val intent = Intent(this@TaskActivity, EditorActivity::class.java)
                    intentForEditor(intent, task.uuid)
                    val intent = Intent(this, EditorActivity::class.java)
                    it.intentForEditor(intent, task.uuid)
                    startActivityForResult(intent, App.EDIT_REQUEST)
                }.execute()
            }


@@ 96,9 96,9 @@ class TaskActivity : AppActivity() {
        }

        done.setOnClickListener {
            EditTask(this@TaskActivity) { activity ->
                taskDone(task.uuid)
                activity.finish()
            EditTask(this@TaskActivity) {
                it.taskDone(task.uuid)
                finish()
            }.execute()

            hideEditList()


@@ 106,7 106,7 @@ class TaskActivity : AppActivity() {

        start_stop.setOnClickListener {
            EditTask(this@TaskActivity) {
                if (task.start == null) taskStart(task.uuid) else taskStop(task.uuid)
                if (task.start == null) it.taskStart(task.uuid) else it.taskStop(task.uuid)
            }.execute()

            hideEditList()


@@ 123,9 123,9 @@ class TaskActivity : AppActivity() {
        }

        delete.setOnClickListener {
            EditTask(this@TaskActivity) { activity ->
                taskDelete(task.uuid)
                activity.finish()
            EditTask(this@TaskActivity) {
                it.taskDelete(task.uuid)
                finish()
            }.execute()

            hideEditList()


@@ 199,7 199,7 @@ class TaskActivity : AppActivity() {
            setMessage(getString(R.string.remove_tag_dialog_format, tag))
            setPositiveButton(android.R.string.yes) { _, _ ->
                EditTask(this@TaskActivity) {
                    taskRemoveTag(task.uuid, tag)
                    it.taskRemoveTag(task.uuid, tag)
                }.execute()
            }
            setNegativeButton(android.R.string.no, null)


@@ 223,7 223,7 @@ class TaskActivity : AppActivity() {
                task_ann_date.text = MainListAdapter.formatDate(annotation.entry)
                task_ann_delete_btn.setOnClickListener {
                    EditTask(activity) {
                        taskDenotate(activity.task.uuid, annotation.description)
                        it.taskDenotate(activity.task.uuid, annotation.description)
                    }.execute()
                }
            }


@@ 260,30 260,28 @@ class TaskActivity : AppActivity() {
    companion object {
        private class ReloadTask(activity: TaskActivity)
            : StaticAsyncTask<TaskActivity, Void, Void, Task>(activity) {
            override fun background(context: TaskActivity, vararg params: Void): Task {
                val account = context.task.account
            override fun TaskActivity.background(vararg params: Void): Task {
                val account = task.account
                val controller = App.controller<Controller>().accountController(account.toString())
                return controller.getTask(context.task.uuid)
                return controller.getTask(task.uuid)
            }

            override fun finish(context: TaskActivity, result: Task) {
                context.apply {
                    task = result
                    populateData()
                }
            override fun TaskActivity.finish(result: Task) {
                task = result
                populateData()
            }
        }

        private class EditTask(activity: TaskActivity, val action: AccountController.(TaskActivity) -> Unit)
        private class EditTask(activity: TaskActivity, val action: TaskActivity.(AccountController) -> Unit)
            : StaticAsyncTask<TaskActivity, Void, Void, Unit>(activity) {
            override fun background(context: TaskActivity, vararg params: Void) {
                val account = context.task.account
            override fun TaskActivity.background(vararg params: Void) {
                val account = task.account
                val controller = App.controller<Controller>().accountController(account.toString())
                action(controller, context)
                action(controller)
            }

            override fun finish(context: TaskActivity, result: Unit) {
                context.reload()
            override fun TaskActivity.finish(result: Unit) {
                reload()
            }
        }
    }