NTP-15616 | Venkat Praneeth Reddy | Add fractional height and ondismiss action support to home page bottom sheet (#14028)

This commit is contained in:
Venkat Praneeth Reddy
2024-12-10 12:47:34 +05:30
committed by GitHub
parent 0720a30c96
commit 91321a53e8
3 changed files with 33 additions and 2 deletions

View File

@@ -11,6 +11,7 @@ import com.navi.common.utils.TemporaryStorageHelper
import com.naviapp.home.compose.activity.HomePageActivity
import com.naviapp.home.compose.listener.HomeScreenCallbackListener
import com.naviapp.home.compose.model.CtaActionEvent
import com.naviapp.home.model.HpBottomSheetConfig
import com.naviapp.home.model.HpBottomSheetContent
import com.naviapp.home.model.HpBottomSheetRenderType
import com.naviapp.home.model.HpBottomSheetState
@@ -50,6 +51,13 @@ fun handleCtaAction(
HpBottomSheetContent(
renderType = HpBottomSheetRenderType.UI_TRON,
uiTronContent = it.content?.widgets
),
config =
HpBottomSheetConfig(
isCancellable = it.isCancellable,
bottomSheetPercentageHeight = it.bottomSheetPercentageHeight,
uiStrategy = it.uiStrategy,
onDismiss = { homeVM.handleActions(it.onDismissAction) }
)
)
}

View File

@@ -13,6 +13,7 @@ import androidx.compose.runtime.MutableState
import androidx.compose.runtime.Stable
import com.navi.base.model.ActionData
import com.navi.base.model.CtaData
import com.navi.common.alchemist.model.AlchemistBottomSheetStructure
import com.navi.common.alchemist.model.AlchemistWidgetModelDefinition
import com.navi.naviwidgets.models.FooterButtonState
import com.navi.uitron.model.UiTronResponse
@@ -38,7 +39,9 @@ open class HpBottomSheetConfig(
val contentColor: String? = null,
val scrimColor: String? = null,
val onDismiss: () -> Unit = {},
val onVisible: () -> Unit = {}
val onVisible: () -> Unit = {},
val uiStrategy: AlchemistBottomSheetStructure.UiStrategy? = null,
val bottomSheetPercentageHeight: Float? = null
)
@Stable

View File

@@ -10,6 +10,7 @@ package com.naviapp.screenOverlay.bottomsheet.ui
import BottomSheetData
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -23,6 +24,7 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
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
@@ -32,6 +34,7 @@ import com.navi.alfred.AlfredManager
import com.navi.ap.utils.constants.BOTTOM_SHEET_VISIBILITY
import com.navi.base.model.CtaData
import com.navi.base.utils.orTrue
import com.navi.common.alchemist.model.AlchemistBottomSheetStructure
import com.navi.common.uitron.model.action.CtaAction
import com.navi.common.uitron.render.CommonCustomUiTronRenderer
import com.navi.common.utils.CommonNaviAnalytics
@@ -93,6 +96,23 @@ fun HomeScreenBottomSheet(viewModel: SharedVM, handleAction: (UiTronAction?) ->
if (bottomSheetStateHolder.state != HpBottomSheetState.Hidden) {
bottomSheetStateHolder.let {
val modifier: Modifier =
when (it.config?.uiStrategy?.name) {
AlchemistBottomSheetStructure.UiStrategy.FIX_PERCENTAGE_HEIGHT.name -> {
Modifier.heightIn(
min = 0.dp,
max =
LocalConfiguration.current.screenHeightDp.dp *
(it.config.bottomSheetPercentageHeight ?: 0.5f)
)
}
AlchemistBottomSheetStructure.UiStrategy.DEFAULT.name -> {
Modifier
}
else -> {
Modifier
}
}
val statusBarHeight = with(LocalDensity.current) { getStatusBarHeight().toDp() }
ModalBottomSheet(
onDismissRequest = {
@@ -114,7 +134,7 @@ fun HomeScreenBottomSheet(viewModel: SharedVM, handleAction: (UiTronAction?) ->
contentWindowInsets = { WindowInsets(0, 0, 0, 0) }
) {
AlfredManager.setBottomSheetView(LocalView.current.rootView)
Column(modifier = Modifier.navigationBarsPadding()) {
Column(modifier = modifier.navigationBarsPadding()) {
BottomSheetContentRenderer(it.config, it.content, viewModel)
}
}