TP-20119 add uitron bottomsheet using compose (#5572)
This commit is contained in:
committed by
GitHub Enterprise
parent
653f436314
commit
8dacfe7c49
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2023 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.navi.common.customview
|
||||
|
||||
import android.view.ViewStub
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.navi.common.R
|
||||
import com.navi.common.databinding.BottomSheetUitronBinding
|
||||
import com.navi.common.ui.fragment.BaseBottomSheet
|
||||
import com.navi.uitron.model.UiTronResponse
|
||||
import com.navi.uitron.render.UiTronRenderer
|
||||
import com.navi.uitron.viewmodel.UiTronViewModel
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class UiTronBottomSheet : BaseBottomSheet() {
|
||||
private lateinit var binding: BottomSheetUitronBinding
|
||||
private lateinit var bottomSheetId: String
|
||||
private lateinit var uiTronViewModel: UiTronViewModel
|
||||
private var uiTronResponse: UiTronResponse? = null
|
||||
|
||||
override fun setContainerView(viewStub: ViewStub) {
|
||||
viewStub.layoutResource = R.layout.bottom_sheet_uitron
|
||||
binding = DataBindingUtil.getBinding(viewStub.inflate())!!
|
||||
initUI()
|
||||
}
|
||||
|
||||
private fun initUI() {
|
||||
(binding.root as? ComposeView)?.let {
|
||||
it.setContent {
|
||||
UiTronRenderer(
|
||||
uiTronResponse?.data,
|
||||
uiTronViewModel
|
||||
).Render(composeViews = uiTronResponse?.parentComposeView.orEmpty())
|
||||
}
|
||||
}
|
||||
|
||||
lifecycleScope.launch {
|
||||
uiTronViewModel.handle.getStateFlow<String?>(bottomSheetId, null).collect {
|
||||
handleBottomSheetActions(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleBottomSheetActions(action: String?) {
|
||||
when (action) {
|
||||
DISMISS_ACTION -> {
|
||||
uiTronViewModel.handle[bottomSheetId] = null
|
||||
safelyDismissDialog()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override val screenName: String
|
||||
get() = TAG
|
||||
|
||||
companion object {
|
||||
const val TAG = "UITRON_BOTTOM_SHEET"
|
||||
const val DISMISS_ACTION = "dismiss"
|
||||
|
||||
fun getInstance(
|
||||
bottomSheetId: String,
|
||||
uiTronResponse: UiTronResponse?,
|
||||
uiTronViewModel: UiTronViewModel
|
||||
) =
|
||||
UiTronBottomSheet().apply {
|
||||
this.bottomSheetId = bottomSheetId
|
||||
this.uiTronResponse = uiTronResponse
|
||||
this.uiTronViewModel = uiTronViewModel
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
9
navi-common/src/main/res/layout/bottom_sheet_uitron.xml
Normal file
9
navi-common/src/main/res/layout/bottom_sheet_uitron.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<layout xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<androidx.compose.ui.platform.ComposeView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</layout>
|
||||
@@ -1,14 +1,16 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2023 by Navi Technologies Private Limited
|
||||
* * Copyright © 2023 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.navi.uitron.deserializer
|
||||
|
||||
import com.google.gson.JsonDeserializationContext
|
||||
import com.google.gson.JsonDeserializer
|
||||
import com.google.gson.JsonElement
|
||||
import com.navi.uitron.model.action.BottomSheetAction
|
||||
import com.navi.uitron.model.action.CtaAction
|
||||
import com.navi.uitron.model.action.MakeApiAction
|
||||
import com.navi.uitron.model.action.UpdateViewStateAction
|
||||
@@ -32,10 +34,13 @@ class UiTronActionDeserializer : JsonDeserializer<UiTronAction> {
|
||||
UiTronActionType.CtaAction.name -> {
|
||||
context?.deserialize(jsonObject, CtaAction::class.java)
|
||||
}
|
||||
UiTronActionType.BottomSheetAction.name -> {
|
||||
context?.deserialize(jsonObject, BottomSheetAction::class.java)
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2023 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.navi.uitron.model.action
|
||||
|
||||
import com.navi.uitron.model.data.UiTronAction
|
||||
|
||||
data class BottomSheetAction(
|
||||
val bottomSheetId: String? = null,
|
||||
val action: String? = null
|
||||
) : UiTronAction()
|
||||
@@ -38,7 +38,7 @@ data class UiTronFocusData(
|
||||
)
|
||||
|
||||
enum class UiTronActionType {
|
||||
UpdateViewState, ApiCall, CtaAction
|
||||
UpdateViewState, ApiCall, CtaAction, BottomSheetAction
|
||||
}
|
||||
|
||||
enum class ApiTagType {
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2023 by Navi Technologies Private Limited
|
||||
* * Copyright © 2023 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.navi.uitron.utils
|
||||
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import com.navi.base.model.CtaData
|
||||
import com.navi.uitron.model.action.BottomSheetAction
|
||||
import com.navi.uitron.model.action.CtaAction
|
||||
import com.navi.uitron.model.action.UpdateViewStateAction
|
||||
import com.navi.uitron.model.data.ExecutionType
|
||||
@@ -48,7 +50,12 @@ constructor(
|
||||
is CtaAction -> {
|
||||
ctaCallbackFlow.emit(uiTronAction.ctaData)
|
||||
}
|
||||
is BottomSheetAction -> {
|
||||
uiTronAction.bottomSheetId?.let {
|
||||
handle[it] = uiTronAction.action
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user