Skip to content

Commit 61f15b7

Browse files
authored
Merge branch 'master' into code-health-refactor-voices-setData-13856087524995464396
2 parents bfc9435 + 8fa1118 commit 61f15b7

78 files changed

Lines changed: 1338 additions & 799 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CLAUDE.md

Lines changed: 47 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
- **Primary Language**: Kotlin (with Java compatibility layer)
99
- **Min SDK**: 26 (Android 8.0)
1010
- **Target SDK**: 36 (Android 15)
11-
- **Current Version**: 0.46.0 (versionCode: 4600)
12-
- **Build System**: Gradle 9.3.1 with Android Gradle Plugin 9.0.0
11+
- **Current Version**: 0.53.38 (versionCode: 5338)
12+
- **Build System**: Gradle 9.4.1 with Android Gradle Plugin 9.1.1
1313
- **License**: AGPL v3
1414

1515
### Build Flavors
@@ -27,7 +27,8 @@ myplanet/
2727
├── .github/ # CI/CD workflows and Dependabot config
2828
│ └── workflows/
2929
│ ├── build.yml # Build workflow for all branches
30-
│ └── release.yml # Release and Play Store publishing
30+
│ ├── release.yml # Release and Play Store publishing
31+
│ └── test.yml # Unit test workflow
3132
├── app/ # Main application module
3233
│ ├── src/
3334
│ │ ├── main/
@@ -37,13 +38,13 @@ myplanet/
3738
│ │ │ │ ├── callback/ # Event listeners and interfaces
3839
│ │ │ │ ├── data/ # Data services and API
3940
│ │ │ │ ├── di/ # Dependency injection modules
40-
│ │ │ │ ├── model/ # Realm data models (40 Realm classes, 67 total)
41+
│ │ │ │ ├── model/ # Realm data models (83 files)
4142
│ │ │ │ ├── repository/ # Repository pattern implementations
4243
│ │ │ │ ├── services/ # Background services and workers
4344
│ │ │ │ ├── ui/ # UI components (28 packages)
4445
│ │ │ │ └── utils/ # Helper utilities
4546
│ │ │ ├── res/ # Android resources
46-
│ │ │ │ ├── layout/ # 169 layout files
47+
│ │ │ │ ├── layout/ # 171 layout files
4748
│ │ │ │ ├── values/ # Strings, colors, styles
4849
│ │ │ │ ├── values-{lang}/ # Translations (ar, es, fr, ne, so)
4950
│ │ │ │ └── drawable*/ # Images and icons
@@ -67,41 +68,41 @@ myplanet/
6768
| `base/` | Base classes for common functionality | 12 | BaseActivity, BaseRecyclerFragment, BasePermissionActivity, BaseContainerFragment, BaseDashboardFragment, BaseResourceFragment, BaseTeamFragment, BaseExamFragment, BaseMemberFragment, BaseDialogFragment, BaseVoicesFragment, BaseRecyclerParentFragment |
6869
| `callback/` | Event listeners and interfaces | 34 | OnLibraryItemSelectedListener, OnSyncListener, OnTeamUpdateListener, OnChatItemClickListener, OnNewsItemClickListener, and 29 more |
6970
| `data/` | Data access and API services | 8 | DatabaseService.kt, NetworkResult.kt, RealmMigrations.kt; sub-packages: `api/` (ApiInterface, ApiClient, ChatApiService, RetryInterceptor), `auth/` (AuthSessionUpdater) |
70-
| `di/` | Hilt dependency injection | 16 | 5 modules (NetworkModule, DatabaseModule, RepositoryModule, ServiceModule, SharedPreferencesModule) + 11 entry points |
71-
| `model/` | Realm database models and DTOs | 67 | 40 Realm models + 27 DTOs including ChatMessage, ChatRequest, ChatResponse, CourseProgressData, Download, ServerAddress, User |
72-
| `repository/` | Repository pattern implementations | 38 | 19 repositories with Interface + Impl pairs + RealmRepository base + SubmissionsRepositoryExporter |
71+
| `di/` | Hilt dependency injection | 11 | 6 modules (NetworkModule, DatabaseModule, RepositoryModule, ServiceModule, SharedPreferencesModule, DispatcherModule) + 4 entry points (CoreDependenciesEntryPoint, NetworkDependenciesEntryPoint, RepositoryDependenciesEntryPoint, ServiceDependenciesEntryPoint) + RealmDispatcher |
72+
| `model/` | Realm database models and DTOs | 83 | Realm models + DTOs including ChatMessage, ChatRequest, ChatResponse, CourseProgressData, Download, ServerAddress, User |
73+
| `repository/` | Repository pattern implementations | 46 | 23 repositories with Interface + Impl pairs + RealmRepository base + SubmissionsRepositoryExporter |
7374
| `services/` | Background services and workers | 37 | 20 root-level + `sync/` (11), `upload/` (4), `retry/` (2) |
74-
| `ui/` | User interface components | 147 | 28 feature packages with 16 ViewModels (courses, resources, teams, chat, etc.) |
75+
| `ui/` | User interface components | 156 | 28 feature packages with 16+ ViewModels (courses, resources, teams, chat, etc.) |
7576
| `utils/` | Helper functions | 39 | NetworkUtils, ImageUtils, DialogUtils, FileUploader, AuthUtils, SecurePrefs, ANRWatchdog, and 32 more |
7677

