|
1 | 1 | package com.velord.composemultiplebackstackdemo.ui.main.bottomNavigation |
2 | 2 |
|
| 3 | +import android.content.Context |
3 | 4 | import android.os.Bundle |
4 | 5 | import android.util.Log |
| 6 | +import android.view.Gravity |
5 | 7 | import android.view.View |
| 8 | +import android.widget.Toast |
| 9 | +import androidx.activity.addCallback |
6 | 10 | import androidx.compose.foundation.layout.Column |
7 | 11 | import androidx.compose.foundation.layout.height |
8 | 12 | import androidx.compose.foundation.layout.navigationBarsPadding |
@@ -38,10 +42,35 @@ import com.velord.composemultiplebackstackdemo.ui.navigation.BottomNavigationIte |
38 | 42 | import com.velord.composemultiplebackstackdemo.ui.utils.viewLifecycleScope |
39 | 43 | import com.velord.multiplebackstackapplier.MultipleBackstack |
40 | 44 | import com.velord.multiplebackstackapplier.utils.compose.SnackBarOnBackPressHandler |
| 45 | +import dagger.hilt.android.AndroidEntryPoint |
41 | 46 | import kotlinx.coroutines.launch |
42 | 47 |
|
43 | | -private const val TAG = "multiplebackstackapplierDEMO" |
| 48 | +private const val TAG = "BottomNav" |
44 | 49 |
|
| 50 | +private fun Context.fireToast(text: String) { |
| 51 | + val description = "I am at the first at $text" |
| 52 | + Toast.makeText(this, description, Toast.LENGTH_SHORT).apply { |
| 53 | + setGravity(Gravity.CENTER_VERTICAL, 0, 0) |
| 54 | + show() |
| 55 | + } |
| 56 | +} |
| 57 | + |
| 58 | +internal fun Fragment.addTestCallback( |
| 59 | + tag: String, |
| 60 | + viewModel: BottomNavViewModel |
| 61 | +) { |
| 62 | + requireActivity().onBackPressedDispatcher.addCallback( |
| 63 | + this, |
| 64 | + true |
| 65 | + ) { |
| 66 | + requireContext().fireToast(tag) |
| 67 | + isEnabled = false |
| 68 | + viewModel.graphCompletedHandling() |
| 69 | + Log.d(TAG, "onBackPressedDispatcher") |
| 70 | + } |
| 71 | +} |
| 72 | + |
| 73 | +@AndroidEntryPoint |
45 | 74 | class BottomNavFragment : Fragment(R.layout.fragment_bottom_nav) { |
46 | 75 |
|
47 | 76 | private val navController by lazy { |
@@ -105,24 +134,25 @@ class BottomNavFragment : Fragment(R.layout.fragment_bottom_nav) { |
105 | 134 | @Composable |
106 | 135 | private fun BottomNavScreen(viewModel: BottomNavViewModel) { |
107 | 136 | val tabFlow = viewModel.currentTabFlow.collectAsStateWithLifecycle() |
108 | | - val isBackHandlingEnabledState = |
109 | | - viewModel.isBackHandlingEnabledFlow.collectAsStateWithLifecycle() |
110 | | - Log.d(TAG, "isBackHandlingEnabledState: ${isBackHandlingEnabledState.value}") |
| 137 | + val backHandlingState = viewModel.backHandlingStateFlow.collectAsStateWithLifecycle() |
| 138 | + Log.d(TAG, "isBackHandlingEnabledState: ${backHandlingState.value}") |
111 | 139 |
|
112 | 140 | Content( |
113 | 141 | selectedItem = tabFlow.value, |
114 | 142 | onClick = viewModel::onTabClick, |
115 | 143 | ) |
116 | 144 |
|
117 | | - val str = stringResource(id = R.string.press_again_to_exit) |
118 | | - SnackBarOnBackPressHandler( |
119 | | - message = str, |
120 | | - modifier = Modifier.padding(horizontal = 8.dp), |
121 | | - enabled = isBackHandlingEnabledState.value, |
122 | | - onBackClickLessThanDuration = viewModel::onBackDoubleClick, |
123 | | - ) { |
124 | | - Snackbar { |
125 | | - Text(text = it.visuals.message) |
| 145 | + if (backHandlingState.value.isEnabled) { |
| 146 | + val str = stringResource(id = R.string.press_again_to_exit) |
| 147 | + SnackBarOnBackPressHandler( |
| 148 | + message = str, |
| 149 | + modifier = Modifier.padding(horizontal = 8.dp), |
| 150 | + enabled = backHandlingState.value.isEnabled, |
| 151 | + onBackClickLessThanDuration = viewModel::onBackDoubleClick, |
| 152 | + ) { |
| 153 | + Snackbar { |
| 154 | + Text(text = it.visuals.message) |
| 155 | + } |
126 | 156 | } |
127 | 157 | } |
128 | 158 | } |
|
0 commit comments