Skip to content

Releases: Glenn-Dandy/fullscreendy

FullScreendy v0.4.12

Choose a tag to compare

@Glenn-Dandy Glenn-Dandy released this 19 Oct 21:06

Weitere Umsetzung aus der F-Droid-Review, danke an @linsui, @mezinster, @sookoothaii1
und @gitubpatrice.

Das WebView fragt nicht mehr bei Google nach

Android schaltet in jedem WebView standardmäßig Safe Browsing ein: Die gerade
aufgerufene Adresse geht dabei an Googles Safe-Browsing-Dienst. Für ein Wandtablet, das ein
Dashboard im eigenen Netz zeigt, bringt das nichts und gibt interne Adressen preis. Jetzt
ist es aus, über android.webkit.WebView.EnableSafeBrowsing im Manifest und zusätzlich über
safeBrowsingEnabled = false am WebView selbst. Dazu kommt
android.webkit.WebView.MetricsOptOut, womit auch die WebView-Nutzungsstatistik entfällt.

Nachgemessen auf einem frischen Android 15: Vor der Einrichtung hat die App keine einzige
Verbindung offen, danach genau eine, nämlich den Dashboard-Host.

Kleinigkeit

  • Store-Beschreibung: Die Zeile „All files access" war seit der SAF-Umstellung in 0.4.10
    falsch und beschreibt nun die Ordnerauswahl.

Drei aufeinanderfolgende clean-Builds liefern byte-identische APKs
(SHA-256 2cf860567c91353ab2c20629eb9b970d60c08feb5845eed79cb50bdf38831291).

Signiert (CN=FullScreendy), installiert als Update über v0.4.x.


More work from the F-Droid review, thanks to @linsui, @mezinster, @sookoothaii1 and @gitubpatrice.

The WebView no longer asks Google

Android turns on Safe Browsing in every WebView by default: the address being opened is sent to Google's Safe Browsing service. For a wall tablet showing a dashboard on your own network that brings nothing and gives away internal addresses. It is now off, via android.webkit.WebView.EnableSafeBrowsing in the manifest and additionally via safeBrowsingEnabled = false on the WebView itself. On top of that, android.webkit.WebView.MetricsOptOut drops the WebView usage statistics too.

Measured on a fresh Android 15: before setup the app has not a single connection open, afterwards exactly one, to the dashboard host.

Small change

  • Store description: the line „All files access“ had been wrong since the SAF switch in 0.4.10 and now describes the folder picker.

Three consecutive clean builds produce byte-identical APKs (SHA-256 2cf860567c91353ab2c20629eb9b970d60c08feb5845eed79cb50bdf38831291).

Signed (CN=FullScreendy), installs as an update over v0.4.x.

FullScreendy v0.4.11

Choose a tag to compare

@Glenn-Dandy Glenn-Dandy released this 05 Oct 15:34

Weitere Umsetzung aus der F-Droid-Review, danke an @linsui, @mezinster und
@gitubpatrice.

Update-Prüfung ist ab Werk aus

Die Über-Seite fragt api.github.com nur noch nach, wenn du „Nach Updates suchen"
antippst. Wer es automatisch möchte, schaltet unter Einstellungen → System
„Automatisch nach Updates suchen" ein. Im Auslieferungszustand spricht die App damit
ausschließlich mit dem Dashboard und dem MQTT-Broker, die du eingerichtet hast.

Weniger Berechtigungen beim Start

Beim ersten Start wird nur noch die Benachrichtigungs-Berechtigung abgefragt, die der
Vordergrund-Dienst braucht. Kamera und Mikrofon gehören zu optionalen Funktionen
(Bewegungserkennung, Wecken bei Ton, Sprachsteuerung) und werden dort erfragt, wo man sie
einschaltet: in den Einstellungen.

Kleinigkeiten

  • requestLegacyExternalStorage aus dem Manifest entfernt, seit der SAF-Umstellung in
    0.4.10 ohne Funktion.
  • Der README-Abschnitt zu Updates beschrieb noch den in 0.4.9 entfernten In-App-Download.

Zwei aufeinanderfolgende clean-Builds liefern weiterhin byte-identische APKs.

Signiert (CN=FullScreendy), installiert als Update über v0.4.x.


More work from the F-Droid review, thanks to @linsui, @mezinster and @gitubpatrice.

Update check is off by default

The About page only contacts api.github.com when you tap „Check for updates“. If you want it automatic, switch on „Check for updates automatically“ under Settings → System. Out of the box the app therefore talks only to the dashboard and the MQTT broker you set up.