77-
### UI Sub-packages (28 feature packages, 147 files)
78+
### UI Sub-packages (28 feature packages, 156 files)
7879

7980
| Package | Files | Key Components |
8081
|---------|-------|----------------|
8182
| `ui/calendar/` | 1 | CalendarFragment |
8283
| `ui/chat/` | 6 | ChatDetailFragment, ChatHistoryFragment, ChatViewModel |
8384
| `ui/community/` | 6 | CommunityTabFragment, LeadersFragment |
8485
| `ui/components/` | 5 | CustomSpinner, MarkdownDialogFragment, FragmentNavigator |
85-
| `ui/courses/` | 12 | CourseDetailFragment, TakeCourseFragment, ProgressViewModel |
86+
| `ui/courses/` | 16 | CourseDetailFragment, TakeCourseFragment, ProgressViewModel |
8687
| `ui/dashboard/` | 11 | DashboardActivity, DashboardViewModel, BellDashboardViewModel |
8788
| `ui/dictionary/` | 1 | DictionaryActivity |
8889
| `ui/enterprises/` | 5 | EnterprisesViewModel, FinancesFragment, ReportsFragment |
8990
| `ui/events/` | 2 | EventsDetailFragment, EventsAdapter |
9091
| `ui/exam/` | 2 | ExamTakingFragment, UserInformationFragment |
9192
| `ui/feedback/` | 6 | FeedbackFragment, FeedbackDetailActivity, FeedbackListViewModel |
92-
| `ui/health/` | 5 | MyHealthFragment, AddExaminationActivity |
93+
| `ui/health/` | 6 | MyHealthFragment, AddExaminationActivity |
9394
| `ui/life/` | 2 | LifeFragment, LifeAdapter |
9495
| `ui/maps/` | 1 | OfflineMapsActivity |
9596
| `ui/notifications/` | 3 | NotificationsFragment, NotificationsViewModel |
9697
| `ui/onboarding/` | 2 | OnboardingActivity, OnboardingAdapter |
97-
| `ui/personals/` | 2 | PersonalsFragment, PersonalsAdapter |
98+
| `ui/personals/` | 3 | PersonalsFragment, PersonalsAdapter |
9899
| `ui/ratings/` | 2 | RatingsFragment, RatingsViewModel |
99100
| `ui/references/` | 2 | ReferencesFragment, ReferencesAdapter |
100-
| `ui/resources/` | 8 | ResourcesFragment, AddResourceFragment, CollectionsFragment |
101+
| `ui/resources/` | 9 | ResourcesFragment, AddResourceFragment, CollectionsFragment |
101102
| `ui/settings/` | 1 | SettingsActivity |
102-
| `ui/submissions/` | 8 | SubmissionsFragment, SubmissionViewModel |
103+
| `ui/submissions/` | 9 | SubmissionsFragment, SubmissionViewModel |
103104
| `ui/surveys/` | 4 | SurveyFragment, SendSurveyFragment |
104-
| `ui/sync/` | 7 | LoginActivity, SyncActivity, ProcessUserDataActivity |
105+
| `ui/sync/` | 8 | LoginActivity, SyncActivity, ProcessUserDataActivity |
105106
| `ui/teams/` | 22 | TeamFragment, TeamDetailFragment, TeamViewModel (largest UI package) |
106107
| `ui/user/` | 7 | UserProfileFragment, UserProfileViewModel, BecomeMemberActivity |
107108
| `ui/viewer/` | 8 | ImageViewer, VideoViewer, AudioPlayer, PDFReader, WebView, MarkdownViewer, TextFileViewer, CSVViewer |
@@ -111,7 +112,7 @@ myplanet/
111112

