Skip to content

Commit f4ad0bc

Browse files
authored
courses: smoother step progress saving (fixes #8992) (#8958)
1 parent 3ac49e7 commit f4ad0bc

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ android {
99
applicationId "org.ole.planet.myplanet"
1010
minSdk = 26
1111
targetSdk = 36
12-
versionCode = 3708
13-
versionName = "0.37.8"
12+
versionCode = 3709
13+
versionName = "0.37.9"
1414
ndkVersion = '26.3.11579264'
1515
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1616
vectorDrawables.useSupportLibrary = true

app/src/main/java/org/ole/planet/myplanet/ui/courses/CourseStepFragment.kt

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.fragment.app.Fragment
1111
import androidx.lifecycle.lifecycleScope
1212
import java.util.Date
1313
import java.util.UUID
14+
import kotlinx.coroutines.Job
1415
import kotlinx.coroutines.launch
1516
import org.ole.planet.myplanet.MainApplication
1617
import org.ole.planet.myplanet.R
@@ -39,6 +40,7 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback {
3940
private lateinit var stepSurvey: List<RealmStepExam>
4041
var user: RealmUserModel? = null
4142
private var stepNumber = 0
43+
private var saveInProgress: Job? = null
4244
override fun onCreate(savedInstanceState: Bundle?) {
4345
super.onCreate(savedInstanceState)
4446
if (arguments != null) {
@@ -55,12 +57,11 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback {
5557
return fragmentCourseStepBinding.root
5658
}
5759

58-
private fun saveCourseProgress() {
59-
databaseService.withRealm { realm ->
60-
if (!realm.isInTransaction) realm.beginTransaction()
60+
private suspend fun saveCourseProgress(userId: String?, planetCode: String?, parentCode: String?) {
61+
databaseService.executeTransactionAsync { realm ->
6162
var courseProgress = realm.where(RealmCourseProgress::class.java)
6263
.equalTo("courseId", step.courseId)
63-
.equalTo("userId", user?.id)
64+
.equalTo("userId", userId)
6465
.equalTo("stepNum", stepNumber)
6566
.findFirst()
6667
if (courseProgress == null) {
@@ -72,12 +73,22 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback {
7273
if (stepExams.isEmpty()) {
7374
courseProgress?.passed = true
7475
}
75-
courseProgress?.createdOn = user?.planetCode
76+
courseProgress?.createdOn = planetCode
7677
courseProgress?.updatedDate = Date().time
77-
courseProgress?.parentCode = user?.parentCode
78-
courseProgress?.userId = user?.id
79-
realm.commitTransaction()
78+
courseProgress?.parentCode = parentCode
79+
courseProgress?.userId = userId
80+
}
81+
}
82+
83+
private fun launchSaveCourseProgress() {
84+
if (saveInProgress?.isActive == true) return
85+
val userId = user?.id
86+
val planetCode = user?.planetCode
87+
val parentCode = user?.parentCode
88+
saveInProgress = lifecycleScope.launch {
89+
saveCourseProgress(userId, planetCode, parentCode)
8090
}
91+
saveInProgress?.invokeOnCompletion { saveInProgress = null }
8192
}
8293
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
8394
super.onViewCreated(view, savedInstanceState)
@@ -132,7 +143,7 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback {
132143
}
133144
}
134145
if (isVisible && userHasCourse) {
135-
saveCourseProgress()
146+
launchSaveCourseProgress()
136147
}
137148
}
138149

@@ -171,7 +182,7 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback {
171182
isMyCourse(user?.id, step.courseId, realm)
172183
}
173184
if (userHasCourse) {
174-
saveCourseProgress()
185+
launchSaveCourseProgress()
175186
}
176187
}
177188
} catch (e: Exception) {

0 commit comments

Comments
 (0)