#!/usr/bin/env bash # Phase 0 · Beweis S4 — Intent-Handoff vom Linux zur Android-App. # # Die Wette: statt Android-Apps ins Linux zu streamen, übergibt das Linux eine # Absicht und die App öffnet nativ im Vollbild. Für Navigation ist das nicht der # Kompromiss, sondern die bessere Lösung — volles GPU, volles GPS, und Overlay-Apps # funktionieren, was über einem gestreamten Fenster gar nicht ginge. # # Gebaut wird das nicht pro App, sondern einmal als xdg-open-Handler. Damit löst # jede Linux-Anwendung — Adressbuch, Browser, Kalender — die richtige Android-App aus, # ohne selbst etwas von der Bridge zu wissen. # # Ausführen IN TERMUX: bash spike/04-s4-intent-handoff.sh set -uo pipefail source "$(dirname "$0")/lib.sh" require_termux DISTRO=debian ZIEL="${HPOS_ZIEL:-Brandenburger Tor, Berlin}" # Paketname einer Begleit-App mit Overlay, die vor der Navigation starten soll. # Beispiel: HPOS_BEGLEIT_APP=de.blitzer bash spike/04-s4-intent-handoff.sh BEGLEIT_APP="${HPOS_BEGLEIT_APP:-}" log "HPOS Phase 0 · S4 — Intent-Handoff" log "Navigationsziel: $ZIEL" log "Begleit-App: ${BEGLEIT_APP:-(keine)}" log "Protokoll: $LOG" # ── Vorbedingungen ─────────────────────────────────────────────────────────── section "Vorbedingungen" if have am; then ok "am vorhanden" else fail "am fehlt (Paket termux-tools) — ohne das geht nichts" exit 1 fi have python && ok "python vorhanden" || { fail "python fehlt"; exit 1; } if [ -n "$BEGLEIT_APP" ]; then if pm list packages 2>/dev/null | grep -q "package:$BEGLEIT_APP"; then ok "Begleit-App $BEGLEIT_APP ist installiert" hint "Overlay-Berechtigung nötig: Einstellungen → Apps → $BEGLEIT_APP → über anderen Apps anzeigen" else warn "Begleit-App $BEGLEIT_APP nicht gefunden — Overlay-Teil des Beweises entfällt" fi fi # ── Mini-Bridge starten ────────────────────────────────────────────────────── section "Mini-Bridge" pkill -f 'bridge-mini.py' 2>/dev/null && { hint "alte Instanz beendet"; sleep 1; } || true HPOS_BEGLEIT_APP="$BEGLEIT_APP" python "$REPO_ROOT/spike/bridge-mini.py" \ >>"$OUT_DIR/bridge-mini.log" 2>&1 & BRIDGE_PID=$! sleep 2 if kill -0 "$BRIDGE_PID" 2>/dev/null; then ok "Bridge läuft auf 127.0.0.1:8474 (PID $BRIDGE_PID)" else fail "Bridge startet nicht:" tail -n 20 "$OUT_DIR/bridge-mini.log" | sed 's/^/ /' | tee -a "$LOG" exit 1 fi # ── Direkttest, bevor Linux ins Spiel kommt ────────────────────────────────── # Erst beweisen, dass der Intent überhaupt zieht. Scheitert es hier, liegt es an # Android und nicht an der Brücke ins Linux — ein wichtiger Unterschied. section "Direkttest ohne Linux" TOKEN="$(cat "$OUT_DIR/bridge-token")" ANTWORT="$(printf '%s\t%s\n' "$TOKEN" "geo:0,0?q=$(python -c "import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1]))" "$ZIEL")" \ | timeout 25 python -c ' import socket,sys s=socket.create_connection(("127.0.0.1",8474),10) s.sendall(sys.stdin.buffer.read()) s.shutdown(socket.SHUT_WR) print(s.recv(4096).decode().strip()) ' 2>&1)" log " Antwort: $ANTWORT" case "$ANTWORT" in OK*) ok "Android hat den Intent angenommen — schau aufs Telefon" ;; *) fail "Intent nicht angenommen" hint "Ist eine Navigations-App installiert? Ohne Google Maps o. ä. gibt es keinen Empfänger." ;; esac sleep 6 # ── Der eigentliche Beweis: aus dem Linux heraus ───────────────────────────── section "Aus dem Linux heraus" HPOS_ZIEL="$ZIEL" proot-distro login "$DISTRO" --shared-tmp --bind "$REPO_ROOT:/hpos" -- \ bash /hpos/spike/inner/s4-handoff.sh 2>&1 | tee -a "$LOG" log "" log " Bridge-Protokoll: $OUT_DIR/bridge-mini.log" log " Bridge beenden: kill $BRIDGE_PID" verdict "S4" "Hat 'xdg-open geo:…' aus dem Debian heraus die Navigation auf dem Telefon gestartet? Und lag — falls konfiguriert — das Overlay der Begleit-App darüber?"