Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Room Park Android
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vladislav Bogdashkin
Room Park Android
Commits
0c141bec
Commit
0c141bec
authored
Apr 29, 2020
by
Vladislav Bogdashkin
🎣
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix estate offline behaviour
parent
65a0a1b2
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
80 additions
and
80 deletions
+80
-80
BigantoBaseController.kt
...iganto/visual/roompark/conductor/BigantoBaseController.kt
+1
-0
EstateRepository.kt
...to/visual/roompark/data/data_provider/EstateRepository.kt
+5
-54
DealContract.kt
...m/biganto/visual/roompark/domain/contract/DealContract.kt
+0
-1
favorites.kt
...om/biganto/visual/roompark/domain/interactor/favorites.kt
+6
-1
deals.kt
...in/java/com/biganto/visual/roompark/domain/model/deals.kt
+2
-0
estateUseCase.kt
.../biganto/visual/roompark/domain/use_case/estateUseCase.kt
+13
-1
ScreenController.kt
...l/roompark/presentation/screen/estate/ScreenController.kt
+15
-4
ScreenController.kt
...oompark/presentation/screen/favorites/ScreenController.kt
+3
-1
ScreenPresenter.kt
...roompark/presentation/screen/favorites/ScreenPresenter.kt
+11
-3
FavoritesAdapter.kt
...rk/presentation/screen/favorites/util/FavoritesAdapter.kt
+17
-5
favorite_card_viewholder.xml
app/src/main/res/layout/favorite_card_viewholder.xml
+6
-7
status_layout_toolbar.xml
app/src/main/res/layout/status_layout_toolbar.xml
+1
-3
No files found.
app/src/main/java/com/biganto/visual/roompark/conductor/BigantoBaseController.kt
View file @
0c141bec
...
...
@@ -102,6 +102,7 @@ abstract class BigantoBaseController<VS : BigantoBaseViewState,V: BigantoBaseCon
}
override
fun
handleBack
():
Boolean
{
detachDisposable
.
clear
()
router
.
popController
(
this
)
return
true
// return super.handleBack()
...
...
app/src/main/java/com/biganto/visual/roompark/data/data_provider/EstateRepository.kt
View file @
0c141bec
...
...
@@ -47,17 +47,16 @@ class EstateRepository @Inject constructor(
.
toList
().
toObservable
()
.
doOnError
(
Timber
::
e
)
){
apiList
,
dbList
->
if
(
dbList
.
isEmpty
())
return
@zip
apiList
apiList
.
forEach
{
estate
->
estate
.
setFavorite
(
true
)
estate
.
user
=
user
}
dbList
.
filterNotNull
()
.
filter
{
dbFav
->!
apiList
.
map
{
it
.
id
}.
contains
(
dbFav
.
id
)
}
.
let
{
db
.
deleteEstate
(
it
)
}
apiList
.
forEach
{
estate
->
estate
.
setFavorite
(
true
)
estate
.
user
=
user
}
return
@zip
apiList
}
.
flatMap
(
db
::
upsertEstates
)
...
...
@@ -72,54 +71,6 @@ class EstateRepository @Inject constructor(
.
map
{
it
.
map
{
deal
->
deal
.
estate
as
EstateEntity
}
}
.
doOnNext
{
db
.
refreshUser
(
user
)
}
private
val
getFavoritesApi
:
Observable
<
List
<
EstateEntity
>>
=
local
.
recentUser
()
.
flatMap
{
when
(
it
)
{
is
UserState
.
Authenticated
->
db
.
fetchUser
(
it
.
uuid
.
toInt
())
else
->
throw
CustomApiException
.
NotAuthorizedException
()
}
}
.
flatMap
{
user
->
api
.
getFavorites
(
user
.
authToken
)
.
doOnError
(
Timber
::
e
)
.
map
{
fromRawList
(
it
,
::
fromRaw
)
}
.
doOnNext
{
it
.
forEach
{
estate
->
estate
.
setFavorite
(
true
)
estate
.
user
=
user
}
}
.
doOnNext
(
db
::
blockingUpsert
)
.
doOnNext
{
db
.
refreshUser
(
user
)
}
}
private
val
getFavoritesDb
:
Observable
<
MutableList
<
EstateEntity
?>>?
=
local
.
recentUser
()
.
flatMap
{
when
(
it
)
{
is
UserState
.
Authenticated
->
db
.
fetchUser
(
it
.
uuid
.
toInt
()).
take
(
1
)
else
->
throw
CustomApiException
.
NotAuthorizedException
()
}
}
.
flatMap
{
db
.
getUserFavorites
(
it
.
uuid
)
.
doOnError
(
Timber
::
e
)
.
toList
().
toObservable
()
}
override
fun
getFavorites
(
user
:
UserEntity
):
Observable
<
List
<
EstateModel
>>
{
return
Observable
.
mergeDelayError
(
arrayListOf
(
fetchFavorites
(
user
),
getFavoritesDb
)
)
.
map
{
it
.
filterNotNull
()
}
.
map
{
fromEntity
(
it
,
::
fromEntity
)
}
.
doOnError
(
Timber
::
e
)
}
private
fun
fetchEstateDb
(
id
:
Int
)
=
db
.
getEstate
(
id
)
...
...
app/src/main/java/com/biganto/visual/roompark/domain/contract/DealContract.kt
View file @
0c141bec
...
...
@@ -21,5 +21,4 @@ interface DealContract{
fun
setDealRead
(
dealId
:
String
):
Completable
fun
fetchDeals
(
user
:
UserEntity
):
Observable
<
List
<
EstateEntity
>>
fun
fetchFavorites
(
user
:
UserEntity
):
Observable
<
List
<
EstateEntity
>>
fun
getFavorites
(
user
:
UserEntity
):
Observable
<
List
<
EstateModel
>>
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/domain/interactor/favorites.kt
View file @
0c141bec
...
...
@@ -15,6 +15,9 @@ class FavoritesInteractor @Inject constructor(
private
val
estateUseCase
:
EstateUseCase
)
{
fun
cachedFavorites
()
=
estateUseCase
.
prefetchFavorites
()
fun
getFavoritesForCurrentUser
()
=
estateUseCase
.
fetchFavorites
()
// Single.just(parkingEstateSample )
...
...
@@ -52,6 +55,7 @@ class FavoritesInteractor @Inject constructor(
albumId
=
10
,
multitourId
=
null
,
url
=
null
,
availableStatus
=
true
),
EstateModel
(
id
=
1905
,
...
...
@@ -81,7 +85,7 @@ class FavoritesInteractor @Inject constructor(
albumId
=
10
,
multitourId
=
null
,
url
=
null
),
,
availableStatus
=
true
),
EstateModel
(
id
=
1774
,
type
=
FlatType
.
valueOf
(
"flat"
.
toUpperCase
()),
...
...
@@ -118,6 +122,7 @@ class FavoritesInteractor @Inject constructor(
albumId
=
10
,
url
=
null
,
multitourId
=
5790
,
availableStatus
=
true
// ,explications = arrayListOf<ExplicationListModel>(
// ExplicationListModel(
// planId = 0,
...
...
app/src/main/java/com/biganto/visual/roompark/domain/model/deals.kt
View file @
0c141bec
...
...
@@ -51,6 +51,7 @@ data class EstateModel(
val
id
:
Int
,
val
type
:
FlatType
,
val
number
:
String
,
val
availableStatus
:
Boolean
,
val
sectionBegin
:
Int
?=
null
,
val
sectionEnd
:
Int
?=
null
,
val
planPNG
:
PlanModel
?,
...
...
@@ -90,6 +91,7 @@ fun fromEntity(entity:EstateEntity): EstateModel {
id
=
entity
.
id
,
type
=
FlatType
.
valueOf
(
entity
.
type
.
toUpperCase
()),
number
=
entity
.
number
,
availableStatus
=
entity
.
available
,
sectionBegin
=
entity
.
sectionBegin
,
sectionEnd
=
entity
.
sectionEnd
,
planPNG
=
null
,
...
...
app/src/main/java/com/biganto/visual/roompark/domain/use_case/estateUseCase.kt
View file @
0c141bec
package
com.biganto.visual.roompark.domain.use_case
import
com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity
import
com.biganto.visual.roompark.domain.contract.AuthContract
import
com.biganto.visual.roompark.domain.contract.DealContract
import
com.biganto.visual.roompark.domain.contract.FlatPlanContract
import
com.biganto.visual.roompark.domain.model.EstateModel
import
com.biganto.visual.roompark.domain.model.fromEntity
import
io.reactivex.Observable
import
javax.inject.Inject
...
...
@@ -17,9 +19,19 @@ class EstateUseCase @Inject constructor(
private
val
authContract
:
AuthContract
)
{
fun
prefetchFavorites
()
=
authContract
.
currentUser
()
.
map
{
user
->
user
.
estates
?.
asSequence
()
?.
map
{
it
as
EstateEntity
}
?.
filter
{
it
.
favorite
}
?.
filterNotNull
()
?.
toList
()
}
.
map
{
fromEntity
(
it
,
::
fromEntity
)
}
fun
fetchFavorites
():
Observable
<
List
<
EstateModel
>>
=
authContract
.
currentUser
()
.
flatMap
(
contract
::
getFavorites
)
.
flatMap
(
contract
::
fetchFavorites
)
.
map
{
fromEntity
(
it
,
::
fromEntity
)
}
fun
getEstate
(
estateId
:
Int
)
=
contract
.
getEstate
(
estateId
)
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/estate/ScreenController.kt
View file @
0c141bec
...
...
@@ -215,7 +215,8 @@ class EstateScreenController :
if
(
it
.
scrollY
>
flatTitle
.
measuredHeight
)
{
val
status
=
estateModel
?.
to
(
StatusToolbarModel
(
StatusState
.
AVAILABLE
if
(
estateModel
?.
availableStatus
==
true
)
StatusState
.
AVAILABLE
else
StatusState
.
SOLD_OUT
,
null
,
resources
?.
getString
(
estateModel
?.
type
?.
typeShortString
()
?:
-
1
...
...
@@ -229,7 +230,8 @@ class EstateScreenController :
}
else
toolBar
.
setToolbar
(
null
,
StatusToolbarModel
(
StatusState
.
AVAILABLE
,
null
,
null
if
(
estateModel
?.
availableStatus
==
true
)
StatusState
.
AVAILABLE
else
StatusState
.
SOLD_OUT
,
null
,
null
)
)
}
...
...
@@ -237,7 +239,8 @@ class EstateScreenController :
}
private
fun
bindRecycler
()
{
flatInfoRecyclerView
.
isNestedScrollingEnabled
=
true
flatScroll
.
isNestedScrollingEnabled
=
false
flatInfoRecyclerView
.
isNestedScrollingEnabled
=
false
flatInfoRecyclerView
.
layoutManager
=
LinearLayoutManager
(
activity
,
RecyclerView
.
VERTICAL
,
false
)
flatInfoRecyclerView
.
adapter
=
FlatInfoAdapter
()
...
...
@@ -378,8 +381,15 @@ class EstateScreenController :
}
private
fun
setEstateInfo
(
estateModel
:
EstateModel
?){
this
.
estateModel
=
estateModel
toolBar
.
setToolbar
(
null
,
StatusToolbarModel
(
StatusState
.
AVAILABLE
,
null
,
null
)
null
,
StatusToolbarModel
(
if
(
estateModel
?.
availableStatus
==
true
)
StatusState
.
AVAILABLE
else
StatusState
.
SOLD_OUT
,
null
,
null
)
)
estateModel
?.
let
{
estate
->
flatTitle
.
text
=
resources
?.
getString
(
estate
.
type
.
typeShortString
()
...
...
@@ -402,6 +412,7 @@ class EstateScreenController :
.
into
(
tourScreen
)
}
when
(
estateModel
?.
type
){
FlatType
.
FLAT
->
{
flatTypeView
.
setGone
(
false
)
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/favorites/ScreenController.kt
View file @
0c141bec
...
...
@@ -66,6 +66,7 @@ class FavoritesScreenController :
}
private
fun
setToolbar
(){
R
.
string
.
area_living
favoritesRecyclerView
.
isNestedScrollingEnabled
=
false
toolBar
.
setToolbar
(
...
...
@@ -76,7 +77,7 @@ class FavoritesScreenController :
}
private
fun
bindRecycler
()
{
favoritesRecyclerView
.
isNestedScrollingEnabled
=
tru
e
favoritesRecyclerView
.
isNestedScrollingEnabled
=
fals
e
favoritesRecyclerView
.
layoutManager
=
LinearLayoutManager
(
activity
,
RecyclerView
.
VERTICAL
,
false
)
favoritesRecyclerView
.
adapter
=
FavoritesListAdapter
()
...
...
@@ -104,6 +105,7 @@ class FavoritesScreenController :
is
FavoritesScreenViewState
.
FavoriteEstatesLoaded
->
render
(
viewState
)
is
FavoritesScreenViewState
.
SomeError
->
render
(
viewState
)
is
FavoritesScreenViewState
.
ToursLoaded
->
render
(
viewState
)
is
FavoritesScreenViewState
.
RestoreView
->
render
(
viewState
)
}
}
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/favorites/ScreenPresenter.kt
View file @
0c141bec
...
...
@@ -34,14 +34,21 @@ class FavoritesScreenPresenter @Inject constructor(
override
fun
bindIntents
()
{
val
prefetchCards
=
interactor
.
getFavoritesForCurrentUser
()
val
prefetchCards
=
interactor
.
cachedFavorites
()
.
doOnNext
{
restoreModel
.
list
=
it
.
toMutableList
()
}
.
map
{
FavoritesScreenViewState
.
FavoriteEstatesLoaded
(
it
)
}
.
map
<
FavoritesScreenViewState
>
{
FavoritesScreenViewState
.
FavoriteEstatesLoaded
(
it
)
}
.
onErrorReturn
(
::
parseError
)
val
invalidateData
=
interactor
.
getFavoritesForCurrentUser
()
.
doOnNext
{
restoreModel
.
list
=
it
.
toMutableList
()
}
.
map
<
FavoritesScreenViewState
>
{
FavoritesScreenViewState
.
FavoriteEstatesLoaded
(
it
)
}
.
onErrorReturn
(
::
parseError
)
val
onStartTours
=
intent
(
FavoritesScreen
::
tourCardClicked
)
.
flatMap
{
estate
->
toursInteractor
.
getEstateTourList
(
estate
)
.
map
{
FavoritesScreenViewState
.
ToursLoaded
(
it
)
}
.
map
<
FavoritesScreenViewState
>
{
FavoritesScreenViewState
.
ToursLoaded
(
it
)
}
.
onErrorReturn
(
::
parseError
)
}
...
...
@@ -49,6 +56,7 @@ class FavoritesScreenPresenter @Inject constructor(
arrayListOf
(
restoreStateObservable
,
prefetchCards
,
invalidateData
,
onStartTours
)
)
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/favorites/util/FavoritesAdapter.kt
View file @
0c141bec
...
...
@@ -14,6 +14,7 @@ import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyc
import
com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder
import
com.biganto.visual.roompark.util.extensions.setGone
import
com.biganto.visual.roompark.util.extensions.startUrl
import
com.google.android.material.textview.MaterialTextView
import
com.jakewharton.rxbinding3.view.clicks
import
io.reactivex.Observable
import
io.reactivex.subjects.PublishSubject
...
...
@@ -39,6 +40,9 @@ class FavoritesListAdapter : CommonRecyclerAdapter<FavoriteViewHolder,EstateMode
class
FavoriteViewHolder
(
itemView
:
View
)
:
CommonViewHolder
<
EstateModel
>(
itemView
)
{
@BindView
(
R
.
id
.
avaliable_text
)
lateinit
var
availableText
:
MaterialTextView
@BindView
(
R
.
id
.
avaliable_status
)
lateinit
var
availableStatus
:
View
@BindView
(
R
.
id
.
object_card_title
)
lateinit
var
estateTitle
:
TextView
@BindView
(
R
.
id
.
common_info_block
)
lateinit
var
commonInfo
:
View
@BindView
(
R
.
id
.
start_tour_button
)
lateinit
var
startTour
:
View
...
...
@@ -62,7 +66,8 @@ class FavoriteViewHolder(itemView: View) : CommonViewHolder<EstateModel>(itemVie
ButterKnife
.
bind
(
this
,
itemView
)
}
val
onStartTourObs
:
Observable
<
EstateModel
>
get
()
=
startTour
.
clicks
().
map
{
bindedModel
}
val
onStartTourObs
:
Observable
<
EstateModel
>
get
()
=
startTour
.
clicks
().
filter
{
bindedModel
.
availableStatus
}.
map
{
bindedModel
}
override
fun
onViewBound
(
model
:
EstateModel
)
{
estateTitle
.
text
=
...
...
@@ -74,6 +79,13 @@ class FavoriteViewHolder(itemView: View) : CommonViewHolder<EstateModel>(itemVie
startTour
.
setGone
(
model
.
multitourId
==
null
)
availableStatus
.
isEnabled
=
model
.
availableStatus
availableText
.
text
=
itemView
.
resources
.
getString
(
if
(
model
.
availableStatus
)
R
.
string
.
estate_avalibale
else
R
.
string
.
estate_sold_out
)
siteLink
.
setGone
(
model
.
url
==
null
)
siteLinkDivider
.
setGone
(
model
.
url
==
null
)
model
.
url
?.
let
{
url
->
...
...
@@ -97,11 +109,11 @@ class FavoriteViewHolder(itemView: View) : CommonViewHolder<EstateModel>(itemVie
if
(
info
.
area
==
null
)
info1
.
visibility
=
View
.
GONE
else
{
info4
.
title
().
text
=
"Общая, м²"
;
info4
.
text
().
text
=
info
.
area
.
toString
()}
if
(
info
.
price_meter
==
null
)
info1
.
visibility
=
View
.
GONE
else
{
info5
.
title
().
text
=
"Цена за м²"
;
info5
.
text
().
text
=
info
.
price_meter
.
toRubles
()}
if
(
info
.
price_meter
==
null
&&
!
bindedModel
.
availableStatus
)
info1
.
visibility
=
View
.
GONE
else
{
info5
.
title
().
text
=
"Цена за м²"
;
info5
.
text
().
text
=
info
.
price_meter
?
.
toRubles
()}
if
(
info
.
price
==
null
)
info1
.
visibility
=
View
.
GONE
else
{
info6
.
title
().
text
=
"Стоимость"
;
info6
.
text
().
text
=
info
.
price
.
toRubles
()}
if
(
info
.
price
==
null
&&
!
bindedModel
.
availableStatus
)
info1
.
visibility
=
View
.
GONE
else
{
info6
.
title
().
text
=
"Стоимость"
;
info6
.
text
().
text
=
info
.
price
?
.
toRubles
()}
if
(
true
)
info7
.
visibility
=
View
.
GONE
else
{
info7
.
title
().
text
=
"вщщ"
;
info7
.
text
().
text
=
info
.
building
.
toString
()}
...
...
app/src/main/res/layout/favorite_card_viewholder.xml
View file @
0c141bec
...
...
@@ -18,17 +18,16 @@
android:padding=
"16dp"
>
<FrameLayout
android:id=
"@+id/
feed_read
"
android:id=
"@+id/
avaliable_status
"
android:layout_width=
"12dp"
android:layout_height=
"12dp"
android:background=
"@drawable/new_feed_icon"
android:backgroundTint=
"@color/colorAccent"
android:background=
"@drawable/available_status"
android:visibility=
"visible"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<TextView
android:id=
"@+id/
feed_date_text_view3
"
<
com.google.android.material.textview.Material
TextView
android:id=
"@+id/
avaliable_text
"
style=
"@style/LiteText.Accent"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
...
...
@@ -38,7 +37,7 @@
android:visibility=
"visible"
app:layout_constraintBottom_toBottomOf=
"@+id/feed_read"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toEndOf=
"@+id/
feed_read
"
app:layout_constraintStart_toEndOf=
"@+id/
avaliable_status
"
app:layout_constraintTop_toTopOf=
"@+id/feed_read"
/>
<com.google.android.material.textview.MaterialTextView
...
...
@@ -50,7 +49,7 @@
android:text=
"\n"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/
feed_date_text_view3
"
/>
app:layout_constraintTop_toBottomOf=
"@+id/
avaliable_text
"
/>
<include
android:id=
"@+id/header_divider"
...
...
app/src/main/res/layout/status_layout_toolbar.xml
View file @
0c141bec
...
...
@@ -16,7 +16,6 @@
android:layout_marginTop=
"8dp"
android:layout_marginBottom=
"8dp"
android:background=
"@drawable/available_status"
android:fitsSystemWindows=
"true"
android:visibility=
"visible"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
...
...
@@ -27,9 +26,8 @@
style=
"@style/Accent_Minor_TextView"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_margin=
"4dp"
android:layout_marginStart=
"8dp"
android:fitsSystemWindows=
"true"
android:text=
"СВОБОДНА"
app:layout_constraintBottom_toBottomOf=
"@+id/status_icon"
app:layout_constraintStart_toEndOf=
"@+id/status_icon"
app:layout_constraintTop_toTopOf=
"@+id/status_icon"
/>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment