Use OnBackPressedDispatcher.addCallback() extension.

This commit is contained in:
Isira Seneviratne 2023-01-22 05:28:11 +05:30
parent 5337083bdb
commit 16922455d0
3 changed files with 48 additions and 62 deletions

View File

@ -11,7 +11,7 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ScrollView import android.widget.ScrollView
import androidx.activity.OnBackPressedCallback import androidx.activity.addCallback
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.core.view.children import androidx.core.view.children
@ -144,38 +144,36 @@ class MainActivity : BaseActivity() {
val playerViewModel = ViewModelProvider(this)[PlayerViewModel::class.java] val playerViewModel = ViewModelProvider(this)[PlayerViewModel::class.java]
// new way of handling back presses // new way of handling back presses
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) { onBackPressedDispatcher.addCallback {
override fun handleOnBackPressed() { if (playerViewModel.isFullscreen.value == true) {
if (playerViewModel.isFullscreen.value == true) { supportFragmentManager.fragments.filterIsInstance<PlayerFragment>()
for (fragment in supportFragmentManager.fragments) { .firstOrNull()
if (fragment is PlayerFragment) { ?.let {
fragment.unsetFullscreen() it.unsetFullscreen()
return return@addCallback
}
} }
} }
if (binding.mainMotionLayout.progress == 0F) { if (binding.mainMotionLayout.progress == 0F) {
runCatching { runCatching {
minimizePlayer() minimizePlayer()
return return@addCallback
}
}
when (navController.currentDestination?.id) {
startFragmentId -> {
moveTaskToBack(true)
}
R.id.searchResultFragment -> {
navController.popBackStack(R.id.searchFragment, true) ||
navController.popBackStack()
}
else -> {
navController.popBackStack()
}
} }
} }
})
when (navController.currentDestination?.id) {
startFragmentId -> {
moveTaskToBack(true)
}
R.id.searchResultFragment -> {
navController.popBackStack(R.id.searchFragment, true) ||
navController.popBackStack()
}
else -> {
navController.popBackStack()
}
}
}
loadIntentData() loadIntentData()
} }

View File

@ -2,7 +2,8 @@ package com.github.libretube.ui.activities
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.activity.OnBackPressedCallback import androidx.activity.addCallback
import androidx.fragment.app.commit
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.databinding.ActivityNointernetBinding import com.github.libretube.databinding.ActivityNointernetBinding
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
@ -40,21 +41,15 @@ class NoInternetActivity : BaseActivity() {
setContentView(binding.root) setContentView(binding.root)
onBackPressedDispatcher.addCallback( onBackPressedDispatcher.addCallback(this) {
this, supportFragmentManager.fragments.filterIsInstance<DownloadsFragment>()
object : OnBackPressedCallback(true) { .firstOrNull()
override fun handleOnBackPressed() { ?.let {
supportFragmentManager.fragments.forEach { supportFragmentManager.commit {
if (it is DownloadsFragment) { remove(it)
supportFragmentManager.beginTransaction()
.remove(it)
.commit()
return
}
} }
finishAffinity()
} }
} ?: finishAffinity()
) }
} }
} }

View File

@ -1,7 +1,9 @@
package com.github.libretube.ui.activities package com.github.libretube.ui.activities
import android.os.Bundle import android.os.Bundle
import androidx.activity.OnBackPressedCallback import androidx.activity.addCallback
import androidx.fragment.app.commit
import androidx.fragment.app.replace
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.databinding.ActivitySettingsBinding import com.github.libretube.databinding.ActivitySettingsBinding
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
@ -29,25 +31,16 @@ class SettingsActivity : BaseActivity() {
} }
// new way of dealing with back presses instead of onBackPressed() // new way of dealing with back presses instead of onBackPressed()
onBackPressedDispatcher.addCallback( onBackPressedDispatcher.addCallback(this) {
this, // lifecycle owner if (supportFragmentManager.findFragmentById(R.id.settings) is MainSettings) {
object : OnBackPressedCallback(true) { finishAndRemoveTask()
override fun handleOnBackPressed() { } else {
when (supportFragmentManager.findFragmentById(R.id.settings)) { supportFragmentManager.commit {
is MainSettings -> { replace<MainSettings>(R.id.settings)
finishAndRemoveTask()
}
else -> {
supportFragmentManager
.beginTransaction()
.replace(R.id.settings, MainSettings())
.commit()
changeTopBarText(getString(R.string.settings))
}
}
} }
changeTopBarText(getString(R.string.settings))
} }
) }
} }
fun changeTopBarText(text: String) { fun changeTopBarText(text: String) {