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 42b403983..78305e9d6 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -249,8 +249,8 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - - requireActivity().onBackPressedDispatcher.addCallback(onBackPressed) + + requireActivity().onBackPressedDispatcher.addCallback(requireActivity(), onBackPressed) } @OptIn(ExperimentalAnimationApi::class) diff --git a/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.kt b/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.kt index 84f4e2246..ce5fae951 100644 --- a/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.kt @@ -18,6 +18,7 @@ import org.tasks.dialogs.ColorWheelPicker import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.IconPickerDialog import org.tasks.dialogs.IconPickerDialog.IconPickerCallback +import org.tasks.extensions.addBackPressedCallback import org.tasks.injection.ThemedInjectingAppCompatActivity import org.tasks.themes.ColorProvider import org.tasks.themes.CustomIcons.getIconResId @@ -63,6 +64,10 @@ abstract class BaseListSettingsActivity : ThemedInjectingAppCompatActivity(), Ic toolbar.inflateMenu(R.menu.menu_tag_settings) } toolbar.setOnMenuItemClickListener(this) + + addBackPressedCallback { + discard() + } } override fun onSaveInstanceState(outState: Bundle) { @@ -71,11 +76,6 @@ abstract class BaseListSettingsActivity : ThemedInjectingAppCompatActivity(), Ic outState.putInt(EXTRA_SELECTED_ICON, selectedIcon) } - override fun onBackPressed() { - super.onBackPressed() - discard() - } - protected abstract fun hasChanges(): Boolean protected abstract suspend fun save() protected abstract val isNew: Boolean diff --git a/app/src/main/java/org/tasks/caldav/BaseCaldavAccountSettingsActivity.kt b/app/src/main/java/org/tasks/caldav/BaseCaldavAccountSettingsActivity.kt index ffbbc9d56..7af1d5afa 100644 --- a/app/src/main/java/org/tasks/caldav/BaseCaldavAccountSettingsActivity.kt +++ b/app/src/main/java/org/tasks/caldav/BaseCaldavAccountSettingsActivity.kt @@ -44,6 +44,7 @@ import org.tasks.dialogs.Linkify import org.tasks.extensions.Context.cookiePersistor import org.tasks.extensions.Context.hideKeyboard import org.tasks.extensions.Context.openUri +import org.tasks.extensions.addBackPressedCallback import org.tasks.injection.ThemedInjectingAppCompatActivity import org.tasks.security.KeyStoreEncryption import org.tasks.ui.DisplayableException @@ -145,6 +146,10 @@ abstract class BaseCaldavAccountSettingsActivity : ThemedInjectingAppCompatActiv } } } + + addBackPressedCallback { + discard() + } } @get:StringRes @@ -333,11 +338,6 @@ abstract class BaseCaldavAccountSettingsActivity : ThemedInjectingAppCompatActiv } } - override fun onBackPressed() { - super.onBackPressed() - discard() - } - private fun removeAccountPrompt() { if (requestInProgress()) { return diff --git a/app/src/main/java/org/tasks/extensions/ActivityExtensions.kt b/app/src/main/java/org/tasks/extensions/ActivityExtensions.kt index d317dd000..4475f8df9 100644 --- a/app/src/main/java/org/tasks/extensions/ActivityExtensions.kt +++ b/app/src/main/java/org/tasks/extensions/ActivityExtensions.kt @@ -1,10 +1,23 @@ package org.tasks.extensions import android.app.Activity +import androidx.activity.ComponentActivity +import androidx.activity.OnBackPressedCallback import org.tasks.extensions.Context.hideKeyboard fun Activity.hideKeyboard() { currentFocus?.let { hideKeyboard(it) } +} + +fun ComponentActivity.addBackPressedCallback(block: () -> Unit) { + onBackPressedDispatcher.addCallback( + this, + object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + block() + } + } + ) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/locale/ui/activity/TaskerCreateTaskActivity.java b/app/src/main/java/org/tasks/locale/ui/activity/TaskerCreateTaskActivity.java index e71fdcc13..425db5989 100755 --- a/app/src/main/java/org/tasks/locale/ui/activity/TaskerCreateTaskActivity.java +++ b/app/src/main/java/org/tasks/locale/ui/activity/TaskerCreateTaskActivity.java @@ -1,5 +1,6 @@ package org.tasks.locale.ui.activity; +import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; import android.view.MenuItem; @@ -105,9 +106,9 @@ public final class TaskerCreateTaskActivity extends AbstractFragmentPluginAppCom return binding.title.getText().toString().trim(); } + @SuppressLint("MissingSuperCall") @Override public void onBackPressed() { - super.onBackPressed(); discardButtonClick(); } diff --git a/app/src/main/java/org/tasks/tags/TagPickerActivity.kt b/app/src/main/java/org/tasks/tags/TagPickerActivity.kt index e101c3029..38890da9e 100644 --- a/app/src/main/java/org/tasks/tags/TagPickerActivity.kt +++ b/app/src/main/java/org/tasks/tags/TagPickerActivity.kt @@ -16,10 +16,10 @@ import org.tasks.Strings.isNullOrEmpty import org.tasks.billing.Inventory import org.tasks.data.TagData import org.tasks.databinding.ActivityTagPickerBinding +import org.tasks.extensions.addBackPressedCallback import org.tasks.injection.ThemedInjectingAppCompatActivity import org.tasks.themes.ColorProvider import org.tasks.themes.Theme -import java.util.* import javax.inject.Inject @AndroidEntryPoint @@ -65,6 +65,22 @@ class TagPickerActivity : ThemedInjectingAppCompatActivity() { recyclerView.layoutManager = LinearLayoutManager(this) viewModel.observe(this) { recyclerAdapter.submitList(it) } editText.setText(viewModel.text) + + addBackPressedCallback { + if (isNullOrEmpty(viewModel.text)) { + val data = Intent() + data.putExtra(EXTRA_TASKS, taskIds) + data.putParcelableArrayListExtra( + EXTRA_PARTIALLY_SELECTED, + viewModel.getPartiallySelected() + ) + data.putParcelableArrayListExtra(EXTRA_SELECTED, viewModel.getSelected()) + setResult(Activity.RESULT_OK, data) + finish() + } else { + clear() + } + } } private fun onToggle(tagData: TagData, vh: TagPickerViewHolder) = lifecycleScope.launch { @@ -80,20 +96,6 @@ class TagPickerActivity : ThemedInjectingAppCompatActivity() { viewModel.search(text?.toString() ?: "") } - override fun onBackPressed() { - super.onBackPressed() - if (isNullOrEmpty(viewModel.text)) { - val data = Intent() - data.putExtra(EXTRA_TASKS, taskIds) - data.putParcelableArrayListExtra(EXTRA_PARTIALLY_SELECTED, viewModel.getPartiallySelected()) - data.putParcelableArrayListExtra(EXTRA_SELECTED, viewModel.getSelected()) - setResult(Activity.RESULT_OK, data) - finish() - } else { - clear() - } - } - private fun clear() { editText.setText("") }