Der Stick wird vom gesteuerten Geraet zum Gespraechspartner: - VoiceSession: Mikro -> stt_stream_start/stt_audio_chunk(pcm,16k mono s16le, 6400B)/stt_stream_end (exakt das App-Protokoll, keine Server-Aenderung noetig); Antwort via chat(sender=aria) + audio_pcm(base64, 24k) in AudioTrack. AEC/NS an. TURN-OWNERSHIP: der RVS broadcastet an alle — es wird nur ausgegeben, was aus der EIGENEN Frage entstand (audioRequestId -> messageId), sonst reden Handy und Stick gleichzeitig. - OverlayView: TYPE_APPLICATION_OVERLAY, Einblendung ueber dem laufenden Bild (Text + optional Bild), nicht fokussierbar (Fernbedienung bleibt frei). - Speaker: ARIAs echte Stimme (fertiges Audio) bevorzugt, Geraete-TTS als Fallback, Lautstaerke-Steuerung. - Neue Aktionen: notify (Einblendung/Sprache, mode ueberschreibbar), speak, volume, listen/listen_stop. - Einstellung replyMode (overlay|speech) in der App, pro Anfrage ueberschreibbar. - Sprech-Taste in der UI (Fire TV: OK-Taste) + Mikro-/Overlay-Berechtigungen. Version 0.0.1.0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
182 lines
6.4 KiB
XML
182 lines
6.4 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="match_parent"
|
|
android:fillViewport="true">
|
|
|
|
<LinearLayout
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:orientation="vertical"
|
|
android:padding="20dp">
|
|
|
|
<TextView
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:text="@string/app_name"
|
|
android:textSize="22sp"
|
|
android:textStyle="bold"
|
|
android:paddingBottom="4dp" />
|
|
|
|
<TextView
|
|
android:id="@+id/status"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:text="Status: —"
|
|
android:paddingBottom="16dp" />
|
|
|
|
<Button
|
|
android:id="@+id/btnScan"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:focusable="true"
|
|
android:focusableInTouchMode="false"
|
|
android:text="QR-Code scannen" />
|
|
|
|
<TextView
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:text="— oder manuell —"
|
|
android:paddingTop="12dp"
|
|
android:paddingBottom="4dp" />
|
|
|
|
<EditText
|
|
android:id="@+id/host"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:hint="RVS-Host (z.B. rvs.example.com)"
|
|
android:inputType="textUri" />
|
|
|
|
<EditText
|
|
android:id="@+id/port"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:hint="Port"
|
|
android:text="443"
|
|
android:inputType="number" />
|
|
|
|
<EditText
|
|
android:id="@+id/token"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:hint="RVS-Token"
|
|
android:inputType="textNoSuggestions" />
|
|
|
|
<EditText
|
|
android:id="@+id/name"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:hint="Anzeigename (optional, z.B. 'Stefans Handy')"
|
|
android:inputType="text" />
|
|
|
|
<androidx.appcompat.widget.SwitchCompat
|
|
android:id="@+id/tls"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:text="TLS (wss)"
|
|
android:checked="true"
|
|
android:paddingTop="12dp" />
|
|
|
|
<androidx.appcompat.widget.SwitchCompat
|
|
android:id="@+id/control"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:text="Steuerung erlauben (Aktionen ausführen)"
|
|
android:paddingTop="8dp"
|
|
android:paddingBottom="16dp" />
|
|
|
|
<Button
|
|
android:id="@+id/btnConnect"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:text="Speichern & Verbinden" />
|
|
|
|
<Button
|
|
android:id="@+id/btnStop"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:text="Agent stoppen"
|
|
android:paddingTop="8dp" />
|
|
|
|
<Button
|
|
android:id="@+id/btnTalk"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:focusable="true"
|
|
android:text="🎤 Mit ARIA sprechen"
|
|
android:paddingTop="16dp" />
|
|
|
|
<TextView
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:text="Sehen (Meilenstein 2)"
|
|
android:textStyle="bold"
|
|
android:paddingTop="24dp"
|
|
android:paddingBottom="4dp" />
|
|
|
|
<TextView
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:text="Damit ARIA Screenshots machen und die Oberfläche lesen kann. Beides einmalig freigeben."
|
|
android:textSize="13sp"
|
|
android:paddingBottom="8dp" />
|
|
|
|
<Button
|
|
android:id="@+id/btnScreen"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:text="Bildschirm-Zugriff erlauben" />
|
|
|
|
<Button
|
|
android:id="@+id/btnAccessibility"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:text="Bedienungshilfe öffnen"
|
|
android:paddingTop="8dp" />
|
|
|
|
<TextView
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:text="Antworten (Fernseher)"
|
|
android:textStyle="bold"
|
|
android:paddingTop="24dp"
|
|
android:paddingBottom="4dp" />
|
|
|
|
<TextView
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:text="Wie ARIA hier standardmäßig antwortet. Sie kann das pro Anfrage überschreiben (z.B. mit dem Zusatz: bitte als Sprache)."
|
|
android:textSize="13sp"
|
|
android:paddingBottom="8dp" />
|
|
|
|
<RadioGroup
|
|
android:id="@+id/replyMode"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:orientation="vertical">
|
|
|
|
<RadioButton
|
|
android:id="@+id/modeOverlay"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:focusable="true"
|
|
android:text="Einblendung über dem Bild (Standard)" />
|
|
|
|
<RadioButton
|
|
android:id="@+id/modeSpeech"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:focusable="true"
|
|
android:text="Sprachausgabe über die Lautsprecher" />
|
|
</RadioGroup>
|
|
|
|
<Button
|
|
android:id="@+id/btnOverlayPerm"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:text="Einblendung erlauben"
|
|
android:paddingTop="8dp" />
|
|
|
|
</LinearLayout>
|
|
</ScrollView>
|