Fewer permissions at start

On first start the app only asks for the notification permission the foreground service needs. Camera and microphone belong to optional features (motion detection, wake on sound, voice control) and are requested where you switch those on: in the settings.

Small changes

  • Removed requestLegacyExternalStorage from the manifest, it has had no effect since the SAF switch in 0.4.10.
  • The README section on updates still described the in-app download removed in 0.4.9.

Two consecutive clean builds still produce byte-identical APKs.

Signed (CN=FullScreendy), installs as an update over v0.4.x.

FullScreendy v0.4.10

Choose a tag to compare

@Glenn-Dandy Glenn-Dandy released this 23 Sep 22:27

Umsetzung aus der F-Droid-Review – danke an @linsui und @gitubpatrice für die
gründliche Prüfung.

Keine Speicher-Berechtigung mehr

Der Ordner mit den Tondateien wird jetzt unter Einstellungen → Töne über die
Android-Ordnerauswahl (Storage Access Framework) freigegeben. Die App bekommt damit
genau diesen einen Ordner und sonst nichts — MANAGE_EXTERNAL_STORAGE und
READ_EXTERNAL_STORAGE sind vollständig entfallen, im APK steht keine
Storage-Berechtigung mehr.

  • Abspielen wie gehabt: cmd/mediaplay ding.mp3, Unterordner mit /
  • Ohne Auswahl nutzt die App ihren eigenen Ordner
    (Android/data/de.kewl.fullscreendy/files/sounds)
  • Nach dem Update einmalig den Ordner neu auswählen, wer Töne nutzt

Hinweis an der Dashboard-URL

Die aktuelle URL wird als retained MQTT-Reading veröffentlicht. Am Eingabefeld steht
jetzt, dass Zugangsdaten in die Login-Felder gehören und nicht in die URL — dort landeten
sie sonst im Klartext beim Broker.

Zwei aufeinanderfolgende clean-Builds liefern weiterhin byte-identische APKs.

Signiert (CN=FullScreendy) – installiert als Update über v0.4.x.


Changes from the F-Droid review, thanks to @linsui and @gitubpatrice for the thorough check.

No storage permission any more

The folder with the sound files is now granted under Settings → Sounds through the Android folder picker (Storage Access Framework). The app gets exactly this one folder and nothing else: MANAGE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE are gone completely, the APK no longer contains any storage permission.

  • Playback as before: cmd/mediaplay ding.mp3, subfolders with /
  • Without a selection the app uses its own folder (Android/data/de.kewl.fullscreendy/files/sounds)
  • If you use sounds, pick the folder once again after the update

Note at the dashboard URL

The current URL is published as a retained MQTT reading. The input field now says that credentials belong in the login fields and not in the URL, where they would otherwise reach the broker in plain text.

Two consecutive clean builds still produce byte-identical APKs.

Signed (CN=FullScreendy), installs as an update over v0.4.x.

FullScreendy v0.4.9

Choose a tag to compare

@Glenn-Dandy Glenn-Dandy released this 20 Aug 21:23

Ein Build für alle Bezugswege. Die App lädt und installiert keine APKs mehr selbst:
Die Über-Seite prüft weiterhin auf neue Versionen und verlinkt die Release-Seite –
installiert wird über den Browser oder künftig über F-Droid.

Damit entfällt die Berechtigung „Unbekannte Apps installieren"
(REQUEST_INSTALL_PACKAGES) vollständig, und es gibt statt zweier Varianten wieder genau
ein APK: dasselbe, das F-Droid nachbaut und gegen dieses Release verifiziert.

Zwei aufeinanderfolgende clean-Builds liefern byte-identische APKs – zusammen mit dem
in 0.4.8 abgeschalteten dependenciesInfo ist damit die Grundlage für reproduzierbare
Builds gelegt.

An den Funktionen der App ändert sich nichts.

Signiert (CN=FullScreendy) – installiert als Update über v0.4.x.


One build for every channel. The app no longer downloads and installs APKs itself: the About page still checks for new versions and links to the release page, installing happens through the browser or, later on, through F-Droid.

This drops the „Install unknown apps“ permission (REQUEST_INSTALL_PACKAGES) completely, and instead of two variants there is exactly one APK again: the same one F-Droid rebuilds and verifies against this release.

Two consecutive clean builds produce byte-identical APKs. Together with dependenciesInfo, switched off in 0.4.8, this lays the groundwork for reproducible builds.

