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
1121131 . ** ` 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 ↓
195196Service 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
0 commit comments