M app/src/main/java/kvj/taskw/ui/TagDialog.kt => app/src/main/java/kvj/taskw/ui/TagDialog.kt +45 -33
@@ 2,69 2,81 @@ package kvj.taskw.ui
import java.util.UUID
+import android.app.Activity
+import android.content.Intent
import android.os.Bundle
-import android.text.TextUtils
import kvj.taskw.App
import kvj.taskw.R
-import kvj.taskw.data.Controller
import kvj.taskw.ui.AppActivity.Companion.Style
+import kotlinx.android.parcel.Parcelize
import kotlinx.android.synthetic.main.dialog_add_tag.*
-class TagDialog : AppActivity() {
+class TagDialog : AppForm<TagDialog.Form>() {
override val style = Style.DIALOG
-
- internal var controller = App.controller<Controller>()
- private val form = Form()
+ override val layout = R.layout.dialog_add_tag
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- form.load(intent.extras)
- if (!form.valid) finish()
+ cancel.setOnClickListener { cancel() }
+ ok.setOnClickListener { submit() }
+ }
- setContentView(R.layout.dialog_add_tag)
+ override fun submit() {
+ super.submit()
- cancel.setOnClickListener { finish() }
- ok.setOnClickListener { doSave() }
+ if (validate())
+ SaveTask(this).execute(data.tag)
}
- override fun onBackPressed() = finish()
+ override fun loadFromForm() {
+ text.setText(data.tag)
+ }
+
+ override fun saveToForm() {
+ data.tag = text.text.toString()
+ }
- private fun doSave() {
- val text = form.tag
+ override fun hasChanges() = !data.tag.isNullOrBlank()
- if (TextUtils.isEmpty(text)) { // Nothing to save
- controller.messageShort("Input is mandatory")
- return
+ override fun validate(): Boolean {
+ val tag = data.tag
+ if (tag.isNullOrBlank()) {
+ controller.messageShort(getString(R.string.error_no_input))
+ return false
+ }
+ else if (tag.contains("\\s".toRegex())) {
+ controller.messageShort(getString(R.string.error_tag_whitespace))
+ return false
}
- SaveTask(this).execute(text)
+ return true
}
- private inner class Form {
- var account: String? = null
- var uuid: UUID? = null
+ @Parcelize
+ data class Form @JvmOverloads constructor(
+ val account: String,
+ val uuid: UUID,
+ var tag: String? = null
+ ) : FormData
- val tag: String
- get() = text.text.toString()
- val valid: Boolean
- get() = account != null && uuid != null
+ companion object {
+ @JvmStatic
+ fun start(activity: Activity, data: Form) {
+ val intent = Intent(activity, TagDialog::class.java).apply {
+ putExtra(App.KEY_EDIT_DATA, data)
+ }
- fun load(data: Bundle?) {
- data ?: return
- account = data.getString(App.KEY_ACCOUNT)
- uuid = data.getSerializable(App.KEY_EDIT_UUID) as UUID
+ activity.startActivityForResult(intent, App.TAG_REQUEST)
}
- }
- companion object {
private class SaveTask(activity: TagDialog)
: StaticAsyncTask<TagDialog, String, Void, String?>(activity) {
override fun TagDialog.background(vararg params: String): String? {
- val accountController = controller.accountController(form.account)
- return accountController.taskAddTag(form.uuid!!, params[0])
+ val accountController = controller.accountController(data.account)
+ return accountController.taskAddTag(data.uuid, params[0])
}
override fun TagDialog.finish(result: String?) {
M app/src/main/java/kvj/taskw/ui/TaskActivity.kt => app/src/main/java/kvj/taskw/ui/TaskActivity.kt +4 -5
@@ 75,11 75,10 @@ class TaskActivity : AppActivity() {
}
add_tag.setOnClickListener {
- val intent = Intent(this, TagDialog::class.java).apply {
- putExtra(App.KEY_ACCOUNT, task.account.toString())
- putExtra(App.KEY_EDIT_UUID, task.uuid)
- }
- startActivityForResult(intent, App.TAG_REQUEST)
+ TagDialog.start(this, TagDialog.Form(
+ task.account.toString(),
+ task.uuid
+ ))
}
fun openEditor() {
M app/src/main/res/values/strings.xml => app/src/main/res/values/strings.xml +4 -0
@@ 93,6 93,7 @@
<!-- Form -->
<string name="form_discard_confirm">There are some changes, discard them?</string>
+ <string name="error_no_input">Input is mandatory</string>
<!-- Custom command dialog -->
<string name="command_prompt_hint">Arguments</string>
@@ 107,4 108,7 @@
<string name="annotation">Annotation</string>
<string name="add_annotation">Annotate</string>
<string name="no_annotations">No annotations</string>
+
+ <!-- Tag dialog -->
+ <string name="error_tag_whitespace">Tags must not contian whitespace</string>
</resources>