Use standard support action bar navigation in MainActivity

This commit is contained in:
iovxw 2026-07-21 20:00:17 +08:00
parent 0eb0e0699b
commit ced739b8b7
No known key found for this signature in database
GPG Key ID: C84626C2D3D79995

View File

@ -60,24 +60,12 @@ class MainActivity : AppCompatActivity() {
windowInsets windowInsets
} }
setContentView(binding.root) setContentView(binding.root)
setSupportActionBar(binding.toolbar)
// always show toolbar back arrow icon // always show toolbar back arrow icon
// https://android.googlesource.com/platform/frameworks/support/+/32e643112d0217619237a0d7101b50919c6caf51/navigation/navigation-ui/src/main/java/androidx/navigation/ui/AbstractAppBarOnDestinationChangedListener.kt#80 supportActionBar?.setDisplayHomeAsUpEnabled(true)
binding.toolbar.navigationIcon = DrawerArrowDrawable(this).apply { progress = 1f }
// show menu icon and other action icons on toolbar
// don't use `setSupportActionBar(binding.toolbar)` here,
// because navController would change toolbar title, we need to control it by ourselves
setupToolbarMenu(binding.toolbar.menu) setupToolbarMenu(binding.toolbar.menu)
navController = binding.navHostFragment.getFragment<NavHostFragment>().navController navController = binding.navHostFragment.getFragment<NavHostFragment>().navController
navController.graph = SettingsRoute.createGraph(navController) navController.graph = SettingsRoute.createGraph(navController)
binding.toolbar.setNavigationOnClickListener {
// prevent navigate up when child fragment has enabled `OnBackPressedCallback`
if (onBackPressedDispatcher.hasEnabledCallbacks()) {
onBackPressedDispatcher.onBackPressed()
return@setNavigationOnClickListener
}
// "minimize" the activity if we can't go back
navController.navigateUp() || onSupportNavigateUp() || moveTaskToBack(false)
}
viewModel.toolbarTitle.observe(this) { viewModel.toolbarTitle.observe(this) {
binding.toolbar.title = it binding.toolbar.title = it
} }
@ -101,6 +89,16 @@ class MainActivity : AppCompatActivity() {
processIntent(intent) processIntent(intent)
} }
override fun onSupportNavigateUp(): Boolean {
// prevent navigate up when child fragment has enabled `OnBackPressedCallback`
if (onBackPressedDispatcher.hasEnabledCallbacks()) {
onBackPressedDispatcher.onBackPressed()
return true
}
// "minimize" the activity if we can't go back
return navController.navigateUp() || super.onSupportNavigateUp() || moveTaskToBack(false)
}
private fun processIntent(intent: Intent?) { private fun processIntent(intent: Intent?) {
val action = intent?.action ?: return val action = intent?.action ?: return
when (action) { when (action) {