Android
El launcher de BLANK para los Moto G. Es el producto que toca el cliente.
0% completado
¿Qué es esto?
Esta es la aplicación Android que reemplaza la pantalla de inicio del teléfono. Cuando un niño enciende su Moto G, lo primero que ve es BLANK, no el launcher de Google.
Además de ser un launcher, actúa como Device Policy Controller (DPC): controla qué apps se pueden abrir, cuándo, cuánto tiempo, y aplica las reglas que los padres configuran desde su panel.
Está escrito en Kotlin con Jetpack Compose. La estructura ya existe pero casi toda la lógica real está por escribir. Son docstrings y TODOs por ahora.
Stack técnico
- Kotlin 1.9
- Jetpack Compose (UI declarativa)
- Android Device Admin + DevicePolicyManager
- UsageStatsManager (tracking de uso)
- AccessibilityService (bloqueo fino)
- Hilt (inyección de dependencias)
- Retrofit + OkHttp (llamadas al backend)
- Gradle 8 con Kotlin DSL
Estructura de carpetas
android/
└── launcher/
└── app/
├── build.gradle.kts
└── src/main/
├── AndroidManifest.xml
├── kotlin/com/blankphone/launcher/
│ ├── LauncherActivity.kt (pantalla principal)
│ ├── HomeScreen.kt (Compose UI)
│ ├── admin/
│ │ ├── BlankDeviceAdminReceiver.kt
│ │ └── PolicyEnforcer.kt
│ ├── enrollment/ (detección de modo: COMPANY_DO / BYOD_FULL_DO / BYOD_LIMITED)
│ │ ├── DeviceOwnershipDetector.kt
│ │ ├── EnrollmentMode.kt
│ │ └── CapabilityResolver.kt
│ ├── capabilities/ (fuente de verdad de capacidades)
│ │ ├── Capability.kt
│ │ ├── CapabilityMatrix.kt
│ │ └── CapabilityGuard.kt
│ ├── compliance/ (runtime drift detection)
│ │ ├── ModeComplianceChecker.kt
│ │ └── UnsupportedFeatureHandler.kt
│ ├── support/ (diagnóstico + limitaciones visibles)
│ │ ├── DiagnosticsCollector.kt
│ │ └── UserVisibleLimitations.kt
│ ├── policy/
│ │ ├── AppFilterManager.kt (whitelist de apps)
│ │ └── ScheduleManager.kt (horarios)
│ ├── service/
│ │ ├── AppBlockerService.kt (AccessibilityService)
│ │ └── UsageTracker.kt
│ ├── auth/
│ │ └── ParentalPinManager.kt
│ └── network/
│ └── BackendClient.kt
└── res/
├── font/ (faltan Inter TTF)
└── values/Archivos clave
| Archivo | Qué hace | Prioridad |
|---|---|---|
| LauncherActivity.kt | Activity que Android lanza al arrancar el teléfono. | Alta |
| HomeScreen.kt | Pantalla principal en Compose, lista de apps permitidas. | Alta |
| AppFilterManager.kt | Decide qué apps se muestran y cuáles no. | Alta |
| BlankDeviceAdminReceiver.kt | Recibe eventos del sistema como DPC. | Alta |
| PolicyEnforcer.kt | Aplica las reglas descargadas del backend. | Media |
| AppBlockerService.kt | Bloquea apps en vivo vía AccessibilityService. | Media |
| UsageTracker.kt | Mide minutos de uso por app y los reporta. | Media |
| ParentalPinManager.kt | PIN de padres para desbloquear ajustes. | Baja |
| BackendClient.kt | Cliente HTTP hacia el gateway Traefik. | Alta |
| enrollment/EnrollmentMode.kt | Modos de enrollment (COMPANY_DO / BYOD_FULL_DO / BYOD_LIMITED). | Alta |
| capabilities/CapabilityMatrix.kt | Fuente de verdad de capacidades por modo y feature. | Alta |
| compliance/ModeComplianceChecker.kt | Verifica compliance runtime y detecta drift. | Media |
Cómo ejecutarlo
Generar el wrapper de Gradle (solo la primera vez)
cd android/launcher && gradle wrapperCompilar un APK de debug
cd android/launcher && ./gradlew :app:assembleDebugInstalar en el Moto G conectado por USB
adb install -r app/build/outputs/apk/debug/app-debug.apkDeclarar BLANK como device owner (solo en fábrica)
adb shell dpm set-device-owner com.blankphone.launcher/.admin.BlankDeviceAdminReceiverVer logs en vivo
adb logcat -s BLANK:VQué falta
Dependencias con otros módulos
- Necesita que auth-service y device-service estén levantados para registrarse.
- Usa la imagen Docker local de Traefik como gateway en desarrollo.
- Consume tokens de diseño (colores, tipografía) del paquete brand/.