From 386cdc418c1fa5b5d4e34ea9f3e7b8e467c7719a Mon Sep 17 00:00:00 2001 From: dogi <13684059+dogi@users.noreply.github.com> Date: Mon, 2 Mar 2026 18:19:12 +0000 Subject: [PATCH 1/3] Refactor: Introduce Facade methods to CoursesRepository - Added `getCourseActivities()`, `getCourseProgress()`, and `getCourseSubmissions()` facade methods to `CoursesRepository` interface. - Implemented these methods in `CoursesRepositoryImpl` by returning injected `ActivitiesRepository`, `ProgressRepository`, and `SubmissionsRepository` instances. - Refactored `TakeCourseFragment` to exclusively inject `CoursesRepository`, replacing direct sub-repository injections with method calls to the new facades. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- .../myplanet/repository/CoursesRepository.kt | 3 +++ .../myplanet/repository/CoursesRepositoryImpl.kt | 16 +++++++++++++++- .../myplanet/ui/courses/TakeCourseFragment.kt | 16 +++++----------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepository.kt b/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepository.kt index 90b48d1d0d0..9ab8c6d7702 100644 --- a/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepository.kt +++ b/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepository.kt @@ -47,4 +47,7 @@ interface CoursesRepository { suspend fun getCourseStepData(stepId: String, userId: String?): CourseStepData suspend fun getMyCourseIds(userId: String): JsonArray suspend fun removeCourseFromShelf(courseId: String, userId: String) + fun getCourseActivities(): ActivitiesRepository + fun getCourseProgress(): ProgressRepository + fun getCourseSubmissions(): SubmissionsRepository } diff --git a/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepositoryImpl.kt b/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepositoryImpl.kt index 724635b647f..ca651d3e0fb 100644 --- a/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepositoryImpl.kt +++ b/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepositoryImpl.kt @@ -29,7 +29,9 @@ import org.ole.planet.myplanet.utils.JsonUtils class CoursesRepositoryImpl @Inject constructor( databaseService: DatabaseService, - private val progressRepository: ProgressRepository + private val progressRepository: ProgressRepository, + private val activitiesRepository: ActivitiesRepository, + private val submissionsRepository: SubmissionsRepository ) : RealmRepository(databaseService), CoursesRepository { override suspend fun getAllCourses(): List { @@ -404,4 +406,16 @@ class CoursesRepositoryImpl @Inject constructor( override suspend fun removeCourseFromShelf(courseId: String, userId: String) { leaveCourse(courseId, userId) } + + override fun getCourseActivities(): ActivitiesRepository { + return activitiesRepository + } + + override fun getCourseProgress(): ProgressRepository { + return progressRepository + } + + override fun getCourseSubmissions(): SubmissionsRepository { + return submissionsRepository + } } diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/courses/TakeCourseFragment.kt b/app/src/main/java/org/ole/planet/myplanet/ui/courses/TakeCourseFragment.kt index a9a8fd6fcfb..21fbbad1105 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/courses/TakeCourseFragment.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/courses/TakeCourseFragment.kt @@ -43,12 +43,6 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl lateinit var userSessionManager: UserSessionManager @Inject lateinit var coursesRepository: CoursesRepository - @Inject - lateinit var submissionsRepository: SubmissionsRepository - @Inject - lateinit var progressRepository: ProgressRepository - @Inject - lateinit var activitiesRepository: ActivitiesRepository private var currentCourse: RealmMyCourse? = null lateinit var steps: List var position = 0 @@ -182,7 +176,7 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl } lifecycleScope.launch { - val currentProgress = progressRepository.getCurrentProgress(steps, userModel?.id, courseId) + val currentProgress = coursesRepository.getCourseProgress().getCurrentProgress(steps, userModel?.id, courseId) currentCourseProgress = currentProgress if (currentProgress < steps.size) { binding.courseProgress.secondaryProgress = currentProgress + 1 @@ -221,7 +215,7 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl detachedCurrentCourse?.courseId?.let { courseId -> detachedCurrentCourse.courseTitle?.let { courseTitle -> detachedUserModel?.name?.let { userName -> - activitiesRepository.logCourseVisit( + coursesRepository.getCourseActivities().logCourseVisit( courseId, courseTitle, userName @@ -265,7 +259,7 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl private fun changeNextButtonState(position: Int) { if (courseId == "4e6b78800b6ad18b4e8b0e1e38a98cac") { lifecycleScope.launch { - if (submissionsRepository.isStepCompleted(steps[position - 1]?.id, userModel?.id)) { + if (coursesRepository.getCourseSubmissions().isStepCompleted(steps[position - 1]?.id, userModel?.id)) { binding.nextStep.isClickable = true binding.nextStep.setTextColor(ContextCompat.getColor(requireContext(), R.color.md_white_1000)) } else { @@ -369,13 +363,13 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl private suspend fun getCourseProgress(): Int { val user = userSessionManager.getUserModel() - val courseProgressMap = progressRepository.getCourseProgress(user?.id) + val courseProgressMap = coursesRepository.getCourseProgress().getCourseProgress(user?.id) return courseProgressMap[courseId]?.asJsonObject?.get("current")?.asInt ?: 0 } private fun checkSurveyCompletion() = viewLifecycleOwner.lifecycleScope.launch { val hasUnfinishedSurvey = courseId?.let { - submissionsRepository.hasUnfinishedSurveys(it, userModel?.id) + coursesRepository.getCourseSubmissions().hasUnfinishedSurveys(it, userModel?.id) } ?: false if (hasUnfinishedSurvey && courseId == "4e6b78800b6ad18b4e8b0e1e38a98cac") { From c76d5023d7209198aa18c1ca13a569cec4375101 Mon Sep 17 00:00:00 2001 From: dogi <13684059+dogi@users.noreply.github.com> Date: Tue, 3 Mar 2026 13:15:44 +0000 Subject: [PATCH 2/3] Refactor: Use delegation in CoursesRepository for sub-repositories - Reverted facade getter methods from `CoursesRepository`. - Added true delegation methods to `CoursesRepository` (`logCourseVisit`, `getCurrentProgress`, `getCourseProgress`, `isStepCompleted`, `hasUnfinishedSurveys`). - Implemented these methods in `CoursesRepositoryImpl` by delegating directly to the injected `ActivitiesRepository`, `ProgressRepository`, and `SubmissionsRepository`. - Refactored `TakeCourseFragment` to call the delegation methods on `CoursesRepository`, allowing the removal of direct `@Inject` fields for the sub-repositories without exposing their interfaces. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- .../myplanet/repository/CoursesRepository.kt | 8 +++++--- .../repository/CoursesRepositoryImpl.kt | 20 +++++++++++++------ .../myplanet/ui/courses/TakeCourseFragment.kt | 10 +++++----- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepository.kt b/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepository.kt index 9ab8c6d7702..5577dac018d 100644 --- a/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepository.kt +++ b/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepository.kt @@ -47,7 +47,9 @@ interface CoursesRepository { suspend fun getCourseStepData(stepId: String, userId: String?): CourseStepData suspend fun getMyCourseIds(userId: String): JsonArray suspend fun removeCourseFromShelf(courseId: String, userId: String) - fun getCourseActivities(): ActivitiesRepository - fun getCourseProgress(): ProgressRepository - fun getCourseSubmissions(): SubmissionsRepository + suspend fun logCourseVisit(courseId: String, title: String, userId: String) + suspend fun getCurrentProgress(steps: List?, userId: String?, courseId: String?): Int + suspend fun getCourseProgress(userId: String?): java.util.HashMap + suspend fun isStepCompleted(stepId: String?, userId: String?): Boolean + suspend fun hasUnfinishedSurveys(courseId: String, userId: String?): Boolean } diff --git a/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepositoryImpl.kt b/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepositoryImpl.kt index ca651d3e0fb..a3d67e3d31b 100644 --- a/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepositoryImpl.kt +++ b/app/src/main/java/org/ole/planet/myplanet/repository/CoursesRepositoryImpl.kt @@ -407,15 +407,23 @@ class CoursesRepositoryImpl @Inject constructor( leaveCourse(courseId, userId) } - override fun getCourseActivities(): ActivitiesRepository { - return activitiesRepository + override suspend fun logCourseVisit(courseId: String, title: String, userId: String) { + activitiesRepository.logCourseVisit(courseId, title, userId) } - override fun getCourseProgress(): ProgressRepository { - return progressRepository + override suspend fun getCurrentProgress(steps: List?, userId: String?, courseId: String?): Int { + return progressRepository.getCurrentProgress(steps, userId, courseId) } - override fun getCourseSubmissions(): SubmissionsRepository { - return submissionsRepository + override suspend fun getCourseProgress(userId: String?): java.util.HashMap { + return progressRepository.getCourseProgress(userId) + } + + override suspend fun isStepCompleted(stepId: String?, userId: String?): Boolean { + return submissionsRepository.isStepCompleted(stepId, userId) + } + + override suspend fun hasUnfinishedSurveys(courseId: String, userId: String?): Boolean { + return submissionsRepository.hasUnfinishedSurveys(courseId, userId) } } diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/courses/TakeCourseFragment.kt b/app/src/main/java/org/ole/planet/myplanet/ui/courses/TakeCourseFragment.kt index 21fbbad1105..ae9e3585096 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/courses/TakeCourseFragment.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/courses/TakeCourseFragment.kt @@ -176,7 +176,7 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl } lifecycleScope.launch { - val currentProgress = coursesRepository.getCourseProgress().getCurrentProgress(steps, userModel?.id, courseId) + val currentProgress = coursesRepository.getCurrentProgress(steps, userModel?.id, courseId) currentCourseProgress = currentProgress if (currentProgress < steps.size) { binding.courseProgress.secondaryProgress = currentProgress + 1 @@ -215,7 +215,7 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl detachedCurrentCourse?.courseId?.let { courseId -> detachedCurrentCourse.courseTitle?.let { courseTitle -> detachedUserModel?.name?.let { userName -> - coursesRepository.getCourseActivities().logCourseVisit( + coursesRepository.logCourseVisit( courseId, courseTitle, userName @@ -259,7 +259,7 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl private fun changeNextButtonState(position: Int) { if (courseId == "4e6b78800b6ad18b4e8b0e1e38a98cac") { lifecycleScope.launch { - if (coursesRepository.getCourseSubmissions().isStepCompleted(steps[position - 1]?.id, userModel?.id)) { + if (coursesRepository.isStepCompleted(steps[position - 1]?.id, userModel?.id)) { binding.nextStep.isClickable = true binding.nextStep.setTextColor(ContextCompat.getColor(requireContext(), R.color.md_white_1000)) } else { @@ -363,13 +363,13 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl private suspend fun getCourseProgress(): Int { val user = userSessionManager.getUserModel() - val courseProgressMap = coursesRepository.getCourseProgress().getCourseProgress(user?.id) + val courseProgressMap = coursesRepository.getCourseProgress(user?.id) return courseProgressMap[courseId]?.asJsonObject?.get("current")?.asInt ?: 0 } private fun checkSurveyCompletion() = viewLifecycleOwner.lifecycleScope.launch { val hasUnfinishedSurvey = courseId?.let { - coursesRepository.getCourseSubmissions().hasUnfinishedSurveys(it, userModel?.id) + coursesRepository.hasUnfinishedSurveys(it, userModel?.id) } ?: false if (hasUnfinishedSurvey && courseId == "4e6b78800b6ad18b4e8b0e1e38a98cac") { From 245c91819d8c5a2d4d6d4bb6cc284ab2f9c5cc7e Mon Sep 17 00:00:00 2001 From: dogi Date: Tue, 3 Mar 2026 23:21:33 -0500 Subject: [PATCH 3/3] Update version code and version name in build.gradle --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 93c34c7c286..a4663df3479 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "org.ole.planet.myplanet" minSdk = 26 targetSdk = 36 - versionCode = 4748 - versionName = "0.47.48" + versionCode = 4773 + versionName = "0.47.73" ndkVersion = '26.3.11579264' vectorDrawables.useSupportLibrary = true }