From aef3febe1db6266191303e237e6196cce4f2b8dc Mon Sep 17 00:00:00 2001 From: Soumya Ranjan Patra Date: Wed, 8 May 2024 16:59:11 +0530 Subject: [PATCH] TP-65927 | fix bottom sheet status bar colour (#10760) --- .../common/models/APBottomSheetStateHolder.kt | 1 - .../ap/common/ui/BottomSheetInitializer.kt | 74 +++++++------------ 2 files changed, 25 insertions(+), 50 deletions(-) diff --git a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/models/APBottomSheetStateHolder.kt b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/models/APBottomSheetStateHolder.kt index d7dc7b7490..8729fec806 100644 --- a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/models/APBottomSheetStateHolder.kt +++ b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/models/APBottomSheetStateHolder.kt @@ -15,7 +15,6 @@ data class APBottomSheetStateHolder( enum class ApBottomSheetState { Visible, Hidden, - HidingOnDismissRequest, Collapsing } } diff --git a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/ui/BottomSheetInitializer.kt b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/ui/BottomSheetInitializer.kt index f86ccf8d71..5d0aae8103 100644 --- a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/ui/BottomSheetInitializer.kt +++ b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/ui/BottomSheetInitializer.kt @@ -9,31 +9,32 @@ package com.navi.ap.common.ui import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.ModalBottomSheetProperties import androidx.compose.material3.SheetState import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalView import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.SecureFlagPolicy import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.navi.alfred.AlfredManager import com.navi.ap.common.models.APBottomSheetStateHolder import com.navi.ap.common.models.APBottomSheetStateHolder.ApBottomSheetState -import com.navi.ap.common.models.WidgetModelDefinition import com.navi.ap.common.mvi.actions.ApScreenAction import com.navi.ap.common.viewmodel.ApplicationPlatformVM import com.navi.ap.common.widgetfactory.WidgetRenderer @@ -42,11 +43,10 @@ import com.navi.ap.utils.constants.BOTTOM_SHEET_TOP_SPACING import com.navi.ap.utils.constants.BOTTOM_SHEET_VISIBILITY import com.navi.ap.utils.constants.Events import com.navi.ap.utils.constants.WHITE_HEX_CODE -import com.navi.base.utils.orFalse +import com.navi.base.utils.orTrue import com.navi.common.utils.Constants import com.navi.common.utils.getStatusBarHeight import com.navi.design.utils.parseColorSafe -import com.navi.uitron.model.UiTronResponse import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -86,21 +86,6 @@ fun InitBottomSheet(viewModel: ApplicationPlatformVM, onDismiss: (SheetState) -> viewModel.handleActions(viewModel.handle[it]) } } - ApBottomSheetState.HidingOnDismissRequest -> { - if (bottomSheetStateHolder.bottomSheetUIContent?.isCancellable.orFalse().not()) { - viewModel.handleIntent( - ApScreenAction.UpdateBottomSheetUi( - bottomSheetState = ApBottomSheetState.Visible - ) - ) - } else { - viewModel.handleIntent( - ApScreenAction.UpdateBottomSheetUi( - bottomSheetState = ApBottomSheetState.Hidden - ) - ) - } - } ApBottomSheetState.Collapsing -> {} } } @@ -118,15 +103,13 @@ private fun APModalBottomSheet( bottomSheetStateHolder: APBottomSheetStateHolder, onDismiss: (SheetState) -> Unit ) { - val statusBarHeight = remember { getStatusBarHeight() } + val statusBarHeight = with(LocalDensity.current) { getStatusBarHeight().toDp() } val screenHeightInDp = LocalConfiguration.current.screenHeightDp.dp ModalBottomSheet( onDismissRequest = { onDismiss(modalBottomSheetState) viewModel.handleIntent( - ApScreenAction.UpdateBottomSheetUi( - bottomSheetState = ApBottomSheetState.HidingOnDismissRequest - ) + ApScreenAction.UpdateBottomSheetUi(bottomSheetState = ApBottomSheetState.Hidden) ) }, shape = @@ -142,26 +125,28 @@ private fun APModalBottomSheet( .parseColorSafe(WHITE_HEX_CODE) ), sheetState = modalBottomSheetState, - windowInsets = WindowInsets(top = statusBarHeight), - dragHandle = { Spacer(modifier = Modifier.size(BOTTOM_SHEET_TOP_SPACING)) } + dragHandle = { Spacer(modifier = Modifier.size(BOTTOM_SHEET_TOP_SPACING)) }, + modifier = Modifier.padding(top = statusBarHeight), + properties = + ModalBottomSheetProperties( + shouldDismissOnBackPress = + bottomSheetStateHolder.bottomSheetUIContent?.isCancellable.orTrue(), + isFocusable = true, + securePolicy = SecureFlagPolicy.Inherit + ), ) { AlfredManager.setBottomSheetView(LocalView.current.rootView) - bottomSheetStateHolder.bottomSheetUIContent?.screenHeightOffset?.let { - Column(Modifier.height(screenHeightInDp - it.dp).navigationBarsPadding()) { - BottomSheetContentRenderer( - widgetsList = bottomSheetStateHolder.bottomSheetUIContent.content?.widgets, - viewModel = viewModel - ) + + val bottomSheetContentModifier = + bottomSheetStateHolder.bottomSheetUIContent?.screenHeightOffset?.let { + Modifier.height(screenHeightInDp - it.dp + statusBarHeight).navigationBarsPadding() + } ?: Modifier.navigationBarsPadding() + + Column(bottomSheetContentModifier) { + bottomSheetStateHolder.bottomSheetUIContent?.content?.widgets?.forEach { + WidgetRenderer(it, viewModel) } } - ?: run { - Column(Modifier.navigationBarsPadding()) { - BottomSheetContentRenderer( - widgetsList = bottomSheetStateHolder.bottomSheetUIContent?.content?.widgets, - viewModel = viewModel - ) - } - } } } @@ -201,12 +186,3 @@ private fun ObserveBottomSheetVisibilityState( } } } - -@Composable -private fun BottomSheetContentRenderer( - widgetsList: List>?, - viewModel: ApplicationPlatformVM? -) { - if (viewModel == null) return - widgetsList?.forEach { WidgetRenderer(it, viewModel) } -}