112113
1. **`MainApplication.kt`** (~448 lines)
113114
- Application initialization with Hilt DI
114-
- WorkManager scheduling (AutoSyncWorker, StayOnlineWorker, TaskNotificationWorker, NetworkMonitorWorker, RetryQueueWorker)
115+
- WorkManager scheduling (AutoSyncWorker, TaskNotificationWorker, NetworkMonitorWorker, RetryQueueWorker)
115116
- Server reachability checking with alternative URL mapping
116117
- Theme/locale management, ANR watchdog, uncaught exception handling
117118
- Location: `app/src/main/java/org/ole/planet/myplanet/MainApplication.kt`
@@ -145,23 +146,23 @@ myplanet/
145146

146147
| Category | Technology | Version | Purpose |
147148
|----------|-----------|---------|---------|
148-
| **Language** | Kotlin | 2.3.10 | Primary development language |
149-
| **Build System** | Gradle | 9.3.1 | Build automation |
150-
| **Build Plugin** | Android Gradle Plugin | 9.0.0 | Android build tooling |
151-
| **DI Framework** | Dagger Hilt | 2.59.1 | Dependency injection |
149+
| **Language** | Kotlin | 2.3.20 | Primary development language |
150+
| **Build System** | Gradle | 9.4.1 | Build automation |
151+
| **Build Plugin** | Android Gradle Plugin | 9.1.1 | Android build tooling |
152+
| **DI Framework** | Dagger Hilt | 2.59.2 | Dependency injection |
152153
| **Database** | Realm | 10.19.0 | Local object database |
153154
| **Networking** | Retrofit | 3.0.0 | REST API client |
154155
| **HTTP Client** | OkHttp | 5.3.2 | HTTP communication |
155156
| **JSON** | Gson | 2.13.2 | JSON serialization |
156157
| **Async** | Kotlin Coroutines | 1.10.2 | Asynchronous programming |
157-
| **Background Tasks** | AndroidX Work | 2.11.1 | Background job scheduling |
158+
| **Background Tasks** | AndroidX Work | 2.11.2 | Background job scheduling |
158159
| **UI Framework** | Material Design 3 | 1.13.0 | UI components |
159160
| **Image Loading** | Glide | 5.0.5 | Image loading and caching |
160-
| **Media Playback** | Media3 (ExoPlayer) | 1.9.2 | Audio/video playback |
161+
| **Media Playback** | Media3 (ExoPlayer) | 1.10.0 | Audio/video playback |
161162
| **Markdown** | Markwon | 4.6.2 | Markdown rendering |
162163
| **Maps** | OSMDroid | 6.1.20 | OpenStreetMap integration |
163-
| **Encryption** | Tink | 1.20.0 | Cryptographic operations |
164-
| **Serialization** | Kotlin Serialization | 1.10.0 | Kotlin-native serialization |
164+
| **Encryption** | Tink | 1.21.0 | Cryptographic operations |
165+
| **Serialization** | Kotlin Serialization | 1.11.0 | Kotlin-native serialization |
165166
| **CSV** | OpenCSV | 5.12.0 | CSV file parsing |
166167

