Skip to content

Commit 6c2f42c

Browse files
authored
Fix RxJava null values usage (#240)
1 parent 7e68c25 commit 6c2f42c

File tree

3 files changed

+19
-16
lines changed

3 files changed

+19
-16
lines changed

app/src/main/java/ro/code4/monitorizarevot/data/model/response/VersionResponse.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import org.parceler.Parcel
55
import ro.code4.monitorizarevot.data.model.FormDetails
66

77
@Parcel(Parcel.Serialization.FIELD)
8-
class VersionResponse {
8+
open class VersionResponse {
99

1010
@Expose
1111
lateinit var formVersions: List<FormDetails>
12-
}
12+
}
13+
14+
class ErrorVersionResponse(exception: Throwable?) : VersionResponse()

app/src/main/java/ro/code4/monitorizarevot/data/pojo/FormWithSections.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import ro.code4.monitorizarevot.data.model.FormDetails
77
import ro.code4.monitorizarevot.data.model.Section
88

99

10-
class FormWithSections {
10+
open class FormWithSections {
1111
@Embedded
1212
lateinit var form: FormDetails
1313

@@ -17,7 +17,6 @@ class FormWithSections {
1717
@Ignore
1818
var noAnsweredQuestions: Int = 0
1919

20-
2120
override fun equals(other: Any?): Boolean =
2221
other is FormWithSections && form == other.form && sections.map { sections } == other.sections.map { sections } && noAnsweredQuestions == other.noAnsweredQuestions
2322

@@ -27,4 +26,6 @@ class FormWithSections {
2726
result = 31 * result + noAnsweredQuestions
2827
return result
2928
}
30-
}
29+
}
30+
31+
class ErrorFormWithSections(exception: Throwable) : FormWithSections()

app/src/main/java/ro/code4/monitorizarevot/repositories/Repository.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ import ro.code4.monitorizarevot.data.AppDatabase
2020
import ro.code4.monitorizarevot.data.model.*
2121
import ro.code4.monitorizarevot.data.model.answers.AnsweredQuestion
2222
import ro.code4.monitorizarevot.data.model.answers.SelectedAnswer
23+
import ro.code4.monitorizarevot.data.model.response.ErrorVersionResponse
2324
import ro.code4.monitorizarevot.data.model.response.LoginResponse
2425
import ro.code4.monitorizarevot.data.model.response.VersionResponse
25-
import ro.code4.monitorizarevot.data.pojo.AnsweredQuestionPOJO
26-
import ro.code4.monitorizarevot.data.pojo.FormWithSections
27-
import ro.code4.monitorizarevot.data.pojo.PollingStationInfo
28-
import ro.code4.monitorizarevot.data.pojo.SectionWithQuestions
26+
import ro.code4.monitorizarevot.data.pojo.*
2927
import ro.code4.monitorizarevot.helper.Constants
3028
import ro.code4.monitorizarevot.helper.createMultipart
3129
import ro.code4.monitorizarevot.services.ApiInterface
@@ -127,9 +125,9 @@ class Repository : KoinComponent {
127125
val observableDb = db.formDetailsDao().getFormsWithSections()
128126
val observableApi = apiInterface.getForms()
129127
return Observable.zip(
130-
observableDb.onErrorReturn { null },
131-
observableApi.onErrorReturn { null },
132-
BiFunction<List<FormWithSections>?, VersionResponse?, Unit> { dbFormDetails, response ->
128+
observableDb.onErrorReturn { listOf(ErrorFormWithSections(it)) },
129+
observableApi.onErrorReturn { ErrorVersionResponse(it) },
130+
BiFunction<List<FormWithSections>, VersionResponse, Unit> { dbFormDetails, response ->
133131
processFormDetailsData(dbFormDetails, response)
134132
})
135133
}
@@ -161,14 +159,16 @@ class Repository : KoinComponent {
161159
}
162160

163161
private fun processFormDetailsData(
164-
dbFormDetails: List<FormWithSections>?,
165-
response: VersionResponse?
162+
dbFormDetails: List<FormWithSections>,
163+
response: VersionResponse
166164
) {
167-
if (response == null) {
165+
if (response is ErrorVersionResponse) {
168166
return
169167
}
170168
val apiFormDetails = response.formVersions
171-
if (dbFormDetails == null || dbFormDetails.isEmpty()) {
169+
if ((dbFormDetails.size == 1 && dbFormDetails[0] is ErrorFormWithSections)
170+
|| dbFormDetails.isEmpty()
171+
) {
172172
saveFormDetails(apiFormDetails)
173173
return
174174
}

0 commit comments

Comments
 (0)