TP-84642 | Permission screen compliance changes (#12667)
This commit is contained in:
@@ -12,13 +12,19 @@ import android.os.Bundle
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.viewModels
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.ExperimentalMaterialApi
|
||||
import androidx.compose.material.ModalBottomSheetLayout
|
||||
import androidx.compose.material.ModalBottomSheetValue
|
||||
import androidx.compose.material.rememberModalBottomSheetState
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
@@ -29,6 +35,8 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import com.navi.ap.utils.constants.BOTTOM_SHEET_TOP_CORNER_RADIUS
|
||||
import com.navi.ap.utils.constants.PL
|
||||
import com.navi.base.model.CtaData
|
||||
import com.navi.base.sharedpref.PreferenceManager
|
||||
@@ -50,12 +58,14 @@ import com.naviapp.common.navigator.NaviDeepLinkNavigator
|
||||
import com.naviapp.lending_permission.model.LendingPermissionScreenResponse
|
||||
import com.naviapp.lending_permission.model.PermissionNotGrantedCardWidget
|
||||
import com.naviapp.lending_permission.model.PermissionWidget
|
||||
import com.naviapp.lending_permission.model.ScreenContent
|
||||
import com.naviapp.lending_permission.viewmodel.LendingPermissionViewModel
|
||||
import com.naviapp.manager.usecase.UserDataUploadWorkerUseCase
|
||||
import com.naviapp.personalloanrevamp.manageLoan.NetworkResponseState
|
||||
import com.naviapp.personalloanrevamp.manageLoan.composables.ContentShimmer
|
||||
import com.naviapp.personalloanrevamp.models.LoanDetailsV2WidgetType
|
||||
import com.naviapp.utils.Constants
|
||||
import com.naviapp.utils.Constants.DISMISS_BOTTOMSHEET
|
||||
import com.naviapp.utils.Constants.LENDING_PERMISSION_PAGE_LANDS
|
||||
import com.naviapp.utils.Constants.LENDING_PERMISSION_SCREEN
|
||||
import com.naviapp.utils.Constants.ON_SYSTEM_BACK_PRESSED
|
||||
@@ -77,7 +87,6 @@ class LendingPermissionActivity : BaseActivity() {
|
||||
setContent { LendingPermissionScreen(viewModel, this) }
|
||||
}
|
||||
|
||||
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
|
||||
@Composable
|
||||
fun LendingPermissionScreen(
|
||||
viewModel: LendingPermissionViewModel,
|
||||
@@ -100,11 +109,21 @@ class LendingPermissionActivity : BaseActivity() {
|
||||
}
|
||||
is CtaAction -> {
|
||||
val ctaData = uiTronAction.ctaData ?: CtaData()
|
||||
NaviDeepLinkNavigator.navigate(
|
||||
activity,
|
||||
ctaData = ctaData,
|
||||
finish = ctaData.finish
|
||||
)
|
||||
when (ctaData.type) {
|
||||
LoanDetailsV2WidgetType.LENDING_PERMISSION_KNOW_MORE_WIDGET.value -> {
|
||||
viewModel.setBottomsheetType(ctaData.type)
|
||||
}
|
||||
DISMISS_BOTTOMSHEET -> {
|
||||
viewModel.setBottomSheetState(false)
|
||||
}
|
||||
else -> {
|
||||
NaviDeepLinkNavigator.navigate(
|
||||
activity,
|
||||
ctaData = ctaData,
|
||||
finish = ctaData.finish
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -126,12 +145,7 @@ class LendingPermissionActivity : BaseActivity() {
|
||||
eventName = LENDING_PERMISSION_PAGE_LANDS,
|
||||
verticalType = intent.getStringExtra(VERTICAL_TYPE)
|
||||
)
|
||||
Scaffold(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
topBar = { SetHeaderWidget(lendingPermissionScreenDataState, viewModel) },
|
||||
bottomBar = { SetFooterWidget(lendingPermissionScreenDataState, viewModel) },
|
||||
content = { SetContentWidgets(lendingPermissionScreenDataState, viewModel) }
|
||||
)
|
||||
RenderScaffold(lendingPermissionScreenDataState, viewModel)
|
||||
}
|
||||
is NetworkResponseState.Error -> {}
|
||||
}
|
||||
@@ -207,6 +221,66 @@ class LendingPermissionActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterialApi::class)
|
||||
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
|
||||
@Composable
|
||||
private fun RenderScaffold(
|
||||
lendingPermissionScreenDataState: NetworkResponseState<LendingPermissionScreenResponse>,
|
||||
viewModel: LendingPermissionViewModel
|
||||
) {
|
||||
|
||||
val bottomSheetState =
|
||||
rememberModalBottomSheetState(
|
||||
initialValue = ModalBottomSheetValue.Hidden,
|
||||
skipHalfExpanded = true
|
||||
)
|
||||
val showBottomSheet = viewModel.showBottomSheet.collectAsStateWithLifecycle().value
|
||||
|
||||
LaunchedEffect(bottomSheetState.isVisible) {
|
||||
if (!bottomSheetState.isVisible) {
|
||||
viewModel.setBottomSheetState(false)
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(showBottomSheet) {
|
||||
when (showBottomSheet) {
|
||||
true -> {
|
||||
bottomSheetState.show()
|
||||
}
|
||||
false -> {
|
||||
bottomSheetState.hide()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ModalBottomSheetLayout(
|
||||
sheetContent = {
|
||||
val bottomsheetType = viewModel.bottomsheetType.collectAsState().value
|
||||
val contentState =
|
||||
viewModel.lendingPermissionScreenData.collectAsStateWithLifecycle().value
|
||||
if (contentState is NetworkResponseState.Success) {
|
||||
val bottomSheetData = contentState.data?.screenStructure?.content
|
||||
bottomSheetData?.let { RenderUiTronBottomsheet(it, bottomsheetType, viewModel) }
|
||||
}
|
||||
},
|
||||
sheetState = bottomSheetState,
|
||||
sheetShape =
|
||||
RoundedCornerShape(
|
||||
topStart = BOTTOM_SHEET_TOP_CORNER_RADIUS,
|
||||
topEnd = BOTTOM_SHEET_TOP_CORNER_RADIUS
|
||||
)
|
||||
) {
|
||||
Box(modifier = Modifier.fillMaxSize()) {
|
||||
Scaffold(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
topBar = { SetHeaderWidget(lendingPermissionScreenDataState, viewModel) },
|
||||
bottomBar = { SetFooterWidget(lendingPermissionScreenDataState, viewModel) },
|
||||
content = { SetContentWidgets(lendingPermissionScreenDataState, viewModel) }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun SetFooterWidget(
|
||||
lendingPermissionScreenDataState: NetworkResponseState<LendingPermissionScreenResponse>,
|
||||
@@ -234,6 +308,22 @@ class LendingPermissionActivity : BaseActivity() {
|
||||
.Render(composeViews = uiTronResponse?.parentComposeView.orEmpty())
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun RenderUiTronBottomsheet(
|
||||
content: ScreenContent,
|
||||
bottomsheetType: String?,
|
||||
viewModel: LendingPermissionViewModel
|
||||
) {
|
||||
content.widgets?.forEach {
|
||||
if (it?.widgetType == bottomsheetType) {
|
||||
val widgetData = (it as PermissionNotGrantedCardWidget).uiTronWidget
|
||||
UiTronRenderer(widgetData?.data, viewModel)
|
||||
.Render(composeViews = widgetData?.parentComposeView.orEmpty())
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
super.onBackPressed()
|
||||
analyticsTracker.lendingPermissionEvent(
|
||||
|
||||
@@ -26,6 +26,7 @@ import javax.inject.Inject
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@HiltViewModel
|
||||
class LendingPermissionViewModel
|
||||
@@ -51,6 +52,12 @@ constructor(
|
||||
)
|
||||
val submitPermission = _submitPermission.asStateFlow()
|
||||
|
||||
private val _showBottomSheet = MutableStateFlow<Boolean>(false)
|
||||
val showBottomSheet = _showBottomSheet.asStateFlow()
|
||||
|
||||
private val _bottomsheetType = MutableStateFlow<String?>(null)
|
||||
val bottomsheetType = _bottomsheetType.asStateFlow()
|
||||
|
||||
fun fetchLendingPermissionScreenResponse(screenId: String, verticalType: String) {
|
||||
viewModelScope.safeLaunch(Dispatchers.IO) {
|
||||
_lendingPermissionScreenData.emit(NetworkResponseState.Loading())
|
||||
@@ -75,6 +82,21 @@ constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun setBottomsheetType(type: String?) {
|
||||
viewModelScope.launch {
|
||||
_bottomsheetType.emit(type)
|
||||
setBottomSheetState(true)
|
||||
}
|
||||
}
|
||||
|
||||
fun setBottomSheetState(show: Boolean) {
|
||||
viewModelScope.launch { _showBottomSheet.emit(show) }
|
||||
}
|
||||
|
||||
fun getBottomSheetState(): Boolean {
|
||||
return _showBottomSheet.value
|
||||
}
|
||||
|
||||
fun uploadUserData(screenName: String) {
|
||||
val isReadSmsPermissionGranted = isReadSmsPermissionGranted(context)
|
||||
if (isReadSmsPermissionGranted) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2022-2023 by Navi Technologies Limited
|
||||
* * Copyright © 2022-2024 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
@@ -48,5 +48,6 @@ enum class LoanDetailsV2WidgetType(val value: String) {
|
||||
LOAN_WITH_EMI_TENURE("LOAN_WITH_EMI_TENURE"),
|
||||
RADIO_BUTTON_WITH_NOTE_WIDGET("RADIO_BUTTON_WITH_NOTE_WIDGET"),
|
||||
LENDING_PERMISSION_WIDGET("LENDING_PERMISSION_WIDGET"),
|
||||
LENDING_PERMISSION_NOT_GRANTED_CARD_WIDGET("LENDING_PERMISSION_NOT_GRANTED_CARD_WIDGET")
|
||||
LENDING_PERMISSION_NOT_GRANTED_CARD_WIDGET("LENDING_PERMISSION_NOT_GRANTED_CARD_WIDGET"),
|
||||
LENDING_PERMISSION_KNOW_MORE_WIDGET("LENDING_PERMISSION_KNOW_MORE_WIDGET")
|
||||
}
|
||||
|
||||
@@ -177,7 +177,8 @@ class WidgetConfigDeserializer : JsonDeserializer<WidgetConfig> {
|
||||
LoanDetailsV2WidgetType.LENDING_PERMISSION_WIDGET.value -> {
|
||||
context?.deserialize(jsonObject, PermissionWidget::class.java)
|
||||
}
|
||||
LoanDetailsV2WidgetType.LENDING_PERMISSION_NOT_GRANTED_CARD_WIDGET.value -> {
|
||||
LoanDetailsV2WidgetType.LENDING_PERMISSION_NOT_GRANTED_CARD_WIDGET.value,
|
||||
LoanDetailsV2WidgetType.LENDING_PERMISSION_KNOW_MORE_WIDGET.value -> {
|
||||
context?.deserialize(jsonObject, PermissionNotGrantedCardWidget::class.java)
|
||||
}
|
||||
else -> {
|
||||
|
||||
Reference in New Issue
Block a user