Native Android client for Ephemeral, a small single-user self-hosted app for sharing text messages and files across devices.
|
|
- Login or first-account setup with an Ephemeral backend.
- Chat feed with text messages, uploads, real-time updates.
- File upload queue with progress and cancellation.
- History screen with search, type filters, date filters, recent filters, text body search, refresh, and infinite scrolling.
- Image, GIF, and video media viewer.
- Text/code preview with syntax highlighting.
- JDK 17.
- Android SDK with API 36 installed.
- Android Gradle Plugin 8.13.1, resolved by Gradle.
- A running Ephemeral backend. Refer to Ephemeral
The app supports Android 8.0+ (minSdk 26) and targets Android API 36.
From the repository root:
./gradlew :app:assembleDebugBuild all APK variants:
./gradlew :app:assembleRun unit tests:
./gradlew testDebugUnitTestBuild release APK and bundle:
./gradlew :app:assembleRelease :app:bundleReleaseRelease signing uses keystore.properties at the repository root when present:
storeFile=/absolute/path/to/release.keystore
storePassword=...
keyAlias=...
keyPassword=...With a phone connected through ADB:
./gradlew :app:installDebug && adb shell monkey -p com.ephemeral.android.debug 1The debug package name is com.ephemeral.android.debug. The release package name is com.ephemeral.android.
app/src/main/java/com/ephemeral/android/
MainActivity.java Top-level navigation and screen host
data/api/ Backend API interface and OkHttp implementation
data/model/ Item, metadata, paging, upload, and filter models
data/session/ Stored session state
ui/chat/ Chat screen
ui/history/ History grid and filters
ui/media/ Media viewer
ui/preview/ Text/code preview and highlighting
ui/upload/ Upload queue
ui/common/ Shared UI helpers such as image loading
app/src/main/res/
layout/ XML screens and rows
drawable/ Icons and backgrounds
values/ Strings, colors, dimensions, styles
- API calls use OkHttp and send/receive JSON where supported.
- Auth is cookie-based, session cookie is persisted locally.
- Real-time updates use SSE from
/api/events. - History thumbnails are kept in memory for the lifetime of the app process after loading.
- Full-size downloaded images are cached on disk with a 100 MB cache limit.
- Files downloaded through the Download action are written to the public Downloads collection.

