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
f7c49ad2
Commit
f7c49ad2
authored
Apr 29, 2020
by
Vladislav Bogdashkin
🎣
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move prefetch sizes into dialog
parent
5f48d403
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
205 additions
and
64 deletions
+205
-64
StartPlansDownloadingDialogController.kt
...onductor/dialogs/StartPlansDownloadingDialogController.kt
+166
-0
StartToursDownloadingDialogController.kt
...ogs/tour_chooser/StartToursDownloadingDialogController.kt
+12
-9
ScreenController.kt
...roompark/presentation/screen/settings/ScreenController.kt
+3
-30
ScreenPresenter.kt
.../roompark/presentation/screen/settings/ScreenPresenter.kt
+19
-22
strings.xml
app/src/main/res/values/strings.xml
+5
-3
No files found.
app/src/main/java/com/biganto/visual/roompark/conductor/dialogs/StartPlansDownloadingDialogController.kt
0 → 100644
View file @
f7c49ad2
package
com.biganto.visual.roompark.conductor.dialogs
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.conductor.dialogs.change_handler.DialogChangeHandler
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.bluelinelabs.conductor.RouterTransaction
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
timber.log.Timber
import
java.util.concurrent.TimeUnit
import
javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 09.04.2019.
*/
private
const
val
TYPICAL_PLAN_SIZE
=
(
1.2f
*
1024L
*
1024L
).
toLong
()
class
StartPlansDownloadingDialogController
:
Controller
{
constructor
()
:
super
()
constructor
(
args
:
Bundle
)
:
super
(
args
)
private
val
detachDisposable
=
CompositeDisposable
()
override
fun
onDetach
(
view
:
View
)
{
detachDisposable
.
clear
()
super
.
onDetach
(
view
)
}
@Inject
lateinit
var
interactor
:
SettingsInteractor
@Inject
lateinit
var
file
:
FileModule
lateinit
var
snackbar
:
ISnackBarProvider
@Inject
lateinit
var
rpActivity
:
RoomParkMainActivity
override
fun
onContextAvailable
(
context
:
Context
)
{
super
.
onContextAvailable
(
context
)
DaggerStartPlansDownloadingDialogScreenComponent
.
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
)
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
(
interactor
.
fetchPlanTypesSizes
()
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
({
view
.
findViewById
<
MaterialTextView
>(
R
.
id
.
all_tours_size_textView
)
.
text
=
resources
?.
getString
(
R
.
string
.
download_all_plans_size_title
,(
it
*
TYPICAL_PLAN_SIZE
).
bytesToSize
())
},
{
err
->
Timber
.
e
(
err
)
snackbar
.
showSnackBar
(
R
.
string
.
download_all_plans_errors_snackbar_message
)
})
)
detachDisposable
.
add
(
view
.
findViewById
<
Button
>(
R
.
id
.
alert_ok_button
)
.
clicks
()
.
debounce
(
200
,
TimeUnit
.
MILLISECONDS
)
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
{
router
.
replaceTopController
(
RouterTransaction
.
with
(
DownloadPlansDialogController
())
.
pushChangeHandler
(
DialogChangeHandler
())
.
popChangeHandler
(
DialogChangeHandler
())
)
}
)
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
=
[
StartPlansDownloadingDialogScreenModule
::
class
],
dependencies
=
[
AppComponent
::
class
])
interface
StartPlansDownloadingDialogScreenComponent
{
@Component
.
Factory
interface
Factory
{
fun
create
(
appComponent
:
AppComponent
,
@BindsInstance
activity
:
RoomParkMainActivity
):
StartPlansDownloadingDialogScreenComponent
}
fun
inject
(
controller
:
StartPlansDownloadingDialogController
)
}
@Module
abstract
class
StartPlansDownloadingDialogScreenModule
{
@PerScreen
@Binds
abstract
fun
provideActivity
(
activity
:
RoomParkMainActivity
):
BaseRoomParkActivity
}
app/src/main/java/com/biganto/visual/roompark/conductor/dialogs/tour_chooser/StartToursDownloadingDialogController.kt
View file @
f7c49ad2
...
@@ -38,13 +38,11 @@ import javax.inject.Inject
...
@@ -38,13 +38,11 @@ import javax.inject.Inject
* Created by Vladislav Bogdashkin on 09.04.2019.
* Created by Vladislav Bogdashkin on 09.04.2019.
*/
*/
private
const
val
TOTAL_SIZE_DOWNLOAD_KEY
=
"TOURS_TO_DOWNLOAD_OVERALL_SIZE"
class
StartToursDownloadingDialogController
:
Controller
{
class
StartToursDownloadingDialogController
:
Controller
{
constructor
(
args
:
Bundle
)
:
super
(
args
)
constructor
():
super
()
constructor
(
args
:
Bundle
):
super
(
args
)
constructor
(
size
:
Long
)
:
super
(
Bundle
().
apply
{
putLong
(
TOTAL_SIZE_DOWNLOAD_KEY
,
size
)
}
)
private
val
detachDisposable
=
CompositeDisposable
()
private
val
detachDisposable
=
CompositeDisposable
()
...
@@ -80,11 +78,6 @@ class StartToursDownloadingDialogController : Controller {
...
@@ -80,11 +78,6 @@ class StartToursDownloadingDialogController : Controller {
snackbar
=
ActivityModule
.
provideSnackBar
(
rpActivity
)
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
{
file
.
freeSpace
.
bytesToSize
().
let
{
view
.
findViewById
<
MaterialTextView
>(
R
.
id
.
disk_size_textView
)
view
.
findViewById
<
MaterialTextView
>(
R
.
id
.
disk_size_textView
)
.
text
=
resources
?.
getString
(
R
.
string
.
download_all_tours_disk_size_title
,
it
)
.
text
=
resources
?.
getString
(
R
.
string
.
download_all_tours_disk_size_title
,
it
)
...
@@ -96,6 +89,16 @@ class StartToursDownloadingDialogController : Controller {
...
@@ -96,6 +89,16 @@ class StartToursDownloadingDialogController : Controller {
view
.
findViewById
<
ImageView
>(
R
.
id
.
close_current_button
)
view
.
findViewById
<
ImageView
>(
R
.
id
.
close_current_button
)
.
setOnClickListener
{
handleBack
()
}
.
setOnClickListener
{
handleBack
()
}
detachDisposable
.
add
(
downloader
.
fetchToursSizes
()
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
{
view
.
findViewById
<
MaterialTextView
>(
R
.
id
.
all_tours_size_textView
)
.
text
=
resources
?.
getString
(
R
.
string
.
download_all_tours_size_title
,
it
.
bytesToSize
())
}
)
detachDisposable
.
add
(
detachDisposable
.
add
(
view
.
findViewById
<
Button
>(
R
.
id
.
alert_ok_button
)
view
.
findViewById
<
Button
>(
R
.
id
.
alert_ok_button
)
.
clicks
()
.
clicks
()
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/settings/ScreenController.kt
View file @
f7c49ad2
...
@@ -13,14 +13,13 @@ import com.biganto.visual.roompark.base.HeaderToolbarModel
...
@@ -13,14 +13,13 @@ import com.biganto.visual.roompark.base.HeaderToolbarModel
import
com.biganto.visual.roompark.base.RoomParkApplication
import
com.biganto.visual.roompark.base.RoomParkApplication
import
com.biganto.visual.roompark.base.RoomParkMainActivity
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.
DownloadPlans
DialogController
import
com.biganto.visual.roompark.conductor.dialogs.
StartPlansDownloading
DialogController
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.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
import
com.biganto.visual.roompark.presentation.screen.splash.SplashScreenController
import
com.biganto.visual.roompark.presentation.screen.splash.SplashScreenController
import
com.biganto.visual.roompark.util.extensions.bytesToSize
import
com.biganto.visual.roompark.util.extensions.setGone
import
com.biganto.visual.roompark.util.extensions.setGone
import
com.biganto.visual.roompark.util.monades.ExceptionString
import
com.biganto.visual.roompark.util.monades.ExceptionString
import
com.bluelinelabs.conductor.RouterTransaction
import
com.bluelinelabs.conductor.RouterTransaction
...
@@ -112,7 +111,7 @@ class SettingsScreenController :
...
@@ -112,7 +111,7 @@ class SettingsScreenController :
@OnClick
(
R
.
id
.
downloadFlatCardsIcon
)
@OnClick
(
R
.
id
.
downloadFlatCardsIcon
)
fun
onStartTourPlans
(){
fun
onStartTourPlans
(){
router
.
pushController
(
RouterTransaction
.
with
(
DownloadPlans
DialogController
())
router
.
pushController
(
RouterTransaction
.
with
(
StartPlansDownloading
DialogController
())
.
pushChangeHandler
(
DialogChangeHandler
())
.
pushChangeHandler
(
DialogChangeHandler
())
.
popChangeHandler
(
DialogChangeHandler
())
.
popChangeHandler
(
DialogChangeHandler
())
)
)
...
@@ -132,13 +131,12 @@ class SettingsScreenController :
...
@@ -132,13 +131,12 @@ class SettingsScreenController :
@OnClick
(
R
.
id
.
downloadToursIcon
)
@OnClick
(
R
.
id
.
downloadToursIcon
)
fun
startDownloadingDialog
(){
fun
startDownloadingDialog
(){
router
.
pushController
(
RouterTransaction
.
with
(
StartToursDownloadingDialogController
(
tempToursSize
))
router
.
pushController
(
RouterTransaction
.
with
(
StartToursDownloadingDialogController
())
.
pushChangeHandler
(
DialogChangeHandler
())
.
pushChangeHandler
(
DialogChangeHandler
())
.
popChangeHandler
(
DialogChangeHandler
())
.
popChangeHandler
(
DialogChangeHandler
())
)
)
}
}
private
var
tempToursSize
=
0L
private
fun
bindRecycler
(){
private
fun
bindRecycler
(){
pushRecycler
.
isNestedScrollingEnabled
=
true
pushRecycler
.
isNestedScrollingEnabled
=
true
...
@@ -157,14 +155,6 @@ class SettingsScreenController :
...
@@ -157,14 +155,6 @@ class SettingsScreenController :
override
fun
onViewBound
(
v
:
View
)
{
override
fun
onViewBound
(
v
:
View
)
{
bottomNavigationController
.
show
()
bottomNavigationController
.
show
()
toursDownloaderTitle
.
text
=
resources
?.
getString
(
R
.
string
.
download_all_tours_settings_with_size
,
"-"
)
flatDownloaderTitle
.
text
=
resources
?.
getString
(
R
.
string
.
download_all_plan_types_settings_with_sizes
,
"-"
)
setToolbar
()
setToolbar
()
bindRecycler
()
bindRecycler
()
}
}
...
@@ -195,23 +185,6 @@ class SettingsScreenController :
...
@@ -195,23 +185,6 @@ class SettingsScreenController :
clearCacheButton
.
setGone
(
false
)
clearCacheButton
.
setGone
(
false
)
}
}
private
fun
render
(
viewState
:
SettingsScreenViewState
.
OnSizePrefetch
)
{
tempToursSize
=
viewState
.
size
toursDownloaderTitle
.
text
=
resources
?.
getString
(
R
.
string
.
download_all_tours_settings_with_size
,
viewState
.
size
.
bytesToSize
()
)
}
private
fun
render
(
viewState
:
SettingsScreenViewState
.
OnPlanTypesPrefetch
)
{
flatDownloaderTitle
.
text
=
resources
?.
getString
(
R
.
string
.
download_all_plan_types_settings_with_sizes
,
viewState
.
size
.
bytesToSize
()
)
}
private
fun
render
(
viewState
:
SettingsScreenViewState
.
LoadSubscriptions
){
private
fun
render
(
viewState
:
SettingsScreenViewState
.
LoadSubscriptions
){
(
pushRecycler
.
adapter
as
PushListAdapter
).
setItems
(
viewState
.
list
)
(
pushRecycler
.
adapter
as
PushListAdapter
).
setItems
(
viewState
.
list
)
}
}
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/settings/ScreenPresenter.kt
View file @
f7c49ad2
...
@@ -6,7 +6,6 @@ import com.biganto.visual.roompark.domain.interactor.SettingsInteractor
...
@@ -6,7 +6,6 @@ import com.biganto.visual.roompark.domain.interactor.SettingsInteractor
import
com.biganto.visual.roompark.domain.model.CachedDataModel
import
com.biganto.visual.roompark.domain.model.CachedDataModel
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,8 +17,6 @@ import javax.inject.Inject
...
@@ -18,8 +17,6 @@ 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
,
private
val
activity
:
BaseRoomParkActivity
private
val
activity
:
BaseRoomParkActivity
...
@@ -37,23 +34,23 @@ class SettingsScreenPresenter @Inject constructor(
...
@@ -37,23 +34,23 @@ class SettingsScreenPresenter @Inject constructor(
override
fun
defaultErrorViewStateHandler
()
=
override
fun
defaultErrorViewStateHandler
()
=
{
e
:
ExceptionString
->
SettingsScreenViewState
.
SomeError
(
e
)
}
{
e
:
ExceptionString
->
SettingsScreenViewState
.
SomeError
(
e
)
}
private
val
cacheSizeRefresher
=
PublishRelay
.
create
<
Int
>()
//
private val cacheSizeRefresher = PublishRelay.create<Int>()
private
val
cahcObs
=
// private val cahcObs =
cacheSizeRefresher
.
flatMap
{
// cacheSizeRefresher.flatMap {
Observable
.
merge
(
// Observable.merge(
arrayListOf
(
// arrayListOf(
fetchToursSize
,
fetchPlansSize
// fetchToursSize, fetchPlansSize
)
// )
)
// )
}
// }
private
val
fetchToursSize
:
Observable
<
SettingsScreenViewState
>
=
interactor
.
fetchToursSizes
()
.
map
{
SettingsScreenViewState
.
OnSizePrefetch
(
it
)
}
private
val
fetchPlansSize
:
Observable
<
SettingsScreenViewState
>
=
interactor
.
fetchPlanTypesSizes
()
// private val fetchToursSize: Observable<SettingsScreenViewState> = interactor.fetchToursSizes()
.
map
{
it
*
TYPICAL_PLAN_SIZE
}
// .map { SettingsScreenViewState.OnSizePrefetch(it) }
.
map
{
SettingsScreenViewState
.
OnPlanTypesPrefetch
(
it
)
}
//
// private val fetchPlansSize: Observable<SettingsScreenViewState> = interactor.fetchPlanTypesSizes()
// .map { it* TYPICAL_PLAN_SIZE }
// .map { SettingsScreenViewState.OnPlanTypesPrefetch(it) }
override
fun
bindIntents
()
{
override
fun
bindIntents
()
{
...
@@ -82,7 +79,7 @@ class SettingsScreenPresenter @Inject constructor(
...
@@ -82,7 +79,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
)
}
//
.doOnNext {cacheSizeRefresher.accept(1) }
val
fetchSubscriptions
=
interactor
.
getSubscriptions
()
val
fetchSubscriptions
=
interactor
.
getSubscriptions
()
.
map
{
list
->
.
map
{
list
->
...
@@ -107,8 +104,8 @@ class SettingsScreenPresenter @Inject constructor(
...
@@ -107,8 +104,8 @@ class SettingsScreenPresenter @Inject constructor(
.
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
)
//
if (it.first == it.second)
cacheSizeRefresher
.
accept
(
1
)
//
cacheSizeRefresher.accept(1)
SettingsScreenViewState
.
OnCacheDeleting
(
SettingsScreenViewState
.
OnCacheDeleting
(
it
.
first
/
it
.
second
.
toFloat
()
it
.
first
/
it
.
second
.
toFloat
()
...
@@ -124,7 +121,7 @@ class SettingsScreenPresenter @Inject constructor(
...
@@ -124,7 +121,7 @@ class SettingsScreenPresenter @Inject constructor(
val
state
=
Observable
.
mergeDelayError
(
val
state
=
Observable
.
mergeDelayError
(
arrayListOf
(
arrayListOf
(
restoreStateObservable
,
restoreStateObservable
,
cahcObs
,
//
cahcObs,
// fetchPlansSize,
// fetchPlansSize,
fetchSettings
,
fetchSettings
,
onSignOut
,
onSignOut
,
...
...
app/src/main/res/values/strings.xml
View file @
f7c49ad2
...
@@ -40,7 +40,7 @@
...
@@ -40,7 +40,7 @@
<string
name=
"api_error_2001"
>
Тур не найден!
</string>
<string
name=
"api_error_2001"
>
Тур не найден!
</string>
<string
name=
"api_error_default"
>
Неизвестная ошибка сервера!
</string>
<string
name=
"api_error_default"
>
Неизвестная ошибка сервера!
</string>
<string
name=
"no_network_error"
>
No network
!
</string>
<string
name=
"no_network_error"
>
Нет сети
!
</string>
<string
name=
"unknown_error"
>
Unexpected error!
</string>
<string
name=
"unknown_error"
>
Unexpected error!
</string>
<string
name=
"cant_load_item_error"
>
Can\'t load item!
</string>
<string
name=
"cant_load_item_error"
>
Can\'t load item!
</string>
<string
name=
"object_not_found_error"
>
Object not found!
</string>
<string
name=
"object_not_found_error"
>
Object not found!
</string>
...
@@ -128,16 +128,18 @@
...
@@ -128,16 +128,18 @@
<string
name=
"game_view_content_description"
/>
<string
name=
"game_view_content_description"
/>
<string
name=
"download_all_tours_settings_with_size"
>
Скачать виртуальные туры моих квартир из избранного и сделок
(%s)
</string>
<string
name=
"download_all_tours_settings_with_size"
>
Скачать виртуальные туры моих квартир из избранного и сделок
</string>
<string
name=
"download_all_plan_types_settings_with_sizes"
>
Скачать карточки моих квартир из избранного и сделок
(%s)
</string>
<string
name=
"download_all_plan_types_settings_with_sizes"
>
Скачать карточки моих квартир из избранного и сделок
</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_notice_text"
>
Загрузить все туры?
</string>
<string
name=
"download_all_tours_size_title"
>
Размер всех туров: %s
</string>
<string
name=
"download_all_tours_size_title"
>
Размер всех туров: %s
</string>
<string
name=
"download_all_plans_size_title"
>
Размер всех планировок: %s
</string>
<string
name=
"download_all_tours_disk_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_yes_action"
>
Скачать
</string>
<string
name=
"download_all_tours_cancel_action"
>
Отмена
</string>
<string
name=
"download_all_tours_cancel_action"
>
Отмена
</string>
<string
name=
"download_all_tours_errors_snackbar_message"
>
Ошибка при попытке загрузить туры!
</string>
<string
name=
"download_all_tours_errors_snackbar_message"
>
Ошибка при попытке загрузить туры!
</string>
<string
name=
"download_all_plans_errors_snackbar_message"
>
Ошибка при попытке загрузить планировки!
</string>
<string
name=
"download_all_tours_start_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