From 84ab8d051765bb66da282034c817edcdc09d5804 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 24 Sep 2023 11:08:30 -0500 Subject: [PATCH] Remove MainActivity.onBackPressed --- .../todoroo/astrid/activity/MainActivity.kt | 17 ----------------- .../astrid/activity/TaskEditFragment.kt | 13 ++++++++++++- .../astrid/activity/TaskListFragment.kt | 19 ++++++++++++++----- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt index 1776b9462..ac35d091f 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt @@ -393,23 +393,6 @@ class MainActivity : AppCompatActivity(), TaskListFragmentCallbackHandler, Timer newNavigationDrawer(filter).show(supportFragmentManager, FRAG_TAG_NAV_DRAWER) } - override fun onBackPressed() { - taskEditFragment?.let { - if (preferences.backButtonSavesTask()) { - lifecycleScope.launch { - it.save() - } - } else { - it.discardButtonClick() - } - return@onBackPressed - } - if (taskListFragment?.collapseSearchView() == true) { - return - } - finish() - } - private val taskListFragment: TaskListFragment? get() = supportFragmentManager.findFragmentByTag(FRAG_TAG_TASK_LIST) as TaskListFragment? diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt index d8e1947a3..2aebb68ab 100755 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt @@ -17,6 +17,7 @@ import android.view.View import android.view.ViewGroup import android.view.inputmethod.EditorInfo import android.view.inputmethod.InputMethodManager +import androidx.activity.addCallback import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.widget.Toolbar @@ -141,6 +142,16 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + requireActivity().onBackPressedDispatcher.addCallback(owner = viewLifecycleOwner) { + if (preferences.backButtonSavesTask()) { + lifecycleScope.launch { + save() + } + } else { + discardButtonClick() + } + } + binding = FragmentTaskEditBinding.inflate(inflater) val view: View = binding.root val model = editViewModel.task @@ -385,7 +396,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener { suspend fun save(remove: Boolean = true) = editViewModel.save(remove) - fun discardButtonClick() { + private fun discardButtonClick() { if (editViewModel.hasChanges()) { dialogBuilder .newDialog(R.string.discard_confirmation) diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt index 5c928425f..3da0cd943 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -18,6 +18,7 @@ import android.view.Menu import android.view.MenuItem import android.view.View import android.view.ViewGroup +import androidx.activity.OnBackPressedCallback import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.ActionMode @@ -172,6 +173,11 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL lateinit var themeColor: ThemeColor private lateinit var callbacks: TaskListFragmentCallbackHandler private lateinit var binding: FragmentTaskListBinding + private val onBackPressed = object : OnBackPressedCallback(false) { + override fun handleOnBackPressed() { + search.collapseActionView() + } + } private fun process(event: TaskListEvent) = when (event) { is TaskListEvent.TaskCreated -> @@ -229,6 +235,12 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL .launchIn(viewLifecycleOwner.lifecycleScope) } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + requireActivity().onBackPressedDispatcher.addCallback(onBackPressed) + } + @OptIn(ExperimentalAnimationApi::class) override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { @@ -571,11 +583,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL localBroadcastManager.unregisterReceiver(refreshReceiver) } - fun collapseSearchView(): Boolean { - return (search.isActionViewExpanded - && (search.collapseActionView() || !search.isActionViewExpanded)) - } - private fun refresh() { setSyncOngoing() } @@ -658,6 +665,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL } override fun onMenuItemActionExpand(item: MenuItem): Boolean { + onBackPressed.isEnabled = true search.setOnQueryTextListener(this) if (searchQuery == null) { searchByQuery("") @@ -669,6 +677,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL } override fun onMenuItemActionCollapse(item: MenuItem): Boolean { + onBackPressed.isEnabled = false search.setOnQueryTextListener(null) listViewModel.setFilter(filter) searchJob?.cancel()