@@ -18,12 +18,12 @@ package com.ichi2.anki.dialogs
1818
1919import android.app.Dialog
2020import android.os.Bundle
21- import android.view.MenuItem
2221import android.view.View
2322import android.view.ViewGroup
2423import android.widget.CheckBox
2524import android.widget.ImageButton
2625import androidx.activity.OnBackPressedCallback
26+ import androidx.appcompat.app.AlertDialog
2727import androidx.core.os.bundleOf
2828import androidx.core.widget.doOnTextChanged
2929import androidx.fragment.app.DialogFragment
@@ -39,6 +39,9 @@ import com.ichi2.anki.dialogs.EditDeckDescriptionDialogViewModel.DismissType
3939import com.ichi2.anki.libanki.DeckId
4040import com.ichi2.anki.snackbar.showSnackbar
4141import com.ichi2.utils.AndroidUiUtils.setFocusAndOpenKeyboard
42+ import com.ichi2.utils.create
43+ import com.ichi2.utils.negativeButton
44+ import com.ichi2.utils.positiveButton
4245import com.ichi2.utils.show
4346import kotlinx.coroutines.flow.filterNotNull
4447import kotlinx.coroutines.launch
@@ -52,6 +55,7 @@ import timber.log.Timber
5255class EditDeckDescriptionDialog : DialogFragment () {
5356 private val viewModel: EditDeckDescriptionDialogViewModel by viewModels()
5457
58+ private lateinit var alertDialog: AlertDialog
5559 private lateinit var dialogView: View
5660
5761 private val deckDescriptionInput: TextInputEditText
@@ -63,9 +67,6 @@ class EditDeckDescriptionDialog : DialogFragment() {
6367 private val toolbar: MaterialToolbar
6468 get() = dialogView.findViewById(R .id.topAppBar)
6569
66- private val saveMenuItem: MenuItem
67- get() = toolbar.menu.findItem(R .id.action_save)
68-
6970 private val onUnsavedChangesBackCallback =
7071 object : OnBackPressedCallback (enabled = false ) {
7172 override fun handleOnBackPressed () {
@@ -76,13 +77,21 @@ class EditDeckDescriptionDialog : DialogFragment() {
7677 override fun onCreateDialog (savedInstanceState : Bundle ? ): Dialog {
7778 this .dialogView = layoutInflater.inflate(R .layout.dialog_deck_description, null )
7879 return MaterialAlertDialogBuilder (requireContext())
79- .show {
80+ .create {
8081 setView(dialogView)
82+ positiveButton(R .string.save)
83+ negativeButton(R .string.close)
8184 }.apply {
82- setupDialogView(dialogView)
85+ alertDialog = this
86+ setOnShowListener {
87+ positiveButton.setOnClickListener { viewModel.saveAndExit() }
88+ negativeButton.setOnClickListener { viewModel.onBackRequested() }
89+ }
8390 setCanceledOnTouchOutside(false )
8491 setCancelable(false )
8592 onBackPressedDispatcher.addCallback(this , onUnsavedChangesBackCallback)
93+ show()
94+ setupDialogView(dialogView)
8695 }
8796 }
8897
@@ -111,23 +120,6 @@ class EditDeckDescriptionDialog : DialogFragment() {
111120 }
112121 }
113122
114- // setup App Bar
115- toolbar.apply {
116- setNavigationOnClickListener {
117- viewModel.onBackRequested()
118- }
119-
120- setOnMenuItemClickListener { menuItem ->
121- when (menuItem.itemId) {
122- R .id.action_save -> {
123- viewModel.saveAndExit()
124- true
125- }
126- else -> false
127- }
128- }
129- }
130-
131123 setupFlows()
132124 }
133125
@@ -175,7 +167,7 @@ class EditDeckDescriptionDialog : DialogFragment() {
175167
176168 lifecycleScope.launch {
177169 viewModel.flowOfHasChanges.collect {
178- saveMenuItem .isEnabled = it
170+ alertDialog.positiveButton .isEnabled = it
179171 onUnsavedChangesBackCallback.isEnabled = it
180172 }
181173 }
0 commit comments