Logo AJMDM

AJMDM

13/10/2026

  1. 1
    05/10

  2. 1B
    05/10

  3. 2
    05–06/10

  4. 3
    06–07/10

  5. 4
    07/10

  6. 5
    07–08/10

  7. CR
    13/10

  8. 6
    →

✓
✓
✓
✓
✓
✓
✓
✓
✓
✓
✓
✓
✓
✓
✓
✓

HyperOS · POCO X7 ProOne UI · Samsung

58
57
339
3

13/10/2026Core Review — reconexão de stream, crackling resolvido, mic picker
  • Auto-reconnect do MediaLink: backoff exponencial + grace window no servidor (o mesmo streamId é re-anexado); encoder vivo durante a queda
  • Mic picker: comandos mic.list/mic.set (allowlist 57) + roteamento real do microfone (setPreferredDevice) + troca ao vivo com restart da captura
  • Crackling do áudio da câmera RESOLVIDO — causa raiz era o jitter buffer aplicado a cada chunk no painel; two-state buffer (só a 1ª chunk/gap)
  • Áudio: chunks de 200 ms exatos (5 msg/s) + backpressure no envio
  • Gallery cache: caminho explícito no .env da VPS (EACCES no ciclo de limpeza)
12–13/10/2026Migração para VPS Oracle (produção)
  • Produção em VPS Oracle (São Paulo); o PC passa a ser instância DEV + hub ADB (a VPS não roda ADB)
  • Hardening completo + systemd + backup diário automatizado
  • Re-bind codes: aparelhos migraram mantendo nome, histórico e configurações
  • Bootstrap com troca de senha obrigatória; deploy com janela de exposição zero
  • Migração TLS: agentes com token aceitam o novo certificado (caso de migração TOFU)
08/10/2026Etapa 5 CONCLUÍDA — TYPES_ALL_MASK, ADB remoto, Device Info, PINs, QUERY_ALL
  • TYPES_ALL_MASK (a descoberta): Samsung One UI esconde botões de dialogs da accessibility tree sem typeAllMask + canPerformGestures; com ALL_MASK tudo funciona (screen share auto-confirm, goHome, gesture injection, câmera em background)
  • ADB over network via rede privada: deploy remoto sem USB (setup 1× USB, depois acesso pela VPN)
  • Device Info: commercial name, idioma, timezone, screen, kernel, hardware, radio, watts, 3G/4G/5G
  • PINs server-managed (AES-GCM + Keystore) + Safe Mode (app lock via PIN) + Settings gear via PIN
  • Untethered Mode: consentimento no aparelho + ações ADB fixas (hide/restore dos indicadores câmera/mic)
  • QUERY_ALL_PACKAGES (projeto privado, sem Google Play): 65 → 339 apps visíveis
  • Per-device heartbeat + topbar com rede e bateria em tempo real
  • Availability events: silent + debounce 30 min (zero falsos positivos)
  • Camera FGS: SEM conteúdo na notificação; Gradle/Kotlin daemon OFF (~1GB RAM liberada)
  • AjmApp crash handler: loga o stacktrace antes de morrer
07/10/2026Etapa 4 — Tela ao vivo, som do sistema, controle remoto
  • MediaProjection com consentimento por sessão + auto-confirm assistido (auditado)
  • H.264 → frames AJM2 → WebCodecs; perfis Low/Balanced/High; keyframe cache + CSD em todos os keyframes
  • Som do sistema: AudioPlaybackCapture → PCM 48kHz cru → WebAudio (sem codec)
  • Controle remoto via dispatchGesture (apps e system UI; launcher MIUI ignora)
  • Screenshots híbridos (canvas do stream + accessibility) + Captures com retenção
  • Viewer externo view-only com link tokenizado; watchdogs de VPN e de consentimento
  • Stay-awake wake lock — sem ele a HyperOS revogava a projection no timeout da tela
07/10/2026One UI validada (aparelho-alvo) + notification.config toggle
  • Aparelho-alvo validado: screen share two-step (~2s), listener, áudio PCM, viewer relay, reboot survival
  • notification.config restaurado como toggle (custom title/text ou 💕)
  • FGS notification: 💕 quando OK, texto custom só quando definido; estados críticos sempre sobrepõem
  • GLOBAL DIALOG MATCH RULE: a busca da opção usa frases completas — termos genéricos quebram o confirm na HyperOS (regressão corrigida nas duas ROMs)
07/10/2026Round 3 — Untethered Mode + janela controlável + dual PIP
  • UNTETHERED MODE (owner): consentimento no aparelho (aviso harmful) + ações adb FIXAS (hide/restore dos indicadores câmera/mic)
  • E2E validado: check → hide → restore; gates NEEDS_LOCAL_ACTION/CONFLICT; audit total
  • Janela controlável de câmera + dual: PIP redimensionável (swap por toque) ou lado a lado
  • Fim do java.exe residente: gradle/kotlin daemons off
07/10/2026Etapa 5 — round 2: 16:9, rotação wide, janela exclusiva
  • Aspect SEMPRE 16:9 (owner); pickSize mira largura 16:9
  • Frontal de ponta-cabeça: base = sensorOrientation puro
  • Stream desalinhado + layout no wide: canvas absoluto (translate+rotate)
  • Rotação: 1º clique = WIDE 16:9 de pé; janela exclusiva de câmera com viewer tokenizado
  • Tela e câmeras NUNCA se misturam nas janelas (filtro por streamId da fonte)
07/10/2026Etapa 5 — bugfixes + microfone Sound
  • Flicker preto constante: decoders recriados a cada poll → estáveis (listener único + refs)
  • Layout = Screen mirror: player vertical ajustável + controles à direita
  • MICROFONE: restrição removida por decisão do owner; Sound switch igual ao screen share (PCM 48kHz)
  • Validado: frames A exatos, zero erros; locked-start re-validado
07/10/2026Etapa 5 — Câmeras ao vivo
  • Camera2 + FGS camera; start SEMPRE na frontal (regra do owner)
  • Dual: front+back simultâneo (encoders por instância, AJM2 multi-stream)
  • Flash/torch da traseira via capture session; perfis Low/Balanced/High
  • START e STREAM com a tela TRAVADA (validado)
  • pickSize: fallback Surface→MediaCodec→SurfaceTexture (quirk MediaTek)
06–07/10/2026Etapa 3 — Notificações
  • NotificationListenerService com auto-sync
  • Espelhamento posted/removed com dedup + fila offline
  • Ativas × histórico, busca, filtro por app, pausa
  • Som: tri-tone (notificações) + alert chime (dispositivo)
  • Badge vermelho + sino de eventos no topbar
  • Retenção configurável + clear com confirm
05–06/10/2026Etapa 2 — Arquivos e Aplicativos
  • File Manager SAF (13 comandos, auto-sync, upload streaming)
  • Gallery cache (TTL, limite, cache-stats/clear)
  • App Manager + task manager honesto + App Usage
  • Admin bootstrap + change password
  • usage.query "today" reset à meia-noite (queryEvents)