feat: Implement navigation bar visibility handling based on navigation mode
This commit is contained in:
@@ -228,11 +228,9 @@ fun ChatsListScreen(
|
||||
insetsController.isAppearanceLightStatusBars = !isDarkTheme
|
||||
window.statusBarColor = android.graphics.Color.TRANSPARENT
|
||||
|
||||
// Navigation bar — keep visible, match theme
|
||||
insetsController.show(
|
||||
androidx.core.view.WindowInsetsCompat.Type.navigationBars()
|
||||
)
|
||||
insetsController.isAppearanceLightNavigationBars = !isDarkTheme
|
||||
// Navigation bar: показываем только если есть нативные кнопки
|
||||
com.rosetta.messenger.ui.utils.NavigationModeUtils
|
||||
.applyNavigationBarVisibility(insetsController, context, isDarkTheme)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -104,8 +104,8 @@ class ChatsListViewModel(application: Application) : AndroidViewModel(applicatio
|
||||
ChatsUiState()
|
||||
)
|
||||
|
||||
// Загрузка
|
||||
private val _isLoading = MutableStateFlow(false)
|
||||
// Загрузка (🔥 true по умолчанию — skeleton на первом кадре, чтобы не мигало empty→skeleton→empty)
|
||||
private val _isLoading = MutableStateFlow(true)
|
||||
val isLoading: StateFlow<Boolean> = _isLoading.asStateFlow()
|
||||
|
||||
private val TAG = "ChatsListVM"
|
||||
@@ -114,6 +114,8 @@ class ChatsListViewModel(application: Application) : AndroidViewModel(applicatio
|
||||
fun setAccount(publicKey: String, privateKey: String) {
|
||||
val setAccountStart = System.currentTimeMillis()
|
||||
if (currentAccount == publicKey) {
|
||||
// 🔥 Сбрасываем skeleton если он ещё показан (при повторном заходе)
|
||||
if (_isLoading.value) _isLoading.value = false
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -212,9 +212,17 @@ fun ImageEditorScreen(
|
||||
onDispose {
|
||||
if (window == null || insetsController == null) return@onDispose
|
||||
window.statusBarColor = originalStatusBarColor
|
||||
window.navigationBarColor = originalNavigationBarColor
|
||||
insetsController.isAppearanceLightStatusBars = originalLightStatusBars
|
||||
insetsController.isAppearanceLightNavigationBars = originalLightNavigationBars
|
||||
|
||||
// Navigation bar: восстанавливаем только если есть нативные кнопки
|
||||
if (com.rosetta.messenger.ui.utils.NavigationModeUtils.hasNativeNavigationBar(context)) {
|
||||
window.navigationBarColor = originalNavigationBarColor
|
||||
insetsController.isAppearanceLightNavigationBars = originalLightNavigationBars
|
||||
} else {
|
||||
insetsController.hide(androidx.core.view.WindowInsetsCompat.Type.navigationBars())
|
||||
insetsController.systemBarsBehavior =
|
||||
androidx.core.view.WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1573,9 +1581,17 @@ fun MultiImageEditorScreen(
|
||||
onDispose {
|
||||
if (window == null || insetsController == null) return@onDispose
|
||||
window.statusBarColor = originalStatusBarColor
|
||||
window.navigationBarColor = originalNavigationBarColor
|
||||
insetsController.isAppearanceLightStatusBars = originalLightStatusBars
|
||||
insetsController.isAppearanceLightNavigationBars = originalLightNavigationBars
|
||||
|
||||
// Navigation bar: восстанавливаем только если есть нативные кнопки
|
||||
if (com.rosetta.messenger.ui.utils.NavigationModeUtils.hasNativeNavigationBar(context)) {
|
||||
window.navigationBarColor = originalNavigationBarColor
|
||||
insetsController.isAppearanceLightNavigationBars = originalLightNavigationBars
|
||||
} else {
|
||||
insetsController.hide(androidx.core.view.WindowInsetsCompat.Type.navigationBars())
|
||||
insetsController.systemBarsBehavior =
|
||||
androidx.core.view.WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -139,9 +139,17 @@ fun InAppCameraScreen(
|
||||
onDispose {
|
||||
if (window == null || insetsController == null) return@onDispose
|
||||
window.statusBarColor = originalStatusBarColor
|
||||
window.navigationBarColor = originalNavigationBarColor
|
||||
insetsController.isAppearanceLightStatusBars = originalLightStatusBars
|
||||
insetsController.isAppearanceLightNavigationBars = originalLightNavigationBars
|
||||
|
||||
// Navigation bar: восстанавливаем только если есть нативные кнопки
|
||||
if (com.rosetta.messenger.ui.utils.NavigationModeUtils.hasNativeNavigationBar(context)) {
|
||||
window.navigationBarColor = originalNavigationBarColor
|
||||
insetsController.isAppearanceLightNavigationBars = originalLightNavigationBars
|
||||
} else {
|
||||
insetsController.hide(androidx.core.view.WindowInsetsCompat.Type.navigationBars())
|
||||
insetsController.systemBarsBehavior =
|
||||
androidx.core.view.WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user