Skip to content

Commit a6808a7

Browse files
Okuro3499dogi
andauthored
all: smoother extension lifecycle flowing (fixes #13074) (#13076)
Co-authored-by: dogi <dogi@users.noreply.github.com>
1 parent 15110a3 commit a6808a7

24 files changed

Lines changed: 193 additions & 215 deletions

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ android {
1212
applicationId "org.ole.planet.myplanet"
1313
minSdk = 26
1414
targetSdk = 36
15-
versionCode = 5357
16-
versionName = "0.53.57"
15+
versionCode = 5358
16+
versionName = "0.53.58"
1717
ndkVersion = '26.3.11579264'
1818
vectorDrawables.useSupportLibrary = true
1919
}

app/src/main/java/org/ole/planet/myplanet/repository/RealmRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ open class RealmRepository(
5252
realm.where(clazz).apply(builder).count()
5353
}
5454

55-
protected suspend fun <T : RealmObject> queryListFlow(
55+
protected fun <T : RealmObject> queryListFlow(
5656
clazz: Class<T>,
5757
builder: RealmQuery<T>.() -> Unit = {},
5858
): Flow<List<T>> = callbackFlow<RealmResults<T>> {

app/src/main/java/org/ole/planet/myplanet/repository/ResourcesRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ interface ResourcesRepository {
4040
suspend fun getMyLibrary(userId: String?): List<RealmMyLibrary>
4141
suspend fun getStepResources(stepId: String?, resourceOffline: Boolean): List<RealmMyLibrary>
4242
suspend fun getAllStepResources(stepId: String?): List<RealmMyLibrary>
43-
suspend fun getRecentResources(userId: String): Flow<List<RealmMyLibrary>>
44-
suspend fun getPendingDownloads(userId: String): Flow<List<RealmMyLibrary>>
43+
fun getRecentResources(userId: String): Flow<List<RealmMyLibrary>>
44+
fun getPendingDownloads(userId: String): Flow<List<RealmMyLibrary>>
4545
suspend fun getPrivateImagesCreatedAfter(timestamp: Long): List<RealmMyLibrary>
4646
suspend fun countLibrariesNeedingUpdate(userId: String?): Int
4747
suspend fun resourceTitleExists(title: String): Boolean

app/src/main/java/org/ole/planet/myplanet/repository/ResourcesRepositoryImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,15 +303,15 @@ class ResourcesRepositoryImpl @Inject constructor(
303303
return imageList.mapNotNull { it.resourceRemoteAddress }
304304
}
305305

306-
override suspend fun getRecentResources(userId: String): Flow<List<RealmMyLibrary>> {
306+
override fun getRecentResources(userId: String): Flow<List<RealmMyLibrary>> {
307307
return queryListFlow(RealmMyLibrary::class.java) {
308308
equalTo("userId", userId)
309309
.sort("createdDate", Sort.DESCENDING)
310310
.limit(10)
311311
}
312312
}
313313

314-
override suspend fun getPendingDownloads(userId: String): Flow<List<RealmMyLibrary>> {
314+
override fun getPendingDownloads(userId: String): Flow<List<RealmMyLibrary>> {
315315
return queryListFlow(RealmMyLibrary::class.java) {
316316
equalTo("userId", userId)
317317
.equalTo("resourceOffline", false)

app/src/main/java/org/ole/planet/myplanet/repository/SubmissionsRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import org.ole.planet.myplanet.model.SubmissionDetail
88
import org.ole.planet.myplanet.model.SubmissionItem
99

1010
interface SubmissionsRepository {
11-
suspend fun getPendingSurveysFlow(userId: String?): Flow<List<RealmSubmission>>
11+
fun getPendingSurveysFlow(userId: String?): Flow<List<RealmSubmission>>
1212
suspend fun getSubmissionsFlow(userId: String): Flow<List<RealmSubmission>>
1313
suspend fun getPendingSurveys(userId: String?): List<RealmSubmission>
1414
suspend fun getUniquePendingSurveys(userId: String?): List<RealmSubmission>

app/src/main/java/org/ole/planet/myplanet/repository/SubmissionsRepositoryImpl.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class SubmissionsRepositoryImpl @Inject internal constructor(
3939
return parentId?.substringBefore("@")
4040
}
4141

42-
override suspend fun getPendingSurveysFlow(userId: String?): Flow<List<RealmSubmission>> {
42+
override fun getPendingSurveysFlow(userId: String?): Flow<List<RealmSubmission>> {
4343
return queryListFlow(RealmSubmission::class.java) {
4444
equalTo("userId", userId)
4545
.equalTo("type", "survey")
@@ -719,10 +719,10 @@ private suspend fun getExamsByIds(examIds: List<String>): List<RealmStepExam> {
719719

720720
var sub = mRealm.where(RealmSubmission::class.java).equalTo("_id", id).findFirst()
721721
val isNewSubmission = sub == null
722-
val hadLocalChanges = !isNewSubmission && sub?.isUpdated == true
722+
val hadLocalChanges = !isNewSubmission && sub.isUpdated
723723
val serverStatus = org.ole.planet.myplanet.utils.JsonUtils.getString("status", submission)
724724
val isStatusDowngrade = !isNewSubmission && serverStatus == "pending" &&
725-
(sub?.status == "complete" || sub?.status == "requires grading")
725+
(sub.status == "complete" || sub.status == "requires grading")
726726
val skipOverwrite = hadLocalChanges || isStatusDowngrade
727727

728728
if (sub == null) {

app/src/main/java/org/ole/planet/myplanet/repository/TeamsRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ interface TeamsRepository {
6363
suspend fun getJoinRequestTeamId(requestId: String): String?
6464
suspend fun getTaskNotifications(userId: String?): List<Triple<String, String, String>>
6565
suspend fun getJoinRequestNotifications(userId: String?): List<JoinRequestNotification>
66-
suspend fun getTasksFlow(userId: String?): Flow<List<RealmTeamTask>>
66+
fun getTasksFlow(userId: String?): Flow<List<RealmTeamTask>>
6767
suspend fun getTasks(userId: String?): List<RealmTeamTask>
6868
suspend fun isMember(userId: String?, teamId: String): Boolean
6969
suspend fun isTeamLeader(teamId: String, userId: String?): Boolean

app/src/main/java/org/ole/planet/myplanet/repository/TeamsRepositoryImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class TeamsRepositoryImpl @Inject constructor(
5555
private val dispatcherProvider: DispatcherProvider,
5656
private val userRepository: UserRepository,
5757
) : RealmRepository(databaseService, realmDispatcher), TeamsRepository {
58-
override suspend fun getTasksFlow(userId: String?): Flow<List<RealmTeamTask>> {
58+
override fun getTasksFlow(userId: String?): Flow<List<RealmTeamTask>> {
5959
return queryListFlow(RealmTeamTask::class.java) {
6060
notEqualTo("status", "archived")
6161
.equalTo("completed", false)

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

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,9 @@ import android.view.View
66
import android.view.ViewGroup
77
import android.widget.TextView
88
import androidx.fragment.app.viewModels
9-
import androidx.lifecycle.Lifecycle
10-
import androidx.lifecycle.lifecycleScope
11-
import androidx.lifecycle.repeatOnLifecycle
129
import androidx.recyclerview.widget.LinearLayoutManager
1310
import dagger.hilt.android.AndroidEntryPoint
14-
import kotlinx.coroutines.launch
11+
import org.ole.planet.myplanet.utils.collectWhenStarted
1512
import org.ole.planet.myplanet.MainApplication
1613
import org.ole.planet.myplanet.R
1714
import org.ole.planet.myplanet.base.BaseContainerFragment
@@ -48,21 +45,17 @@ class CourseDetailFragment : BaseContainerFragment(), OnRatingChangeListener {
4845
viewModel.loadCourseDetail(it)
4946
}
5047

51-
viewLifecycleOwner.lifecycleScope.launch {
52-
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
53-
viewModel.uiState.collect { state ->
54-
when (state) {
55-
is CourseDetailUiState.Loading -> {
56-
// Show loading indicator if needed
57-
}
58-
is CourseDetailUiState.Success -> {
59-
bindCourseData(state)
60-
}
61-
is CourseDetailUiState.Error -> {
62-
context?.let { ctx ->
63-
android.widget.Toast.makeText(ctx, state.message, android.widget.Toast.LENGTH_LONG).show()
64-
}
65-
}
48+
collectWhenStarted(viewModel.uiState) { state ->
49+
when (state) {
50+
is CourseDetailUiState.Loading -> {
51+
// Show loading indicator if needed
52+
}
53+
is CourseDetailUiState.Success -> {
54+
bindCourseData(state)
55+
}
56+
is CourseDetailUiState.Error -> {
57+
context?.let { ctx ->
58+
android.widget.Toast.makeText(ctx, state.message, android.widget.Toast.LENGTH_LONG).show()
6659
}
6760
}
6861
}

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

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@ package org.ole.planet.myplanet.ui.courses
22

33
import android.os.Bundle
44
import androidx.activity.viewModels
5-
import androidx.lifecycle.Lifecycle
6-
import androidx.lifecycle.lifecycleScope
7-
import androidx.lifecycle.repeatOnLifecycle
85
import androidx.recyclerview.widget.GridLayoutManager
96
import dagger.hilt.android.AndroidEntryPoint
10-
import kotlinx.coroutines.launch
7+
import org.ole.planet.myplanet.utils.collectWhenStarted
118
import org.ole.planet.myplanet.R
129
import org.ole.planet.myplanet.base.BaseActivity
1310
import org.ole.planet.myplanet.databinding.ActivityCourseProgressBinding
@@ -30,13 +27,9 @@ class CourseProgressActivity : BaseActivity() {
3027

3128
binding.rvProgress.layoutManager = GridLayoutManager(this, 4)
3229

33-
lifecycleScope.launch {
34-
repeatOnLifecycle(Lifecycle.State.STARTED) {
35-
viewModel.courseProgress.collect { data ->
36-
if (data != null) {
37-
updateUI(data)
38-
}
39-
}
30+
collectWhenStarted(viewModel.courseProgress) { data ->
31+
if (data != null) {
32+
updateUI(data)
4033
}
4134
}
4235
viewModel.loadProgress(courseId)

0 commit comments

Comments
 (0)