first commit

This commit is contained in:
duffyduck
2026-08-22 20:34:42 +02:00
commit 9546b9a4c6
1586 changed files with 172520 additions and 0 deletions
@@ -0,0 +1,14 @@
#Sat Aug 22 19:33:58 CEST 2026
de.duffy.screencast.app-main-5\:/drawable/ic_cast.xml=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_cast.xml
de.duffy.screencast.app-main-5\:/mipmap-hdpi/ic_launcher.png=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-hdpi-v4/ic_launcher.png
de.duffy.screencast.app-main-5\:/mipmap-hdpi/ic_launcher_round.png=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-hdpi-v4/ic_launcher_round.png
de.duffy.screencast.app-main-5\:/mipmap-mdpi/ic_launcher.png=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-mdpi-v4/ic_launcher.png
de.duffy.screencast.app-main-5\:/mipmap-mdpi/ic_launcher_round.png=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-mdpi-v4/ic_launcher_round.png
de.duffy.screencast.app-main-5\:/mipmap-xhdpi/ic_launcher.png=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-xhdpi-v4/ic_launcher.png
de.duffy.screencast.app-main-5\:/mipmap-xhdpi/ic_launcher_round.png=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-xhdpi-v4/ic_launcher_round.png
de.duffy.screencast.app-main-5\:/mipmap-xxhdpi/ic_launcher.png=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-xxhdpi-v4/ic_launcher.png
de.duffy.screencast.app-main-5\:/mipmap-xxhdpi/ic_launcher_round.png=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-xxhdpi-v4/ic_launcher_round.png
de.duffy.screencast.app-main-5\:/mipmap-xxxhdpi/ic_launcher.png=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-xxxhdpi-v4/ic_launcher.png
de.duffy.screencast.app-main-5\:/mipmap-xxxhdpi/ic_launcher_round.png=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-xxxhdpi-v4/ic_launcher_round.png
de.duffy.screencast.app-packageDebugResources-2\:/layout/activity_device.xml=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_device.xml
de.duffy.screencast.app-packageDebugResources-2\:/layout/activity_main.xml=/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_main.xml
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="brand">#1F6FEB</color>
<color name="on_brand">#FFFFFF</color>
<plurals name="viewers">
<item quantity="one">%d Gerät schaut zu</item>
<item quantity="other">%d Geräte schauen zu</item>
</plurals>
<string name="address_hint">Browser am Fernseher öffnen und diese Adresse eintippen. Das Bild erscheint sofort im Vollbild.</string>
<string name="address_title">Am Fernseher eingeben</string>
<string name="app_name">Screen Cast</string>
<string name="connect_browser">Über Browser-Adresse</string>
<string name="connect_direct">Zum Fernseher verbinden</string>
<string name="copy">Kopieren</string>
<string name="disconnect">Verbindung trennen</string>
<string name="find_tv">Fernseher suchen</string>
<string name="find_tv_hint">Für Fernseher, die schon auf eine Verbindung warten etwa im Screen-Mirroring-Modus. Am TV muss dann nichts eingetippt werden.</string>
<string name="framerate">Bildrate</string>
<string name="hint_no_wifi">Kein WLAN aktiv. Verbinde dich mit dem WLAN deines Fernsehers.</string>
<string name="hint_ready">Handy und Fernseher müssen im selben WLAN sein.</string>
<string name="hint_running">Läuft. Du kannst die App jetzt verlassen die Übertragung läuft weiter.</string>
<string name="how_to">So geht\'s</string>
<string name="no_devices">Noch nichts gefunden. Der Fernseher sollte den Screen-Mirroring-Bildschirm anzeigen. Die Suche kann eine halbe Minute dauern.</string>
<string name="open_system_cast">Systemeigene Übertragungsseite öffnen</string>
<string name="protocol">Protokoll</string>
<string name="quality">Qualität</string>
<string name="search_again">Erneut suchen</string>
<string name="start_casting">Übertragung starten</string>
<string name="steps">1. Übertragung starten und Freigabe bestätigen\n2. Am Fernseher den Browser öffnen\n3. Die angezeigte Adresse eintippen\n4. Fertig das Bild läuft im Vollbild</string>
<string name="stop_casting">Übertragung beenden</string>
<string name="ts_hint">Für VLC, Kodi oder mpv (Menü \"Netzwerkstream öffnen\"):</string>
<style name="Theme.SmartScreenCast" parent="Theme.Material3.DayNight.NoActionBar">
<item name="colorPrimary">@color/brand</item>
<item name="colorOnPrimary">@color/on_brand</item>
</style>
</resources>
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main" generated-set="main$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res"><file name="ic_launcher_round" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/mipmap-hdpi/ic_launcher_round.png" qualifiers="hdpi-v4" type="mipmap"/><file name="ic_launcher" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/mipmap-hdpi/ic_launcher.png" qualifiers="hdpi-v4" type="mipmap"/><file name="ic_launcher_round" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png" qualifiers="xxxhdpi-v4" type="mipmap"/><file name="ic_launcher" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png" qualifiers="xxxhdpi-v4" type="mipmap"/><file name="activity_main" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/layout/activity_main.xml" qualifiers="" type="layout"/><file name="activity_device" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/layout/activity_device.xml" qualifiers="" type="layout"/><file name="ic_launcher_round" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/mipmap-mdpi/ic_launcher_round.png" qualifiers="mdpi-v4" type="mipmap"/><file name="ic_launcher" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/mipmap-mdpi/ic_launcher.png" qualifiers="mdpi-v4" type="mipmap"/><file name="ic_cast" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/drawable/ic_cast.xml" qualifiers="" type="drawable"/><file name="ic_launcher_round" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png" qualifiers="xhdpi-v4" type="mipmap"/><file name="ic_launcher" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/mipmap-xhdpi/ic_launcher.png" qualifiers="xhdpi-v4" type="mipmap"/><file path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/values/themes.xml" qualifiers=""><style name="Theme.SmartScreenCast" parent="Theme.Material3.DayNight.NoActionBar">
<item name="colorPrimary">@color/brand</item>
<item name="colorOnPrimary">@color/on_brand</item>
</style></file><file path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/values/strings.xml" qualifiers=""><string name="app_name">Screen Cast</string><string name="start_casting">Übertragung starten</string><string name="stop_casting">Übertragung beenden</string><string name="quality">Qualität</string><string name="framerate">Bildrate</string><string name="address_title">Am Fernseher eingeben</string><string name="address_hint">Browser am Fernseher öffnen und diese Adresse eintippen. Das Bild erscheint sofort im Vollbild.</string><string name="ts_hint">Für VLC, Kodi oder mpv (Menü \"Netzwerkstream öffnen\"):</string><string name="hint_ready">Handy und Fernseher müssen im selben WLAN sein.</string><string name="hint_running">Läuft. Du kannst die App jetzt verlassen die Übertragung läuft weiter.</string><string name="hint_no_wifi">Kein WLAN aktiv. Verbinde dich mit dem WLAN deines Fernsehers.</string><string name="copy">Kopieren</string><string name="how_to">So geht\'s</string><string name="steps">1. Übertragung starten und Freigabe bestätigen\n2. Am Fernseher den Browser öffnen\n3. Die angezeigte Adresse eintippen\n4. Fertig das Bild läuft im Vollbild</string><string name="find_tv">Fernseher suchen</string><string name="find_tv_hint">Für Fernseher, die schon auf eine Verbindung warten etwa im Screen-Mirroring-Modus. Am TV muss dann nichts eingetippt werden.</string><string name="search_again">Erneut suchen</string><string name="no_devices">Noch nichts gefunden. Der Fernseher sollte den Screen-Mirroring-Bildschirm anzeigen. Die Suche kann eine halbe Minute dauern.</string><string name="open_system_cast">Systemeigene Übertragungsseite öffnen</string><string name="disconnect">Verbindung trennen</string><string name="protocol">Protokoll</string><string name="connect_direct">Zum Fernseher verbinden</string><string name="connect_browser">Über Browser-Adresse</string><plurals name="viewers">
<item quantity="one">%d Gerät schaut zu</item>
<item quantity="other">%d Geräte schauen zu</item>
</plurals></file><file path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/values/colors.xml" qualifiers=""><color name="brand">#1F6FEB</color><color name="on_brand">#FFFFFF</color></file><file name="ic_launcher_round" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png" qualifiers="xxhdpi-v4" type="mipmap"/><file name="ic_launcher" path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/mipmap-xxhdpi/ic_launcher.png" qualifiers="xxhdpi-v4" type="mipmap"/></source></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/debug/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug" generated-set="debug$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/debug/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="generated$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/generated/res/resValues/debug"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="generated" generated-set="generated$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build/generated/res/resValues/debug"/></dataSet><mergedItems/></merger>
@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/find_tv"
android:textSize="26sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:alpha="0.75"
android:text="@string/find_tv_hint"
android:textSize="14sp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/search_again"
app:cornerRadius="16dp" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginTop="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/device_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<TextView
android:id="@+id/text_empty"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:alpha="0.75"
android:text="@string/no_devices"
android:textSize="14sp" />
</LinearLayout>
</ScrollView>
<com.google.android.material.button.MaterialButton
android:id="@+id/button_system_settings"
style="@style/Widget.Material3.Button.TonalButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/open_system_cast" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_disconnect"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/disconnect" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/protocol"
android:textSize="13sp"
android:textStyle="bold" />
<ScrollView
android:id="@+id/scroll_log"
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="#11808080"
android:padding="8dp">
<TextView
android:id="@+id/text_log"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="monospace"
android:textIsSelectable="true"
android:textSize="11sp" />
</ScrollView>
</LinearLayout>
@@ -0,0 +1,242 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
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:layout_marginTop="12dp"
android:text="@string/app_name"
android:textSize="30sp"
android:textStyle="bold" />
<TextView
android:id="@+id/text_hint"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/hint_ready"
android:textSize="15sp"
android:alpha="0.75" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_find_tv"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginTop="24dp"
android:text="@string/connect_direct"
android:textSize="17sp"
app:cornerRadius="20dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:alpha="0.7"
android:text="@string/find_tv_hint"
android:textSize="13sp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_toggle"
android:layout_width="match_parent"
android:layout_height="72dp"
android:layout_marginTop="20dp"
android:text="@string/start_casting"
android:textSize="19sp"
app:cornerRadius="20dp" />
<!-- Adresse: erscheint erst, wenn die Uebertragung laeuft -->
<com.google.android.material.card.MaterialCardView
android:id="@+id/card_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:visibility="gone"
app:cardCornerRadius="20dp"
app:cardElevation="0dp"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="18dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/address_title"
android:textStyle="bold"
android:textSize="15sp" />
<TextView
android:id="@+id/text_url"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textIsSelectable="true"
android:textSize="27sp"
android:textStyle="bold"
android:textColor="@color/brand"
tools:text="http://192.168.1.20:8080" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/address_hint"
android:textSize="14sp"
android:alpha="0.75" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_copy"
style="@style/Widget.Material3.Button.TonalButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/copy" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="16dp"
android:alpha="0.15"
android:background="?android:attr/textColorPrimary" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:text="@string/ts_hint"
android:textSize="13sp"
android:alpha="0.75" />
<TextView
android:id="@+id/text_url_ts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:textSize="15sp" />
<TextView
android:id="@+id/text_viewers"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:id="@+id/text_resolution"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="13sp"
android:alpha="0.7" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Einstellungen: nur sichtbar, solange nichts laeuft -->
<LinearLayout
android:id="@+id/group_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="26dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/quality"
android:textStyle="bold" />
<com.google.android.material.chip.ChipGroup
android:id="@+id/chip_group_quality"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
app:singleSelection="true"
app:selectionRequired="true">
<com.google.android.material.chip.Chip
android:id="@+id/chip_sd"
style="@style/Widget.Material3.Chip.Filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sparsam" />
<com.google.android.material.chip.Chip
android:id="@+id/chip_hd"
style="@style/Widget.Material3.Chip.Filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="Ausgewogen" />
<com.google.android.material.chip.Chip
android:id="@+id/chip_fhd"
style="@style/Widget.Material3.Chip.Filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scharf" />
</com.google.android.material.chip.ChipGroup>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/framerate"
android:textStyle="bold" />
<com.google.android.material.chip.ChipGroup
android:id="@+id/chip_group_fps"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
app:singleSelection="true"
app:selectionRequired="true">
<com.google.android.material.chip.Chip
android:id="@+id/chip_fps30"
style="@style/Widget.Material3.Chip.Filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="30 fps" />
<com.google.android.material.chip.Chip
android:id="@+id/chip_fps60"
style="@style/Widget.Material3.Chip.Filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="60 fps" />
</com.google.android.material.chip.ChipGroup>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="26dp"
android:text="@string/how_to"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:layout_marginBottom="20dp"
android:lineSpacingExtra="4dp"
android:text="@string/steps"
android:textSize="15sp"
android:alpha="0.8" />
</LinearLayout>
</LinearLayout>
</ScrollView>