@@ -24,9 +24,8 @@ import androidx.core.view.updateLayoutParams
2424import androidx.lifecycle.Lifecycle
2525import androidx.lifecycle.lifecycleScope
2626import androidx.lifecycle.repeatOnLifecycle
27+ import androidx.navigation.NavController
2728import androidx.navigation.fragment.NavHostFragment
28- import androidx.navigation.ui.AppBarConfiguration
29- import androidx.navigation.ui.setupWithNavController
3029import com.hjq.permissions.Permission
3130import com.hjq.permissions.XXPermissions
3231import com.osfans.trime.R
@@ -44,26 +43,15 @@ import splitties.views.topPadding
4443
4544class PrefMainActivity : AppCompatActivity () {
4645 private val viewModel: MainViewModel by viewModels()
47- private val prefs = AppPrefs .defaultInstance()
4846
49- private lateinit var navHostFragment: NavHostFragment
50- private var loadingDialog: AlertDialog ? = null
47+ private val uiMode by AppPrefs .defaultInstance().other.uiMode
5148
52- private fun onNavigateUpListener (): Boolean {
53- val navController = navHostFragment.navController
54- return when (navController.currentDestination?.id) {
55- R .id.prefFragment -> {
56- // "minimize" the app, don't exit activity
57- moveTaskToBack(false )
58- true
59- }
60- else -> onSupportNavigateUp()
61- }
62- }
49+ private lateinit var navController: NavController
50+ private var loadingDialog: AlertDialog ? = null
6351
6452 override fun onCreate (savedInstanceState : Bundle ? ) {
6553 val uiMode =
66- when (prefs.other. uiMode) {
54+ when (uiMode) {
6755 AppPrefs .Other .UiMode .AUTO -> AppCompatDelegate .MODE_NIGHT_FOLLOW_SYSTEM
6856 AppPrefs .Other .UiMode .LIGHT -> AppCompatDelegate .MODE_NIGHT_NO
6957 AppPrefs .Other .UiMode .DARK -> AppCompatDelegate .MODE_NIGHT_YES
@@ -88,14 +76,16 @@ class PrefMainActivity : AppCompatActivity() {
8876
8977 setContentView(binding.root)
9078 setSupportActionBar(binding.prefToolbar.toolbar)
91- val appBarConfiguration =
92- AppBarConfiguration (
93- topLevelDestinationIds = setOf (),
94- fallbackOnNavigateUpListener = ::onNavigateUpListener,
95- )
96- navHostFragment =
97- supportFragmentManager.findFragmentById(R .id.nav_host_fragment) as NavHostFragment
98- binding.prefToolbar.toolbar.setupWithNavController(navHostFragment.navController, appBarConfiguration)
79+ navController = binding.navHostFragment.getFragment<NavHostFragment >().navController
80+ binding.prefToolbar.toolbar.setNavigationOnClickListener {
81+ // prevent navigate up when child fragment has enabled `OnBackPressedCallback`
82+ if (onBackPressedDispatcher.hasEnabledCallbacks()) {
83+ onBackPressedDispatcher.onBackPressed()
84+ return @setNavigationOnClickListener
85+ }
86+ // "minimize" the activity if we can't go back
87+ navController.navigateUp() || onSupportNavigateUp() || moveTaskToBack(false )
88+ }
9989 viewModel.toolbarTitle.observe(this ) {
10090 binding.prefToolbar.toolbar.title = it
10191 }
@@ -104,7 +94,7 @@ class PrefMainActivity : AppCompatActivity() {
10494 m.isVisible = it
10595 }
10696 }
107- navHostFragment. navController.addOnDestinationChangedListener { _, dest, _ ->
97+ navController.addOnDestinationChangedListener { _, dest, _ ->
10898 dest.label?.let { viewModel.setToolbarTitle(it.toString()) }
10999 binding.prefToolbar.toolbar.subtitle =
110100 if (dest.id == R .id.prefFragment) {
@@ -157,7 +147,7 @@ class PrefMainActivity : AppCompatActivity() {
157147 true
158148 }
159149 R .id.preference__menu_about -> {
160- navHostFragment. navController.navigate(R .id.action_prefFragment_to_aboutFragment)
150+ navController.navigate(R .id.action_prefFragment_to_aboutFragment)
161151 true
162152 }
163153 else -> super .onOptionsItemSelected(item)
0 commit comments