TP-84642 | Permission screen compliance changes (#12667)

This commit is contained in:
shreyansu raj
2024-09-20 20:29:02 +05:30
committed by GitHub
parent 98abfdc832
commit d6cb8eea52
4 changed files with 129 additions and 15 deletions

View File

@@ -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(

View File

@@ -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) {

View File

@@ -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")
}

View File

@@ -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 -> {