Nothing changes in what the app does.

Signed (CN=FullScreendy), installs as an update over v0.4.x.

FullScreendy v0.4.8

Choose a tag to compare

@Glenn-Dandy Glenn-Dandy released this 20 Aug 21:12

Reines Build-Release, an der App selbst ändert sich nichts gegenüber
v0.4.7.

Android Gradle Plugin bettet standardmäßig einen von Google signierten, verschlüsselten
Metadatenblock über die verwendeten Abhängigkeiten ins APK. Der sieht bei jedem Build
anders aus und macht reproduzierbare Builds unmöglich – mit denen sich nachweisen
lässt, dass die veröffentlichte App wirklich aus dem hier liegenden Quellcode entstanden
ist. Der Block wird jetzt weggelassen (dependenciesInfo).

Gegenprobe: Zwei aufeinanderfolgende clean-Builds liefern byte-identische APKs.

Welches APK?

  • FullScreendy-0.4.8-release.apk – die normale Variante mit In-App-Update. Die willst du.
  • FullScreendy-0.4.8-fdroid.apk – dieselbe App ohne Updater und ohne die Berechtigung
    zum Installieren von Apps. Liegt hier, damit F-Droid den eigenen Build dagegen
    verifizieren kann.

Beide signiert (CN=FullScreendy) – installieren als Update über v0.4.x.


A pure build release, the app itself is unchanged from v0.4.7.

By default the Android Gradle Plugin embeds an encrypted metadata block about the dependencies used, signed by Google, into the APK. It looks different on every build and makes reproducible builds impossible, the kind that prove the published app really was built from the source code here. The block is now left out (dependenciesInfo).

Cross-check: two consecutive clean builds produce byte-identical APKs.

Which APK?

  • FullScreendy-0.4.8-release.apk: the normal variant with in-app update. This is the one you want.
  • FullScreendy-0.4.8-fdroid.apk: the same app without updater and without the permission to install apps. It is here so F-Droid can verify its own build against it.

Both signed (CN=FullScreendy), install as an update over v0.4.x.

FullScreendy v0.4.7

Choose a tag to compare

@Glenn-Dandy Glenn-Dandy released this 20 Aug 20:29

Kleines Release: PIN-Schutz ist ab Werk aus – auf einem Wandtablet zuhause stört die
Abfrage bei jedem Handgriff mehr, als sie nützt. Wer sie will, schaltet sie unter
System ein; bestehende Installationen behalten ihre Einstellung.

Der Rest ist Vorbereitung für F-Droid:

  • Neue Flavor-Dimension distribution: github (dieses APK) mit In-App-Update,
    fdroid ohne Updater und ohne REQUEST_INSTALL_PACKAGES – dort aktualisiert F-Droid.
  • Ohne keystore.properties wird keine Signier-Konfiguration mehr angelegt: Der Build
    läuft durch und liefert ein unsigniertes APK, statt zu scheitern.
  • Gradle-Wrapper liegt jetzt im Repo, die Distribution ist über distributionSha256Sum
    festgenagelt; vcsInfo bleibt aus dem Release-APK (reproduzierbare Builds).
  • Rezept in fdroid/ und Fastlane-Metadaten samt Screenshots in fastlane/.

Bau-Befehle heißen jetzt assembleGithubRelease bzw. assembleFdroidRelease.

Signiert (CN=FullScreendy) – installiert als Update über v0.4.x.


A small release: PIN protection is off by default. On a wall tablet at home, being asked at every touch gets in the way more than it helps. If you want it, switch it on under System; existing installations keep their setting.

The rest prepares for F-Droid:

  • New flavor dimension distribution: github (this APK) with in-app update, fdroid without updater and without REQUEST_INSTALL_PACKAGES, where F-Droid handles updates.
  • Without keystore.properties no signing config is created any more: the build runs through and produces an unsigned APK instead of failing.
  • The Gradle wrapper is now in the repo, the distribution is pinned via distributionSha256Sum; vcsInfo stays out of the release APK (reproducible builds).
  • Recipe in fdroid/ and Fastlane metadata including screenshots in fastlane/.

Build commands are now assembleGithubRelease and assembleFdroidRelease.

Signed (CN=FullScreendy), installs as an update over v0.4.x.

FullScreendy v0.4.6

Choose a tag to compare

@Glenn-Dandy Glenn-Dandy released this 19 Aug 23:38

