How arjncx-lang/pitch-black-launcher works
Purpose and Android Entry Point
Lightest Launcher is a minimalist Android home-screen launcher focused on passive system updates, black OLED-oriented rendering, installed-app search, and immediate app launching. The Android app entry and launcher-role declaration are rooted in app/src/main/AndroidManifest.xml; runtime composition begins in app/src/main/java/com/lightest/launcher/MainActivity.kt.
UI Composition and Navigation
MainActivity.kt is the primary control surface, likely hosting the Compose launcher screen and coordinating app-list, search, HUD, settings, and app-detail interactions. UI modules are separated by responsibility:
• App-detail actions: app/src/main/java/com/lightest/launcher/ui/AppDetailDialog.kt
• Settings UI: app/src/main/java/com/lightest/launcher/ui/SettingsScreen.kt
• Visual system: app/src/main/java/com/lightest/launcher/ui/theme/Theme.kt
The resource layer supplies launcher branding, search/charging icons, and black-oriented visual assets under app/src/main/res/drawable and app/src/main/res/values.
Installed-App Discovery and Launch Flow
The domain model is app/src/main/java/com/lightest/launcher/model/AppInfo.kt. app/src/main/java/com/lightest/launcher/data/LauncherRepository.kt forms the device-package boundary: it should query Android’s package/activity APIs, create AppInfo entries, and provide the launcher’s searchable app dataset. User flow is: activity loads repository data → UI displays/filter apps → user selects an app → Android launch intent transfers control to that application.
Icon Caching Boundary
app/src/main/java/com/lightest/launcher/data/IconCache.kt isolates app-icon retrieval and reuse from app-list UI. This prevents repeated package-manager/icon decoding work during rendering and search. The cache sits between repository/package metadata and UI presentation, using AppInfo.kt identity or package-level data to resolve icons.
Passive Device-State HUD
System telemetry is represented as independent UI-state producers:
• Time: app/src/main/java/com/lightest/launcher/ui/TimeState.kt
• Battery/charging: app/src/main/java/com/lightest/launcher/ui/BatteryState.kt
• Volume: app/src/main/java/com/lightest/launcher/ui/VolumeState.kt
• Temperature and aggregate stats: app/src/main/java/com/lightest/launcher/ui/DeviceTemperature.kt, app/src/main/java/com/lightest/launcher/ui/SystemStatsState.kt
These components define the platform-event boundary. They consume Android broadcasts or system services and expose state to the activity/UI, rather than requiring a separate backend or persistent polling service. Time ticks, battery changes, and volume changes trigger focused UI state updates.
Settings Persistence
app/src/main/java/com/lightest/launcher/data/SettingsPrefs.kt is the persistence boundary for launcher preferences, consumed by SettingsScreen.kt and the root UI. It should keep user choices local to the device; the repository contains no server, API client, database, or cloud integration.
Build, Runtime, and Delivery
This is a single-module Android/Gradle project: settings.gradle.kts, root build.gradle.kts, and app/build.gradle.kts define build composition. The runtime is Android/Kotlin, with Android resources and manifest permissions/components controlling OS integration. Release optimization/obfuscation is configured through app/proguard-rules.pro and app/src/main/keepRules/rules.keep. A prebuilt distributable exists at Lightest-Launcher-v1.7.0.apk.
Main entry points: MainActivity.kt Main activity · LauncherRepository.kt Launcher repository · AndroidManifest.xml Launcher manifest · AppInfo.kt App info
Components 18
Android runtime
- Launcher manifest · Declares the launcher role and Android components.
app/src/main/AndroidManifest.xml - Main activity · Composes the launcher and coordinates primary interactions.
app/src/main/java/com/lightest/launcher/MainActivity.kt - Android platform · Provides package APIs, broadcasts, system services, and launch intents.
Launcher data
- Launcher repository · Discovers launchable installed applications.
app/src/main/java/com/lightest/launcher/data/LauncherRepository.kt - App info
app/src/main/java/com/lightest/launcher/model/AppInfo.kt - Icon cache · Reuses resolved package icons during list rendering and search.
app/src/main/java/com/lightest/launcher/data/IconCache.kt - Settings prefs · Persists launcher choices on device.
app/src/main/java/com/lightest/launcher/data/SettingsPrefs.kt
Passive HUD state
- Time state
app/src/main/java/com/lightest/launcher/ui/TimeState.kt - Battery state
app/src/main/java/com/lightest/launcher/ui/BatteryState.kt - Volume state
app/src/main/java/com/lightest/launcher/ui/VolumeState.kt - System stats · Aggregates temperature and related device stats.
app/src/main/java/com/lightest/launcher/ui/SystemStatsState.kt - Device temperature
app/src/main/java/com/lightest/launcher/ui/DeviceTemperature.kt
Compose UI
- Launcher screen · Displays, filters, and selects installed apps.
- App detail dialog · Provides actions for a selected application.
app/src/main/java/com/lightest/launcher/ui/AppDetailDialog.kt - Settings screen
app/src/main/java/com/lightest/launcher/ui/SettingsScreen.kt - OLED theme and assets · Supplies black-oriented styling, branding, and icons.
app/src/main/java/com/lightest/launcher/ui/theme/Theme.kt
Build and delivery
- Gradle build · Builds the single Android application module.
app/build.gradle.kts - Release APK
Lightest-Launcher-v1.7.0.apk
Connections 25
- Launcher manifest → Main activity: launches
- Android platform → Launcher manifest: recognizes launcher role
- Main activity → Launcher repository: loads apps
- Launcher repository → Android platform: queries packages and activities
- Launcher repository → App info: creates
- Main activity → Launcher screen: hosts
- App info → Launcher screen: searchable app list
- Icon cache → Launcher screen: app icons
- Android platform → Icon cache: resolves package icons
- Launcher screen → App detail dialog: selected app
- Launcher screen → Android platform: launch intent · Transfers control to the selected application.
- Main activity → Settings screen: opens
- Settings screen → Settings prefs: reads and writes
- Settings prefs → Main activity: applies preferences
- Android platform → Time state: time ticks
- Android platform → Battery state: battery broadcasts
- Android platform → Volume state: audio service changes
- Android platform → Device temperature: system telemetry
- Device temperature → System stats: temperature data
- Time state → Launcher screen: HUD state
- Battery state → Launcher screen: HUD state
- Volume state → Launcher screen: HUD state
- System stats → Launcher screen: HUD state
- OLED theme and assets → Launcher screen: styles
- Gradle build → Release APK: packages release