167168
### Build Configuration
@@ -188,9 +189,9 @@ myplanet/
188189
### 1. Layered Architecture
189190

190191
```
191-
UI Layer (Activities/Fragments + 16 ViewModels)
192+
UI Layer (Activities/Fragments + 16+ ViewModels)
192193
193-
Repository Layer (19 domains, Interface + Impl pairs, Flow-based queries)
194+
Repository Layer (23 domains, Interface + Impl pairs, Flow-based queries)
194195
195196
Service Layer (ApiInterface, SyncManager, UploadCoordinator)
196197
@@ -218,8 +219,8 @@ class CourseRepositoryImpl @Inject constructor(
218219
}
219220
```
220221

221-
**All 19 Domain Repositories:**
222-
Activities, Chat, Configurations, Courses, Events, Feedback, Life, Notifications, Personals, Progress, Ratings, Resources, Submissions, Surveys, Tags, Teams, User, Voices
222+
**All 23 Domain Repositories:**
223+
Activities, Chat, Community, Configurations, Courses, Download, Events, Feedback, Health, Life, Notifications, Personals, Progress, Ratings, Resources, Retry, Submissions, Surveys, Tags, Teams, User, Voices
223224

224225
**Utility Classes:**
225226
- `RealmRepository` - Generic base repository
@@ -229,18 +230,19 @@ Activities, Chat, Configurations, Courses, Events, Feedback, Life, Notifications
229230

230231
### 4. Dependency Injection (Hilt)
231232

232-
**Module Structure:**
233+
**Module Structure (6 modules):**
233234
- `NetworkModule.kt` - Provides Retrofit, OkHttp
234235
- `DatabaseModule.kt` - Provides Realm instances
235236
- `RepositoryModule.kt` - Binds repository interfaces to implementations
236237
- `ServiceModule.kt` - Provides service dependencies
237238
- `SharedPreferencesModule.kt` - Provides SharedPreferences
239+
- `DispatcherModule.kt` - Provides coroutine dispatchers (see also `RealmDispatcher.kt`)
238240

239-
**Entry Points for Workers (11 entry point files):**
240-
- `NetworkDependenciesEntryPoint`, `NetworkDependenciesEntryPoint`, `NetworkDependenciesEntryPoint`
241-
- `ApplicationScopeEntryPoint`, `BroadcastServiceEntryPoint`, `DatabaseServiceEntryPoint`
242-
- `RepositoryEntryPoint`, `RetryQueueEntryPoint`, `ServiceEntryPoint`
243-
- `RepositoryDependenciesEntryPoint`, `CoreDependenciesEntryPoint`
241+
**Entry Points for Workers (4 entry point files):**
242+
- `CoreDependenciesEntryPoint`
243+
- `NetworkDependenciesEntryPoint`
244+
- `RepositoryDependenciesEntryPoint`
245+
- `ServiceDependenciesEntryPoint`
244246

