From 96df39eeadb8b0d06a6cdbb98c56e53890aa4426 Mon Sep 17 00:00:00 2001 From: Jonas L Date: Mon, 14 Jan 2019 13:43:39 +0100 Subject: [PATCH] Move category deletion to dialog --- .../settings/CategorySettingsFragment.kt | 11 ++- .../settings/DeleteCategoryDialogFragment.kt | 73 +++++++++++++++++++ .../ui/util/ConfirmDeleteDialogFragment.kt | 26 +++++++ .../main/res/layout/confirm_delete_dialog.xml | 38 ++++++++++ .../res/layout/fragment_category_settings.xml | 7 -- .../values-de/strings-category-settings.xml | 3 +- .../res/values/strings-category-settings.xml | 3 +- 7 files changed, 146 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/io/timelimit/android/ui/manage/category/settings/DeleteCategoryDialogFragment.kt create mode 100644 app/src/main/java/io/timelimit/android/ui/util/ConfirmDeleteDialogFragment.kt create mode 100644 app/src/main/res/layout/confirm_delete_dialog.xml diff --git a/app/src/main/java/io/timelimit/android/ui/manage/category/settings/CategorySettingsFragment.kt b/app/src/main/java/io/timelimit/android/ui/manage/category/settings/CategorySettingsFragment.kt index 12ee2c3..d3d9d4f 100644 --- a/app/src/main/java/io/timelimit/android/ui/manage/category/settings/CategorySettingsFragment.kt +++ b/app/src/main/java/io/timelimit/android/ui/manage/category/settings/CategorySettingsFragment.kt @@ -66,8 +66,7 @@ class CategorySettingsFragment : Fragment() { } }) - checkbox_delete_category.setOnCheckedChangeListener { _, isChecked -> btn_delete_category.isEnabled = isChecked } - btn_delete_category.setOnClickListener { doDeleteCategory() } + btn_delete_category.setOnClickListener { deleteCategory() } edit_category_title_go.setOnClickListener { doRenameCategory() } edit_category_title.setOnEditorActionListener { _, actionId, _ -> @@ -126,9 +125,9 @@ class CategorySettingsFragment : Fragment() { } } - private fun doDeleteCategory() { - auth.tryDispatchParentAction(DeleteCategoryAction( - categoryId = params.categoryId - )) + private fun deleteCategory() { + if (auth.requestAuthenticationOrReturnTrue()) { + DeleteCategoryDialogFragment.newInstance(params).show(fragmentManager!!) + } } } diff --git a/app/src/main/java/io/timelimit/android/ui/manage/category/settings/DeleteCategoryDialogFragment.kt b/app/src/main/java/io/timelimit/android/ui/manage/category/settings/DeleteCategoryDialogFragment.kt new file mode 100644 index 0000000..88f3511 --- /dev/null +++ b/app/src/main/java/io/timelimit/android/ui/manage/category/settings/DeleteCategoryDialogFragment.kt @@ -0,0 +1,73 @@ +package io.timelimit.android.ui.manage.category.settings + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.FragmentManager +import androidx.lifecycle.LiveData +import androidx.lifecycle.Observer +import io.timelimit.android.R +import io.timelimit.android.data.model.Category +import io.timelimit.android.data.model.UserType +import io.timelimit.android.extensions.showSafe +import io.timelimit.android.logic.AppLogic +import io.timelimit.android.logic.DefaultAppLogic +import io.timelimit.android.sync.actions.DeleteCategoryAction +import io.timelimit.android.ui.main.ActivityViewModel +import io.timelimit.android.ui.main.getActivityViewModel +import io.timelimit.android.ui.manage.category.ManageCategoryFragmentArgs +import io.timelimit.android.ui.util.ConfirmDeleteDialogFragment + +class DeleteCategoryDialogFragment: ConfirmDeleteDialogFragment() { + companion object { + private const val TAG = "DeleteCategoryDialogFragment" + + fun newInstance(args: ManageCategoryFragmentArgs) = DeleteCategoryDialogFragment().apply { + arguments = args.toBundle() + } + } + + private val params: ManageCategoryFragmentArgs by lazy { ManageCategoryFragmentArgs.fromBundle(arguments!!) } + private val appLogic: AppLogic by lazy { DefaultAppLogic.with(context!!) } + private val auth: ActivityViewModel by lazy { getActivityViewModel(activity!!) } + + val categoryEntry: LiveData by lazy { + appLogic.database.category().getCategoryByChildIdAndId( + categoryId = params.categoryId, + childId = params.childId + ) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + auth.authenticatedUser.observe(this, Observer { + if (it?.second?.type != UserType.Parent) { + dismissAllowingStateLoss() + } + }) + + categoryEntry.observe(this, Observer { + if (it == null) { + dismissAllowingStateLoss() + } + }) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + categoryEntry.observe(this, Observer { + binding.text = getString(R.string.category_settings_delete_dialog, it?.title) + }) + } + + override fun onConfirmDeletion() { + auth.tryDispatchParentAction(DeleteCategoryAction( + categoryId = params.categoryId + )) + + dismiss() + } + + fun show(fragmentManager: FragmentManager) = showSafe(fragmentManager, TAG) +} diff --git a/app/src/main/java/io/timelimit/android/ui/util/ConfirmDeleteDialogFragment.kt b/app/src/main/java/io/timelimit/android/ui/util/ConfirmDeleteDialogFragment.kt new file mode 100644 index 0000000..a9c4e7f --- /dev/null +++ b/app/src/main/java/io/timelimit/android/ui/util/ConfirmDeleteDialogFragment.kt @@ -0,0 +1,26 @@ +package io.timelimit.android.ui.util + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import io.timelimit.android.databinding.ConfirmDeleteDialogBinding + +abstract class ConfirmDeleteDialogFragment: BottomSheetDialogFragment(), ConfirmDeleteDialogFragmentHandlers { + lateinit var binding: ConfirmDeleteDialogBinding + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + binding = ConfirmDeleteDialogBinding.inflate(inflater, container, false) + + binding.handlers = this + + return binding.root + } + + abstract override fun onConfirmDeletion() +} + +interface ConfirmDeleteDialogFragmentHandlers { + fun onConfirmDeletion() +} diff --git a/app/src/main/res/layout/confirm_delete_dialog.xml b/app/src/main/res/layout/confirm_delete_dialog.xml new file mode 100644 index 0000000..cadc349 --- /dev/null +++ b/app/src/main/res/layout/confirm_delete_dialog.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + +