A lightweight, offline-first native Android learning app for the Open Learning Exchange (OLE) ecosystem.
myPlanet Lite is a native Android application designed to connect learners and educators to the Open Learning Exchange’s Learning Management System, Planet. Engineered for offline-first resilience and high performance on resource-constrained devices, myPlanet Lite enables continuous learning, content synchronization, and community collaboration in remote environments with intermittent or no internet connectivity.
- Feature Highlights
- About myPlanet Lite
- Architecture & Tech Stack
- Getting Started
- Development & Testing
- Conventions
- Contact & Community
- 📴 Offline-First Resilience — Seamlessly access downloaded courses, learning materials, and surveys without an active internet connection.
- 📚 Courses & Course Wizard — Browse structured courses, view attachments, step through interactive course modules, and track progress offline.
- 🎬 Multimedia & Document Viewer — Built-in hardware-accelerated media player powered by AndroidX Media3 (ExoPlayer) for video and audio playback, integrated PDF reader, and Markdown rendering.
- 📋 Surveys, Drafts & Outbox Sync — Take surveys offline with automatic draft saving and an outbox queue that reconciles and syncs responses upon reconnecting.
- 👥 Community Voices & Teams — Stay engaged with the learning community through news feeds, team discussions, team rosters, and member profiles.
- 🌐 Multi-Server & Custom Backend — Connect out-of-the-box to major Planet instances (Planet Learning, Planet Earth, Planet Guatemala, Planet Somalia) or configure custom LAN / local server endpoints.
- 🌍 Multilingual & RTL Support — Localized into 8 languages: English, Spanish (Español), French (Français), Portuguese (Português), Arabic (العربية with full RTL support), Somali (Soomaali), Nepali (नेपाली), and Hindi (हिन्दी), featuring ML Kit-assisted survey translation support.
- 🔗 Deep Linking — Direct navigation support for web survey URLs and custom deep links (
myplanetlite://).
myPlanet Lite serves as a streamlined native client within the Open Learning Exchange suite. Built specifically to complement and serve alongside myPlanet, it emphasizes minimal overhead, responsive navigation, and robust offline data handling.
The app acts as a local bridge to Planet servers (CouchDB-compatible REST APIs). Users can synchronize educational content when connectivity is available, store lessons locally, record audio or capture media for submissions, and submit survey evaluations asynchronously.
myPlanet Lite uses a modern, lightweight Android architecture designed for stability and testability without unnecessary framework overhead:
- Platform & Language: Native Android with Kotlin, compiled to JVM target 17 (
compileSdk 37,targetSdk 36,minSdk 28). - UI Layer: AppCompat, Material Components, ViewBinding, and custom edge-to-edge system insets handling.
- Networking: Retrofit 2 + Moshi (Kotlin reflective adapter) over OkHttp, utilizing cookie-based session management (
/_session) for Planet backends. - Data & Persistence:
EncryptedSharedPreferencesviaSecurePreferencesProviderfor secure session tokens and credentials.- Hand-rolled
SQLiteOpenHelper(UserProfileDatabase) for local profile management. - Disk-backed offline stores for courses, resources, survey drafts, and pending outbox payloads.
- Media & Rendering:
- AndroidX Media3 (ExoPlayer, UI, Transformer, Effect) for audio/video playback and waveform extraction.
- Markwon for Markdown and rich HTML rendering.
- uCrop and PhotoView for image editing and viewing.
- ML Kit Language Identification for automatic survey translation workflows.
- Dependency Management: Centralized Gradle Version Catalog at
gradle/libs.versions.toml.
- Android Studio: Android Studio Ladybug / Meerkat or later.
- Java Development Kit: JDK 21 (Temurin or OpenJDK recommended).
- Android SDK: Compiles with API Level 37 and targets API Level 36 (
minSdk 28).
git clone https://github.com/open-learning-exchange/myplanet-lite.git
cd myplanet-lite# Build the debug APK
./gradlew assembleDebug
# Build release APK
./gradlew assembleReleaseUnit tests run with Robolectric and JVM mocks, configured with Mockito and MockK ByteBuddy dynamic agents:
# Run all unit tests
./gradlew testDebugUnitTest
# Run a specific unit test class
./gradlew :app:testDebugUnitTest --tests "org.ole.planet.myplanet.lite.auth.NetworkAuthServiceTest"
# Run instrumented tests on a connected device/emulator
./gradlew connectedDebugAndroidTestNote
For unit tests mocking final classes, the Gradle test task is pre-configured with JDK dynamic agent loading flags (-XX:+EnableDynamicAgentLoading, Mockito agent, and ByteBuddy agent).
- Code Style: Follows the
officialKotlin coding conventions defined ingradle.properties. - Imports: Non-transitive R classes are enabled (
android.nonTransitiveRClass=true); import resources explicitly viaorg.ole.planet.myplanet.lite.R. - Localization: User-visible strings must be defined in
res/values/strings.xmland localized acrossres/values-{ar,es,fr,hi,ne,pt,so}/. - CI / Workflows: Automated GitHub Actions workflows run on all pushes to validate builds and execute unit tests (
.github/workflows/build.yml,test.yml).
myPlanet Lite is an open-source project created and maintained by the Open Learning Exchange.
- Discord: Join the OLE Discord Community for discussions, feedback, and contributor support.
- Issue Tracker: Report bugs and submit feature requests on GitHub Issues.
- Organization Website: https://ole.org
