From 8a83a80e7548b39aac34eeb9aa5b2e2f91cc2601 Mon Sep 17 00:00:00 2001 From: johan12345 Date: Sun, 28 Apr 2024 18:29:10 +0200 Subject: [PATCH] Block ability to update filter profile name with nothing fixes #335 --- .../vonforst/evmap/fragment/FilterFragment.kt | 35 ++++++++----------- .../evmap/fragment/FilterProfilesFragment.kt | 16 ++++----- .../java/net/vonforst/evmap/ui/Dialogs.kt | 23 +++++++++--- 3 files changed, 39 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/net/vonforst/evmap/fragment/FilterFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/FilterFragment.kt index 1addb690..31d8a9aa 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/FilterFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/FilterFragment.kt @@ -1,7 +1,12 @@ package net.vonforst.evmap.fragment import android.os.Bundle -import android.view.* +import android.view.LayoutInflater +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import android.view.View +import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.core.view.MenuProvider import androidx.databinding.DataBindingUtil @@ -108,31 +113,19 @@ class FilterFragment : Fragment(), MenuProvider { } } - private fun saveProfile(error: Boolean = false) { - showEditTextDialog(requireContext()) { dialog, input -> + private fun saveProfile() { + showEditTextDialog(requireContext(), { dialog, input -> vm.filterProfile.value?.let { profile -> input.setText(profile.name) } - if (error) { - input.error = getString(R.string.required) - } - dialog.setTitle(R.string.save_as_profile) .setMessage(R.string.save_profile_enter_name) - .setPositiveButton(R.string.ok) { _, _ -> - if (input.text.isBlank()) { - saveProfile(true) - } else { - lifecycleScope.launch { - vm.saveAsProfile(input.text.toString()) - findNavController().popBackStack() - } - } - } - .setNegativeButton(R.string.cancel) { _, _ -> - - } - } + }, { + lifecycleScope.launch { + vm.saveAsProfile(it) + findNavController().popBackStack() + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/net/vonforst/evmap/fragment/FilterProfilesFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/FilterProfilesFragment.kt index 6e1faf73..0a225995 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/FilterProfilesFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/FilterProfilesFragment.kt @@ -183,20 +183,16 @@ class FilterProfilesFragment : Fragment() { adapter = FilterProfilesAdapter(touchHelper, onDelete = { fp -> delete(fp) }, onRename = { fp -> - showEditTextDialog(requireContext()) { dialog, input -> + showEditTextDialog(requireContext(), { dialog, input -> input.setText(fp.name) dialog.setTitle(R.string.rename) .setMessage(R.string.save_profile_enter_name) - .setPositiveButton(R.string.ok) { _, _ -> - lifecycleScope.launch { - vm.update(fp.copy(name = input.text.toString())) - } - } - .setNegativeButton(R.string.cancel) { _, _ -> - - } - } + }, { + lifecycleScope.launch { + vm.update(fp.copy(name = it)) + } + }) }) binding.filterProfilesList.apply { this.adapter = this@FilterProfilesFragment.adapter diff --git a/app/src/main/java/net/vonforst/evmap/ui/Dialogs.kt b/app/src/main/java/net/vonforst/evmap/ui/Dialogs.kt index dfe7c763..56d47e89 100644 --- a/app/src/main/java/net/vonforst/evmap/ui/Dialogs.kt +++ b/app/src/main/java/net/vonforst/evmap/ui/Dialogs.kt @@ -14,6 +14,7 @@ import android.widget.FrameLayout import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatDialogFragment import com.google.android.material.dialog.MaterialAlertDialogBuilder +import net.vonforst.evmap.R import kotlin.math.roundToInt private fun dialogEditText(ctx: Context): Pair { @@ -30,30 +31,44 @@ private fun dialogEditText(ctx: Context): Pair { fun showEditTextDialog( ctx: Context, - customize: (MaterialAlertDialogBuilder, EditText) -> Unit + customize: (MaterialAlertDialogBuilder, EditText) -> Unit, + okAction: (String) -> Unit ): AlertDialog { val (container, input) = dialogEditText(ctx) val dialogBuilder = MaterialAlertDialogBuilder(ctx) .setView(container) + .setPositiveButton(R.string.ok) { _, _ -> } + .setNegativeButton(R.string.cancel) { _, _ -> } customize(dialogBuilder, input) val dialog = dialogBuilder.show() dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) + val okButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE) + // focus and show keyboard input.requestFocus() input.setOnEditorActionListener { _, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_DONE) { val text = input.text - val button = dialog.getButton(DialogInterface.BUTTON_POSITIVE) - if (text != null && button != null) { - button.performClick() + if (text != null && okButton != null) { + okButton.performClick() return@setOnEditorActionListener true } } false } + + okButton?.setOnClickListener { + if (input.text.isBlank()) { + input.error = ctx.getString(R.string.required) + } else { + okAction(input.text.toString()) + dialog.dismiss() + } + } + return dialog }