diff --git a/provision/adb-wireless.sh b/provision/adb-wireless.sh index abfb91a..adc1c7f 100755 --- a/provision/adb-wireless.sh +++ b/provision/adb-wireless.sh @@ -45,6 +45,13 @@ adb start-server >/dev/null 2>&1 # ── Hilfsmittel ────────────────────────────────────────────────────────────── ist_verbunden() { adb devices | grep -qw 'device$'; } +anzahl_geraete() { adb_geraete | wc -l | tr -d ' '; } + +# Nach dem Koppeln reicht "irgendein Gerät verbunden" als Erfolgsnachweis nicht: +# beim Hinzufügen eines zweiten Telefons wäre das erste ja noch da. Es zählt nur, +# ob EIN GERÄT DAZUGEKOMMEN ist. +GERAETE_VORHER=0 +neues_geraet() { [ "$(anzahl_geraete)" -gt "$GERAETE_VORHER" ]; } # Sucht einen mDNS-Dienst und gibt HOST:PORT zurück. Der Kopplungsdienst wird nur # angekündigt, solange der Kopplungsdialog auf dem Telefon offen ist — deshalb wird @@ -148,18 +155,47 @@ WO_VERBINDUNG="Auf dem Telefon: Drahtloses Debugging → 'IP-Adresse und Port' ( WO_KOPPLUNG="Auf dem Telefon: im Fenster 'Mit Kopplungscode koppeln' (ANDERER Port!)" # ── Schon verbunden? ───────────────────────────────────────────────────────── +# Ein bereits verbundenes Gerät darf kein Grund sein auszusteigen: ein zweites +# Telefon dazuzunehmen ist ein völlig normaler Wunsch, etwa beim Gerätewechsel, +# wenn altes und neues Gerät gleichzeitig erreichbar sein müssen. kopf "Aktueller Stand" if ist_verbunden; then - ok "Es ist bereits ein Gerät verbunden." - weiter_mit_provision - exit 0 + ok "Verbundene Geräte:" + while IFS= read -r S; do + [ -n "$S" ] && printf ' %-24s %s\n' "$S" "$(geraet_beschreiben "$S")" + done < <(adb_geraete) + cat <<'TEXT' + + Was möchtest du tun? + + [w] weiter zur Einrichtung (provision.sh übernimmt die Auswahl) + [n] ein weiteres Gerät hinzufügen (Kopplung oder Verbindung) + [t] ein verbundenes Gerät trennen + [a] abbrechen +TEXT + printf '\n Auswahl [w] > ' + read -r AKTION ' + read -r TRENNEN ' +printf '\n Wurde DIESES Telefon hier schon einmal gekoppelt? [j/N] > ' read -r SCHON_GEKOPPELT /dev/null | tr -d '\r') + modell=$("$ADB_BIN" -s "$serial" shell getprop ro.product.model 2>/dev/null | tr -d '\r') + printf '%s %s' "${hersteller:-?}" "${modell:-?}" +} + +# Wählt ein Gerät aus und setzt ADB_SERIAL. +# 0 = ein Gerät ausgewählt +# 1 = gar kein Gerät verbunden +geraet_waehlen() { + local liste=() zeile i wahl + while IFS= read -r zeile; do + [ -n "$zeile" ] && liste+=("$zeile") + done < <(adb_geraete) + + case ${#liste[@]} in + 0) ADB_SERIAL=""; return 1 ;; + 1) ADB_SERIAL="${liste[0]}"; return 0 ;; + esac + + kopf "Mehrere Geräte verbunden" + for i in "${!liste[@]}"; do + printf ' [%d] %-24s %s\n' "$((i + 1))" "${liste[i]}" "$(geraet_beschreiben "${liste[i]}")" + done + printf '\n Welches Gerät soll eingerichtet werden? [1] > ' + read -r wahl /dev/null && [ "$wahl" -le ${#liste[@]} ]; then + ADB_SERIAL="${liste[$((wahl - 1))]}" + ok "Gewählt: $ADB_SERIAL ($(geraet_beschreiben "$ADB_SERIAL"))" + return 0 + fi + warn "Ungültige Auswahl — nehme das erste Gerät." + ADB_SERIAL="${liste[0]}" + return 0 +} diff --git a/provision/provision.sh b/provision/provision.sh index 16b0b18..08720e1 100755 --- a/provision/provision.sh +++ b/provision/provision.sh @@ -112,10 +112,14 @@ TEXT exit 1 fi ok "Gerät verbunden" -elif [ "$ANZAHL" -gt 1 ]; then - fehl "Mehrere Geräte verbunden — bitte nur eines aktiv lassen." - adb devices | sed 's/^/ /' - hinweis "Überzählige trennen, per WLAN verbundene mit: adb disconnect " +fi + +# Mehrere Geräte sind kein Fehler, sondern der Normalfall beim Gerätewechsel: +# altes und neues Telefon müssen gleichzeitig erreichbar sein. Statt abzubrechen +# wird gefragt — und die Auswahl gilt danach für ALLE folgenden Befehle, weil die +# adb-Hülle in lib.sh selbsttätig -s ergänzt. +if ! geraet_waehlen; then + fehl "Es ist kein Gerät verbunden." exit 1 fi @@ -123,6 +127,7 @@ for p in ro.product.manufacturer ro.product.model ro.product.device \ ro.build.version.release ro.board.platform; do printf ' %-28s %s\n' "$p" "$(adb shell getprop "$p" 2>/dev/null | tr -d '\r')" done +hinweis "Ziel: ${ADB_SERIAL:-(einziges Gerät)}" [ "$TROCKEN" = 1 ] && warn "Trockenlauf — es wird nichts verändert." # ── Termux vorhanden? ────────────────────────────────────────────────────────