@@ -24,9 +24,8 @@ import androidx.core.view.updateLayoutParams
24
24
import androidx.lifecycle.Lifecycle
25
25
import androidx.lifecycle.lifecycleScope
26
26
import androidx.lifecycle.repeatOnLifecycle
27
+ import androidx.navigation.NavController
27
28
import androidx.navigation.fragment.NavHostFragment
28
- import androidx.navigation.ui.AppBarConfiguration
29
- import androidx.navigation.ui.setupWithNavController
30
29
import com.hjq.permissions.Permission
31
30
import com.hjq.permissions.XXPermissions
32
31
import com.osfans.trime.R
@@ -44,26 +43,15 @@ import splitties.views.topPadding
44
43
45
44
class PrefMainActivity : AppCompatActivity () {
46
45
private val viewModel: MainViewModel by viewModels()
47
- private val prefs = AppPrefs .defaultInstance()
48
46
49
- private lateinit var navHostFragment: NavHostFragment
50
- private var loadingDialog: AlertDialog ? = null
47
+ private val uiMode by AppPrefs .defaultInstance().other.uiMode
51
48
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
63
51
64
52
override fun onCreate (savedInstanceState : Bundle ? ) {
65
53
val uiMode =
66
- when (prefs.other. uiMode) {
54
+ when (uiMode) {
67
55
AppPrefs .Other .UiMode .AUTO -> AppCompatDelegate .MODE_NIGHT_FOLLOW_SYSTEM
68
56
AppPrefs .Other .UiMode .LIGHT -> AppCompatDelegate .MODE_NIGHT_NO
69
57
AppPrefs .Other .UiMode .DARK -> AppCompatDelegate .MODE_NIGHT_YES
@@ -88,14 +76,16 @@ class PrefMainActivity : AppCompatActivity() {
88
76
89
77
setContentView(binding.root)
90
78
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
+ }
99
89
viewModel.toolbarTitle.observe(this ) {
100
90
binding.prefToolbar.toolbar.title = it
101
91
}
@@ -104,7 +94,7 @@ class PrefMainActivity : AppCompatActivity() {
104
94
m.isVisible = it
105
95
}
106
96
}
107
- navHostFragment. navController.addOnDestinationChangedListener { _, dest, _ ->
97
+ navController.addOnDestinationChangedListener { _, dest, _ ->
108
98
dest.label?.let { viewModel.setToolbarTitle(it.toString()) }
109
99
binding.prefToolbar.toolbar.subtitle =
110
100
if (dest.id == R .id.prefFragment) {
@@ -157,7 +147,7 @@ class PrefMainActivity : AppCompatActivity() {
157
147
true
158
148
}
159
149
R .id.preference__menu_about -> {
160
- navHostFragment. navController.navigate(R .id.action_prefFragment_to_aboutFragment)
150
+ navController.navigate(R .id.action_prefFragment_to_aboutFragment)
161
151
true
162
152
}
163
153
else -> super .onOptionsItemSelected(item)
0 commit comments