Skip to content

249/bugfix_back_button_missed_question: fixed the back button issue #253

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import android.util.Log
import androidx.lifecycle.LiveData
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import io.reactivex.*
import io.reactivex.Observable
import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.BiFunction
import io.reactivex.schedulers.Schedulers
Expand All @@ -17,6 +17,8 @@ import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.ResponseBody
import org.koin.core.KoinComponent
import org.koin.core.inject
import retrofit2.HttpException
import retrofit2.Response
import retrofit2.Retrofit
import ro.code4.monitorizarevot.data.AppDatabase
import ro.code4.monitorizarevot.data.model.*
Expand All @@ -29,6 +31,8 @@ import ro.code4.monitorizarevot.data.model.response.VersionResponse
import ro.code4.monitorizarevot.data.pojo.*
import ro.code4.monitorizarevot.helper.Constants
import ro.code4.monitorizarevot.helper.createMultipart
import ro.code4.monitorizarevot.helper.logD
import ro.code4.monitorizarevot.helper.logE
import ro.code4.monitorizarevot.services.ApiInterface
import ro.code4.monitorizarevot.services.LoginInterface
import java.io.File
Expand Down Expand Up @@ -228,11 +232,14 @@ class Repository : KoinComponent {

@SuppressLint("CheckResult")
fun saveAnsweredQuestion(answeredQuestion: AnsweredQuestion, answers: List<SelectedAnswer>) {
Observable.create<Unit> {
Observable.fromCallable<Boolean> {
db.formDetailsDao().insertAnsweredQuestion(answeredQuestion, answers)
true
}.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe({}, {
Log.i(TAG, it.message.orEmpty())
.observeOn(AndroidSchedulers.mainThread()).subscribe({
logD("Saving answered question: $answeredQuestion(answers: $answers)", TAG)
}, {
logE(it.message.orEmpty(), TAG)
})
}

Expand All @@ -244,25 +251,47 @@ class Repository : KoinComponent {
})
}


@SuppressLint("CheckResult")
fun syncAnswers(countyCode: String, pollingStationNumber: Int, formId: Int) {
db.formDetailsDao().getNotSyncedQuestionsForForm(countyCode, pollingStationNumber, formId)
db.formDetailsDao()
.getNotSyncedQuestionsForForm(countyCode, pollingStationNumber, formId)
.toObservable()
.subscribeOn(Schedulers.io()).flatMap {
syncAnswers(it)
}.observeOn(AndroidSchedulers.mainThread()).subscribe({
Observable.create<Unit> {
db.formDetailsDao()
.updateAnsweredQuestions(countyCode, pollingStationNumber, formId)
}.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe()
.subscribeOn(Schedulers.io())
.flatMap { answers ->
syncAnswers(answers)
.flatMap {
Completable.fromAction {
if (answers.isNotEmpty()) {
logD("Updated number of answers:" + answers.size)
logD("Updated answered questions for:$pollingStationNumber", TAG)
db.formDetailsDao()
.updateAnsweredQuestions(
countyCode,
pollingStationNumber,
formId
)
} else {
logD("empty list.")
}
}.andThen(Observable.just(it))
}
}
.map {
if (!it.isSuccessful) {
throw HttpException(it)
}
return@map it.code()
}
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
logD("Success in syncing data.", Repository.TAG)
}, {
Log.i(TAG, it.message ?: "Error on synchronizing data")
val errorMessage = it.message ?: "Error on synchronizing data"
logE(errorMessage, it, Repository.TAG)
})
}

private fun syncAnswers(list: List<AnsweredQuestionPOJO>): Observable<ResponseBody> {
private fun syncAnswers(list: List<AnsweredQuestionPOJO>): Observable<Response<Void>> {
val responseAnswerContainer = ResponseAnswerContainer()
responseAnswerContainer.answers = list.map {
it.answeredQuestion.options = it.selectedAnswers
Expand Down Expand Up @@ -431,7 +460,7 @@ class Repository : KoinComponent {
db.pollingStationDao().deleteAll()
}
}

fun getVisitedStations() = db.pollingStationDao().getVisitedPollingStations()
}

Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import io.reactivex.Observable
import io.reactivex.Single
import okhttp3.MultipartBody
import okhttp3.ResponseBody
import retrofit2.Response
import retrofit2.http.*
import ro.code4.monitorizarevot.data.model.County
import ro.code4.monitorizarevot.data.model.PollingStation
Expand All @@ -25,7 +26,7 @@ interface ApiInterface {
fun postPollingStationDetails(@Body pollingStation: PollingStation): Observable<ResponseBody>

@POST("/api/v1/answers")
fun postQuestionAnswer(@Body responseAnswer: ResponseAnswerContainer): Observable<ResponseBody>
fun postQuestionAnswer(@Body responseAnswer: ResponseAnswerContainer): Observable<Response<Void>>

@Multipart
@POST("/api/v2/note")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,5 @@ class QuestionsDetailsFragment : ViewModelFragment<QuestionsDetailsViewModel>(),
}
viewModel.syncData()
super.onPause()

}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package ro.code4.monitorizarevot.ui.forms.questions

import android.annotation.SuppressLint
import android.util.Log
import io.reactivex.subjects.PublishSubject
import org.reactivestreams.Publisher
import io.reactivex.Observable
import ro.code4.monitorizarevot.adapters.helper.ListItem
import ro.code4.monitorizarevot.adapters.helper.MultiChoiceListItem
import ro.code4.monitorizarevot.adapters.helper.QuestionDetailsListItem
import ro.code4.monitorizarevot.adapters.helper.SingleChoiceListItem
import ro.code4.monitorizarevot.data.model.Answer
import ro.code4.monitorizarevot.data.model.Note
import ro.code4.monitorizarevot.data.model.answers.AnsweredQuestion
import ro.code4.monitorizarevot.data.model.answers.SelectedAnswer
Expand Down