From b1ef3b33454820573b99948581cfa809d3cdb97a Mon Sep 17 00:00:00 2001 From: Xevion Date: Sat, 11 Dec 2021 06:09:40 -0600 Subject: [PATCH] Add double-tap to edit task functionality via custom AlertDialog --- .../simpleto_do/EditTaskDialogFragment.kt | 43 +++++++++++++++++++ .../com/embers/simpleto_do/MainActivity.kt | 18 ++++++++ app/src/main/res/values/strings.xml | 3 ++ 3 files changed, 64 insertions(+) create mode 100644 app/src/main/java/com/embers/simpleto_do/EditTaskDialogFragment.kt diff --git a/app/src/main/java/com/embers/simpleto_do/EditTaskDialogFragment.kt b/app/src/main/java/com/embers/simpleto_do/EditTaskDialogFragment.kt new file mode 100644 index 0000000..8619630 --- /dev/null +++ b/app/src/main/java/com/embers/simpleto_do/EditTaskDialogFragment.kt @@ -0,0 +1,43 @@ +package com.embers.simpleto_do + +import android.app.AlertDialog +import android.app.Dialog +import android.content.DialogInterface +import android.os.Bundle +import android.text.InputType +import android.util.Log +import android.widget.EditText +import androidx.fragment.app.DialogFragment +import java.lang.IllegalStateException + +class EditTaskDialogFragment(private val dismissListener: OnDismissListener) : DialogFragment() { + private val TAG: String = this::class.java.name + + interface OnDismissListener { + fun onDismiss(text: String, submitted: Boolean) + } + + private var text: String = "" + private var submitted: Boolean = false + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + return activity?.let { + val input = EditText(it) + input.inputType = InputType.TYPE_CLASS_TEXT + + val builder = AlertDialog.Builder(it) + builder.setMessage(R.string.dialog_edit_task) + .setView(input) + .setNegativeButton(R.string.dialog_negative) {_, _ ->} + .setPositiveButton(R.string.dialog_positive) {_, _ -> text = input.text.toString(); submitted = true} + + builder.create() + } ?: throw IllegalStateException("Activity cannot be null") + } + + override fun onDismiss(dialog: DialogInterface) { + super.onDismiss(dialog) + + dismissListener.onDismiss(text, submitted) + } +} diff --git a/app/src/main/java/com/embers/simpleto_do/MainActivity.kt b/app/src/main/java/com/embers/simpleto_do/MainActivity.kt index 875baf1..683a8ba 100644 --- a/app/src/main/java/com/embers/simpleto_do/MainActivity.kt +++ b/app/src/main/java/com/embers/simpleto_do/MainActivity.kt @@ -73,6 +73,24 @@ class MainActivity : AppCompatActivity() { adapter.notifyItemRemoved(position) saveData() } + + override fun onDoubleClick(position: Int) { + // When double clicked and 'submit' is hit in the dialog, the text entered will be + val dismissListener = object : EditTaskDialogFragment.OnDismissListener { + override fun onDismiss(text: String, submitted: Boolean) { + // If the dialog was submitted + if (submitted) { + // Update data, inform adapter, save to file + taskList[position] = text + adapter.notifyItemChanged(position) + saveData() + } + } + } + + val editTaskDialog = EditTaskDialogFragment(dismissListener) + editTaskDialog.show(supportFragmentManager, "edit_task") + } } // Setup RecyclerView diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 95f0988..7bd0906 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,4 +2,7 @@ Simple To-do Add Name of new To-do list item + Edit the name of this to-do task + SUBMIT + CANCEL \ No newline at end of file