Stabiles Release – bündelt alles seit v0.4.5.

Mehrere Dashboards (bis zu 3)

  • Einstellungen → Dashboards mit Reitern Dashboard 1 / 2 / 3 und „+ Hinzufügen".
    Je Dashboard: Anzeigename, URL, eigener Login (HTTP Basic Auth) und eigene
    Zertifikats-Einstellung – so lassen sich auch verschiedene Server mischen.
  • Ein Dashboard ist das Standard-Dashboard (Stern): Es wird beim Start und nach
    jedem Aufwecken des Bildschirms wieder angezeigt.
  • Das Seitenmenü listet die Dashboards zum Umschalten auf.
  • MQTT: neuer Befehl cmd/dashboard (1–3 oder Name, Alias db) sowie die Readings
    dashboard und dashboardName.
  • Bestehende Einstellungen aus 0.4.5 werden automatisch zu Dashboard 1 migriert.

Behoben: Pull-to-Refresh löste beim Hochscrollen aus

Beim Scrollen nach oben lud die Seite neu, sobald der Seitenanfang erreicht war.
Jetzt wird beim Aufsetzen des Fingers einmal entschieden: Hochscrollen stoppt oben,
und erst ein neu begonnener Zug von oben nach unten lädt neu – mit längerem Zieh-Weg,
damit es nicht aus Versehen passiert. (Danke @schwatter für den Hinweis, #1)

Sprachsteuerung im Dashboard (#1)

Die WebView lehnte bisher jede getUserMedia()-Anfrage still ab (NotAllowedError) –
die Android-Berechtigung allein genügt dafür nicht.

  • Neue Karte Einstellungen → Verhalten → Mikrofon mit einer Auswahl:
    Nichts / Wecken bei Ton / Sprachsteuerung im Dashboard. Bewusst eine Auswahl statt
    zweier Schalter – das Mikrofon kann immer nur einen Nutzer bedienen.
  • Fehlende Mikrofon-Berechtigung lässt sich direkt dort anfordern; läuft das Dashboard über
    http://, wird gewarnt (ohne Secure Context gibt es gar kein getUserMedia).
  • JS-Brücke: Die Android-WebView hat kein speechSynthesis. Dashboard-Seiten können
    die Sprachausgabe deshalb direkt anfordern:
    fullscreendy.textToSpeech("Der Keller ist zu kalt");
    fullscreendy.stopSpeech();
  • In tools/ liegen ein Patch für das FHEM-Wiki-Skript VoiceControl: Web-STT und
    webcheck.js, ein Diagnose-Panel für FHEMWEB.

Bedienung

  • PIN-Schutz abschaltbar (System): Einstellungen ohne PIN-Abfrage.
  • Einstellungen neu sortiert: Dashboards zuerst, Verbindung enthält nur noch MQTT/Topics.
  • Modernere Menüs: Karten, Icon-Zeilen, Seitenmenü mit MQTT-Status und Gruppen,
    Titelleiste mit Zurück-Pfeil.
  • Über-Seite neu: App-Icon, App-/Android-Version, IP und Geräte-ID, Update-Download mit
    Prozent-Fortschritt sowie Links zu Stern auf GitHub, Quellcode und Projekt unterstützen.

Signiert (CN=FullScreendy) – installiert als Update über v0.4.x.


Stable release, bundling everything since v0.4.5.

Several dashboards (up to 3)

  • Settings → Dashboards with tabs Dashboard 1 / 2 / 3 and „+ Add“. Per dashboard: display name, URL, its own login (HTTP Basic Auth) and its own certificate setting, so different servers can be mixed.
  • One dashboard is the default dashboard (star): it is shown at start and again after every wake-up of the screen.
  • The side menu lists the dashboards for switching.
  • MQTT: new command cmd/dashboard (1 to 3 or a name, alias db) and the readings dashboard and dashboardName.
  • Existing settings from 0.4.5 are migrated to Dashboard 1 automatically.

Fixed: pull-to-refresh triggered while scrolling up

Scrolling up reloaded the page as soon as the top was reached. Now the decision is made once when the finger touches down: scrolling up stops at the top, and only a newly started pull from top to bottom reloads, with a longer pull distance so it doesn't happen by accident. (Thanks @schwatter for the hint, #1)

Voice control in the dashboard (#1)

Until now the WebView silently refused every getUserMedia() request (NotAllowedError); the Android permission alone is not enough.

  • New card Settings → Behavior → Microphone with one choice: Nothing / Wake on sound / Voice control in dashboard. Deliberately one choice instead of two switches: the microphone can only serve one user at a time.
  • A missing microphone permission can be requested right there; if the dashboard runs over http://, you get a warning (without a secure context there is no getUserMedia at all).
  • JS bridge: the Android WebView has no speechSynthesis. Dashboard pages can therefore request speech output directly:
    fullscreendy.textToSpeech("Der Keller ist zu kalt");
    fullscreendy.stopSpeech();
  • tools/ contains a patch for the FHEM wiki script VoiceControl: Web-STT and webcheck.js, a diagnostic panel for FHEMWEB.

Usability

  • PIN protection can be switched off (System): settings without a PIN prompt.
  • Settings reordered: Dashboards first, Connection now only holds MQTT/topics.
  • More modern menus: cards, icon rows, side menu with MQTT status and groups, title bar with back arrow.
  • New About page: app icon, app and Android version, IP and device ID, update download with percentage progress, and links to Star on GitHub, Source code and Support the project.

Signed (CN=FullScreendy), installs as an update over v0.4.x.

FullScreendy v0.4.5

Choose a tag to compare

@Glenn-Dandy Glenn-Dandy released this 21 Jul 21:57

Stabiles Release – bündelt alle Verbesserungen seit v0.4.3.

Dauerbetrieb & Diagnose

  • Behebt den LOW_MEMORY-Tod (App morgens da, abends „nicht aufweckbar"): largeHeap, WebView-Speicher wird bei Druck freigegeben, periodischer Dashboard-Reload (Standard 6 h), Kamera-Analyse mit kleiner Auflösung.
  • UI-Auto-Wiederherstellung nach einem Kill (Berechtigung „Über anderen Apps anzeigen").
  • specialUse-Foreground-Service statt dataSync (Android-15-Timeout umgangen) + optionale Akku-Optimierungs-Ausnahme.
  • Diagnose: MQTT-Reading lastExit + Log mit Speicher-Trend.

Neue Funktionen

  • Android 9 (API 28): läuft jetzt auch auf Android 9 / Fire OS 7 / Fire HD (minSdk 29 → 28).
  • Dashboard-Login: optionale Benutzer/Passwort-Felder (HTTP Basic Auth, z. B. FHEM basicAuth) – kein user:pass@ in der URL mehr nötig.
  • Selbst-signierte HTTPS-Zertifikate zulassen (für lokales FHEM-HTTPS), standardmäßig aus.
  • In-App-Update: Prüfen/Herunterladen/Installieren direkt über die Über-Seite.

Bedienung & Fehlerbehebungen

  • Auto-Speichern der Einstellungen (kein Speichern-Button mehr).
  • Aufwecken ohne Android-Wischcode und ohne weißen Blitz / Hintergrundbild.
  • Getrennte Zeiten für Abdunkeln und Bildschirm ausschalten.
  • Berechtigungs-Buttons mit Live-Status (✓); grüner MQTT-Punkt entfernt.

Signiert (CN=FullScreendy). Ab v0.3.2 andere Signatur als frühere Debug-Builds → ggf. alte Version vorher deinstallieren.


Stable release, bundling all improvements since v0.4.3.

Long-term operation and diagnostics

  • Fixes the LOW_MEMORY death (app there in the morning, „can't be woken“ in the evening): largeHeap, WebView memory is released under pressure, periodic dashboard reload (default 6 h), camera analysis at low resolution.
  • Automatic UI recovery after a kill (permission „Display over other apps“).
  • specialUse foreground service instead of dataSync (avoids the Android 15 timeout) plus an optional battery optimisation exemption.
  • Diagnostics: MQTT reading lastExit and a log with memory trend.

New features

  • Android 9 (API 28): now also runs on Android 9 / Fire OS 7 / Fire HD (minSdk 29 → 28).
  • Dashboard login: optional user and password fields (HTTP Basic Auth, e.g. FHEM basicAuth), no more user:pass@ in the URL.
  • Allow self-signed HTTPS certificates (for local FHEM HTTPS), off by default.
  • In-app update: check, download and install directly from the About page.

Usability and fixes

  • Settings save automatically (no more save button).
  • Wake-up without the Android swipe code and without a white flash or background image.
  • Separate times for dimming and turning the screen off.
  • Permission buttons with live status (✓); green MQTT dot removed.

Signed (CN=FullScreendy). From v0.3.2 on the signature differs from earlier debug builds, so uninstall the old version first if needed.