245247
```kotlin
246248
@EntryPoint
@@ -281,7 +283,6 @@ interface NetworkDependenciesEntryPoint {
281283
- `TaskNotificationWorker` - Task deadline notifications
282284
- `DownloadWorker` - Background file downloads
283285
- `FreeSpaceWorker` - Disk space monitoring
284-
- `StayOnlineWorker` - Keeps connection alive
285286
- `RetryQueueWorker` - Retries failed operations (`services/retry/`)
286287

287288
**Services and Managers (20 root-level files):**
@@ -291,12 +292,13 @@ interface NetworkDependenciesEntryPoint {
291292
- `UploadCoordinator` - Upload orchestration (`services/upload/`)
292293
- `AudioRecorder` - Audio recording
293294
- `BroadcastService` - Service broadcasting
294-
- `ConfigurationManager` - Configuration management
295295
- `SharedPrefManager` - SharedPreferences management
296296
- `UserSessionManager` - User session handling
297297
- `ThemeManager` - App theming
298298
- `FileUploader` - File upload utilities
299299
- `DownloadService` - Background file download service (foreground service)
300+
- `ResourceDownloadCoordinator` - Orchestrates resource downloads
301+
- `SubmissionUploadExecutor` - Executes submission uploads
300302
- `VoicesLabelManager` - Voice/discussion forum label management
301303
- `ChallengePrompter` - Challenge prompt generation
302304
- `NotificationActionReceiver` - Broadcast receiver for notification actions
@@ -1104,15 +1106,15 @@ git rebase --continue
11041106

11051107
## Codebase Inventory Summary
11061108

1107-
### Source Files (394 total Kotlin files)
1109+
### Source Files (427 total Kotlin files in `app/src/main/java`)
11081110

11091111
| Component | Files | Purpose |
11101112
|-----------|-------|---------|
1111-
| `model/` | 67 | Realm database models (40) + DTOs (27) |
1112-
| `repository/` | 38 | Data access abstraction (19 domains + utilities) |
1113-
| `ui/` | 147 | User interface across 28 feature packages |
1113+
| `model/` | 83 | Realm database models + DTOs |
1114+
| `repository/` | 46 | Data access abstraction (23 domains + utilities) |
1115+
| `ui/` | 156 | User interface across 28 feature packages |
11141116
| `services/` | 37 | Background tasks & managers (20 root + 3 sub-packages) |
1115-
| `di/` | 16 | Dependency injection (5 modules + 11 entry points) |
1117+
| `di/` | 11 | Dependency injection (6 modules + 4 entry points + RealmDispatcher) |
11161118
| `base/` | 12 | Reusable base classes |
11171119
| `callback/` | 34 | Event listeners and interfaces |
11181120
| `data/` | 8 | Data services, API, auth |
@@ -1123,11 +1125,8 @@ git rebase --continue
11231125

11241126
| Category | Count |
11251127
|----------|-------|
1126-
| Layout files (main) | 169 |
1127-
| Layout files (all variants) | 181 |
1128-
| Drawable files | 129 |
1128+
| Layout files (main) | 171 |
11291129
| Translation languages | 5 (ar, es, fr, ne, so) |
1130-
| String resources | ~1,194 lines |
11311130
| Menu files | 2 |
11321131
| XML config files | 3 |
11331132

@@ -1141,6 +1140,6 @@ git rebase --continue
11411140

11421141
---
11431142

1144-
**Last Updated**: 2026-02-10
1145-
**Version**: 0.46.0
1143+
**Last Updated**: 2026-04-20
1144+
**Version**: 0.53.38
11461145
**Maintainer**: Open Learning Exchange

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ dependencies {
178178
androidTestImplementation(libs.test.rxjava)
179179
androidTestImplementation(libs.test.arch)
180180
androidTestImplementation(libs.test.hilt)
181+
androidTestImplementation(libs.test.mockkdroid)
181182
kspAndroidTest(libs.hilt.android.compiler)
182183
}
183184
dependencies {

app/src/androidTest/java/org/ole/planet/myplanet/model/RealmUserTest.kt

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import dagger.Lazy
88
import io.mockk.mockk
99
import io.realm.Realm
1010
import io.realm.RealmConfiguration
11+
import kotlinx.coroutines.CoroutineDispatcher
1112
import kotlinx.coroutines.CoroutineScope
1213
import kotlinx.coroutines.Dispatchers
1314
import kotlinx.coroutines.runBlocking
@@ -45,22 +46,13 @@ class RealmUserTest {
4546
Realm.setDefaultConfiguration(realmConfiguration)
4647
}
4748

48-
databaseService = object : DatabaseService {
49-
override val realm: Realm
50-
get() = Realm.getInstance(realmConfiguration)
51-
52-
override fun executeTransaction(transaction: Realm.Transaction) {
53-
realm.executeTransaction(transaction)
54-
}
55-
56-
override fun executeTransactionAsync(
57-
transaction: Realm.Transaction,
58-
onSuccess: Realm.Transaction.OnSuccess,
59-
onError: Realm.Transaction.OnError
60-
) {
61-
realm.executeTransactionAsync(transaction, onSuccess, onError)
62-
}
49+
val testDispatcherProvider = object : DispatcherProvider {
50+
override val main: CoroutineDispatcher = Dispatchers.Unconfined
51+
override val io: CoroutineDispatcher = Dispatchers.Unconfined
52+
override val default: CoroutineDispatcher = Dispatchers.Unconfined
53+
override val unconfined: CoroutineDispatcher = Dispatchers.Unconfined
6354
}
55+
databaseService = DatabaseService(ApplicationProvider.getApplicationContext(), testDispatcherProvider)
6456

6557
val mockSettings = mockk<SharedPreferences>(relaxed = true)
6658
val mockSharedPrefManager = mockk<SharedPrefManager>(relaxed = true)

app/src/main/java/org/ole/planet/myplanet/base/BasePermissionActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.lifecycle.lifecycleScope
2020
import kotlinx.coroutines.Dispatchers
2121
import kotlinx.coroutines.launch
2222
import kotlinx.coroutines.withContext
23+
import org.ole.planet.myplanet.BuildConfig
2324
import org.ole.planet.myplanet.R
2425
import org.ole.planet.myplanet.utils.Utilities
2526

@@ -500,7 +501,7 @@ abstract class BasePermissionActivity : AppCompatActivity() {
500501

501502
@JvmStatic
502503
fun hasInstallPermission(context: Context): Boolean {
503-
return context.packageManager.canRequestPackageInstalls()
504+
return !BuildConfig.LITE && context.packageManager.canRequestPackageInstalls()
504505
}
505506
}
506507
}

app/src/main/java/org/ole/planet/myplanet/model/RealmTag.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ open class RealmTag : RealmObject() {
3232
return name.orEmpty()
3333
}
3434

35+
fun toTag(): Tag {
36+
return Tag(
37+
id = this.id,
38+
name = this.name
39+
)
40+
}
41+
3542
companion object {
3643
@JvmStatic
3744
fun insert(mRealm: Realm, act: JsonObject) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import io.realm.Sort
77
import java.util.Date
88
import javax.inject.Inject
99
import kotlinx.coroutines.CoroutineDispatcher
10-
import org.ole.planet.myplanet.data.DatabaseService
1110
import okhttp3.MediaType.Companion.toMediaTypeOrNull
1211
import okhttp3.RequestBody.Companion.toRequestBody
12+
import org.ole.planet.myplanet.data.DatabaseService
1313
import org.ole.planet.myplanet.data.api.ChatApiService
1414
import org.ole.planet.myplanet.di.RealmDispatcher
1515
import org.ole.planet.myplanet.model.AiProvider

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,10 +210,12 @@ class ProgressRepositoryImpl @Inject constructor(
210210
}
211211

212212
private fun insertCourseProgress(mRealm: Realm, act: JsonObject?) {
213-
var courseProgress = mRealm.where(RealmCourseProgress::class.java).equalTo("_id", JsonUtils.getString("_id", act)).findFirst()
213+
val docId = JsonUtils.getString("_id", act)
214+
var courseProgress = mRealm.where(RealmCourseProgress::class.java).equalTo("id", docId).findFirst()
214215
if (courseProgress == null) {
215-
courseProgress = mRealm.createObject(RealmCourseProgress::class.java, JsonUtils.getString("_id", act))
216+
courseProgress = mRealm.createObject(RealmCourseProgress::class.java, docId)
216217
}
218+
courseProgress?._id = docId
217219
courseProgress?._rev = JsonUtils.getString("_rev", act)
218220
courseProgress?.passed = JsonUtils.getBoolean("passed", act)
219221
courseProgress?.stepNum = JsonUtils.getInt("stepNum", act)

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

0 commit comments

Comments
 (0)