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
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,133 @@
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build.gradle.kts:13: Warning: Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details. [OldTargetApi]
targetSdk = 35
~~~~~~~~~~~~~~
Explanation for issues of type "OldTargetApi":
When your application runs on a version of Android that is more recent than
your targetSdkVersion specifies that it has been tested with, various
compatibility modes kick in. This ensures that your application continues
to work, but it may look out of place. For example, if the targetSdkVersion
is less than 14, your app may get an option button in the UI.
To fix this issue, set the targetSdkVersion to the highest available value.
Then test your app to make sure everything works correctly. You may want to
consult the compatibility notes to see what changes apply to each version
you are adding support for:
https://developer.android.com/reference/android/os/Build.VERSION_CODES.html
as well as follow this guide:
https://developer.android.com/distribute/best-practices/develop/target-sdk.
html
https://developer.android.com/distribute/best-practices/develop/target-sdk.html
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build.gradle.kts:49: Warning: A newer version of androidx.core:core-ktx than 1.13.1 is available: 1.19.0 [GradleDependency]
implementation("androidx.core:core-ktx:1.13.1")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build.gradle.kts:50: Warning: A newer version of androidx.appcompat:appcompat than 1.7.0 is available: 1.8.0 [GradleDependency]
implementation("androidx.appcompat:appcompat:1.7.0")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build.gradle.kts:51: Warning: A newer version of com.google.android.material:material than 1.12.0 is available: 1.14.0 [GradleDependency]
implementation("com.google.android.material:material:1.12.0")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build.gradle.kts:52: Warning: A newer version of androidx.constraintlayout:constraintlayout than 2.1.4 is available: 2.2.2 [GradleDependency]
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build.gradle.kts:53: Warning: A newer version of androidx.lifecycle:lifecycle-runtime-ktx than 2.8.7 is available: 2.11.0 [GradleDependency]
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.7")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Explanation for issues of type "GradleDependency":
This detector looks for usages of libraries where the version you are using
is not the current stable release. Using older versions is fine, and there
are cases where you deliberately want to stick with an older version.
However, you may simply not be aware that a more recent version is
available, and that is what this lint check helps find.
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/java/de/duffy/screencast/CastService.kt:255: Warning: Unnecessary; SDK_INT is always >= 24 [ObsoleteSdkInt]
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/java/de/duffy/screencast/NetworkUtil.kt:20: Warning: Unnecessary; SDK_INT is never < 24 [ObsoleteSdkInt]
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return null
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/java/de/duffy/screencast/NetworkUtil.kt:47: Warning: Unnecessary; SDK_INT is always >= 24 [ObsoleteSdkInt]
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/java/de/duffy/screencast/ScreenEncoder.kt:72: Warning: Unnecessary; SDK_INT is always >= 24 [ObsoleteSdkInt]
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Explanation for issues of type "ObsoleteSdkInt":
This check flags version checks that are not necessary, because the
minSdkVersion (or surrounding known API level) is already at least as high
as the version checked for.
Similarly, it also looks for resources in -vNN folders, such as values-v14
where the version qualifier is less than or equal to the minSdkVersion,
where the contents should be merged into the best folder.
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/values/strings.xml:26: Warning: The resource R.string.connect_browser appears to be unused [UnusedResources]
<string name="connect_browser">Über Browser-Adresse</string>
~~~~~~~~~~~~~~~~~~~~~~
Explanation for issues of type "UnusedResources":
Unused resources make applications larger and slow down builds.
The unused resource check can ignore tests. If you want to include
resources that are only referenced from tests, consider packaging them in a
test source set instead.
You can include test sources in the unused resource check by setting the
system property lint.unused-resources.include-tests =true, and to exclude
them (usually for performance reasons), use
lint.unused-resources.exclude-tests =true.
,
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/java/de/duffy/screencast/DeviceActivity.kt:179: Warning: Do not concatenate text displayed with setText. Use resource string with placeholders. [SetTextI18n]
button.text = "$title\n$subtitle"
~~~~~~~~~~~~~~~~~~~
Explanation for issues of type "SetTextI18n":
When calling TextView#setText
* Never call Number#toString() to format numbers; it will not handle
fraction separators and locale-specific digits properly. Consider using
String#format with proper format specifications (%d or %f) instead.
* Do not pass a string literal (e.g. "Hello") to display text. Hardcoded
text can not be properly translated to other languages. Consider using
Android resource strings instead.
* Do not build messages by concatenating text chunks. Such messages can not
be properly translated.
https://developer.android.com/guide/topics/resources/localization.html
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/layout/activity_main.xml:175: Warning: Hardcoded string "Sparsam", should use @string resource [HardcodedText]
android:text="Sparsam" />
~~~~~~~~~~~~~~~~~~~~~~
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/layout/activity_main.xml:183: Warning: Hardcoded string "Ausgewogen", should use @string resource [HardcodedText]
android:text="Ausgewogen" />
~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/layout/activity_main.xml:190: Warning: Hardcoded string "Scharf", should use @string resource [HardcodedText]
android:text="Scharf" />
~~~~~~~~~~~~~~~~~~~~~
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/layout/activity_main.xml:214: Warning: Hardcoded string "30 fps", should use @string resource [HardcodedText]
android:text="30 fps" />
~~~~~~~~~~~~~~~~~~~~~
/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/layout/activity_main.xml:221: Warning: Hardcoded string "60 fps", should use @string resource [HardcodedText]
android:text="60 fps" />
~~~~~~~~~~~~~~~~~~~~~
Explanation for issues of type "HardcodedText":
Hardcoding text attributes directly in layout files is bad for several
reasons:
* When creating configuration variations (for example for landscape or
portrait) you have to repeat the actual text (and keep it up to date when
making changes)
* The application cannot be translated to other languages by just adding
new translations for existing string resources.
There are quickfixes to automatically extract this hardcoded string into a
resource lookup.
0 errors, 17 warnings
@@ -0,0 +1,280 @@
<?xml version="1.0" encoding="UTF-8"?>
<issues format="6" by="lint 8.7.3">
<issue
id="OldTargetApi"
severity="Warning"
message="Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the `android.os.Build.VERSION_CODES` javadoc for details."
category="Correctness"
priority="6"
summary="Target SDK attribute is not targeting latest version"
explanation="When your application runs on a version of Android that is more recent than your `targetSdkVersion` specifies that it has been tested with, various compatibility modes kick in. This ensures that your application continues to work, but it may look out of place. For example, if the `targetSdkVersion` is less than 14, your app may get an option button in the UI.&#xA;&#xA;To fix this issue, set the `targetSdkVersion` to the highest available value. Then test your app to make sure everything works correctly. You may want to consult the compatibility notes to see what changes apply to each version you are adding support for: https://developer.android.com/reference/android/os/Build.VERSION_CODES.html as well as follow this guide:&#xA;https://developer.android.com/distribute/best-practices/develop/target-sdk.html"
url="https://developer.android.com/distribute/best-practices/develop/target-sdk.html"
urls="https://developer.android.com/distribute/best-practices/develop/target-sdk.html,https://developer.android.com/reference/android/os/Build.VERSION_CODES.html"
errorLine1=" targetSdk = 35"
errorLine2=" ~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build.gradle.kts"
line="13"
column="9"/>
</issue>
<issue
id="GradleDependency"
severity="Warning"
message="A newer version of androidx.core:core-ktx than 1.13.1 is available: 1.19.0"
category="Correctness"
priority="4"
summary="Obsolete Gradle Dependency"
explanation="This detector looks for usages of libraries where the version you are using is not the current stable release. Using older versions is fine, and there are cases where you deliberately want to stick with an older version. However, you may simply not be aware that a more recent version is available, and that is what this lint check helps find."
errorLine1=" implementation(&quot;androidx.core:core-ktx:1.13.1&quot;)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build.gradle.kts"
line="49"
column="20"/>
</issue>
<issue
id="GradleDependency"
severity="Warning"
message="A newer version of androidx.appcompat:appcompat than 1.7.0 is available: 1.8.0"
category="Correctness"
priority="4"
summary="Obsolete Gradle Dependency"
explanation="This detector looks for usages of libraries where the version you are using is not the current stable release. Using older versions is fine, and there are cases where you deliberately want to stick with an older version. However, you may simply not be aware that a more recent version is available, and that is what this lint check helps find."
errorLine1=" implementation(&quot;androidx.appcompat:appcompat:1.7.0&quot;)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build.gradle.kts"
line="50"
column="20"/>
</issue>
<issue
id="GradleDependency"
severity="Warning"
message="A newer version of com.google.android.material:material than 1.12.0 is available: 1.14.0"
category="Correctness"
priority="4"
summary="Obsolete Gradle Dependency"
explanation="This detector looks for usages of libraries where the version you are using is not the current stable release. Using older versions is fine, and there are cases where you deliberately want to stick with an older version. However, you may simply not be aware that a more recent version is available, and that is what this lint check helps find."
errorLine1=" implementation(&quot;com.google.android.material:material:1.12.0&quot;)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build.gradle.kts"
line="51"
column="20"/>
</issue>
<issue
id="GradleDependency"
severity="Warning"
message="A newer version of androidx.constraintlayout:constraintlayout than 2.1.4 is available: 2.2.2"
category="Correctness"
priority="4"
summary="Obsolete Gradle Dependency"
explanation="This detector looks for usages of libraries where the version you are using is not the current stable release. Using older versions is fine, and there are cases where you deliberately want to stick with an older version. However, you may simply not be aware that a more recent version is available, and that is what this lint check helps find."
errorLine1=" implementation(&quot;androidx.constraintlayout:constraintlayout:2.1.4&quot;)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build.gradle.kts"
line="52"
column="20"/>
</issue>
<issue
id="GradleDependency"
severity="Warning"
message="A newer version of androidx.lifecycle:lifecycle-runtime-ktx than 2.8.7 is available: 2.11.0"
category="Correctness"
priority="4"
summary="Obsolete Gradle Dependency"
explanation="This detector looks for usages of libraries where the version you are using is not the current stable release. Using older versions is fine, and there are cases where you deliberately want to stick with an older version. However, you may simply not be aware that a more recent version is available, and that is what this lint check helps find."
errorLine1=" implementation(&quot;androidx.lifecycle:lifecycle-runtime-ktx:2.8.7&quot;)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/build.gradle.kts"
line="53"
column="20"/>
</issue>
<issue
id="ObsoleteSdkInt"
severity="Warning"
message="Unnecessary; SDK_INT is always >= 24"
category="Performance"
priority="6"
summary="Obsolete SDK_INT Version Check"
explanation="This check flags version checks that are not necessary, because the `minSdkVersion` (or surrounding known API level) is already at least as high as the version checked for.&#xA;&#xA;Similarly, it also looks for resources in `-vNN` folders, such as `values-v14` where the version qualifier is less than or equal to the `minSdkVersion`, where the contents should be merged into the best folder."
errorLine1=" if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/java/de/duffy/screencast/CastService.kt"
line="255"
column="13"/>
</issue>
<issue
id="ObsoleteSdkInt"
severity="Warning"
message="Unnecessary; SDK_INT is never &lt; 24"
category="Performance"
priority="6"
summary="Obsolete SDK_INT Version Check"
explanation="This check flags version checks that are not necessary, because the `minSdkVersion` (or surrounding known API level) is already at least as high as the version checked for.&#xA;&#xA;Similarly, it also looks for resources in `-vNN` folders, such as `values-v14` where the version qualifier is less than or equal to the `minSdkVersion`, where the contents should be merged into the best folder."
errorLine1=" if (Build.VERSION.SDK_INT &lt; Build.VERSION_CODES.M) return null"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/java/de/duffy/screencast/NetworkUtil.kt"
line="20"
column="13"/>
</issue>
<issue
id="ObsoleteSdkInt"
severity="Warning"
message="Unnecessary; SDK_INT is always >= 24"
category="Performance"
priority="6"
summary="Obsolete SDK_INT Version Check"
explanation="This check flags version checks that are not necessary, because the `minSdkVersion` (or surrounding known API level) is already at least as high as the version checked for.&#xA;&#xA;Similarly, it also looks for resources in `-vNN` folders, such as `values-v14` where the version qualifier is less than or equal to the `minSdkVersion`, where the contents should be merged into the best folder."
errorLine1=" if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/java/de/duffy/screencast/NetworkUtil.kt"
line="47"
column="13"/>
</issue>
<issue
id="ObsoleteSdkInt"
severity="Warning"
message="Unnecessary; SDK_INT is always >= 24"
category="Performance"
priority="6"
summary="Obsolete SDK_INT Version Check"
explanation="This check flags version checks that are not necessary, because the `minSdkVersion` (or surrounding known API level) is already at least as high as the version checked for.&#xA;&#xA;Similarly, it also looks for resources in `-vNN` folders, such as `values-v14` where the version qualifier is less than or equal to the `minSdkVersion`, where the contents should be merged into the best folder."
errorLine1=" if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/java/de/duffy/screencast/ScreenEncoder.kt"
line="72"
column="17"/>
</issue>
<issue
id="UnusedResources"
severity="Warning"
message="The resource `R.string.connect_browser` appears to be unused"
category="Performance"
priority="3"
summary="Unused resources"
explanation="Unused resources make applications larger and slow down builds.&#xA;&#xA;&#xA;The unused resource check can ignore tests. If you want to include resources that are only referenced from tests, consider packaging them in a test source set instead.&#xA;&#xA;You can include test sources in the unused resource check by setting the system property lint.unused-resources.include-tests =true, and to exclude them (usually for performance reasons), use lint.unused-resources.exclude-tests =true.&#xA;,"
errorLine1=" &lt;string name=&quot;connect_browser&quot;>Über Browser-Adresse&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/values/strings.xml"
line="26"
column="13"/>
</issue>
<issue
id="SetTextI18n"
severity="Warning"
message="Do not concatenate text displayed with `setText`. Use resource string with placeholders."
category="Internationalization"
priority="6"
summary="TextView Internationalization"
explanation="When calling `TextView#setText`&#xA;* Never call `Number#toString()` to format numbers; it will not handle fraction separators and locale-specific digits properly. Consider using `String#format` with proper format specifications (`%d` or `%f`) instead.&#xA;* Do not pass a string literal (e.g. &quot;Hello&quot;) to display text. Hardcoded text can not be properly translated to other languages. Consider using Android resource strings instead.&#xA;* Do not build messages by concatenating text chunks. Such messages can not be properly translated."
url="https://developer.android.com/guide/topics/resources/localization.html"
urls="https://developer.android.com/guide/topics/resources/localization.html"
errorLine1=" button.text = &quot;$title\n$subtitle&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/java/de/duffy/screencast/DeviceActivity.kt"
line="179"
column="23"/>
</issue>
<issue
id="HardcodedText"
severity="Warning"
message="Hardcoded string &quot;Sparsam&quot;, should use `@string` resource"
category="Internationalization"
priority="5"
summary="Hardcoded text"
explanation="Hardcoding text attributes directly in layout files is bad for several reasons:&#xA;&#xA;* When creating configuration variations (for example for landscape or portrait) you have to repeat the actual text (and keep it up to date when making changes)&#xA;&#xA;* The application cannot be translated to other languages by just adding new translations for existing string resources.&#xA;&#xA;There are quickfixes to automatically extract this hardcoded string into a resource lookup."
errorLine1=" android:text=&quot;Sparsam&quot; />"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/layout/activity_main.xml"
line="175"
column="21"/>
</issue>
<issue
id="HardcodedText"
severity="Warning"
message="Hardcoded string &quot;Ausgewogen&quot;, should use `@string` resource"
category="Internationalization"
priority="5"
summary="Hardcoded text"
explanation="Hardcoding text attributes directly in layout files is bad for several reasons:&#xA;&#xA;* When creating configuration variations (for example for landscape or portrait) you have to repeat the actual text (and keep it up to date when making changes)&#xA;&#xA;* The application cannot be translated to other languages by just adding new translations for existing string resources.&#xA;&#xA;There are quickfixes to automatically extract this hardcoded string into a resource lookup."
errorLine1=" android:text=&quot;Ausgewogen&quot; />"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/layout/activity_main.xml"
line="183"
column="21"/>
</issue>
<issue
id="HardcodedText"
severity="Warning"
message="Hardcoded string &quot;Scharf&quot;, should use `@string` resource"
category="Internationalization"
priority="5"
summary="Hardcoded text"
explanation="Hardcoding text attributes directly in layout files is bad for several reasons:&#xA;&#xA;* When creating configuration variations (for example for landscape or portrait) you have to repeat the actual text (and keep it up to date when making changes)&#xA;&#xA;* The application cannot be translated to other languages by just adding new translations for existing string resources.&#xA;&#xA;There are quickfixes to automatically extract this hardcoded string into a resource lookup."
errorLine1=" android:text=&quot;Scharf&quot; />"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/layout/activity_main.xml"
line="190"
column="21"/>
</issue>
<issue
id="HardcodedText"
severity="Warning"
message="Hardcoded string &quot;30 fps&quot;, should use `@string` resource"
category="Internationalization"
priority="5"
summary="Hardcoded text"
explanation="Hardcoding text attributes directly in layout files is bad for several reasons:&#xA;&#xA;* When creating configuration variations (for example for landscape or portrait) you have to repeat the actual text (and keep it up to date when making changes)&#xA;&#xA;* The application cannot be translated to other languages by just adding new translations for existing string resources.&#xA;&#xA;There are quickfixes to automatically extract this hardcoded string into a resource lookup."
errorLine1=" android:text=&quot;30 fps&quot; />"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/layout/activity_main.xml"
line="214"
column="21"/>
</issue>
<issue
id="HardcodedText"
severity="Warning"
message="Hardcoded string &quot;60 fps&quot;, should use `@string` resource"
category="Internationalization"
priority="5"
summary="Hardcoded text"
explanation="Hardcoding text attributes directly in layout files is bad for several reasons:&#xA;&#xA;* When creating configuration variations (for example for landscape or portrait) you have to repeat the actual text (and keep it up to date when making changes)&#xA;&#xA;* The application cannot be translated to other languages by just adding new translations for existing string resources.&#xA;&#xA;There are quickfixes to automatically extract this hardcoded string into a resource lookup."
errorLine1=" android:text=&quot;60 fps&quot; />"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
file="/home/duffy/Dokumente/programmierung/android-smartscreen-cast/app/src/main/res/layout/activity_main.xml"
line="221"
column="21"/>
</issue>
</issues>
@@ -0,0 +1,116 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - Class de.duffy.screencast.MuxerTest</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<h1>Class de.duffy.screencast.MuxerTest</h1>
<div class="breadcrumbs">
<a href="../index.html">all</a> &gt;
<a href="../packages/de.duffy.screencast.html">de.duffy.screencast</a> &gt; MuxerTest</div>
<div id="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox" id="tests">
<div class="counter">3</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox" id="failures">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox" id="ignored">
<div class="counter">0</div>
<p>ignored</p>
</div>
</td>
<td>
<div class="infoBox" id="duration">
<div class="counter">0.037s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success" id="successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<div id="tabs">
<ul class="tabLinks">
<li>
<a href="#tab0">Tests</a>
</li>
<li>
<a href="#tab1">Standard output</a>
</li>
</ul>
<div id="tab0" class="tab">
<h2>Tests</h2>
<table>
<thead>
<tr>
<th>Test</th>
<th>Duration</th>
<th>Result</th>
</tr>
</thead>
<tr>
<td class="success">crcMatchesKnownMpegValue</td>
<td class="success">0.001s</td>
<td class="success">passed</td>
</tr>
<tr>
<td class="success">fragmentedMp4IsPlayable</td>
<td class="success">0.013s</td>
<td class="success">passed</td>
</tr>
<tr>
<td class="success">transportStreamIsPlayable</td>
<td class="success">0.023s</td>
<td class="success">passed</td>
</tr>
</table>
</div>
<div id="tab1" class="tab">
<h2>Standard output</h2>
<span class="code">
<pre>codec=avc1.42C01E frames=60
</pre>
</span>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="http://www.gradle.org">Gradle 8.9</a> at 22.08.2026, 19:55:58</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - Class de.duffy.screencast.ServerTest</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<h1>Class de.duffy.screencast.ServerTest</h1>
<div class="breadcrumbs">
<a href="../index.html">all</a> &gt;
<a href="../packages/de.duffy.screencast.html">de.duffy.screencast</a> &gt; ServerTest</div>
<div id="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox" id="tests">
<div class="counter">3</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox" id="failures">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox" id="ignored">
<div class="counter">0</div>
<p>ignored</p>
</div>
</td>
<td>
<div class="infoBox" id="duration">
<div class="counter">0.739s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success" id="successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<div id="tabs">
<ul class="tabLinks">
<li>
<a href="#tab0">Tests</a>
</li>
<li>
<a href="#tab1">Standard output</a>
</li>
</ul>
<div id="tab0" class="tab">
<h2>Tests</h2>
<table>
<thead>
<tr>
<th>Test</th>
<th>Duration</th>
<th>Result</th>
</tr>
</thead>
<tr>
<td class="success">browserReceivesPlayableFragmentedMp4</td>
<td class="success">0.206s</td>
<td class="success">passed</td>
</tr>
<tr>
<td class="success">playerPageIsServed</td>
<td class="success">0.003s</td>
<td class="success">passed</td>
</tr>
<tr>
<td class="success">vlcReceivesPlayableTransportStream</td>
<td class="success">0.530s</td>
<td class="success">passed</td>
</tr>
</table>
</div>
<div id="tab1" class="tab">
<h2>Standard output</h2>
<span class="code">
<pre>MPEG-TS lieferte 28576 Bytes -&gt; /tmp/claude-1000/-home-duffy-Dokumente-programmierung-android-smartscreen-cast/c1b7fa49-14aa-479b-b195-64b432a37f12/scratchpad/muxout/http.ts
Feeder fertig: 60 von 60 Frames eingespeist
Empfangen: 60 Fragmente (+Init), 39697 Bytes von 60 Frames
WebSocket lieferte 39697 Bytes -&gt; /tmp/claude-1000/-home-duffy-Dokumente-programmierung-android-smartscreen-cast/c1b7fa49-14aa-479b-b195-64b432a37f12/scratchpad/muxout/websocket.mp4
</pre>
</span>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="http://www.gradle.org">Gradle 8.9</a> at 22.08.2026, 19:55:58</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,96 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - Class de.duffy.screencast.miracast.MiracastDirectionTest</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<h1>Class de.duffy.screencast.miracast.MiracastDirectionTest</h1>
<div class="breadcrumbs">
<a href="../index.html">all</a> &gt;
<a href="../packages/de.duffy.screencast.miracast.html">de.duffy.screencast.miracast</a> &gt; MiracastDirectionTest</div>
<div id="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox" id="tests">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox" id="failures">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox" id="ignored">
<div class="counter">0</div>
<p>ignored</p>
</div>
</td>
<td>
<div class="infoBox" id="duration">
<div class="counter">1.826s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success" id="successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<div id="tabs">
<ul class="tabLinks">
<li>
<a href="#tab0">Tests</a>
</li>
</ul>
<div id="tab0" class="tab">
<h2>Tests</h2>
<table>
<thead>
<tr>
<th>Test</th>
<th>Duration</th>
<th>Result</th>
</tr>
</thead>
<tr>
<td class="success">sourceListensAndStartsHandshakeWhenTvCallsIn</td>
<td class="success">1.826s</td>
<td class="success">passed</td>
</tr>
</table>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="http://www.gradle.org">Gradle 8.9</a> at 22.08.2026, 19:55:58</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,128 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - Class de.duffy.screencast.miracast.MiracastTest</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<h1>Class de.duffy.screencast.miracast.MiracastTest</h1>
<div class="breadcrumbs">
<a href="../index.html">all</a> &gt;
<a href="../packages/de.duffy.screencast.miracast.html">de.duffy.screencast.miracast</a> &gt; MiracastTest</div>
<div id="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox" id="tests">
<div class="counter">5</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox" id="failures">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox" id="ignored">
<div class="counter">0</div>
<p>ignored</p>
</div>
</td>
<td>
<div class="infoBox" id="duration">
<div class="counter">0.806s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success" id="successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<div id="tabs">
<ul class="tabLinks">
<li>
<a href="#tab0">Tests</a>
</li>
<li>
<a href="#tab1">Standard output</a>
</li>
</ul>
<div id="tab0" class="tab">
<h2>Tests</h2>
<table>
<thead>
<tr>
<th>Test</th>
<th>Duration</th>
<th>Result</th>
</tr>
</thead>
<tr>
<td class="success">ceaMaskIsParsedAndBestFormatChosen</td>
<td class="success">0s</td>
<td class="success">passed</td>
</tr>
<tr>
<td class="success">fallsBackWhenSinkOnlySupportsSmallFormats</td>
<td class="success">0.001s</td>
<td class="success">passed</td>
</tr>
<tr>
<td class="success">fullHandshakeAndStream</td>
<td class="success">0.801s</td>
<td class="success">passed</td>
</tr>
<tr>
<td class="success">onlyOneFormatBitIsAnnouncedBack</td>
<td class="success">0.001s</td>
<td class="success">passed</td>
</tr>
<tr>
<td class="success">rejectsWhenNoCommonFormat</td>
<td class="success">0.003s</td>
<td class="success">passed</td>
</tr>
</table>
</div>
<div id="tab1" class="tab">
<h2>Standard output</h2>
<span class="code">
<pre>Handshake-Ablauf: M1 OPTIONS | M2 Antwort 200 | M3 GET_PARAMETER | M4 SET_PARAMETER | M5 SETUP | M6 Antwort 200
Über RTP empfangen: 39292 Bytes in 72 Paketen, 0 Sequenzlücken
Datei: /tmp/claude-1000/-home-duffy-Dokumente-programmierung-android-smartscreen-cast/c1b7fa49-14aa-479b-b195-64b432a37f12/scratchpad/muxout/miracast.ts
</pre>
</span>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="http://www.gradle.org">Gradle 8.9</a> at 22.08.2026, 19:55:58</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,179 @@
body {
margin: 0;
padding: 0;
font-family: sans-serif;
font-size: 12pt;
}
body, a, a:visited {
color: #303030;
}
#content {
padding-left: 50px;
padding-right: 50px;
padding-top: 30px;
padding-bottom: 30px;
}
#content h1 {
font-size: 160%;
margin-bottom: 10px;
}
#footer {
margin-top: 100px;
font-size: 80%;
white-space: nowrap;
}
#footer, #footer a {
color: #a0a0a0;
}
#line-wrapping-toggle {
vertical-align: middle;
}
#label-for-line-wrapping-toggle {
vertical-align: middle;
}
ul {
margin-left: 0;
}
h1, h2, h3 {
white-space: nowrap;
}
h2 {
font-size: 120%;
}
ul.tabLinks {
padding-left: 0;
padding-top: 10px;
padding-bottom: 10px;
overflow: auto;
min-width: 800px;
width: auto !important;
width: 800px;
}
ul.tabLinks li {
float: left;
height: 100%;
list-style: none;
padding-left: 10px;
padding-right: 10px;
padding-top: 5px;
padding-bottom: 5px;
margin-bottom: 0;
-moz-border-radius: 7px;
border-radius: 7px;
margin-right: 25px;
border: solid 1px #d4d4d4;
background-color: #f0f0f0;
}
ul.tabLinks li:hover {
background-color: #fafafa;
}
ul.tabLinks li.selected {
background-color: #c5f0f5;
border-color: #c5f0f5;
}
ul.tabLinks a {
font-size: 120%;
display: block;
outline: none;
text-decoration: none;
margin: 0;
padding: 0;
}
ul.tabLinks li h2 {
margin: 0;
padding: 0;
}
div.tab {
}
div.selected {
display: block;
}
div.deselected {
display: none;
}
div.tab table {
min-width: 350px;
width: auto !important;
width: 350px;
border-collapse: collapse;
}
div.tab th, div.tab table {
border-bottom: solid #d0d0d0 1px;
}
div.tab th {
text-align: left;
white-space: nowrap;
padding-left: 6em;
}
div.tab th:first-child {
padding-left: 0;
}
div.tab td {
white-space: nowrap;
padding-left: 6em;
padding-top: 5px;
padding-bottom: 5px;
}
div.tab td:first-child {
padding-left: 0;
}
div.tab td.numeric, div.tab th.numeric {
text-align: right;
}
span.code {
display: inline-block;
margin-top: 0em;
margin-bottom: 1em;
}
span.code pre {
font-size: 11pt;
padding-top: 10px;
padding-bottom: 10px;
padding-left: 10px;
padding-right: 10px;
margin: 0;
background-color: #f7f7f7;
border: solid 1px #d0d0d0;
min-width: 700px;
width: auto !important;
width: 700px;
}
span.wrapped pre {
word-wrap: break-word;
white-space: pre-wrap;
word-break: break-all;
}
label.hidden {
display: none;
}
@@ -0,0 +1,84 @@
#summary {
margin-top: 30px;
margin-bottom: 40px;
}
#summary table {
border-collapse: collapse;
}
#summary td {
vertical-align: top;
}
.breadcrumbs, .breadcrumbs a {
color: #606060;
}
.infoBox {
width: 110px;
padding-top: 15px;
padding-bottom: 15px;
text-align: center;
}
.infoBox p {
margin: 0;
}
.counter, .percent {
font-size: 120%;
font-weight: bold;
margin-bottom: 8px;
}
#duration {
width: 125px;
}
#successRate, .summaryGroup {
border: solid 2px #d0d0d0;
-moz-border-radius: 10px;
border-radius: 10px;
}
#successRate {
width: 140px;
margin-left: 35px;
}
#successRate .percent {
font-size: 180%;
}
.success, .success a {
color: #008000;
}
div.success, #successRate.success {
background-color: #bbd9bb;
border-color: #008000;
}
.failures, .failures a {
color: #b60808;
}
.skipped, .skipped a {
color: #c09853;
}
div.failures, #successRate.failures {
background-color: #ecdada;
border-color: #b60808;
}
ul.linkList {
padding-left: 0;
}
ul.linkList li {
list-style: none;
margin-bottom: 5px;
}
@@ -0,0 +1,173 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - Test Summary</title>
<link href="css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="css/style.css" rel="stylesheet" type="text/css"/>
<script src="js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<h1>Test Summary</h1>
<div id="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox" id="tests">
<div class="counter">12</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox" id="failures">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox" id="ignored">
<div class="counter">0</div>
<p>ignored</p>
</div>
</td>
<td>
<div class="infoBox" id="duration">
<div class="counter">3.408s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success" id="successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<div id="tabs">
<ul class="tabLinks">
<li>
<a href="#tab0">Packages</a>
</li>
<li>
<a href="#tab1">Classes</a>
</li>
</ul>
<div id="tab0" class="tab">
<h2>Packages</h2>
<table>
<thead>
<tr>
<th>Package</th>
<th>Tests</th>
<th>Failures</th>
<th>Ignored</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tbody>
<tr>
<td class="success">
<a href="packages/de.duffy.screencast.html">de.duffy.screencast</a>
</td>
<td>6</td>
<td>0</td>
<td>0</td>
<td>0.776s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="packages/de.duffy.screencast.miracast.html">de.duffy.screencast.miracast</a>
</td>
<td>6</td>
<td>0</td>
<td>0</td>
<td>2.632s</td>
<td class="success">100%</td>
</tr>
</tbody>
</table>
</div>
<div id="tab1" class="tab">
<h2>Classes</h2>
<table>
<thead>
<tr>
<th>Class</th>
<th>Tests</th>
<th>Failures</th>
<th>Ignored</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tbody>
<tr>
<td class="success">
<a href="classes/de.duffy.screencast.MuxerTest.html">de.duffy.screencast.MuxerTest</a>
</td>
<td>3</td>
<td>0</td>
<td>0</td>
<td>0.037s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="classes/de.duffy.screencast.ServerTest.html">de.duffy.screencast.ServerTest</a>
</td>
<td>3</td>
<td>0</td>
<td>0</td>
<td>0.739s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="classes/de.duffy.screencast.miracast.MiracastDirectionTest.html">de.duffy.screencast.miracast.MiracastDirectionTest</a>
</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>1.826s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="classes/de.duffy.screencast.miracast.MiracastTest.html">de.duffy.screencast.miracast.MiracastTest</a>
</td>
<td>5</td>
<td>0</td>
<td>0</td>
<td>0.806s</td>
<td class="success">100%</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="http://www.gradle.org">Gradle 8.9</a> at 22.08.2026, 19:55:58</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,194 @@
(function (window, document) {
"use strict";
var tabs = {};
function changeElementClass(element, classValue) {
if (element.getAttribute("className")) {
element.setAttribute("className", classValue);
} else {
element.setAttribute("class", classValue);
}
}
function getClassAttribute(element) {
if (element.getAttribute("className")) {
return element.getAttribute("className");
} else {
return element.getAttribute("class");
}
}
function addClass(element, classValue) {
changeElementClass(element, getClassAttribute(element) + " " + classValue);
}
function removeClass(element, classValue) {
changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
}
function initTabs() {
var container = document.getElementById("tabs");
tabs.tabs = findTabs(container);
tabs.titles = findTitles(tabs.tabs);
tabs.headers = findHeaders(container);
tabs.select = select;
tabs.deselectAll = deselectAll;
tabs.select(0);
return true;
}
function getCheckBox() {
return document.getElementById("line-wrapping-toggle");
}
function getLabelForCheckBox() {
return document.getElementById("label-for-line-wrapping-toggle");
}
function findCodeBlocks() {
var spans = document.getElementById("tabs").getElementsByTagName("span");
var codeBlocks = [];
for (var i = 0; i < spans.length; ++i) {
if (spans[i].className.indexOf("code") >= 0) {
codeBlocks.push(spans[i]);
}
}
return codeBlocks;
}
function forAllCodeBlocks(operation) {
var codeBlocks = findCodeBlocks();
for (var i = 0; i < codeBlocks.length; ++i) {
operation(codeBlocks[i], "wrapped");
}
}
function toggleLineWrapping() {
var checkBox = getCheckBox();
if (checkBox.checked) {
forAllCodeBlocks(addClass);
} else {
forAllCodeBlocks(removeClass);
}
}
function initControls() {
if (findCodeBlocks().length > 0) {
var checkBox = getCheckBox();
var label = getLabelForCheckBox();
checkBox.onclick = toggleLineWrapping;
checkBox.checked = false;
removeClass(label, "hidden");
}
}
function switchTab() {
var id = this.id.substr(1);
for (var i = 0; i < tabs.tabs.length; i++) {
if (tabs.tabs[i].id === id) {
tabs.select(i);
break;
}
}
return false;
}
function select(i) {
this.deselectAll();
changeElementClass(this.tabs[i], "tab selected");
changeElementClass(this.headers[i], "selected");
while (this.headers[i].firstChild) {
this.headers[i].removeChild(this.headers[i].firstChild);
}
var h2 = document.createElement("H2");
h2.appendChild(document.createTextNode(this.titles[i]));
this.headers[i].appendChild(h2);
}
function deselectAll() {
for (var i = 0; i < this.tabs.length; i++) {
changeElementClass(this.tabs[i], "tab deselected");
changeElementClass(this.headers[i], "deselected");
while (this.headers[i].firstChild) {
this.headers[i].removeChild(this.headers[i].firstChild);
}
var a = document.createElement("A");
a.setAttribute("id", "ltab" + i);
a.setAttribute("href", "#tab" + i);
a.onclick = switchTab;
a.appendChild(document.createTextNode(this.titles[i]));
this.headers[i].appendChild(a);
}
}
function findTabs(container) {
return findChildElements(container, "DIV", "tab");
}
function findHeaders(container) {
var owner = findChildElements(container, "UL", "tabLinks");
return findChildElements(owner[0], "LI", null);
}
function findTitles(tabs) {
var titles = [];
for (var i = 0; i < tabs.length; i++) {
var tab = tabs[i];
var header = findChildElements(tab, "H2", null)[0];
header.parentNode.removeChild(header);
if (header.innerText) {
titles.push(header.innerText);
} else {
titles.push(header.textContent);
}
}
return titles;
}
function findChildElements(container, name, targetClass) {
var elements = [];
var children = container.childNodes;
for (var i = 0; i < children.length; i++) {
var child = children.item(i);
if (child.nodeType === 1 && child.nodeName === name) {
if (targetClass && child.className.indexOf(targetClass) < 0) {
continue;
}
elements.push(child);
}
}
return elements;
}
// Entry point.
window.onload = function() {
initTabs();
initControls();
};
} (window, window.document));
@@ -0,0 +1,113 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - Package de.duffy.screencast</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<h1>Package de.duffy.screencast</h1>
<div class="breadcrumbs">
<a href="../index.html">all</a> &gt; de.duffy.screencast</div>
<div id="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox" id="tests">
<div class="counter">6</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox" id="failures">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox" id="ignored">
<div class="counter">0</div>
<p>ignored</p>
</div>
</td>
<td>
<div class="infoBox" id="duration">
<div class="counter">0.776s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success" id="successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<div id="tabs">
<ul class="tabLinks">
<li>
<a href="#tab0">Classes</a>
</li>
</ul>
<div id="tab0" class="tab">
<h2>Classes</h2>
<table>
<thead>
<tr>
<th>Class</th>
<th>Tests</th>
<th>Failures</th>
<th>Ignored</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">
<a href="../classes/de.duffy.screencast.MuxerTest.html">MuxerTest</a>
</td>
<td>3</td>
<td>0</td>
<td>0</td>
<td>0.037s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="../classes/de.duffy.screencast.ServerTest.html">ServerTest</a>
</td>
<td>3</td>
<td>0</td>
<td>0</td>
<td>0.739s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="http://www.gradle.org">Gradle 8.9</a> at 22.08.2026, 19:55:58</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,113 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - Package de.duffy.screencast.miracast</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<h1>Package de.duffy.screencast.miracast</h1>
<div class="breadcrumbs">
<a href="../index.html">all</a> &gt; de.duffy.screencast.miracast</div>
<div id="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox" id="tests">
<div class="counter">6</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox" id="failures">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox" id="ignored">
<div class="counter">0</div>
<p>ignored</p>
</div>
</td>
<td>
<div class="infoBox" id="duration">
<div class="counter">2.632s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success" id="successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<div id="tabs">
<ul class="tabLinks">
<li>
<a href="#tab0">Classes</a>
</li>
</ul>
<div id="tab0" class="tab">
<h2>Classes</h2>
<table>
<thead>
<tr>
<th>Class</th>
<th>Tests</th>
<th>Failures</th>
<th>Ignored</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">
<a href="../classes/de.duffy.screencast.miracast.MiracastDirectionTest.html">MiracastDirectionTest</a>
</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>1.826s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="../classes/de.duffy.screencast.miracast.MiracastTest.html">MiracastTest</a>
</td>
<td>5</td>
<td>0</td>
<td>0</td>
<td>0.806s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="http://www.gradle.org">Gradle 8.9</a> at 22.08.2026, 19:55:58</p>
</div>
</div>
</body>
</html>