Commit 4ff314c8 authored by Vladislav Bogdashkin's avatar Vladislav Bogdashkin 🎣

tours layout

parent 692f8415
...@@ -10,16 +10,16 @@ import javax.inject.Inject ...@@ -10,16 +10,16 @@ import javax.inject.Inject
*/ */
class ToursInteractor @Inject constructor( class ToursInteractor @Inject constructor(
val downloadUseCase: DownloadUseCase, private val downloadUseCase: DownloadUseCase,
val tourUseCase:TourPreviewsUseCase private val tourUseCase:TourPreviewsUseCase
){ ){
fun getEstateTourList(estate:EstateModel){ fun getEstateTourList(estate:EstateModel) =
tourUseCase.fetchTourOffer(estate.multitourId tourUseCase.fetchTourOffer(estate.multitourId
?: error("Отсутсвуют виртуальные туры для данного объекта"),estate.id) ?: error("Отсутсвуют виртуальные туры для данного объекта"),estate.id)
}
fun downloadTour(tourId:String,cancellationToken: DownloadUseCase.CancellationToken) =
downloadUseCase.startTourDownloading(tourId,cancellationToken)
} }
\ No newline at end of file
...@@ -15,5 +15,6 @@ interface EstateScreen : BigantoBaseContract<EstateScreenViewState> { ...@@ -15,5 +15,6 @@ interface EstateScreen : BigantoBaseContract<EstateScreenViewState> {
fun switchElectric(): Observable<Pair<Int,Boolean>> fun switchElectric(): Observable<Pair<Int,Boolean>>
fun showCommonInfo(): Observable<Int> fun showCommonInfo(): Observable<Int>
fun showExplication(): Observable<Int> fun showExplication(): Observable<Int>
fun tourCardClicked(): Observable<Int>
} }
...@@ -70,6 +70,12 @@ class EstateScreenController : ...@@ -70,6 +70,12 @@ class EstateScreenController :
.map { planTypesTabLayout.selectedTabPosition } .map { planTypesTabLayout.selectedTabPosition }
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
override fun tourCardClicked(): Observable<Int> =
startToourCard.clicks()
.map { 1 }
.debounce(320L, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
private fun ViewGroup.switchMatch() = private fun ViewGroup.switchMatch() =
this.findViewById<SwitchMaterial>(R.id.switch1) this.findViewById<SwitchMaterial>(R.id.switch1)
.checkedChanges() .checkedChanges()
...@@ -110,6 +116,10 @@ class EstateScreenController : ...@@ -110,6 +116,10 @@ class EstateScreenController :
@Inject @Inject
override lateinit var injectedPresenter: EstateScreenPresenter override lateinit var injectedPresenter: EstateScreenPresenter
@BindView(R.id.start_tour_image_view)
lateinit var startToourCard: View
@BindView(R.id.flatTypesCustomView) @BindView(R.id.flatTypesCustomView)
lateinit var flatTypeView: ViewGroup lateinit var flatTypeView: ViewGroup
...@@ -251,6 +261,8 @@ class EstateScreenController : ...@@ -251,6 +261,8 @@ class EstateScreenController :
is EstateScreenViewState.PlanTypeSelected -> render(viewState) is EstateScreenViewState.PlanTypeSelected -> render(viewState)
is EstateScreenViewState.SomeError -> render(viewState) is EstateScreenViewState.SomeError -> render(viewState)
is EstateScreenViewState.ShowEstateInfo -> render(viewState) is EstateScreenViewState.ShowEstateInfo -> render(viewState)
is EstateScreenViewState.ToursLoaded -> render(viewState)
} }
} }
...@@ -302,12 +314,12 @@ class EstateScreenController : ...@@ -302,12 +314,12 @@ class EstateScreenController :
} }
private fun render(viewState: EstateScreenViewState.ShowEstateInfo) { private fun render(viewState: EstateScreenViewState.ShowEstateInfo) {
(flatInfoRecyclerView.adapter as FlatInfoAdapter).setItems(viewState.info) (flatInfoRecyclerView.adapter as FlatInfoAdapter).setItems(viewState.info)
} }
private fun render(viewState: EstateScreenViewState.ToursLoaded) {
}
private fun render(viewState: EstateScreenViewState.LoadPlanTypes) { private fun render(viewState: EstateScreenViewState.LoadPlanTypes) {
planTypesTabLayout.removeAllTabs() planTypesTabLayout.removeAllTabs()
......
...@@ -5,6 +5,7 @@ import androidx.annotation.StringRes ...@@ -5,6 +5,7 @@ import androidx.annotation.StringRes
import com.biganto.visual.roompark.R import com.biganto.visual.roompark.R
import com.biganto.visual.roompark.conductor.BigantoBasePresenter import com.biganto.visual.roompark.conductor.BigantoBasePresenter
import com.biganto.visual.roompark.domain.interactor.EstateInteractor import com.biganto.visual.roompark.domain.interactor.EstateInteractor
import com.biganto.visual.roompark.domain.interactor.ToursInteractor
import com.biganto.visual.roompark.domain.model.* import com.biganto.visual.roompark.domain.model.*
import com.biganto.visual.roompark.presentation.screen.estate.util.DisplayInfoModel import com.biganto.visual.roompark.presentation.screen.estate.util.DisplayInfoModel
import com.biganto.visual.roompark.util.extensions.toRubly import com.biganto.visual.roompark.util.extensions.toRubly
...@@ -23,6 +24,7 @@ import javax.inject.Named ...@@ -23,6 +24,7 @@ import javax.inject.Named
class EstateScreenPresenter @Inject constructor( class EstateScreenPresenter @Inject constructor(
private val interactor: EstateInteractor, private val interactor: EstateInteractor,
private val toursInteractor: ToursInteractor,
private val context: Context, private val context: Context,
@Named(SELECTED_ESTATE_ID_KEY) private val estateId:Int @Named(SELECTED_ESTATE_ID_KEY) private val estateId:Int
) )
...@@ -53,7 +55,7 @@ class EstateScreenPresenter @Inject constructor( ...@@ -53,7 +55,7 @@ class EstateScreenPresenter @Inject constructor(
val fetchPlan = intent(EstateScreen::planTypesTabSelected) val fetchPlan = intent(EstateScreen::planTypesTabSelected)
.map { planList?.get(it) } .map { planList?.get(it) }
.flatMap {planPreset -> .flatMap { planPreset ->
interactor.getPlan(planPreset) interactor.getPlan(planPreset)
.map<EstateScreenViewState> { plan -> EstateScreenViewState.LoadPlan(plan) } .map<EstateScreenViewState> { plan -> EstateScreenViewState.LoadPlan(plan) }
.startWith( .startWith(
...@@ -66,9 +68,9 @@ class EstateScreenPresenter @Inject constructor( ...@@ -66,9 +68,9 @@ class EstateScreenPresenter @Inject constructor(
EstateScreenViewState.ShowEstateInfo( EstateScreenViewState.ShowEstateInfo(
showType showType
,if (showType== InfoShowType.COMMON_INFO) , if (showType == InfoShowType.COMMON_INFO)
mapCommonInfo(estate?.commonInfo) mapCommonInfo(estate?.commonInfo)
else mapCommonInfo(planPreset.explication) else mapCommonInfo(planPreset.explication)
) )
) )
) )
...@@ -105,26 +107,39 @@ class EstateScreenPresenter @Inject constructor( ...@@ -105,26 +107,39 @@ class EstateScreenPresenter @Inject constructor(
val showInfo = intent(EstateScreen::showCommonInfo) val showInfo = intent(EstateScreen::showCommonInfo)
.doOnNext { showType = InfoShowType.COMMON_INFO } .doOnNext { showType = InfoShowType.COMMON_INFO }
.map { estate?.commonInfo} .map { estate?.commonInfo }
.map (::mapCommonInfo) .map(::mapCommonInfo)
.map { EstateScreenViewState.ShowEstateInfo(showType,it) } .map { EstateScreenViewState.ShowEstateInfo(showType, it) }
val showExplication = intent(EstateScreen::showExplication) val showExplication = intent(EstateScreen::showExplication)
.doOnNext { showType = InfoShowType.EXPLICATIONS } .doOnNext { showType = InfoShowType.EXPLICATIONS }
.map { planList?.get(it)?.explication} .map { planList?.get(it)?.explication }
.map (::mapCommonInfo) .map(::mapCommonInfo)
.map { EstateScreenViewState.ShowEstateInfo(showType,it) } .map { EstateScreenViewState.ShowEstateInfo(showType, it) }
val state = restoreStateObservable
.mergeWith(prefetchCards) val onStartTours = intent(EstateScreen::tourCardClicked)
.mergeWith(fetchPlans) .map { estate }
.mergeWith(fetchPlan) .flatMap {estate -> toursInteractor.getEstateTourList(estate)
.mergeWith(switchElectric) .map { EstateScreenViewState.ToursLoaded(it) }
.mergeWith(switchFurn) }
.mergeWith(switchSizes)
.mergeWith(switchWalls)
.mergeWith(showInfo) val state = Observable.mergeDelayError(
.mergeWith(showExplication) arrayListOf(
restoreStateObservable,
prefetchCards,
fetchPlans,
fetchPlan,
switchElectric,
switchFurn,
switchSizes,
switchWalls,
showInfo,
onStartTours,
showExplication
)
)
.doOnError { Timber.e(it) } .doOnError { Timber.e(it) }
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
......
...@@ -3,6 +3,7 @@ package com.biganto.visual.roompark.presentation.screen.estate ...@@ -3,6 +3,7 @@ package com.biganto.visual.roompark.presentation.screen.estate
import com.biganto.visual.roompark.conductor.BigantoBaseViewState import com.biganto.visual.roompark.conductor.BigantoBaseViewState
import com.biganto.visual.roompark.domain.model.EstateModel import com.biganto.visual.roompark.domain.model.EstateModel
import com.biganto.visual.roompark.domain.model.PlanPresetModel import com.biganto.visual.roompark.domain.model.PlanPresetModel
import com.biganto.visual.roompark.domain.model.TourModel
import com.biganto.visual.roompark.presentation.screen.estate.util.DisplayInfoModel import com.biganto.visual.roompark.presentation.screen.estate.util.DisplayInfoModel
import com.biganto.visual.roompark.util.monades.ExceptionString import com.biganto.visual.roompark.util.monades.ExceptionString
...@@ -19,4 +20,5 @@ sealed class EstateScreenViewState : BigantoBaseViewState() { ...@@ -19,4 +20,5 @@ sealed class EstateScreenViewState : BigantoBaseViewState() {
class LoadPlan(val planBody:String) : EstateScreenViewState() class LoadPlan(val planBody:String) : EstateScreenViewState()
class SomeError(val exception: ExceptionString) : EstateScreenViewState() class SomeError(val exception: ExceptionString) : EstateScreenViewState()
class ShowEstateInfo(val showType: InfoShowType, val info:List<DisplayInfoModel>) : EstateScreenViewState() class ShowEstateInfo(val showType: InfoShowType, val info:List<DisplayInfoModel>) : EstateScreenViewState()
class ToursLoaded(val tours:List<TourModel>) : EstateScreenViewState()
} }
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/tour_preview_imageView"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="19dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_bell_on" />
<com.google.android.material.textview.MaterialTextView
style="@style/Default_TextView"
android:id="@+id/tour_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:ellipsize="end"
android:text="Тур"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/tour_status_imageView"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/tour_preview_imageView"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/tour_status_imageView"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_back" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/playTourCardOpacityLight">
<com.google.android.material.card.MaterialCardView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginEnd="32dp"
app:cardElevation="2dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.32999998">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/toursList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:layout_marginBottom="8dp"
android:orientation="vertical"
tools:itemCount="3"
tools:listitem="@layout/tour_chooser_viewholder">
</androidx.recyclerview.widget.RecyclerView>
</com.google.android.material.card.MaterialCardView>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment