Refactored onBackPressed method with updated API

This commit introduces changes to refactor the usage of the deprecated `onBackPressed` method. The `onBackPressedDispatcher` API is now used instead.

Here's a summary of the changes made:
- Updated `AddNoteDialog.kt` and `NavigationHistoryDialog.kt` to handle the back button press on the navigation bar using the `onBackPressedDispatcher`.
- Modified `CoreMainActivity.kt` to handle all back button press operations in the application using the `onBackPressedDispatcher`.
- Updated `HelpFragment.kt` and `PageFragment.kt` to handle the back button press when the user clicks on the back arrow button in the toolbar.
- Refactored the `onBackPressed` method in `SaveLanguagesAndFinish.kt` to use the updated API, and updated the corresponding test cases accordingly.

These changes ensure that the `onBackPressed` functionality is updated to use the latest API, improving the readability and maintainability of the codebase.
This commit is contained in:
MohitMaliFtechiz 2023-06-06 18:12:38 +05:30 committed by Kelson
parent 7c1978a4f6
commit 529bd1bde1
7 changed files with 37 additions and 14 deletions

View File

@ -37,7 +37,7 @@ data class SaveLanguagesAndFinish(
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
activity.onBackPressed()
activity.onBackPressedDispatcher.onBackPressed()
}, Throwable::printStackTrace)
}
}

View File

@ -18,7 +18,9 @@
package org.kiwix.kiwixmobile.language.viewmodel
import androidx.activity.OnBackPressedDispatcher
import androidx.appcompat.app.AppCompatActivity
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import io.reactivex.schedulers.Schedulers
@ -35,11 +37,14 @@ class SaveLanguagesAndFinishTest {
setScheduler(Schedulers.trampoline())
val languageDao = mockk<NewLanguagesDao>()
val activity = mockk<AppCompatActivity>()
val onBackPressedDispatcher = mockk<OnBackPressedDispatcher>()
every { activity.onBackPressedDispatcher } returns onBackPressedDispatcher
every { onBackPressedDispatcher.onBackPressed() } answers { }
val languages = listOf<Language>()
SaveLanguagesAndFinish(languages, languageDao).invokeWith(activity)
verify {
languageDao.insert(languages)
activity.onBackPressed()
onBackPressedDispatcher.onBackPressed()
}
resetSchedulers()
}

View File

@ -64,7 +64,7 @@ abstract class HelpFragment : BaseFragment() {
val toolbar: Toolbar? = fragmentHelpBinding?.root?.findViewById(R.id.toolbar)
toolbar?.apply {
activity.setSupportActionBar(this)
setNavigationOnClickListener { requireActivity().onBackPressed() }
setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
}
activity.supportActionBar?.let {
it.setDisplayHomeAsUpEnabled(true)

View File

@ -33,6 +33,7 @@ import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
@ -181,14 +182,21 @@ class AddNoteDialog : DialogFragment() {
private fun getTextAfterLastSlashWithoutExtension(path: String): String =
path.substringAfterLast('/', "").substringBeforeLast('.')
// Override onBackPressed() to respond to user pressing 'Back' button on navigation bar
// Add onBackPressedCallBack to respond to user pressing 'Back' button on navigation bar
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return object : Dialog(requireContext(), theme) {
override fun onBackPressed() {
val dialog = Dialog(requireContext(), theme)
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner, onBackPressedCallBack
)
return dialog
}
private val onBackPressedCallBack =
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
exitAddNoteDialog()
}
}
}
private fun exitAddNoteDialog() {
if (noteEdited) {
@ -465,6 +473,7 @@ class AddNoteDialog : DialogFragment() {
super.onDestroyView()
mainRepositoryActions.dispose()
dialogNoteAddNoteBinding = null
onBackPressedCallBack.remove()
}
override fun onStart() {

View File

@ -229,7 +229,7 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider {
return
}
if (activeFragments().filterIsInstance<FragmentActivityExtensions>().isEmpty()) {
return super.onBackPressed()
return super.getOnBackPressedDispatcher().onBackPressed()
}
activeFragments().filterIsInstance<FragmentActivityExtensions>().forEach {
if (it.onBackPressed(this) == FragmentActivityExtensions.Super.ShouldCall) {
@ -240,7 +240,7 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider {
drawerToggle = null
finish()
} else {
super.onBackPressed()
super.getOnBackPressedDispatcher().onBackPressed()
}
}
}

View File

@ -138,7 +138,7 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv
val toolbar = fragmentPageBinding?.root?.findViewById<Toolbar>(R.id.toolbar)
toolbar?.apply {
activity.setSupportActionBar(this)
setNavigationOnClickListener { requireActivity().onBackPressed() }
setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
}
activity.supportActionBar?.apply {
setDisplayHomeAsUpEnabled(true)

View File

@ -23,6 +23,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.DialogFragment
import androidx.recyclerview.widget.LinearLayoutManager
@ -128,14 +129,21 @@ class NavigationHistoryDialog(
navigationHistoryClickListener.clearHistory()
}
// Override onBackPressed() to respond to user pressing 'Back' button on navigation bar
// Add onBackPressedCallBack to respond to user pressing 'Back' button on navigation bar
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return object : Dialog(requireContext(), theme) {
override fun onBackPressed() {
val dialog = Dialog(requireContext(), theme)
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner, onBackPressedCallBack
)
return dialog
}
private val onBackPressedCallBack =
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
dismissNavigationHistoryDialog()
}
}
}
private fun dismissNavigationHistoryDialog() {
dialog?.dismiss()
@ -145,6 +153,7 @@ class NavigationHistoryDialog(
super.onDestroyView()
navigationHistoryAdapter = null
dialogNavigationHistoryBinding = null
onBackPressedCallBack.remove()
}
private fun onItemClick(item: NavigationHistoryListItem) {