Skip to content

Commit cd2f608

Browse files
committed
Merge branch 'develop'
2 parents a147cc9 + 64cb902 commit cd2f608

48 files changed

Lines changed: 2060 additions & 236 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,5 @@ output*.json
117117
app/debug/
118118

119119
app/stdout
120+
121+
data/objectbox*.dll

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,5 @@ This project uses:
5353
* [Coil](https://github.com/coil-kt/coil) (image loader)
5454
* [MPAndroidChart](https://github.com/PhilJay/MPAndroidChart) (charts)
5555
* [ViewBindingPropertyDelegate](https://github.com/kirich1409/ViewBindingPropertyDelegate) (view binding)
56-
* [ObjectBox](https://github.com/objectbox/objectbox-java) (database)
56+
* [ObjectBox](https://github.com/objectbox/objectbox-java) (database)
57+
* [JUnit 5](https://junit.org/junit5/) (testing)

README.ru.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,5 @@
5353
* [Coil](https://github.com/coil-kt/coil) (загрузка изображений)
5454
* [MPAndroidChart](https://github.com/PhilJay/MPAndroidChart) (графики)
5555
* [ViewBindingPropertyDelegate](https://github.com/kirich1409/ViewBindingPropertyDelegate) (view binding)
56-
* [ObjectBox](https://github.com/objectbox/objectbox-java) (база данных)
56+
* [ObjectBox](https://github.com/objectbox/objectbox-java) (база данных)
57+
* [JUnit 5](https://junit.org/junit5/) (тестирование)

app/src/main/java/ru/rznnike/eyehealthmanager/app/di/DatabaseModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package ru.rznnike.eyehealthmanager.app.di
33
import org.koin.android.ext.koin.androidContext
44
import org.koin.dsl.module
55
import ru.rznnike.eyehealthmanager.data.storage.entity.MyObjectBox
6-
import ru.rznnike.eyehealthmanager.data.storage.repository.TestRepository
6+
import ru.rznnike.eyehealthmanager.domain.storage.repository.TestRepository
77
import ru.rznnike.eyehealthmanager.data.storage.repository.TestRepositoryImpl
88

99
val databaseModule = module {

app/src/main/java/ru/rznnike/eyehealthmanager/app/dispatcher/event/EventDispatcher.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ class EventDispatcher {
3838
.filter { it.value.size > 0 }
3939
.forEach { it.value.remove(listener) }
4040

41-
fun sendEvent(customEvent: AppEvent) {
42-
val key = customEvent::class.java.name
41+
fun sendEvent(appEvent: AppEvent) {
42+
val key = appEvent::class.java.name
4343
eventListeners
4444
.filter { it.key == key && it.value.size > 0 }
4545
.forEach {
4646
it.value.forEach { listener ->
4747
Handler(Looper.getMainLooper()).post {
4848
listener.onEvent(
49-
customEvent
49+
appEvent
5050
)
5151
}
5252
}

app/src/main/java/ru/rznnike/eyehealthmanager/app/presentation/acuity/result/AcuityResultPresenter.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import moxy.InjectViewState
55
import moxy.presenterScope
66
import org.koin.core.component.inject
77
import ru.rznnike.eyehealthmanager.app.Screens
8+
import ru.rznnike.eyehealthmanager.app.dispatcher.event.AppEvent
9+
import ru.rznnike.eyehealthmanager.app.dispatcher.event.EventDispatcher
810
import ru.rznnike.eyehealthmanager.app.dispatcher.notifier.Notifier
911
import ru.rznnike.eyehealthmanager.app.global.presentation.BasePresenter
1012
import ru.rznnike.eyehealthmanager.app.global.presentation.ErrorHandler
@@ -26,6 +28,7 @@ class AcuityResultPresenter(
2628
) : BasePresenter<AcuityResultView>() {
2729
private val errorHandler: ErrorHandler by inject()
2830
private val notifier: Notifier by inject()
31+
private val eventDispatcher: EventDispatcher by inject()
2932
private val getApplyDynamicCorrectionsUseCase: GetApplyDynamicCorrectionsUseCase by inject()
3033
private val getAnalysisResultUseCase: GetAnalysisResultUseCase by inject()
3134
private val deleteTestResultUseCase: DeleteTestResultUseCase by inject()
@@ -79,6 +82,7 @@ class AcuityResultPresenter(
7982
}
8083
}
8184
)
85+
eventDispatcher.sendEvent(AppEvent.JournalChanged)
8286
viewState.setProgress(false)
8387
}
8488
}

app/src/main/java/ru/rznnike/eyehealthmanager/app/presentation/analysis/parameters/AnalysisParametersPresenter.kt

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,13 @@ import ru.rznnike.eyehealthmanager.domain.interactor.user.SetApplyDynamicCorrect
1414
import ru.rznnike.eyehealthmanager.domain.model.AnalysisParameters
1515
import ru.rznnike.eyehealthmanager.domain.model.enums.AnalysisType
1616
import ru.rznnike.eyehealthmanager.domain.model.exception.NotEnoughDataException
17+
import ru.rznnike.eyehealthmanager.domain.utils.GlobalConstants
1718
import ru.rznnike.eyehealthmanager.domain.utils.atEndOfDay
1819
import ru.rznnike.eyehealthmanager.domain.utils.atStartOfDay
1920
import ru.rznnike.eyehealthmanager.domain.utils.getTodayCalendar
2021
import ru.rznnike.eyehealthmanager.domain.utils.toCalendar
22+
import ru.rznnike.eyehealthmanager.domain.utils.toLocalDate
23+
import java.time.temporal.ChronoUnit
2124
import java.util.*
2225

2326
@InjectViewState
@@ -38,7 +41,7 @@ class AnalysisParametersPresenter : BasePresenter<AnalysisParametersView>() {
3841
presenterScope.launch {
3942
parameters.apply {
4043
dateFrom = getTodayCalendar().apply {
41-
add(Calendar.MONTH, -3)
44+
add(Calendar.DAY_OF_MONTH, -GlobalConstants.ANALYSIS_MAX_RANGE_DAYS)
4245
}.timeInMillis
4346
dateTo = Calendar.getInstance().atEndOfDay().timeInMillis
4447
applyDynamicCorrections = getApplyDynamicCorrectionsUseCase().data ?: false
@@ -49,16 +52,48 @@ class AnalysisParametersPresenter : BasePresenter<AnalysisParametersView>() {
4952

5053
fun onDateFromValueChanged(newValue: Long) {
5154
parameters.dateFrom = newValue.toCalendar().atStartOfDay().timeInMillis
52-
if (parameters.dateTo <= parameters.dateFrom) {
53-
parameters.dateTo = newValue.toCalendar().atEndOfDay().timeInMillis
55+
val deltaDays = ChronoUnit.DAYS.between(parameters.dateFrom.toLocalDate(), parameters.dateTo.toLocalDate())
56+
when {
57+
deltaDays < GlobalConstants.ANALYSIS_MIN_RANGE_DAYS -> {
58+
parameters.dateTo = newValue.toCalendar()
59+
.apply {
60+
add(Calendar.DAY_OF_MONTH, GlobalConstants.ANALYSIS_MIN_RANGE_DAYS)
61+
}
62+
.atEndOfDay()
63+
.timeInMillis
64+
}
65+
deltaDays > GlobalConstants.ANALYSIS_MAX_RANGE_DAYS -> {
66+
parameters.dateTo = newValue.toCalendar()
67+
.apply {
68+
add(Calendar.DAY_OF_MONTH, GlobalConstants.ANALYSIS_MAX_RANGE_DAYS)
69+
}
70+
.atEndOfDay()
71+
.timeInMillis
72+
}
5473
}
5574
viewState.populateData(parameters)
5675
}
5776

5877
fun onDateToValueChanged(newValue: Long) {
5978
parameters.dateTo = newValue.toCalendar().atEndOfDay().timeInMillis
60-
if (parameters.dateTo <= parameters.dateFrom) {
61-
parameters.dateFrom = newValue.toCalendar().atStartOfDay().timeInMillis
79+
val deltaDays = ChronoUnit.DAYS.between(parameters.dateFrom.toLocalDate(), parameters.dateTo.toLocalDate())
80+
when {
81+
deltaDays < GlobalConstants.ANALYSIS_MIN_RANGE_DAYS -> {
82+
parameters.dateFrom = newValue.toCalendar()
83+
.apply {
84+
add(Calendar.DAY_OF_MONTH, -GlobalConstants.ANALYSIS_MIN_RANGE_DAYS)
85+
}
86+
.atStartOfDay()
87+
.timeInMillis
88+
}
89+
deltaDays > GlobalConstants.ANALYSIS_MAX_RANGE_DAYS -> {
90+
parameters.dateFrom = newValue.toCalendar()
91+
.apply {
92+
add(Calendar.DAY_OF_MONTH, -GlobalConstants.ANALYSIS_MAX_RANGE_DAYS)
93+
}
94+
.atStartOfDay()
95+
.timeInMillis
96+
}
6297
}
6398
viewState.populateData(parameters)
6499
}

app/src/main/java/ru/rznnike/eyehealthmanager/app/presentation/settings/testing/TestingSettingsPresenter.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ import ru.rznnike.eyehealthmanager.domain.global.CoroutineProvider
1313
import ru.rznnike.eyehealthmanager.domain.interactor.user.GetTestingSettingsUseCase
1414
import ru.rznnike.eyehealthmanager.domain.interactor.user.SetTestingSettingsUseCase
1515
import ru.rznnike.eyehealthmanager.domain.model.TestingSettings
16+
import ru.rznnike.eyehealthmanager.domain.utils.GlobalConstants
1617
import ru.rznnike.eyehealthmanager.domain.utils.getDayTime
1718

1819
private const val MIN_DELTA_IN_MS = 60 * 1000L // 1m
19-
private const val DAY_LENGTH_IN_MS = 24 * 60 * 60 * 1000L // 24h
2020

2121
@InjectViewState
2222
class TestingSettingsPresenter : BasePresenter<TestingSettingsView>() {
@@ -104,12 +104,12 @@ class TestingSettingsPresenter : BasePresenter<TestingSettingsView>() {
104104
val middle = if (settings.timeToDayMiddle >= settings.timeToDayBeginning) {
105105
settings.timeToDayMiddle
106106
} else {
107-
settings.timeToDayMiddle + DAY_LENGTH_IN_MS
107+
settings.timeToDayMiddle + GlobalConstants.DAY_MS
108108
}
109109
val end = if (settings.timeToDayEnd >= settings.timeToDayBeginning) {
110110
settings.timeToDayEnd
111111
} else {
112-
settings.timeToDayEnd + DAY_LENGTH_IN_MS
112+
settings.timeToDayEnd + GlobalConstants.DAY_MS
113113
}
114114

115115
return (middle > settings.timeToDayBeginning) && (end > middle)
@@ -119,20 +119,20 @@ class TestingSettingsPresenter : BasePresenter<TestingSettingsView>() {
119119
when (period) {
120120
TimePeriod.BEGINNING -> {
121121
settings.timeToDayBeginning = settings.timeToDayEnd + MIN_DELTA_IN_MS
122-
if (settings.timeToDayBeginning >= DAY_LENGTH_IN_MS) {
123-
settings.timeToDayBeginning -= DAY_LENGTH_IN_MS
122+
if (settings.timeToDayBeginning >= GlobalConstants.DAY_MS) {
123+
settings.timeToDayBeginning -= GlobalConstants.DAY_MS
124124
}
125125
}
126126
TimePeriod.MIDDLE -> {
127127
settings.timeToDayMiddle = settings.timeToDayBeginning + MIN_DELTA_IN_MS
128-
if (settings.timeToDayMiddle >= DAY_LENGTH_IN_MS) {
129-
settings.timeToDayMiddle -= DAY_LENGTH_IN_MS
128+
if (settings.timeToDayMiddle >= GlobalConstants.DAY_MS) {
129+
settings.timeToDayMiddle -= GlobalConstants.DAY_MS
130130
}
131131
}
132132
TimePeriod.END -> {
133133
settings.timeToDayEnd = settings.timeToDayMiddle + MIN_DELTA_IN_MS
134-
if (settings.timeToDayEnd >= DAY_LENGTH_IN_MS) {
135-
settings.timeToDayEnd -= DAY_LENGTH_IN_MS
134+
if (settings.timeToDayEnd >= GlobalConstants.DAY_MS) {
135+
settings.timeToDayEnd -= GlobalConstants.DAY_MS
136136
}
137137
}
138138
}

app/src/main/java/ru/rznnike/eyehealthmanager/app/ui/fragment/analysis/parameters/AnalysisParametersFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class AnalysisParametersFragment : BaseFragment(R.layout.fragment_analysis_param
8282
}
8383
buttonDateTo.setOnClickListener {
8484
showDatePicker(
85-
preselectedDate = parameters.dateFrom,
85+
preselectedDate = parameters.dateTo,
8686
onSuccess = presenter::onDateToValueChanged
8787
)
8888
}

app/src/main/java/ru/rznnike/eyehealthmanager/app/ui/fragment/daltonism/test/DaltonismTestFragment.kt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import android.view.View
55
import androidx.annotation.DrawableRes
66
import by.kirich1409.viewbindingdelegate.viewBinding
77
import coil.load
8-
import coil.transform.RoundedCornersTransformation
98
import moxy.presenter.InjectPresenter
109
import ru.rznnike.eyehealthmanager.R
1110
import ru.rznnike.eyehealthmanager.app.dialog.alert.AlertDialogAction
@@ -14,6 +13,7 @@ import ru.rznnike.eyehealthmanager.app.dialog.showAlertDialog
1413
import ru.rznnike.eyehealthmanager.app.global.ui.fragment.BaseFragment
1514
import ru.rznnike.eyehealthmanager.app.presentation.daltonism.test.DaltonismTestPresenter
1615
import ru.rznnike.eyehealthmanager.app.presentation.daltonism.test.DaltonismTestView
16+
import ru.rznnike.eyehealthmanager.app.utils.RoundedCornersFitTransformation
1717
import ru.rznnike.eyehealthmanager.app.utils.extensions.addSystemWindowInsetToPadding
1818
import ru.rznnike.eyehealthmanager.app.utils.extensions.context
1919
import ru.rznnike.eyehealthmanager.app.utils.extensions.convertDpToPx
@@ -104,12 +104,7 @@ class DaltonismTestFragment : BaseFragment(R.layout.fragment_daltonism_test), Da
104104
height = imageViewTest.height
105105
)
106106
transformations(
107-
RoundedCornersTransformation(
108-
topLeft = cornersPx,
109-
topRight = cornersPx,
110-
bottomLeft = cornersPx,
111-
bottomRight = cornersPx
112-
)
107+
RoundedCornersFitTransformation(cornersPx)
113108
)
114109
}
115110
}

0 commit comments

Comments
 (0)