From 4020535303b5329ab519fcc373ecff54890c18a5 Mon Sep 17 00:00:00 2001 From: Aparna Vadlamani Date: Tue, 8 Apr 2025 16:34:07 +0530 Subject: [PATCH] NTP-51538 | Trust & Arc - Animation Integration (#15674) --- .../home/model/HpBottomSheetStateHolder.kt | 1 + .../bottomsheet/model/BottomSheetData.kt | 1 + .../bottomsheet/ui/HomeScreenBottomSheet.kt | 58 +++++++++++++++++-- .../screenOverlay/bottomsheet/utils/Ext.kt | 1 + .../main/java/com/naviapp/utils/Constants.kt | 4 ++ 5 files changed, 61 insertions(+), 4 deletions(-) diff --git a/android/app/src/main/java/com/naviapp/home/model/HpBottomSheetStateHolder.kt b/android/app/src/main/java/com/naviapp/home/model/HpBottomSheetStateHolder.kt index 61333838c7..d6796b9bee 100644 --- a/android/app/src/main/java/com/naviapp/home/model/HpBottomSheetStateHolder.kt +++ b/android/app/src/main/java/com/naviapp/home/model/HpBottomSheetStateHolder.kt @@ -37,6 +37,7 @@ data class HpBottomSheetContent( @Stable open class HpBottomSheetConfig( val isCancellable: Boolean? = true, + val isSwipeable: Boolean? = true, val contentColor: String? = null, val scrimColor: String? = null, val onDismiss: () -> Unit = {}, diff --git a/android/app/src/main/java/com/naviapp/screenOverlay/bottomsheet/model/BottomSheetData.kt b/android/app/src/main/java/com/naviapp/screenOverlay/bottomsheet/model/BottomSheetData.kt index 05909fd933..95d63f4261 100644 --- a/android/app/src/main/java/com/naviapp/screenOverlay/bottomsheet/model/BottomSheetData.kt +++ b/android/app/src/main/java/com/naviapp/screenOverlay/bottomsheet/model/BottomSheetData.kt @@ -22,6 +22,7 @@ data class BottomSheetData( @Stable data class BottomSheetConfig( val isCancellable: Boolean? = true, + val isSwipeable: Boolean? = true, val contentColor: String? = null, val scrimColor: String? = null, val onDismiss: UiTronActionData? = null, diff --git a/android/app/src/main/java/com/naviapp/screenOverlay/bottomsheet/ui/HomeScreenBottomSheet.kt b/android/app/src/main/java/com/naviapp/screenOverlay/bottomsheet/ui/HomeScreenBottomSheet.kt index 9c579186da..04c1b7fbd0 100644 --- a/android/app/src/main/java/com/naviapp/screenOverlay/bottomsheet/ui/HomeScreenBottomSheet.kt +++ b/android/app/src/main/java/com/naviapp/screenOverlay/bottomsheet/ui/HomeScreenBottomSheet.kt @@ -18,6 +18,7 @@ import androidx.compose.material3.BottomSheetDefaults import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.ModalBottomSheetProperties +import androidx.compose.material3.SheetValue import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -31,6 +32,7 @@ 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.handler.HandlePublishEventAction import com.navi.ap.utils.constants.BOTTOM_SHEET_VISIBILITY import com.navi.base.model.CtaData import com.navi.base.utils.orTrue @@ -42,6 +44,8 @@ import com.navi.common.uitron.render.CommonCustomUiTronRenderer import com.navi.common.utils.CommonNaviAnalytics import com.navi.common.utils.Constants.HIDE import com.navi.common.utils.getStatusBarHeight +import com.navi.uitron.model.action.PublishEventAction +import com.navi.uitron.model.action.PublishableEventData import com.navi.uitron.model.data.UiTronAction import com.navi.uitron.model.data.UiTronActionData import com.navi.uitron.render.UiTronRenderer @@ -59,6 +63,10 @@ import com.naviapp.home.model.HpBottomSheetState import com.naviapp.home.model.InvestmentBottomSheetData import com.naviapp.home.viewmodel.SharedVM import com.naviapp.utils.Constants.HOME_SCREEN_IN_CAPS +import com.naviapp.utils.Constants.HomePageConstants.BOTTOM_SHEET_EXPANDED +import com.naviapp.utils.Constants.HomePageConstants.BOTTOM_SHEET_HIDDEN +import com.naviapp.utils.Constants.HomePageConstants.EXPANDED_STATE +import com.naviapp.utils.Constants.HomePageConstants.HIDDEN_STATE @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -66,7 +74,11 @@ fun HomeScreenBottomSheet(viewModel: SharedVM, handleAction: (UiTronAction?) -> val bottomSheetStateHolder by viewModel.bottomSheetStateHolder.collectAsStateWithLifecycle() - val modalBottomSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) + val modalBottomSheetState = + rememberModalBottomSheetState(skipPartiallyExpanded = true) { + onStateChange(it, viewModel) + bottomSheetStateHolder.config?.isSwipeable ?: true + } // Hide bottom sheet using UiTronAction UpdateStateHandleActionV2 LaunchedEffect(Unit) { @@ -79,9 +91,7 @@ fun HomeScreenBottomSheet(viewModel: SharedVM, handleAction: (UiTronAction?) -> } } } - - // Callback to handle UiTronActions - LaunchedEffect(Unit) { viewModel.getActionCallback().collect { handleAction(it) } } + HandleUiTronActions(viewModel, handleAction) LaunchedEffect(key1 = bottomSheetStateHolder.state) { when (bottomSheetStateHolder.state) { @@ -145,6 +155,46 @@ fun HomeScreenBottomSheet(viewModel: SharedVM, handleAction: (UiTronAction?) -> } } +@Composable +private fun HandleUiTronActions(viewModel: SharedVM, handleAction: (UiTronAction?) -> Unit) { + HandlePublishEventAction(viewModel = viewModel) + // Callback to handle UiTronActions + LaunchedEffect(Unit) { viewModel.getActionCallback().collect { handleAction(it) } } +} + +@OptIn(ExperimentalMaterial3Api::class) +fun onStateChange(bottomSheetValue: SheetValue, viewModel: SharedVM) { + when (bottomSheetValue) { + SheetValue.Expanded -> { + viewModel.handleAction( + PublishEventAction( + events = + listOf( + PublishableEventData( + eventName = BOTTOM_SHEET_EXPANDED, + stateKey = EXPANDED_STATE, + ) + ) + ) + ) + } + SheetValue.Hidden -> { + viewModel.handleAction( + PublishEventAction( + events = + listOf( + PublishableEventData( + eventName = BOTTOM_SHEET_HIDDEN, + stateKey = HIDDEN_STATE, + ) + ) + ) + ) + } + else -> {} + } +} + @Composable private fun BottomSheetContentRenderer( config: HpBottomSheetConfig?, diff --git a/android/app/src/main/java/com/naviapp/screenOverlay/bottomsheet/utils/Ext.kt b/android/app/src/main/java/com/naviapp/screenOverlay/bottomsheet/utils/Ext.kt index c04fe4a3c1..4da2086f09 100644 --- a/android/app/src/main/java/com/naviapp/screenOverlay/bottomsheet/utils/Ext.kt +++ b/android/app/src/main/java/com/naviapp/screenOverlay/bottomsheet/utils/Ext.kt @@ -20,6 +20,7 @@ import com.naviapp.screenOverlay.viewModel.ScreenOverlayVM fun BottomSheetData.toHpBottomSheetConfig(viewModel: ScreenOverlayVM): HpBottomSheetConfig { return HpBottomSheetConfig( isCancellable = bottomSheetConfig?.isCancellable, + isSwipeable = bottomSheetConfig?.isSwipeable, contentColor = bottomSheetConfig?.contentColor, scrimColor = bottomSheetConfig?.scrimColor, onDismiss = { diff --git a/android/app/src/main/java/com/naviapp/utils/Constants.kt b/android/app/src/main/java/com/naviapp/utils/Constants.kt index a6ad21d487..6ecf46ec71 100644 --- a/android/app/src/main/java/com/naviapp/utils/Constants.kt +++ b/android/app/src/main/java/com/naviapp/utils/Constants.kt @@ -268,6 +268,10 @@ object Constants { const val SCROLL_THRESHOLD = 60f const val TOP_NAV_ARC_BACKGROUND = "top_nav_arc_background" const val ALPHA = "alpha_" + const val BOTTOM_SHEET_EXPANDED = "bottom_sheet_expanded" + const val BOTTOM_SHEET_HIDDEN = "bottom_sheet_hidden" + const val EXPANDED_STATE = "expanded_state" + const val HIDDEN_STATE = "hidden_state" } // Home Custom Widget Constants