hola@amaren.ventures

Android

El launcher de BLANK para los Moto G. Es el producto que toca el cliente.

77 archivos·24 tareas

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

ArchivoQué hacePrioridad
LauncherActivity.ktActivity que Android lanza al arrancar el teléfono.Alta
HomeScreen.ktPantalla principal en Compose, lista de apps permitidas.Alta
AppFilterManager.ktDecide qué apps se muestran y cuáles no.Alta
BlankDeviceAdminReceiver.ktRecibe eventos del sistema como DPC.Alta
PolicyEnforcer.ktAplica las reglas descargadas del backend.Media
AppBlockerService.ktBloquea apps en vivo vía AccessibilityService.Media
UsageTracker.ktMide minutos de uso por app y los reporta.Media
ParentalPinManager.ktPIN de padres para desbloquear ajustes.Baja
BackendClient.ktCliente HTTP hacia el gateway Traefik.Alta
enrollment/EnrollmentMode.ktModos de enrollment (COMPANY_DO / BYOD_FULL_DO / BYOD_LIMITED).Alta
capabilities/CapabilityMatrix.ktFuente de verdad de capacidades por modo y feature.Alta
compliance/ModeComplianceChecker.ktVerifica compliance runtime y detecta drift.Media

Cómo ejecutarlo

Generar el wrapper de Gradle (solo la primera vez)

cd android/launcher && gradle wrapper

Compilar un APK de debug

cd android/launcher && ./gradlew :app:assembleDebug

Instalar en el Moto G conectado por USB

adb install -r app/build/outputs/apk/debug/app-debug.apk

Declarar BLANK como device owner (solo en fábrica)

adb shell dpm set-device-owner com.blankphone.launcher/.admin.BlankDeviceAdminReceiver

Ver logs en vivo

adb logcat -s BLANK:V

Qué falta

0 de 24 completados
Alta Media Baja

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/.