Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
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
f85ff40b
Commit
f85ff40b
authored
Apr 22, 2020
by
Vladislav Bogdashkin
🎣
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/minor_ui_fixes' into develop
parents
56ddc3d9
463ed781
Changes
24
Show whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
608 additions
and
116 deletions
+608
-116
StartToursDownloadingDialogController.kt
...ogs/tour_chooser/StartToursDownloadingDialogController.kt
+165
-0
TourChooserDialogController.kt
...uctor/dialogs/tour_chooser/TourChooserDialogController.kt
+1
-1
EstateRepository.kt
...to/visual/roompark/data/data_provider/EstateRepository.kt
+22
-0
PlanRepository.kt
...anto/visual/roompark/data/data_provider/PlanRepository.kt
+57
-6
IDb.kt
...ava/com/biganto/visual/roompark/data/repository/db/IDb.kt
+2
-0
RequeryRepository.kt
.../roompark/data/repository/db/requrey/RequeryRepository.kt
+6
-0
FileModule.kt
...iganto/visual/roompark/data/repository/file/FileModule.kt
+28
-1
DealContract.kt
...m/biganto/visual/roompark/domain/contract/DealContract.kt
+5
-0
FlatPlanContract.kt
...ganto/visual/roompark/domain/contract/FlatPlanContract.kt
+5
-0
settings.kt
...com/biganto/visual/roompark/domain/interactor/settings.kt
+7
-2
planTypesUseCase.kt
...ganto/visual/roompark/domain/use_case/planTypesUseCase.kt
+50
-29
ScreenController.kt
...l/roompark/presentation/screen/estate/ScreenController.kt
+47
-32
ScreenPresenter.kt
...al/roompark/presentation/screen/estate/ScreenPresenter.kt
+30
-22
ScreenViewState.kt
...al/roompark/presentation/screen/estate/ScreenViewState.kt
+1
-0
ScreenContract.kt
...l/roompark/presentation/screen/settings/ScreenContract.kt
+1
-1
ScreenController.kt
...roompark/presentation/screen/settings/ScreenController.kt
+15
-2
ScreenPresenter.kt
.../roompark/presentation/screen/settings/ScreenPresenter.kt
+36
-14
ScreenController.kt
.../roompark/presentation/screen/to_flat/ScreenController.kt
+8
-1
ScreenPresenter.kt
...l/roompark/presentation/screen/to_flat/ScreenPresenter.kt
+1
-0
ScreenViewState.kt
...l/roompark/presentation/screen/to_flat/ScreenViewState.kt
+1
-0
download_tour_layout.xml
app/src/main/res/layout-v23/download_tour_layout.xml
+5
-1
tours_chooser_screen.xml
app/src/main/res/layout/tours_chooser_screen.xml
+4
-4
tours_download_dialog_screen.xml
app/src/main/res/layout/tours_download_dialog_screen.xml
+104
-0
strings.xml
app/src/main/res/values/strings.xml
+7
-0
No files found.
app/src/main/java/com/biganto/visual/roompark/conductor/dialogs/tour_chooser/StartToursDownloadingDialogController.kt
0 → 100644
View file @
f85ff40b
package
com.biganto.visual.roompark.conductor.dialogs.tour_chooser
import
android.content.Context
import
android.os.Bundle
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
android.widget.Button
import
android.widget.ImageView
import
androidx.annotation.LayoutRes
import
com.biganto.visual.roompark.R
import
com.biganto.visual.roompark.base.BaseRoomParkActivity
import
com.biganto.visual.roompark.base.RoomParkApplication
import
com.biganto.visual.roompark.base.RoomParkMainActivity
import
com.biganto.visual.roompark.data.repository.file.FileModule
import
com.biganto.visual.roompark.di.dagger.ActivityModule
import
com.biganto.visual.roompark.di.dagger.AppComponent
import
com.biganto.visual.roompark.di.dagger.PerScreen
import
com.biganto.visual.roompark.domain.interactor.SettingsInteractor
import
com.biganto.visual.roompark.domain.model.bytesToSize
import
com.biganto.visual.roompark.util.view_utils.snackbar.ISnackBarProvider
import
com.bluelinelabs.conductor.Controller
import
com.google.android.material.textview.MaterialTextView
import
com.jakewharton.rxbinding3.view.clicks
import
dagger.Binds
import
dagger.BindsInstance
import
dagger.Component
import
dagger.Module
import
io.reactivex.android.schedulers.AndroidSchedulers
import
io.reactivex.disposables.CompositeDisposable
import
io.reactivex.schedulers.Schedulers
import
timber.log.Timber
import
java.util.concurrent.TimeUnit
import
javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 09.04.2019.
*/
private
const
val
TOTAL_SIZE_DOWNLOAD_KEY
=
"TOURS_TO_DOWNLOAD_OVERALL_SIZE"
class
StartToursDownloadingDialogController
:
Controller
{
constructor
(
args
:
Bundle
)
:
super
(
args
)
constructor
(
size
:
Long
)
:
super
(
Bundle
().
apply
{
putLong
(
TOTAL_SIZE_DOWNLOAD_KEY
,
size
)
}
)
private
val
detachDisposable
=
CompositeDisposable
()
override
fun
onDetach
(
view
:
View
)
{
detachDisposable
.
clear
()
super
.
onDetach
(
view
)
}
@Inject
lateinit
var
downloader
:
SettingsInteractor
@Inject
lateinit
var
file
:
FileModule
lateinit
var
snackbar
:
ISnackBarProvider
@Inject
lateinit
var
rpActivity
:
RoomParkMainActivity
override
fun
onContextAvailable
(
context
:
Context
)
{
super
.
onContextAvailable
(
context
)
DaggerStartToursDownloadingDialogScreenComponent
.
factory
()
.
create
(
RoomParkApplication
.
component
,
activity
as
RoomParkMainActivity
)
.
inject
(
this
)
}
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
):
View
{
val
view
=
inflater
.
inflate
(
getLayoutId
(),
container
,
false
)
snackbar
=
ActivityModule
.
provideSnackBar
(
rpActivity
)
args
.
getLong
(
TOTAL_SIZE_DOWNLOAD_KEY
).
let
{
view
.
findViewById
<
MaterialTextView
>(
R
.
id
.
all_tours_size_textView
)
.
text
=
resources
?.
getString
(
R
.
string
.
download_all_tours_size_title
,
it
.
bytesToSize
())
}
file
.
freeSpace
.
bytesToSize
().
let
{
view
.
findViewById
<
MaterialTextView
>(
R
.
id
.
disk_size_textView
)
.
text
=
resources
?.
getString
(
R
.
string
.
download_all_tours_disk_size_title
,
it
)
}
view
.
findViewById
<
Button
>(
R
.
id
.
alert_dismiss_button
)
.
setOnClickListener
{
handleBack
()
}
view
.
findViewById
<
ImageView
>(
R
.
id
.
close_current_button
)
.
setOnClickListener
{
handleBack
()
}
detachDisposable
.
add
(
view
.
findViewById
<
Button
>(
R
.
id
.
alert_ok_button
)
.
clicks
()
.
debounce
(
200
,
TimeUnit
.
MILLISECONDS
)
.
observeOn
(
Schedulers
.
io
())
.
flatMap
{
downloader
.
startToursDownloading
()
// .subscribeOn(Schedulers.computation())
.
doOnComplete
{
Timber
.
d
(
" C "
)
}
}
.
doOnComplete
{
Timber
.
d
(
" X "
)
}
// .subscribeOn(AndroidSchedulers.mainThread())
.
doOnComplete
{
Timber
.
d
(
" Xss "
)
}
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
({
Timber
.
d
(
" SUBSCRIBER "
)
snackbar
.
showSnackBar
(
R
.
string
.
download_all_tours_start_snackbar_message
)
handleBack
()
},{
Timber
.
e
(
it
)
snackbar
.
showSnackBar
(
R
.
string
.
download_all_tours_errors_snackbar_message
)
handleBack
()
}
)
)
view
.
findViewById
<
View
>(
R
.
id
.
close_current_button
).
setOnClickListener
{
handleBack
()
}
// view.setOnClickListener { handleBack() }
return
view
}
@LayoutRes
fun
getLayoutId
()
=
R
.
layout
.
tours_download_dialog_screen
override
fun
handleBack
():
Boolean
{
return
router
.
popCurrentController
()
}
}
@PerScreen
@Component
(
modules
=
[
StartToursDownloadingDialogScreenModule
::
class
],
dependencies
=
[
AppComponent
::
class
])
interface
StartToursDownloadingDialogScreenComponent
{
@Component
.
Factory
interface
Factory
{
fun
create
(
appComponent
:
AppComponent
,
@BindsInstance
activity
:
RoomParkMainActivity
):
StartToursDownloadingDialogScreenComponent
}
fun
inject
(
controller
:
StartToursDownloadingDialogController
)
}
@Module
abstract
class
StartToursDownloadingDialogScreenModule
{
@PerScreen
@Binds
abstract
fun
provideActivity
(
activity
:
RoomParkMainActivity
):
BaseRoomParkActivity
}
app/src/main/java/com/biganto/visual/roompark/conductor/dialogs/tour_chooser/TourChooserDialogController.kt
View file @
f85ff40b
...
@@ -80,7 +80,7 @@ class ChooseTourDialogController : Controller {
...
@@ -80,7 +80,7 @@ class ChooseTourDialogController : Controller {
.
subscribe
(
::
onTourClicked
)
.
subscribe
(
::
onTourClicked
)
)
)
view
.
findViewById
<
View
>(
R
.
id
.
close_current_button
).
setOnClickListener
{
handleBack
()
}
//
view.findViewById<View>(R.id.close_current_button).setOnClickListener { handleBack() }
view
.
setOnClickListener
{
handleBack
()
}
view
.
setOnClickListener
{
handleBack
()
}
return
view
return
view
...
...
app/src/main/java/com/biganto/visual/roompark/data/data_provider/EstateRepository.kt
View file @
f85ff40b
...
@@ -6,6 +6,7 @@ import com.biganto.visual.roompark.data.repository.api.room_park.IRoomParkApi
...
@@ -6,6 +6,7 @@ import com.biganto.visual.roompark.data.repository.api.room_park.IRoomParkApi
import
com.biganto.visual.roompark.data.repository.db.IDb
import
com.biganto.visual.roompark.data.repository.db.IDb
import
com.biganto.visual.roompark.data.repository.db.requrey.model.DealEntity
import
com.biganto.visual.roompark.data.repository.db.requrey.model.DealEntity
import
com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity
import
com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity
import
com.biganto.visual.roompark.data.repository.db.requrey.model.UserEntity
import
com.biganto.visual.roompark.data.repository.mapper.fromRaw
import
com.biganto.visual.roompark.data.repository.mapper.fromRaw
import
com.biganto.visual.roompark.data.repository.mapper.fromRawList
import
com.biganto.visual.roompark.data.repository.mapper.fromRawList
import
com.biganto.visual.roompark.domain.contract.DealContract
import
com.biganto.visual.roompark.domain.contract.DealContract
...
@@ -38,6 +39,27 @@ class EstateRepository @Inject constructor(
...
@@ -38,6 +39,27 @@ class EstateRepository @Inject constructor(
Timber
.
d
(
"Estate Repository Created $this"
)
Timber
.
d
(
"Estate Repository Created $this"
)
}
}
override
fun
fetchFavorites
(
user
:
UserEntity
):
Observable
<
Iterable
<
EstateEntity
>>
=
api
.
getFavorites
(
user
.
authToken
)
.
doOnError
(
Timber
::
e
)
.
map
{
fromRawList
(
it
,
::
fromRaw
)
}
.
doOnNext
{
it
.
forEach
{
estate
->
estate
.
setFavorite
(
true
)
estate
.
user
=
user
}
}
.
flatMap
(
db
::
upsertEstates
)
.
doOnNext
{
db
.
refreshUser
(
user
)
}
override
fun
fetchDeals
(
user
:
UserEntity
):
Observable
<
List
<
EstateEntity
>>
=
api
.
getDeals
(
TEST_DEAL_TOKEN
)
//api.getDeals(user.authToken)
.
doOnError
(
Timber
::
e
)
.
map
{
List
(
it
.
size
){
index
->
fromRaw
(
it
[
index
],
user
)}
}
.
flatMap
(
db
::
upsertDeals
)
.
map
{
it
.
map
{
deal
->
deal
.
estate
as
EstateEntity
}
}
.
doOnNext
{
db
.
refreshUser
(
user
)
}
private
val
getFavoritesApi
:
Observable
<
List
<
EstateEntity
>>
=
private
val
getFavoritesApi
:
Observable
<
List
<
EstateEntity
>>
=
local
.
recentUser
()
local
.
recentUser
()
.
flatMap
{
.
flatMap
{
...
...
app/src/main/java/com/biganto/visual/roompark/data/data_provider/PlanRepository.kt
View file @
f85ff40b
...
@@ -12,6 +12,7 @@ import com.biganto.visual.roompark.domain.contract.FlatPlanContract
...
@@ -12,6 +12,7 @@ import com.biganto.visual.roompark.domain.contract.FlatPlanContract
import
com.biganto.visual.roompark.domain.model.FeatureModel
import
com.biganto.visual.roompark.domain.model.FeatureModel
import
com.biganto.visual.roompark.domain.model.PlanPresetModel
import
com.biganto.visual.roompark.domain.model.PlanPresetModel
import
com.biganto.visual.roompark.domain.model.fromEntity
import
com.biganto.visual.roompark.domain.model.fromEntity
import
com.biganto.visual.roompark.domain.use_case.DownloadUseCase
import
io.reactivex.Observable
import
io.reactivex.Observable
import
io.reactivex.schedulers.Schedulers
import
io.reactivex.schedulers.Schedulers
import
timber.log.Timber
import
timber.log.Timber
...
@@ -47,6 +48,55 @@ class PlanRepository @Inject constructor(
...
@@ -47,6 +48,55 @@ class PlanRepository @Inject constructor(
.
subscribeOn
(
Schedulers
.
io
())
.
subscribeOn
(
Schedulers
.
io
())
override
fun
getPlansObservable
(
list
:
List
<
PlanFeaturesVariant
>
,
cancellationToken
:
DownloadUseCase
.
CancellationToken
)
:
Observable
<
String
>
{
return
Observable
.
create
{
emitter
->
list
.
asSequence
()
.
chunked
(
12
)
.
also
{
System
.
gc
()
}
.
flatten
()
.
filter
{
!
cancellationToken
.
isCancelled
}
.
forEach
{
variant
->
val
file
=
FileModule
.
getDirectory
(
file
.
context
,
FileModule
.
FileDirectory
.
PlanTypeDir
(
estateId
=
variant
.
estateId
,
planId
=
variant
.
planId
,
furniture
=
variant
.
furniture
,
walls
=
variant
.
walls
,
sizes
=
variant
.
sizes
,
electric
=
variant
.
electric
))
if
(
file
.
exists
())
emitter
.
onNext
(
file
.
absolutePath
)
else
{
try
{
Timber
.
w
(
"Cancellation is: ${cancellationToken.isCancelled}"
)
if
(
cancellationToken
.
isCancelled
){
emitter
.
onComplete
()
}
file
.
parentFile
.
mkdirs
()
file
.
writeText
(
api
.
getDirectPlan
(
variant
.
estateId
,
variant
.
planId
,
variant
.
furniture
?:
false
,
variant
.
sizes
?:
false
,
variant
.
walls
?:
false
,
variant
.
electric
?:
false
).
blockingFirst
()
)
emitter
.
onNext
(
file
.
absolutePath
)
}
catch
(
e
:
Throwable
){
emitter
.
onError
(
e
)}
}
}
emitter
.
onComplete
()
}
}
override
fun
getPlanTypes
(
estateId
:
Int
):
Observable
<
List
<
PlanPresetModel
>>
=
override
fun
getPlanTypes
(
estateId
:
Int
):
Observable
<
List
<
PlanPresetModel
>>
=
Observable
.
mergeDelayError
(
Observable
.
mergeDelayError
(
arrayListOf
(
getPlanTypesApi
(
estateId
))
arrayListOf
(
getPlanTypesApi
(
estateId
))
...
@@ -64,16 +114,17 @@ class PlanRepository @Inject constructor(
...
@@ -64,16 +114,17 @@ class PlanRepository @Inject constructor(
,
sizes
?:
false
,
sizes
?:
false
,
walls
?:
false
,
walls
?:
false
,
electric
?:
false
)
,
electric
?:
false
)
.
map
{
.
map
{
val
sFile
=
getPlanFile
(
val
sFile
=
getPlanFile
(
estateId
=
estateId
,
estateId
=
estateId
,
planId
=
planId
,
planId
=
planId
,
furniture
=
furniture
,
furniture
=
furniture
,
walls
=
walls
,
walls
=
walls
,
sizes
=
sizes
,
sizes
=
sizes
,
electric
=
electric
)
electric
=
electric
file
.
saveFileToDisk
(
sFile
,
it
)
)
sFile
.
path
file
.
saveFileToDisk
(
sFile
,
it
)
sFile
.
absolutePath
}
}
.
subscribeOn
(
Schedulers
.
io
())
.
subscribeOn
(
Schedulers
.
io
())
...
@@ -88,7 +139,7 @@ class PlanRepository @Inject constructor(
...
@@ -88,7 +139,7 @@ class PlanRepository @Inject constructor(
electric
=
featuresVariant
.
electric
electric
=
featuresVariant
.
electric
)
)
fun
getPlanFile
(
estateId
:
Int
private
fun
getPlanFile
(
estateId
:
Int
,
planId
:
Int
,
planId
:
Int
,
furniture
:
Boolean
?
=
null
,
furniture
:
Boolean
?
=
null
,
sizes
:
Boolean
?
=
null
,
sizes
:
Boolean
?
=
null
...
@@ -133,7 +184,7 @@ class PlanRepository @Inject constructor(
...
@@ -133,7 +184,7 @@ class PlanRepository @Inject constructor(
furniture
=
furniture
,
furniture
=
furniture
,
walls
=
walls
,
walls
=
walls
,
sizes
=
sizes
,
sizes
=
sizes
,
electric
=
electric
)
}.
switch
Map
{
electric
=
electric
)
}.
flat
Map
{
if
(
it
.
exists
())
Observable
.
just
(
it
.
path
)
if
(
it
.
exists
())
Observable
.
just
(
it
.
path
)
else
getPlanApi
(
estateId
else
getPlanApi
(
estateId
,
planId
,
planId
...
...
app/src/main/java/com/biganto/visual/roompark/data/repository/db/IDb.kt
View file @
f85ff40b
...
@@ -75,4 +75,6 @@ interface IDb {
...
@@ -75,4 +75,6 @@ interface IDb {
fun
refreshUser
(
userEntity
:
UserEntity
):
Observable
<
UserEntity
>
fun
refreshUser
(
userEntity
:
UserEntity
):
Observable
<
UserEntity
>
fun
refreshEntities
(
entities
:
List
<
Persistable
>):
Observable
<
Iterable
<
Persistable
>>
fun
refreshEntities
(
entities
:
List
<
Persistable
>):
Observable
<
Iterable
<
Persistable
>>
fun
refreshEstatesWithTours
():
Completable
fun
refreshEstatesWithTours
():
Completable
fun
upsertEstates
(
entity
:
List
<
EstateEntity
>):
Observable
<
Iterable
<
EstateEntity
>>?
fun
upsertDeals
(
entity
:
List
<
DealEntity
>):
Observable
<
Iterable
<
DealEntity
>>
}
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/data/repository/db/requrey/RequeryRepository.kt
View file @
f85ff40b
...
@@ -90,6 +90,12 @@ class RequeryRepository @Inject constructor(
...
@@ -90,6 +90,12 @@ class RequeryRepository @Inject constructor(
override
fun
<
T
:
List
<
Persistable
>
>
blockingUpsert
(
entity
:
T
)
=
override
fun
<
T
:
List
<
Persistable
>
>
blockingUpsert
(
entity
:
T
)
=
store
.
upsert
(
entity
).
toObservable
().
blockingSubscribe
()
store
.
upsert
(
entity
).
toObservable
().
blockingSubscribe
()
override
fun
upsertDeals
(
entity
:
List
<
DealEntity
>):
Observable
<
Iterable
<
DealEntity
>>
=
store
.
upsert
(
entity
).
toObservable
()
override
fun
upsertEstates
(
entity
:
List
<
EstateEntity
>):
Observable
<
Iterable
<
EstateEntity
>>
=
store
.
upsert
(
entity
).
toObservable
()
override
fun
upsertEstate
(
entity
:
EstateEntity
)
=
override
fun
upsertEstate
(
entity
:
EstateEntity
)
=
store
.
upsert
(
entity
).
toObservable
().
blockingSubscribe
()
store
.
upsert
(
entity
).
toObservable
().
blockingSubscribe
()
...
...
app/src/main/java/com/biganto/visual/roompark/data/repository/file/FileModule.kt
View file @
f85ff40b
...
@@ -8,6 +8,7 @@ import com.google.gson.JsonElement
...
@@ -8,6 +8,7 @@ import com.google.gson.JsonElement
import
dagger.Module
import
dagger.Module
import
io.reactivex.Observable
import
io.reactivex.Observable
import
kotlinx.io.IOException
import
kotlinx.io.IOException
import
okio.Okio
import
timber.log.Timber
import
timber.log.Timber
import
java.io.File
import
java.io.File
import
javax.inject.Inject
import
javax.inject.Inject
...
@@ -58,6 +59,31 @@ class FileModule @Inject constructor(val context: Application) {
...
@@ -58,6 +59,31 @@ class FileModule @Inject constructor(val context: Application) {
file
.
writeText
(
"[$jsonElement]"
)
//to json array because core unity method parse data like TourData[] Estate[] etc..
file
.
writeText
(
"[$jsonElement]"
)
//to json array because core unity method parse data like TourData[] Estate[] etc..
}
}
fun
saveFileToDiskObservable
(
file
:
File
,
content
:
String
):
Observable
<
Long
>
{
file
.
parentFile
.
mkdirs
()
return
Observable
.
create
{
emitter
->
val
fileStorage
=
file
val
sink
=
Okio
.
buffer
(
Okio
.
sink
(
fileStorage
))
val
buffer
=
sink
.
buffer
()
var
read
=
0L
val
step
=
8192
val
source
=
content
.
byteInputStream
()
var
bytesRead
=
0L
Timber
.
w
(
"start read "
)
file
.
writeText
(
content
)
Timber
.
w
(
"butes read "
)
// sink.flush()
System
.
gc
()
emitter
.
onNext
(
bytesRead
)
// emitter.onComplete()
}
}
fun
saveFileToDisk
(
file
:
File
,
content
:
String
){
fun
saveFileToDisk
(
file
:
File
,
content
:
String
){
Timber
.
d
(
"write to : $file"
)
Timber
.
d
(
"write to : $file"
)
// file.createNewFile()
// file.createNewFile()
...
@@ -90,11 +116,12 @@ class FileModule @Inject constructor(val context: Application) {
...
@@ -90,11 +116,12 @@ class FileModule @Inject constructor(val context: Application) {
}
}
val
getCoreCacheDirectory
:
String
val
getCoreCacheDirectory
:
String
get
(){
get
(){
return
rootFolder
.
absolutePath
return
rootFolder
.
absolutePath
}
}
val
freeSpace
=
rootFolder
.
freeSpace
companion
object
{
companion
object
{
fun
getDirectory
(
context
:
Context
,
dirType
:
FileDirectory
):
File
=
fun
getDirectory
(
context
:
Context
,
dirType
:
FileDirectory
):
File
=
File
(
context
.
filesDir
.
absolutePath
.
plus
(
dirType
.
dir
))
File
(
context
.
filesDir
.
absolutePath
.
plus
(
dirType
.
dir
))
...
...
app/src/main/java/com/biganto/visual/roompark/domain/contract/DealContract.kt
View file @
f85ff40b
package
com.biganto.visual.roompark.domain.contract
package
com.biganto.visual.roompark.domain.contract
import
com.biganto.visual.roompark.data.repository.db.requrey.model.DealEntity
import
com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity
import
com.biganto.visual.roompark.data.repository.db.requrey.model.UserEntity
import
com.biganto.visual.roompark.domain.model.DealModel
import
com.biganto.visual.roompark.domain.model.DealModel
import
com.biganto.visual.roompark.domain.model.EstateModel
import
com.biganto.visual.roompark.domain.model.EstateModel
import
io.reactivex.Completable
import
io.reactivex.Completable
...
@@ -17,4 +20,6 @@ interface DealContract{
...
@@ -17,4 +20,6 @@ interface DealContract{
fun
getDeals
():
Observable
<
List
<
DealModel
>>
fun
getDeals
():
Observable
<
List
<
DealModel
>>
fun
fetchEstate
(
building
:
Int
,
number
:
Int
):
Observable
<
EstateModel
>
fun
fetchEstate
(
building
:
Int
,
number
:
Int
):
Observable
<
EstateModel
>
fun
setDealRead
(
dealId
:
String
):
Completable
fun
setDealRead
(
dealId
:
String
):
Completable
fun
fetchDeals
(
user
:
UserEntity
):
Observable
<
List
<
EstateEntity
>>
fun
fetchFavorites
(
user
:
UserEntity
):
Observable
<
Iterable
<
EstateEntity
>>
}
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/domain/contract/FlatPlanContract.kt
View file @
f85ff40b
...
@@ -2,6 +2,7 @@ package com.biganto.visual.roompark.domain.contract
...
@@ -2,6 +2,7 @@ package com.biganto.visual.roompark.domain.contract
import
com.biganto.visual.roompark.data.data_provider.PlanFeaturesVariant
import
com.biganto.visual.roompark.data.data_provider.PlanFeaturesVariant
import
com.biganto.visual.roompark.domain.model.PlanPresetModel
import
com.biganto.visual.roompark.domain.model.PlanPresetModel
import
com.biganto.visual.roompark.domain.use_case.DownloadUseCase
import
io.reactivex.Observable
import
io.reactivex.Observable
import
java.io.File
import
java.io.File
...
@@ -22,4 +23,8 @@ interface FlatPlanContract{
...
@@ -22,4 +23,8 @@ interface FlatPlanContract{
fun
getPlanFile
(
featuresVariant
:
PlanFeaturesVariant
):
File
fun
getPlanFile
(
featuresVariant
:
PlanFeaturesVariant
):
File
fun
getPlan
(
featuresVariant
:
PlanFeaturesVariant
):
Observable
<
String
>
fun
getPlan
(
featuresVariant
:
PlanFeaturesVariant
):
Observable
<
String
>
fun
getPlansObservable
(
list
:
List
<
PlanFeaturesVariant
>,
cancellationToken
:
DownloadUseCase
.
CancellationToken
):
Observable
<
String
>
}
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/domain/interactor/settings.kt
View file @
f85ff40b
...
@@ -67,14 +67,19 @@ class SettingsInteractor @Inject constructor(
...
@@ -67,14 +67,19 @@ class SettingsInteractor @Inject constructor(
}
}
}
}
fun
startToursDownloading
()
:
Completable
=
fun
startToursDownloading
()
=
toursUc
.
downloadAllDeelsAndEstates
()
toursUc
.
downloadAllDeelsAndEstates
()
.
doOnNext
{
Timber
.
d
(
" gonna startService"
)
}
.
doOnNext
{
Timber
.
d
(
" gonna startService"
)
}
.
doOnNext
{
this
.
startDownloadService
()
}
.
doOnNext
{
this
.
startDownloadService
()
}
.
delay
(
100
,
TimeUnit
.
MILLISECONDS
)
.
delay
(
100
,
TimeUnit
.
MILLISECONDS
)
.
doOnNext
{
Timber
.
d
(
" gonna startServic222e"
)
}
.
doOnNext
{
tours
->
.
doOnNext
{
tours
->
startDownloadService
(
tours
.
map
{
tour
->
tour
.
id
})
startDownloadService
(
tours
.
map
{
tour
->
tour
.
id
})
}.
ignoreElements
()
}
.
doOnNext
{
Timber
.
d
(
" gonna startServsdfsfdsice"
)
}
// .doOnComplete { Timber.w(" azzaza complete") }
fun
getSubscriptions
()
=
fun
getSubscriptions
()
=
...
...
app/src/main/java/com/biganto/visual/roompark/domain/use_case/planTypesUseCase.kt
View file @
f85ff40b
package
com.biganto.visual.roompark.domain.use_case
package
com.biganto.visual.roompark.domain.use_case
import
com.biganto.visual.roompark.data.data_provider.PlanFeaturesVariant
import
com.biganto.visual.roompark.data.data_provider.featuresVariants
import
com.biganto.visual.roompark.data.data_provider.featuresVariants
import
com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity
import
com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity
import
com.biganto.visual.roompark.data.repository.db.requrey.model.UserEntity
import
com.biganto.visual.roompark.domain.contract.AuthContract
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.contract.FlatPlanContract
import
io.reactivex.Observable
import
io.reactivex.Observable
import
io.reactivex.
schedulers.Scheduler
s
import
io.reactivex.
rxkotlin.Observable
s
import
javax.inject.Inject
import
javax.inject.Inject
/**
/**
...
@@ -15,20 +16,30 @@ import javax.inject.Inject
...
@@ -15,20 +16,30 @@ import javax.inject.Inject
class
PlanTypesUseCase
@Inject
constructor
(
class
PlanTypesUseCase
@Inject
constructor
(
private
val
planContract
:
FlatPlanContract
,
private
val
planContract
:
FlatPlanContract
,
private
val
auth
:
AuthContract
private
val
auth
:
AuthContract
,
private
val
dealContract
:
DealContract
)
{
)
{
private
fun
fetchUserEstates
(
user
:
UserEntity
):
Observable
<
List
<
EstateEntity
>>
=
Observables
.
zip
(
dealContract
.
fetchDeals
(
user
),
dealContract
.
fetchFavorites
(
user
))
{
t1
,
t2
->
t1
+
t2
}
private
val
fetchAllPlanTypes
=
private
val
fetchAllPlanTypes
=
auth
.
currentUser
()
auth
.
currentUser
()
.
map
{
user
->
.
flatMap
{
user
->
fetchUserEstates
(
user
)
.
onErrorReturn
{
arrayListOf
()
}
.
map
{
apiList
->
val
list
=
val
list
=
user
.
deals
?.
map
{
it
.
estate
as
EstateEntity
}
?.
toMutableList
()
user
.
deals
?.
map
{
it
.
estate
as
EstateEntity
}
?.
toMutableList
()
?:
mutableListOf
()
?:
mutableListOf
()
list
.
addAll
(
user
.
estates
?.
map
{
it
as
EstateEntity
}
?:
arrayListOf
())
list
.
addAll
(
user
.
estates
?.
map
{
it
as
EstateEntity
}
?:
arrayListOf
())
list
(
list
+
apiList
).
distinctBy
{
it
.
id
}
}
}
}
fun
fetchNotDownloadedPlansSizes
():
Observable
<
Int
>
=
fun
fetchNotDownloadedPlansSizes
():
Observable
<
Int
>
=
fetchAllPlanTypes
fetchAllPlanTypes
.
flatMapIterable
{
it
}
.
flatMapIterable
{
it
}
...
@@ -39,8 +50,9 @@ class PlanTypesUseCase @Inject constructor(
...
@@ -39,8 +50,9 @@ class PlanTypesUseCase @Inject constructor(
.
map
{
list
->
list
.
sumBy
{
if
(
planContract
.
getPlanFile
(
it
).
exists
())
0
else
1
}
}
.
map
{
list
->
list
.
sumBy
{
if
(
planContract
.
getPlanFile
(
it
).
exists
())
0
else
1
}
}
.
scan
{
t1
:
Int
,
t2
:
Int
->
t1
+
t2
}
.
scan
{
t1
:
Int
,
t2
:
Int
->
t1
+
t2
}
fun
downloadAllPlanTypes
(
cancellationToken
:
DownloadUseCase
.
CancellationToken
)
=
fun
downloadAllPlanTypes
(
cancellationToken
:
DownloadUseCase
.
CancellationToken
):
Observable
<
DownloadProgress
>
{
fetchAllPlanTypes
var
listSize
=
0
return
fetchAllPlanTypes
.
flatMapSingle
{
.
flatMapSingle
{
Observable
.
fromIterable
(
it
)
Observable
.
fromIterable
(
it
)
.
flatMap
{
estateEntity
->
.
flatMap
{
estateEntity
->
...
@@ -51,29 +63,38 @@ class PlanTypesUseCase @Inject constructor(
...
@@ -51,29 +63,38 @@ class PlanTypesUseCase @Inject constructor(
}
}
.
map
{
it
.
flatten
()
}
.
map
{
it
.
flatten
()
}
.
filter
{
!
cancellationToken
.
isCancelled
}
.
filter
{
!
cancellationToken
.
isCancelled
}
.
flatMap
{
downloadPlan
(
it
,
cancellationToken
)
}
.
flatMap
{
list
->
planContract
.
getPlansObservable
(
list
,
cancellationToken
)
.
map
{
1
}
private
fun
downloadPlan
(
.
scan
(
0
,
list
:
List
<
PlanFeaturesVariant
>
{
t1
,
t2
->
t1
+
t2
})
,
cancellationToken
:
DownloadUseCase
.
CancellationToken
.
map
{
completed
->
)
DownloadProgress
(
completed
,
list
.
size
)
:
Observable
<
DownloadProgress
>
{
var
completedThreads
=
0
return
Observable
.
fromIterable
(
list
)
.
filter
{
!
cancellationToken
.
isCancelled
}
.
flatMap
{
planContract
.
getPlan
(
it
)
.
subscribeOn
(
Schedulers
.
io
())
.
map
{
completedThreads
++
DownloadProgress
(
completedThreads
,
list
.
size
)
}
}
}
}
}
}
}
}
// private fun downloadPlan(
// list: PlanFeaturesVariant
// , cancellationToken: DownloadUseCase.CancellationToken
// )
// : Observable<DownloadProgress> {
//
// val avaliablethread = true
//
// return Observable.fromIterable(list)
//
//
// .delay(100,TimeUnit.MILLISECONDS)
// .doOnNext { Timber.w("emmited") }
// .delay { variant ->
// planContract.getPlan(variant)}
// .filter { !cancellationToken.isCancelled }
//
// }
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/estate/ScreenController.kt
View file @
f85ff40b
package
com.biganto.visual.roompark.presentation.screen.estate
package
com.biganto.visual.roompark.presentation.screen.estate
import
android.annotation.SuppressLint
import
android.net.Uri
import
android.net.Uri
import
android.os.Bundle
import
android.os.Bundle
import
android.view.View
import
android.view.View
...
@@ -262,6 +263,7 @@ class EstateScreenController :
...
@@ -262,6 +263,7 @@ class EstateScreenController :
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
)
is
EstateScreenViewState
.
ToursLoaded
->
render
(
viewState
)
is
EstateScreenViewState
.
RestoreView
->
render
(
viewState
)
}
}
}
}
...
@@ -277,40 +279,12 @@ class EstateScreenController :
...
@@ -277,40 +279,12 @@ class EstateScreenController :
private
var
estateModel
:
EstateModel
?
=
null
private
var
estateModel
:
EstateModel
?
=
null
private
fun
render
(
viewState
:
EstateScreenViewState
.
LoadEstate
)
{
private
fun
render
(
viewState
:
EstateScreenViewState
.
LoadEstate
)
{
estateModel
=
viewState
.
estate
setEstateInfo
(
viewState
.
estate
)
toolBar
.
setToolbar
(
null
,
StatusToolbarModel
(
StatusState
.
AVAILABLE
,
null
,
null
)
)
flatTitle
.
text
=
resources
?.
getString
(
viewState
.
estate
.
type
.
typeShortString
()
,
viewState
.
estate
.
number
)
siteLink
.
setGone
(
viewState
.
estate
.
url
==
null
)
viewState
.
estate
.
url
?.
let
{
url
->
siteLink
.
setOnClickListener
{
activity
?.
startUrl
(
url
)
}
}
}
startTour
.
setGone
(
viewState
.
estate
.
multitourId
==
null
)
startTourDivider
.
setGone
(
viewState
.
estate
.
multitourId
==
null
)
viewState
.
estate
.
multitourPreview
?.
let
{
Glide
.
with
(
tourScreen
)
.
load
(
it
)
.
into
(
tourScreen
)
}
when
(
viewState
.
estate
.
type
){
private
fun
render
(
viewState
:
EstateScreenViewState
.
RestoreView
)
{
FlatType
.
FLAT
->
{
setEstateInfo
(
viewState
.
restore
.
estate
)
flatTypeView
.
setGone
(
false
)
infoTabDivicder
.
setGone
(
false
)
explicationTab
.
setGone
(
false
)
}
else
->
{
flatTypeView
.
setGone
(
true
)
infoTabDivicder
.
setGone
(
true
)
explicationTab
.
setGone
(
true
)
}
}
}
}
...
@@ -395,6 +369,7 @@ class EstateScreenController :
...
@@ -395,6 +369,7 @@ class EstateScreenController :
}
}
@SuppressLint
(
"SetJavaScriptEnabled"
)
private
fun
render
(
viewState
:
EstateScreenViewState
.
LoadPlan
)
{
private
fun
render
(
viewState
:
EstateScreenViewState
.
LoadPlan
)
{
planWebView
.
settings
.
javaScriptEnabled
=
true
planWebView
.
settings
.
javaScriptEnabled
=
true
planWebView
.
clearCache
(
true
)
planWebView
.
clearCache
(
true
)
...
@@ -402,11 +377,51 @@ class EstateScreenController :
...
@@ -402,11 +377,51 @@ class EstateScreenController :
planWebView
.
loadUrl
(
uri
)
planWebView
.
loadUrl
(
uri
)
}
}
private
fun
setEstateInfo
(
estateModel
:
EstateModel
?){
toolBar
.
setToolbar
(
null
,
StatusToolbarModel
(
StatusState
.
AVAILABLE
,
null
,
null
)
)
estateModel
?.
let
{
estate
->
flatTitle
.
text
=
resources
?.
getString
(
estate
.
type
.
typeShortString
()
,
estate
.
number
)
}
siteLink
.
setGone
(
estateModel
?.
url
==
null
)
estateModel
?.
url
?.
let
{
url
->
siteLink
.
setOnClickListener
{
activity
?.
startUrl
(
url
)
}
}
startTour
.
setGone
(
estateModel
?.
multitourId
==
null
)
startTourDivider
.
setGone
(
estateModel
?.
multitourId
==
null
)
estateModel
?.
multitourPreview
?.
let
{
Glide
.
with
(
tourScreen
)
.
load
(
it
)
.
into
(
tourScreen
)
}
when
(
estateModel
?.
type
){
FlatType
.
FLAT
->
{
flatTypeView
.
setGone
(
false
)
infoTabDivicder
.
setGone
(
false
)
explicationTab
.
setGone
(
false
)
}
else
->
{
flatTypeView
.
setGone
(
true
)
infoTabDivicder
.
setGone
(
true
)
explicationTab
.
setGone
(
true
)
}
}
}
private
fun
getComponent
()
=
DaggerEstateScreenComponent
.
factory
()
private
fun
getComponent
()
=
DaggerEstateScreenComponent
.
factory
()
.
create
(
RoomParkApplication
.
component
,
activity
as
RoomParkMainActivity
.
create
(
RoomParkApplication
.
component
,
activity
as
RoomParkMainActivity
,
args
.
getInt
(
SELECTED_ESTATE_ID_KEY
))
,
args
.
getInt
(
SELECTED_ESTATE_ID_KEY
))
.
inject
(
this
)
.
inject
(
this
)
override
fun
getLayoutId
():
Int
=
R
.
layout
.
flat_full_card_screen
override
fun
getLayoutId
():
Int
=
R
.
layout
.
flat_full_card_screen
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/estate/ScreenPresenter.kt
View file @
f85ff40b
...
@@ -30,11 +30,6 @@ class EstateScreenPresenter @Inject constructor(
...
@@ -30,11 +30,6 @@ class EstateScreenPresenter @Inject constructor(
)
)
:
BigantoBasePresenter
<
EstateScreen
,
EstateScreenViewState
>()
{
:
BigantoBasePresenter
<
EstateScreen
,
EstateScreenViewState
>()
{
private
var
planList
:
List
<
PlanPresetModel
>?
=
null
private
var
estate
:
EstateModel
?
=
null
private
var
showType
:
InfoShowType
=
InfoShowType
.
COMMON_INFO
override
fun
defaultErrorViewStateHandler
()
=
override
fun
defaultErrorViewStateHandler
()
=
{
e
:
ExceptionString
->
EstateScreenViewState
.
SomeError
(
e
)
}
{
e
:
ExceptionString
->
EstateScreenViewState
.
SomeError
(
e
)
}
...
@@ -43,18 +38,26 @@ class EstateScreenPresenter @Inject constructor(
...
@@ -43,18 +38,26 @@ class EstateScreenPresenter @Inject constructor(
interactor
.
getPlan
(
plan
)
interactor
.
getPlan
(
plan
)
.
map
<
EstateScreenViewState
>
{
EstateScreenViewState
.
LoadPlan
(
it
)
}
.
map
<
EstateScreenViewState
>
{
EstateScreenViewState
.
LoadPlan
(
it
)
}
private
var
restoreModel
=
RestoreModel
(
null
,
null
)
override
fun
detachView
()
{
super
.
detachView
()
restoreStateObservable
.
accept
(
EstateScreenViewState
.
RestoreView
(
restoreModel
))
}
override
fun
bindIntents
()
{
override
fun
bindIntents
()
{
val
prefetchCards
=
interactor
.
getEstate
(
estateId
)
val
prefetchCards
=
interactor
.
getEstate
(
estateId
)
.
doOnNext
{
estate
=
it
.
copy
()
}
.
doOnNext
{
restoreModel
.
estate
=
it
.
copy
()
}
.
map
{
EstateScreenViewState
.
LoadEstate
(
it
)
}
.
map
{
EstateScreenViewState
.
LoadEstate
(
it
)
}
val
fetchPlans
=
interactor
.
getPlanTypes
(
estateId
)
val
fetchPlans
=
interactor
.
getPlanTypes
(
estateId
)
.
doOnNext
{
planList
=
it
.
toList
()
}
.
doOnNext
{
restoreModel
.
planList
=
it
.
toList
()
}
.
map
{
EstateScreenViewState
.
LoadPlanTypes
(
it
)
}
.
map
{
EstateScreenViewState
.
LoadPlanTypes
(
it
)
}
val
fetchPlan
=
intent
(
EstateScreen
::
planTypesTabSelected
)
val
fetchPlan
=
intent
(
EstateScreen
::
planTypesTabSelected
)
.
map
{
planList
?.
get
(
it
)
}
.
map
{
restoreModel
.
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
)
}
...
@@ -67,9 +70,9 @@ class EstateScreenPresenter @Inject constructor(
...
@@ -67,9 +70,9 @@ class EstateScreenPresenter @Inject constructor(
Observable
.
just
<
EstateScreenViewState
>(
Observable
.
just
<
EstateScreenViewState
>(
EstateScreenViewState
.
ShowEstateInfo
(
EstateScreenViewState
.
ShowEstateInfo
(
showType
restoreModel
.
showType
,
if
(
showType
==
InfoShowType
.
COMMON_INFO
)
,
if
(
restoreModel
.
showType
==
InfoShowType
.
COMMON_INFO
)
mapCommonInfo
(
estate
?.
commonInfo
)
mapCommonInfo
(
restoreModel
.
estate
?.
commonInfo
)
else
mapCommonInfo
(
planPreset
.
explication
)
else
mapCommonInfo
(
planPreset
.
explication
)
)
)
)
)
...
@@ -78,48 +81,48 @@ class EstateScreenPresenter @Inject constructor(
...
@@ -78,48 +81,48 @@ class EstateScreenPresenter @Inject constructor(
val
switchSizes
=
intent
(
EstateScreen
::
switchSizes
)
val
switchSizes
=
intent
(
EstateScreen
::
switchSizes
)
.
map
{
pair
->
.
map
{
pair
->
val
plan
=
planList
?.
first
{
it
.
planId
==
pair
.
first
}
val
plan
=
restoreModel
.
planList
?.
first
{
it
.
planId
==
pair
.
first
}
plan
?.
switchFeature
<
FeatureModel
.
Sizes
>(
pair
.
second
)
plan
?.
switchFeature
<
FeatureModel
.
Sizes
>(
pair
.
second
)
plan
plan
}.
flatMap
(
::
getPlan
)
}.
flatMap
(
::
getPlan
)
val
switchFurn
=
intent
(
EstateScreen
::
switchFurniture
)
val
switchFurn
=
intent
(
EstateScreen
::
switchFurniture
)
.
map
{
pair
->
.
map
{
pair
->
val
plan
=
planList
?.
first
{
it
.
planId
==
pair
.
first
}
val
plan
=
restoreModel
.
planList
?.
first
{
it
.
planId
==
pair
.
first
}
plan
?.
switchFeature
<
FeatureModel
.
Furniture
>(
pair
.
second
)
plan
?.
switchFeature
<
FeatureModel
.
Furniture
>(
pair
.
second
)
plan
plan
}.
flatMap
(
::
getPlan
)
}.
flatMap
(
::
getPlan
)
val
switchWalls
=
intent
(
EstateScreen
::
switchWalls
)
val
switchWalls
=
intent
(
EstateScreen
::
switchWalls
)
.
map
{
pair
->
.
map
{
pair
->
val
plan
=
planList
?.
first
{
it
.
planId
==
pair
.
first
}
val
plan
=
restoreModel
.
planList
?.
first
{
it
.
planId
==
pair
.
first
}
plan
?.
switchFeature
<
FeatureModel
.
Walls
>(
pair
.
second
)
plan
?.
switchFeature
<
FeatureModel
.
Walls
>(
pair
.
second
)
plan
plan
}.
flatMap
(
::
getPlan
)
}.
flatMap
(
::
getPlan
)
val
switchElectric
=
intent
(
EstateScreen
::
switchElectric
)
val
switchElectric
=
intent
(
EstateScreen
::
switchElectric
)
.
map
{
pair
->
.
map
{
pair
->
val
plan
=
planList
?.
first
{
it
.
planId
==
pair
.
first
}
val
plan
=
restoreModel
.
planList
?.
first
{
it
.
planId
==
pair
.
first
}
plan
?.
switchFeature
<
FeatureModel
.
Electric
>(
pair
.
second
)
plan
?.
switchFeature
<
FeatureModel
.
Electric
>(
pair
.
second
)
plan
plan
}.
flatMap
(
::
getPlan
)
}.
flatMap
(
::
getPlan
)
val
showInfo
=
intent
(
EstateScreen
::
showCommonInfo
)
val
showInfo
=
intent
(
EstateScreen
::
showCommonInfo
)
.
doOnNext
{
showType
=
InfoShowType
.
COMMON_INFO
}
.
doOnNext
{
restoreModel
.
showType
=
InfoShowType
.
COMMON_INFO
}
.
map
{
estate
?.
commonInfo
}
.
map
{
restoreModel
.
estate
?.
commonInfo
}
.
map
(
::
mapCommonInfo
)
.
map
(
::
mapCommonInfo
)
.
map
{
EstateScreenViewState
.
ShowEstateInfo
(
showType
,
it
)
}
.
map
{
EstateScreenViewState
.
ShowEstateInfo
(
restoreModel
.
showType
,
it
)
}
val
showExplication
=
intent
(
EstateScreen
::
showExplication
)
val
showExplication
=
intent
(
EstateScreen
::
showExplication
)
.
doOnNext
{
showType
=
InfoShowType
.
EXPLICATIONS
}
.
doOnNext
{
restoreModel
.
showType
=
InfoShowType
.
EXPLICATIONS
}
.
map
{
planList
?.
get
(
it
)
?.
explication
}
.
map
{
restoreModel
.
planList
?.
get
(
it
)
?.
explication
}
.
map
(
::
mapCommonInfo
)
.
map
(
::
mapCommonInfo
)
.
map
{
EstateScreenViewState
.
ShowEstateInfo
(
showType
,
it
)
}
.
map
{
EstateScreenViewState
.
ShowEstateInfo
(
restoreModel
.
showType
,
it
)
}
val
onStartTours
=
intent
(
EstateScreen
::
tourCardClicked
)
val
onStartTours
=
intent
(
EstateScreen
::
tourCardClicked
)
.
map
{
estate
}
.
map
{
restoreModel
.
estate
}
.
flatMap
{
estate
->
toursInteractor
.
getEstateTourList
(
estate
)
.
flatMap
{
estate
->
toursInteractor
.
getEstateTourList
(
estate
)
.
map
{
EstateScreenViewState
.
ToursLoaded
(
it
)
}
.
map
{
EstateScreenViewState
.
ToursLoaded
(
it
)
}
}
}
...
@@ -202,3 +205,8 @@ enum class InfoShowType{
...
@@ -202,3 +205,8 @@ enum class InfoShowType{
COMMON_INFO
,
COMMON_INFO
,
EXPLICATIONS
EXPLICATIONS
}
}
data class
RestoreModel
(
var
planList
:
List
<
PlanPresetModel
>?
=
null
,
var
estate
:
EstateModel
?
=
null
,
var
showType
:
InfoShowType
=
InfoShowType
.
COMMON_INFO
)
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/presentation/screen/estate/ScreenViewState.kt
View file @
f85ff40b
...
@@ -21,4 +21,5 @@ sealed class EstateScreenViewState : BigantoBaseViewState() {
...
@@ -21,4 +21,5 @@ sealed class EstateScreenViewState : BigantoBaseViewState() {
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
()
class
ToursLoaded
(
val
tours
:
List
<
TourModel
>)
:
EstateScreenViewState
()
class
RestoreView
(
val
restore
:
RestoreModel
)
:
EstateScreenViewState
()
}
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/presentation/screen/settings/ScreenContract.kt
View file @
f85ff40b
...
@@ -9,7 +9,7 @@ import io.reactivex.Observable
...
@@ -9,7 +9,7 @@ import io.reactivex.Observable
*/
*/
interface
SettingsScreen
:
BigantoBaseContract
<
SettingsScreenViewState
>
{
interface
SettingsScreen
:
BigantoBaseContract
<
SettingsScreenViewState
>
{
fun
downloadAllTours
():
Observable
<
Int
>
//
fun downloadAllTours(): Observable<Int>
fun
signOut
():
Observable
<
Int
>
fun
signOut
():
Observable
<
Int
>
fun
clearCache
():
Observable
<
Int
>
fun
clearCache
():
Observable
<
Int
>
fun
refreshCacheInfo
():
Observable
<
Int
>
fun
refreshCacheInfo
():
Observable
<
Int
>
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/settings/ScreenController.kt
View file @
f85ff40b
...
@@ -15,6 +15,7 @@ import com.biganto.visual.roompark.base.RoomParkMainActivity
...
@@ -15,6 +15,7 @@ import com.biganto.visual.roompark.base.RoomParkMainActivity
import
com.biganto.visual.roompark.conductor.BigantoBaseController
import
com.biganto.visual.roompark.conductor.BigantoBaseController
import
com.biganto.visual.roompark.conductor.dialogs.DownloadPlansDialogController
import
com.biganto.visual.roompark.conductor.dialogs.DownloadPlansDialogController
import
com.biganto.visual.roompark.conductor.dialogs.change_handler.DialogChangeHandler
import
com.biganto.visual.roompark.conductor.dialogs.change_handler.DialogChangeHandler
import
com.biganto.visual.roompark.conductor.dialogs.tour_chooser.StartToursDownloadingDialogController
import
com.biganto.visual.roompark.domain.model.SubscriptionModel
import
com.biganto.visual.roompark.domain.model.SubscriptionModel
import
com.biganto.visual.roompark.presentation.screen.settings.util.CahcedListAdapter
import
com.biganto.visual.roompark.presentation.screen.settings.util.CahcedListAdapter
import
com.biganto.visual.roompark.presentation.screen.settings.util.PushListAdapter
import
com.biganto.visual.roompark.presentation.screen.settings.util.PushListAdapter
...
@@ -54,8 +55,9 @@ class SettingsScreenController :
...
@@ -54,8 +55,9 @@ class SettingsScreenController :
.
map
{
Timber
.
d
(
"Clicked clear cache button"
);
1
}
.
map
{
Timber
.
d
(
"Clicked clear cache button"
);
1
}
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
observeOn
(
AndroidSchedulers
.
mainThread
())
override
fun
downloadAllTours
():
Observable
<
Int
>
=
// override fun downloadAllTours(): Observable<Int> =
toursDownloaderButton
.
clicks
().
map
{
1
}.
observeOn
(
AndroidSchedulers
.
mainThread
())
// toursDownloaderButton.clicks().filter { false }
// .map { 1 }.observeOn(AndroidSchedulers.mainThread())
private
val
refreshEmitter
=
BehaviorRelay
.
create
<
Int
>()
private
val
refreshEmitter
=
BehaviorRelay
.
create
<
Int
>()
...
@@ -128,6 +130,16 @@ class SettingsScreenController :
...
@@ -128,6 +130,16 @@ class SettingsScreenController :
)
)
}
}
@OnClick
(
R
.
id
.
downloadToursIcon
)
fun
startDownloadingDialog
(){
router
.
pushController
(
RouterTransaction
.
with
(
StartToursDownloadingDialogController
(
tempToursSize
))
.
pushChangeHandler
(
DialogChangeHandler
())
.
popChangeHandler
(
DialogChangeHandler
())
)
}
private
var
tempToursSize
=
0L
private
fun
bindRecycler
(){
private
fun
bindRecycler
(){
pushRecycler
.
isNestedScrollingEnabled
=
true
pushRecycler
.
isNestedScrollingEnabled
=
true
pushRecycler
.
layoutManager
=
pushRecycler
.
layoutManager
=
...
@@ -184,6 +196,7 @@ class SettingsScreenController :
...
@@ -184,6 +196,7 @@ class SettingsScreenController :
}
}
private
fun
render
(
viewState
:
SettingsScreenViewState
.
OnSizePrefetch
)
{
private
fun
render
(
viewState
:
SettingsScreenViewState
.
OnSizePrefetch
)
{
tempToursSize
=
viewState
.
size
toursDownloaderTitle
.
text
=
toursDownloaderTitle
.
text
=
resources
?.
getString
(
resources
?.
getString
(
R
.
string
.
download_all_tours_settings_with_size
R
.
string
.
download_all_tours_settings_with_size
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/settings/ScreenPresenter.kt
View file @
f85ff40b
...
@@ -7,6 +7,7 @@ import com.biganto.visual.roompark.domain.model.CachedDataModel
...
@@ -7,6 +7,7 @@ import com.biganto.visual.roompark.domain.model.CachedDataModel
import
com.biganto.visual.roompark.domain.model.SubscriptionModel
import
com.biganto.visual.roompark.domain.model.SubscriptionModel
import
com.biganto.visual.roompark.domain.model.TitledSubscriptionModel
import
com.biganto.visual.roompark.domain.model.TitledSubscriptionModel
import
com.biganto.visual.roompark.util.monades.ExceptionString
import
com.biganto.visual.roompark.util.monades.ExceptionString
import
com.jakewharton.rxrelay2.PublishRelay
import
io.reactivex.Observable
import
io.reactivex.Observable
import
io.reactivex.android.schedulers.AndroidSchedulers
import
io.reactivex.android.schedulers.AndroidSchedulers
import
io.reactivex.schedulers.Schedulers
import
io.reactivex.schedulers.Schedulers
...
@@ -18,6 +19,7 @@ import javax.inject.Inject
...
@@ -18,6 +19,7 @@ import javax.inject.Inject
* Created by Vladislav Bogdashkin on 30.09.2019.
* Created by Vladislav Bogdashkin on 30.09.2019.
*/
*/
private
const
val
TYPICAL_PLAN_SIZE
=
(
1.2f
*
1024L
*
1024L
).
toLong
()
class
SettingsScreenPresenter
@Inject
constructor
(
class
SettingsScreenPresenter
@Inject
constructor
(
private
val
interactor
:
SettingsInteractor
,
private
val
interactor
:
SettingsInteractor
,
...
@@ -36,19 +38,31 @@ class SettingsScreenPresenter @Inject constructor(
...
@@ -36,19 +38,31 @@ class SettingsScreenPresenter @Inject constructor(
override
fun
defaultErrorViewStateHandler
()
=
override
fun
defaultErrorViewStateHandler
()
=
{
e
:
ExceptionString
->
SettingsScreenViewState
.
SomeError
(
e
)
}
{
e
:
ExceptionString
->
SettingsScreenViewState
.
SomeError
(
e
)
}
override
fun
bindIntents
()
{
private
val
cacheSizeRefresher
=
PublishRelay
.
create
<
Int
>()
val
fetchToursSize
=
interactor
.
fetchToursSizes
()
private
val
cahcObs
=
cacheSizeRefresher
.
flatMap
{
Observable
.
merge
(
arrayListOf
(
fetchToursSize
,
fetchPlansSize
)
)
}
private
val
fetchToursSize
:
Observable
<
SettingsScreenViewState
>
=
interactor
.
fetchToursSizes
()
.
map
{
SettingsScreenViewState
.
OnSizePrefetch
(
it
)
}
.
map
{
SettingsScreenViewState
.
OnSizePrefetch
(
it
)
}
val
fetchPlansSize
=
interactor
.
fetchPlanTypesSizes
()
private
val
fetchPlansSize
:
Observable
<
SettingsScreenViewState
>
=
interactor
.
fetchPlanTypesSizes
()
.
map
{
it
*
1024L
*
1024L
}
.
map
{
it
*
TYPICAL_PLAN_SIZE
}
.
map
{
SettingsScreenViewState
.
OnPlanTypesPrefetch
(
it
)
}
.
map
{
SettingsScreenViewState
.
OnPlanTypesPrefetch
(
it
)
}
val
onDownloadTours
=
intent
(
SettingsScreen
::
downloadAllTours
)
override
fun
bindIntents
()
{
.
flatMap
{
interactor
.
startToursDownloading
()
.
andThen
(
Observable
.
just
(
SettingsScreenViewState
.
Idle
()))
}
// val onDownloadTours = intent(SettingsScreen::downloadAllTours)
// .flatMap { interactor.startToursDownloading()
// .andThen(Observable.just(SettingsScreenViewState.Idle()))
// }
val
onSubChecked
=
intent
(
SettingsScreen
::
onSubscription
)
val
onSubChecked
=
intent
(
SettingsScreen
::
onSubscription
)
.
flatMap
{
sub
->
.
flatMap
{
sub
->
...
@@ -87,6 +101,7 @@ class SettingsScreenPresenter @Inject constructor(
...
@@ -87,6 +101,7 @@ class SettingsScreenPresenter @Inject constructor(
.
doOnNext
{
cached
->
cached
.
sortBy
{
it
.
id
}
}
.
doOnNext
{
cached
->
cached
.
sortBy
{
it
.
id
}
}
.
doOnNext
{
restoreModel
.
cacheInfo
=
it
}
.
doOnNext
{
restoreModel
.
cacheInfo
=
it
}
.
map
{
SettingsScreenViewState
.
LoadCachInfo
(
it
)
}
.
map
{
SettingsScreenViewState
.
LoadCachInfo
(
it
)
}
.
doOnNext
{
cacheSizeRefresher
.
accept
(
1
)
}
val
fetchSubscriptions
=
interactor
.
getSubscriptions
()
val
fetchSubscriptions
=
interactor
.
getSubscriptions
()
.
doOnNext
{
restoreModel
.
subs
=
it
.
toMutableList
()
}
.
doOnNext
{
restoreModel
.
subs
=
it
.
toMutableList
()
}
...
@@ -108,28 +123,35 @@ class SettingsScreenPresenter @Inject constructor(
...
@@ -108,28 +123,35 @@ class SettingsScreenPresenter @Inject constructor(
interactor
.
deleteCacheFiles
()
interactor
.
deleteCacheFiles
()
.
map
<
SettingsScreenViewState
>
{
.
map
<
SettingsScreenViewState
>
{
Timber
.
d
(
" got progress: ${it.first} / ${it.second.toFloat()}"
)
Timber
.
d
(
" got progress: ${it.first} / ${it.second.toFloat()}"
)
if
(
it
.
first
==
it
.
second
)
cacheSizeRefresher
.
accept
(
1
)
SettingsScreenViewState
.
OnCacheDeleting
(
SettingsScreenViewState
.
OnCacheDeleting
(
it
.
first
/
it
.
second
.
toFloat
()
it
.
first
/
it
.
second
.
toFloat
()
)
)
}
}
.
delay
(
600
,
TimeUnit
.
MILLISECONDS
)
.
delay
(
600
,
TimeUnit
.
MILLISECONDS
)
.
startWith
(
SettingsScreenViewState
.
OnCacheDeleting
(
0f
))
.
startWith
(
SettingsScreenViewState
.
OnCacheDeleting
(
0f
))
.
doOnError
{
Timber
.
e
(
it
)
}
.
doOnError
{
Timber
.
e
(
it
)
}
.
subscribeOn
(
Schedulers
.
io
())
}
}
val
state
=
Observable
.
mergeDelayError
(
val
state
=
Observable
.
mergeDelayError
(
arrayListOf
(
arrayListOf
(
restoreStateObservable
,
restoreStateObservable
,
fetchPlansSize
,
cahcObs
,
// fetchPlansSize,
fetchSettings
,
fetchSettings
,
onSignOut
,
onSignOut
,
onClearCache
,
onClearCache
,
refreshInfo
,
refreshInfo
,
fetchSubscriptions
,
fetchSubscriptions
,
fetchCache
,
fetchCache
,
onSubChecked
,
onSubChecked
onDownloadTours
,
//
onDownloadTours,
fetchToursSize
//
fetchToursSize
)
)
)
)
.
doOnError
{
Timber
.
e
(
it
)
}
.
doOnError
{
Timber
.
e
(
it
)
}
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/to_flat/ScreenController.kt
View file @
f85ff40b
...
@@ -126,6 +126,7 @@ class FindFlatScreenController :
...
@@ -126,6 +126,7 @@ class FindFlatScreenController :
is
FindFlatScreenViewState
.
SomeError
->
render
(
viewState
)
is
FindFlatScreenViewState
.
SomeError
->
render
(
viewState
)
is
FindFlatScreenViewState
.
FlatFounded
->
render
(
viewState
)
is
FindFlatScreenViewState
.
FlatFounded
->
render
(
viewState
)
is
FindFlatScreenViewState
.
FlatNotFound
->
render
(
viewState
)
is
FindFlatScreenViewState
.
FlatNotFound
->
render
(
viewState
)
is
FindFlatScreenViewState
.
FlatSold
->
render
(
viewState
)
is
FindFlatScreenViewState
.
StartFlat
->
render
(
viewState
)
is
FindFlatScreenViewState
.
StartFlat
->
render
(
viewState
)
is
FindFlatScreenViewState
.
RestoreView
->
render
(
viewState
)
is
FindFlatScreenViewState
.
RestoreView
->
render
(
viewState
)
}
}
...
@@ -156,8 +157,14 @@ class FindFlatScreenController :
...
@@ -156,8 +157,14 @@ class FindFlatScreenController :
{
findFlatButton
.
text
=
resources
?.
getString
(
it
)},
{
findFlatButton
.
text
=
resources
?.
getString
(
it
)},
{
findFlatButton
.
text
=
it
}
{
findFlatButton
.
text
=
it
}
)
)
}
private
fun
render
(
viewState
:
FindFlatScreenViewState
.
FlatSold
){
findFlatButton
.
isEnabled
=
false
viewState
.
exceptionString
.
selectHandler
(
{
findFlatButton
.
text
=
resources
?.
getString
(
it
)},
{
findFlatButton
.
text
=
it
}
)
}
}
private
fun
render
(
viewState
:
FindFlatScreenViewState
.
StartFlat
){
private
fun
render
(
viewState
:
FindFlatScreenViewState
.
StartFlat
){
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/to_flat/ScreenPresenter.kt
View file @
f85ff40b
...
@@ -37,6 +37,7 @@ class FindFlatScreenPresenter @Inject constructor(
...
@@ -37,6 +37,7 @@ class FindFlatScreenPresenter @Inject constructor(
override
fun
vsByCode
(
code
:
Int
):
(
ExceptionString
)
->
FindFlatScreenViewState
=
override
fun
vsByCode
(
code
:
Int
):
(
ExceptionString
)
->
FindFlatScreenViewState
=
when
(
code
)
{
when
(
code
)
{
304
->
{
message
:
ExceptionString
->
FindFlatScreenViewState
.
FlatNotFound
(
message
)}
304
->
{
message
:
ExceptionString
->
FindFlatScreenViewState
.
FlatNotFound
(
message
)}
307
->
{
message
:
ExceptionString
->
FindFlatScreenViewState
.
FlatSold
(
message
)}
else
->
super
.
vsByCode
(
code
)
else
->
super
.
vsByCode
(
code
)
}
}
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/to_flat/ScreenViewState.kt
View file @
f85ff40b
...
@@ -13,6 +13,7 @@ sealed class FindFlatScreenViewState : BigantoBaseViewState() {
...
@@ -13,6 +13,7 @@ sealed class FindFlatScreenViewState : BigantoBaseViewState() {
class
RequstFlatProgress
:
FindFlatScreenViewState
()
class
RequstFlatProgress
:
FindFlatScreenViewState
()
class
FlatFounded
:
FindFlatScreenViewState
()
class
FlatFounded
:
FindFlatScreenViewState
()
class
FlatNotFound
(
val
exceptionString
:
ExceptionString
)
:
FindFlatScreenViewState
()
class
FlatNotFound
(
val
exceptionString
:
ExceptionString
)
:
FindFlatScreenViewState
()
class
FlatSold
(
val
exceptionString
:
ExceptionString
)
:
FindFlatScreenViewState
()
class
StartFlat
(
val
esateId
:
Int
)
:
FindFlatScreenViewState
()
class
StartFlat
(
val
esateId
:
Int
)
:
FindFlatScreenViewState
()
class
SomeError
(
val
exception
:
ExceptionString
)
:
FindFlatScreenViewState
()
class
SomeError
(
val
exception
:
ExceptionString
)
:
FindFlatScreenViewState
()
class
RestoreView
(
val
restore
:
RestoreModel
)
:
FindFlatScreenViewState
()
class
RestoreView
(
val
restore
:
RestoreModel
)
:
FindFlatScreenViewState
()
...
...
app/src/main/res/layout-v23/download_tour_layout.xml
View file @
f85ff40b
...
@@ -59,10 +59,14 @@
...
@@ -59,10 +59,14 @@
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:id=
"@+id/cancelDownloadButton"
android:id=
"@+id/cancelDownloadButton"
android:background=
"?attr/selectableItemBackgroundBorderless"
android:clickable=
"true"
android:focusable=
"true"
app:layout_constraintTop_toBottomOf=
"@+id/downloadProgress"
android:layout_marginTop=
"16dp"
app:layout_constraintTop_toBottomOf=
"@+id/downloadProgress"
android:layout_marginTop=
"16dp"
app:layout_constraintStart_toStartOf=
"parent"
android:layout_marginStart=
"32dp"
app:layout_constraintStart_toStartOf=
"parent"
android:layout_marginStart=
"32dp"
app:layout_constraintEnd_toEndOf=
"parent"
android:layout_marginEnd=
"32dp"
app:layout_constraintEnd_toEndOf=
"parent"
android:layout_marginEnd=
"32dp"
android:layout_marginBottom=
"32dp"
app:layout_constraintBottom_toBottomOf=
"parent"
android:layout_marginBottom=
"32dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintVertical_bias=
"0.24000001"
style=
"@style/CancelTextDownloader"
android:padding=
"4dp"
app:layout_constraintVertical_bias=
"0.24000001"
style=
"@style/CancelTextDownloader"
android:padding=
"8dp"
android:paddingStart=
"8dp"
android:paddingEnd=
"8dp"
/>
android:paddingStart=
"8dp"
android:paddingEnd=
"8dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/tours_chooser_screen.xml
View file @
f85ff40b
...
@@ -5,8 +5,9 @@
...
@@ -5,8 +5,9 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/playTourCardOpacityLight"
android:background=
"@color/playTourCardOpacityLight"
android:backgroundTintMode=
"src_atop"
android:clickable=
"true"
android:clickable=
"true"
android:focusable
InTouchMode
=
"true"
>
android:focusable=
"true"
>
<com.google.android.material.card.MaterialCardView
<com.google.android.material.card.MaterialCardView
android:layout_width=
"0dp"
android:layout_width=
"0dp"
...
@@ -42,10 +43,9 @@
...
@@ -42,10 +43,9 @@
android:layout_alignParentEnd=
"true"
android:layout_alignParentEnd=
"true"
android:layout_marginTop=
"16dp"
android:layout_marginTop=
"16dp"
android:layout_marginEnd=
"8dp"
android:layout_marginEnd=
"8dp"
android:clickable=
"
tru
e"
android:clickable=
"
fals
e"
android:contentDescription=
"@string/content_description_close"
android:contentDescription=
"@string/content_description_close"
android:focusable=
"true"
android:focusable=
"false"
android:focusableInTouchMode=
"true"
android:scaleType=
"fitXY"
android:scaleType=
"fitXY"
android:src=
"@drawable/ic_close_circled"
android:src=
"@drawable/ic_close_circled"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
...
...
app/src/main/res/layout/tours_download_dialog_screen.xml
0 → 100644
View file @
f85ff40b
<?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"
android:backgroundTintMode=
"src_atop"
android:clickable=
"true"
android:focusable=
"true"
>
<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"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginEnd=
"8dp"
android:orientation=
"vertical"
>
<com.google.android.material.textview.MaterialTextView
style=
"@style/Default_TextView.Header_Text"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_margin=
"16dp"
android:text=
"@string/download_all_tours_notice_text"
android:textAlignment=
"center"
/>
<com.google.android.material.textview.MaterialTextView
android:id=
"@+id/all_tours_size_textView"
style=
"@style/Default_TextView.Notice_Text"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_margin=
"2dp"
android:text=
"@string/download_all_tours_size_title"
/>
<com.google.android.material.textview.MaterialTextView
android:id=
"@+id/disk_size_textView"
style=
"@style/Default_TextView.Notice_Text"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_margin=
"2dp"
android:text=
"@string/download_all_tours_disk_size_title"
/>
<LinearLayout
android:id=
"@+id/buttons_container"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
android:weightSum=
"2"
>
<Button
android:id=
"@+id/alert_ok_button"
style=
"@style/DefaultButton.DismissButton"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:text=
"@string/download_all_tours_yes_action"
/>
<Button
android:id=
"@+id/alert_dismiss_button"
style=
"@style/DefaultButton.DismissButton"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:text=
"@string/download_all_tours_cancel_action"
android:visibility=
"visible"
/>
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<ImageView
android:id=
"@+id/close_current_button"
android:layout_width=
"32dp"
android:layout_height=
"32dp"
android:layout_alignParentTop=
"true"
android:layout_alignParentEnd=
"true"
android:layout_marginTop=
"16dp"
android:layout_marginEnd=
"8dp"
android:clickable=
"false"
android:contentDescription=
"@string/content_description_close"
android:focusable=
"false"
android:scaleType=
"fitXY"
android:src=
"@drawable/ic_close_circled"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/values/strings.xml
View file @
f85ff40b
...
@@ -132,5 +132,12 @@
...
@@ -132,5 +132,12 @@
<string
name=
"download_all_plan_types_settings_with_sizes"
>
Скачать карточки моих квартир из избранного и сделок (%s)
</string>
<string
name=
"download_all_plan_types_settings_with_sizes"
>
Скачать карточки моих квартир из избранного и сделок (%s)
</string>
<string
name=
"plan_types_download_completed"
>
Загрузка планов завершена.
</string>
<string
name=
"plan_types_download_completed"
>
Загрузка планов завершена.
</string>
<string
name=
"download_plan_types_screen_title"
>
Cкачиваются планировки
</string>
<string
name=
"download_plan_types_screen_title"
>
Cкачиваются планировки
</string>
<string
name=
"download_all_tours_notice_text"
>
Загрузить все туры?
</string>
<string
name=
"download_all_tours_size_title"
>
Размер всех туров: %s
</string>
<string
name=
"download_all_tours_disk_size_title"
>
Размер свободного места на диске: %s
</string>
<string
name=
"download_all_tours_yes_action"
>
Скачать
</string>
<string
name=
"download_all_tours_cancel_action"
>
Отмена
</string>
<string
name=
"download_all_tours_errors_snackbar_message"
>
Ошибка при попытке загрузить туры!
</string>
<string
name=
"download_all_tours_start_snackbar_message"
>
Загрузка туров началась!
</string>
</resources>
</resources>
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