TP-65927 | fix bottom sheet status bar colour (#10760)

This commit is contained in:
Soumya Ranjan Patra
2024-05-08 16:59:11 +05:30
committed by GitHub
parent 66785dde9e
commit aef3febe1d
2 changed files with 25 additions and 50 deletions

View File

@@ -15,7 +15,6 @@ data class APBottomSheetStateHolder(
enum class ApBottomSheetState {
Visible,
Hidden,
HidingOnDismissRequest,
Collapsing
}
}

View File

@@ -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<WidgetModelDefinition<UiTronResponse>>?,
viewModel: ApplicationPlatformVM?
) {
if (viewModel == null) return
widgetsList?.forEach { WidgetRenderer(it, viewModel) }
}