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
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
Hide 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
->
val
list
=
fetchUserEstates
(
user
)
user
.
deals
?.
map
{
it
.
estate
as
EstateEntity
}
?.
toMutableList
()
.
onErrorReturn
{
arrayListOf
()
}
?:
mutableListOf
()
.
map
{
apiList
->
list
.
addAll
(
user
.
estates
?.
map
{
it
as
EstateEntity
}
?:
arrayListOf
())
val
list
=
list
user
.
deals
?.
map
{
it
.
estate
as
EstateEntity
}
?.
toMutableList
()
?:
mutableListOf
()
list
.
addAll
(
user
.
estates
?.
map
{
it
as
EstateEntity
}
?:
arrayListOf
())
(
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
{
private
fun
render
(
viewState
:
EstateScreenViewState
.
RestoreView
)
{
Glide
.
with
(
tourScreen
)
setEstateInfo
(
viewState
.
restore
.
estate
)
.
load
(
it
)
.
into
(
tourScreen
)
}
when
(
viewState
.
estate
.
type
){
FlatType
.
FLAT
->
{
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
=
.
map
{
SettingsScreenViewState
.
OnSizePrefetch
(
it
)
}
cacheSizeRefresher
.
flatMap
{
Observable
.
merge
(
arrayListOf
(
fetchToursSize
,
fetchPlansSize
)
)
}
val
fetchPlansSize
=
interactor
.
fetchPlanTypesSizes
()
private
val
fetchToursSize
:
Observable
<
SettingsScreenViewState
>
=
interactor
.
fetchToursSizes
()
.
map
{
it
*
1024L
*
1024L
}
.
map
{
SettingsScreenViewState
.
OnSizePrefetch
(
it
)
}
.
map
{
SettingsScreenViewState
.
OnPlanTypesPrefetch
(
it
)
}
val
onDownloadTours
=
intent
(
SettingsScreen
::
downloadAllTours
)
private
val
fetchPlansSize
:
Observable
<
SettingsScreenViewState
>
=
interactor
.
fetchPlanTypesSizes
()
.
flatMap
{
interactor
.
startToursDownloading
()
.
map
{
it
*
TYPICAL_PLAN_SIZE
}
.
andThen
(
Observable
.
just
(
SettingsScreenViewState
.
Idle
()))
.
map
{
SettingsScreenViewState
.
OnPlanTypesPrefetch
(
it
)
}
}
override
fun
bindIntents
()
{
// 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