mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-22 12:03:09 -04:00
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:
parent
7c1978a4f6
commit
529bd1bde1
@ -37,7 +37,7 @@ data class SaveLanguagesAndFinish(
|
|||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe({
|
.subscribe({
|
||||||
activity.onBackPressed()
|
activity.onBackPressedDispatcher.onBackPressed()
|
||||||
}, Throwable::printStackTrace)
|
}, Throwable::printStackTrace)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,9 @@
|
|||||||
|
|
||||||
package org.kiwix.kiwixmobile.language.viewmodel
|
package org.kiwix.kiwixmobile.language.viewmodel
|
||||||
|
|
||||||
|
import androidx.activity.OnBackPressedDispatcher
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import io.mockk.every
|
||||||
import io.mockk.mockk
|
import io.mockk.mockk
|
||||||
import io.mockk.verify
|
import io.mockk.verify
|
||||||
import io.reactivex.schedulers.Schedulers
|
import io.reactivex.schedulers.Schedulers
|
||||||
@ -35,11 +37,14 @@ class SaveLanguagesAndFinishTest {
|
|||||||
setScheduler(Schedulers.trampoline())
|
setScheduler(Schedulers.trampoline())
|
||||||
val languageDao = mockk<NewLanguagesDao>()
|
val languageDao = mockk<NewLanguagesDao>()
|
||||||
val activity = mockk<AppCompatActivity>()
|
val activity = mockk<AppCompatActivity>()
|
||||||
|
val onBackPressedDispatcher = mockk<OnBackPressedDispatcher>()
|
||||||
|
every { activity.onBackPressedDispatcher } returns onBackPressedDispatcher
|
||||||
|
every { onBackPressedDispatcher.onBackPressed() } answers { }
|
||||||
val languages = listOf<Language>()
|
val languages = listOf<Language>()
|
||||||
SaveLanguagesAndFinish(languages, languageDao).invokeWith(activity)
|
SaveLanguagesAndFinish(languages, languageDao).invokeWith(activity)
|
||||||
verify {
|
verify {
|
||||||
languageDao.insert(languages)
|
languageDao.insert(languages)
|
||||||
activity.onBackPressed()
|
onBackPressedDispatcher.onBackPressed()
|
||||||
}
|
}
|
||||||
resetSchedulers()
|
resetSchedulers()
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ abstract class HelpFragment : BaseFragment() {
|
|||||||
val toolbar: Toolbar? = fragmentHelpBinding?.root?.findViewById(R.id.toolbar)
|
val toolbar: Toolbar? = fragmentHelpBinding?.root?.findViewById(R.id.toolbar)
|
||||||
toolbar?.apply {
|
toolbar?.apply {
|
||||||
activity.setSupportActionBar(this)
|
activity.setSupportActionBar(this)
|
||||||
setNavigationOnClickListener { requireActivity().onBackPressed() }
|
setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
|
||||||
}
|
}
|
||||||
activity.supportActionBar?.let {
|
activity.supportActionBar?.let {
|
||||||
it.setDisplayHomeAsUpEnabled(true)
|
it.setDisplayHomeAsUpEnabled(true)
|
||||||
|
@ -33,6 +33,7 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.inputmethod.InputMethodManager
|
import android.view.inputmethod.InputMethodManager
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
@ -181,14 +182,21 @@ class AddNoteDialog : DialogFragment() {
|
|||||||
private fun getTextAfterLastSlashWithoutExtension(path: String): String =
|
private fun getTextAfterLastSlashWithoutExtension(path: String): String =
|
||||||
path.substringAfterLast('/', "").substringBeforeLast('.')
|
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 {
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
return object : Dialog(requireContext(), theme) {
|
val dialog = Dialog(requireContext(), theme)
|
||||||
override fun onBackPressed() {
|
requireActivity().onBackPressedDispatcher.addCallback(
|
||||||
|
viewLifecycleOwner, onBackPressedCallBack
|
||||||
|
)
|
||||||
|
return dialog
|
||||||
|
}
|
||||||
|
|
||||||
|
private val onBackPressedCallBack =
|
||||||
|
object : OnBackPressedCallback(true) {
|
||||||
|
override fun handleOnBackPressed() {
|
||||||
exitAddNoteDialog()
|
exitAddNoteDialog()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun exitAddNoteDialog() {
|
private fun exitAddNoteDialog() {
|
||||||
if (noteEdited) {
|
if (noteEdited) {
|
||||||
@ -465,6 +473,7 @@ class AddNoteDialog : DialogFragment() {
|
|||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
mainRepositoryActions.dispose()
|
mainRepositoryActions.dispose()
|
||||||
dialogNoteAddNoteBinding = null
|
dialogNoteAddNoteBinding = null
|
||||||
|
onBackPressedCallBack.remove()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
|
@ -229,7 +229,7 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (activeFragments().filterIsInstance<FragmentActivityExtensions>().isEmpty()) {
|
if (activeFragments().filterIsInstance<FragmentActivityExtensions>().isEmpty()) {
|
||||||
return super.onBackPressed()
|
return super.getOnBackPressedDispatcher().onBackPressed()
|
||||||
}
|
}
|
||||||
activeFragments().filterIsInstance<FragmentActivityExtensions>().forEach {
|
activeFragments().filterIsInstance<FragmentActivityExtensions>().forEach {
|
||||||
if (it.onBackPressed(this) == FragmentActivityExtensions.Super.ShouldCall) {
|
if (it.onBackPressed(this) == FragmentActivityExtensions.Super.ShouldCall) {
|
||||||
@ -240,7 +240,7 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider {
|
|||||||
drawerToggle = null
|
drawerToggle = null
|
||||||
finish()
|
finish()
|
||||||
} else {
|
} else {
|
||||||
super.onBackPressed()
|
super.getOnBackPressedDispatcher().onBackPressed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -138,7 +138,7 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv
|
|||||||
val toolbar = fragmentPageBinding?.root?.findViewById<Toolbar>(R.id.toolbar)
|
val toolbar = fragmentPageBinding?.root?.findViewById<Toolbar>(R.id.toolbar)
|
||||||
toolbar?.apply {
|
toolbar?.apply {
|
||||||
activity.setSupportActionBar(this)
|
activity.setSupportActionBar(this)
|
||||||
setNavigationOnClickListener { requireActivity().onBackPressed() }
|
setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
|
||||||
}
|
}
|
||||||
activity.supportActionBar?.apply {
|
activity.supportActionBar?.apply {
|
||||||
setDisplayHomeAsUpEnabled(true)
|
setDisplayHomeAsUpEnabled(true)
|
||||||
|
@ -23,6 +23,7 @@ import android.os.Bundle
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
@ -128,14 +129,21 @@ class NavigationHistoryDialog(
|
|||||||
navigationHistoryClickListener.clearHistory()
|
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 {
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
return object : Dialog(requireContext(), theme) {
|
val dialog = Dialog(requireContext(), theme)
|
||||||
override fun onBackPressed() {
|
requireActivity().onBackPressedDispatcher.addCallback(
|
||||||
|
viewLifecycleOwner, onBackPressedCallBack
|
||||||
|
)
|
||||||
|
return dialog
|
||||||
|
}
|
||||||
|
|
||||||
|
private val onBackPressedCallBack =
|
||||||
|
object : OnBackPressedCallback(true) {
|
||||||
|
override fun handleOnBackPressed() {
|
||||||
dismissNavigationHistoryDialog()
|
dismissNavigationHistoryDialog()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun dismissNavigationHistoryDialog() {
|
private fun dismissNavigationHistoryDialog() {
|
||||||
dialog?.dismiss()
|
dialog?.dismiss()
|
||||||
@ -145,6 +153,7 @@ class NavigationHistoryDialog(
|
|||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
navigationHistoryAdapter = null
|
navigationHistoryAdapter = null
|
||||||
dialogNavigationHistoryBinding = null
|
dialogNavigationHistoryBinding = null
|
||||||
|
onBackPressedCallBack.remove()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onItemClick(item: NavigationHistoryListItem) {
|
private fun onItemClick(item: NavigationHistoryListItem) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user