Releases: arduinodude456/appdock.koplugin
Release list
AppDock 4.3.0 — Simple Mode
AppDock 4.3.0 — Simple Mode
Simple Mode
AppDock now offers a dedicated Simple category in Settings. Its three independent switches can be enabled separately and are saved locally.
- Simple homescreen hides the greeting, status cards, store widgets, search field and background content. It leaves an apps-only 4×3 grid and does not schedule hidden widget refreshes.
- Simple quick settings shows only Wi-Fi, Night, Save power and the brightness slider. Notifications and inbox actions are omitted.
- Quick find limits the visible AppDock selection to Settings, File Browser, DReader, Library, BookTranslator and the Internet Browser. Hidden app pins are preserved and return when the switch is disabled.
Splitscreen feedback
The split divider now updates both pane sizes and the visible divider while it is dragged. Each changed drag position requests a bounded fast E-Ink refresh and yields to the display controller; the final position is persisted when the finger is released.
Verification
The release was checked with Lua 5.1 syntax validation, byte-identical root/package mirrors, the AppDock DApp regression suite, Simple-Mode configuration and UI contracts, live split refresh behavior, compact geometry, lifecycle handling and formatting validation.
AppDock 4.2.4 — Stability
AppDock 4.2.4 — Stability
Fundamentaler Splitscreen-Fix
Der Splitscreen-Mittelstreifen verwendet keine eigene Unterwidget-Geste mehr. Stattdessen empfängt der dauerhafte DApp-Host jede Pan- und Pan-Release-Geste über eine breite, absolute Touchzone um die aktuelle Trennposition. Die Steuerung ist damit unabhängig von der vorherigen Zugrichtung und bleibt bei Aufwärts- wie Abwärtsbewegungen am selben Host gebunden.
Web Browser
Der Browser importiert die zentrale Theme-Hilfe jetzt explizit. Dadurch ist Theme.fitLabel beim Aufbau der Browser-Aktionsbuttons verfügbar und der Startcrash durch eine fehlende globale Theme-Referenz ist behoben.
Validierung
Lua-5.1-Syntax, Root-/Paketspiegel, Browserstart und die DApp-Core-Regression wurden ausgeführt. Die Splitter-Regression prüft die breite Host-Touchzone, Bewegungen nach unten und oben, positionsloses Loslassen, Persistenz und den DApp-Lebenszyklus.
AppDock 4.2.3 — Split
AppDock 4.2.3 — Split
Zuverlässiges Ziehen in beide Richtungen
Während eines Ziehvorgangs bleibt der Splitscreen-Mittelstreifen jetzt am gleichen Gestenobjekt gebunden. Dadurch kann die Teilung zuerst nach unten und anschließend wieder nach oben verschoben werden, bevor der Finger losgelassen wird.
Stabilerer Neuaufbau
AppDock aktualisiert die Split-Teilung während der Pan-Geste nur intern und zeichnet die betroffene Region schnell nach. Der aufwändigere Host-Neuaufbau wird genau einmal beim Loslassen ausgeführt. Das verhindert, dass eine laufende Geste ihren Divider durch einen Zwischen-Neuaufbau verliert.
Validierung
Lua-5.1-Syntax, Root-/Paketspiegel und die DApp-Core-Regression wurden ausgeführt. Die Splitter-Regression deckt nun Abwärts- und anschließende Aufwärtsbewegung innerhalb derselben Geste, positionsloses Loslassen, Persistenz und den fortlaufenden DApp-Lebenszyklus ab.
AppDock 4.2.2 — Controls
AppDock 4.2.2 — Controls
Dropdown-Menü
Die Textzeilen in den Quick-Settings-Kacheln liegen enger zusammen. Dadurch bleiben Symbol, Titel und Untertitel auch auf kleineren Geräten innerhalb der jeweiligen Kachel.
Splitscreen
Der sichtbare Mittelstreifen besitzt jetzt eine deutlich größere unsichtbare Touchzone. Ein Ziehen kann daher etwas oberhalb oder unterhalb des Streifens beginnen. Während des Ziehens merkt sich AppDock zudem die letzte gültige Y-Position und verwendet sie beim Loslassen, falls der Touch-Controller im Release-Ereignis keine Position liefert.
Validierung
Die Korrektur wurde mit Lua-5.1-Syntaxprüfung, Root-/Paketspiegelvergleich und der DApp-Core-Regression geprüft. Der Test deckt neben dem Ziehen nun auch die breite Touchzone sowie den positionslosen Release-Fallback ab.
AppDock 4.2.1 — Layout
AppDock 4.2.1 — Layout
Saubere Beschriftungen im gesamten System
AppDock nutzt jetzt eine zentrale, UTF-8-sichere Ein-Zeilen-Kürzung für lange UI-Texte. Beschriftungen werden innerhalb ihres Controls mit einer Auslassung gekürzt, statt mehrzeilig umgebrochen, unter einen Button geschoben oder über benachbarte Elemente gezeichnet zu werden.
Betroffene Oberflächen
Die Korrektur deckt die DApp-Host-Aktionen und Recents-Karten, Einstellungszeilen und Kategorien, Quick-Settings-Kacheln und Benachrichtigungen, Homescreen-Kacheln und Infokarten, Dateimanager-Toolbar und Dateizeilen, AppStore-Karten, Browser-Toolbar sowie Speicherübersichten ab.
Kompakte Panegrößen
Schriftgrößen, Innenabstände und Titel-/Untertitel-Offsets orientieren sich jetzt an der tatsächlichen Kontrollhöhe. Dadurch bleiben auch reduzierte Splitscreen-Panes lesbar und die Touchflächen unverändert erreichbar.
Validierung
Lua-5.1-Syntax, Root-/Paketspiegelgleichheit, die bestehende DApp-Regression und neue Tests für einzeilige UTF-8-Kürzung sowie schmale Controls wurden vor dem Release ausgeführt.
AppDock 4.2.0 — Navigation
AppDock 4.2.0 — Navigation
Adjustable split screen
Split screen now includes a visible horizontal divider. Drag the divider up or down to resize both DApp panes. AppDock maintains safe minimum pane heights and saves the final valid divider position for the next split-screen session.
Android-style system navigation
The three system actions have moved out of the top-left title area. Home, Open Apps, and Close are now grouped in a centered navigation bar at the bottom of every DApp host. The DApp content region ends above this bar, so its controls do not overlap running DApps.
Validation
The core regression suite covers the lower navigation placement, drag and release gestures, bounded resizing, persistence, active DApp continuity, root/package mirror equality, and Lua 5.1 syntax.
AppDock 4.1.1 — Plugin Host Widget Bridge
AppDock 4.1.1 „Bueno"
AppDock 4.1.1 improves the opt-in Plugin-in-DApp beta host. When a hosted plugin action synchronously opens a standard menu, confirmation dialog, information message, or input dialog, AppDock now captures the widget request and presents it as a local AppDock overlay inside the active plugin host.
For text entry, the overlay shows the current value and opens an AppDock-created text editor. Saving transfers the value back to the original plugin dialog object, so existing plugin callbacks can still read it through their normal interface. Dynamic Text editor-style menus continue to use the local adapter; AppStore-style direct actions retain their existing launch behavior.
This is a compatibility bridge, not a global replacement of KOReader's widget framework. Complex standalone plugin windows, asynchronously created third-party widgets, and plugins that bypass the hosted action path remain outside the bridge and may continue to use their own UI. Plugin hosts still cannot enter split screen.
Verification
- All twelve existing AppDock Lua regression scripts pass under Lua 5.1.
- Plugin-host regressions cover dynamic Text editor menus, AppStore-style actions, standard dialogs, information messages, input-dialog capture, callback preservation, host return, and split-screen rejection.
- Package and root module mirrors are verified byte-for-byte before packaging.
AppDock 4.1.0 Bueno
AppDock 4.1.0 „Bueno"
AppDock 4.1.0 expands the JavaScript-free Web Browser DApp with safe rendering for static images in server-rendered HTML pages.
Static image rendering
The browser now discovers img elements, resolves relative and protocol-relative sources against the current page, and fetches supported HTTP(S) images into a controlled temporary local cache. The rendered HTML is rewritten to reference only generated local filenames, and KOReader’s ScrollHtmlWidget receives that cache as its resource directory. MuPDF can therefore render local image resources without receiving arbitrary network or device paths from the original document.
Supported formats are PNG, JPEG, GIF and WebP when the server declares an image/* response and a supported raster type. CSS constrains rendered images to the readable width of the Browser pane.
Safety and E-Ink limits
| Boundary | Limit |
|---|---|
| Per page | At most 8 images and 5 MiB of total image bytes. |
| Per image | At most 1.5 MiB, using the existing request timeout and redirect limit. |
| Sources | HTTP(S), relative, and protocol-relative sources only. data:, javascript:, local paths, SVG, active media, and unsupported response types are excluded. |
| Fallback | Unavailable, oversized, blocked, or unsupported images are rendered as safe Alt text so the article remains readable. |
| Lifecycle | Image files are removed on page replacement, Home, and closing the Web Browser DApp. |
JavaScript, WebSockets, forms, downloads, embedded media, and arbitrary local file access remain unavailable. This continues to be a reading-oriented browser rather than a full web platform.
Verification
Regression coverage verifies relative and protocol-relative image URLs, local resource rewriting, cache handoff to ScrollHtmlWidget, data: rejection, cleanup on Home and session close, plus existing navigation, redirect, search, and HTML-sanitization behavior. The full Lua 5.1 syntax check and complete AppDock regression suite passed.
AppDock 4.0.2 Bueno
AppDock 4.0.2 „Bueno“
This patch repairs the remaining central mistake in the 4.0 Plugin-in-DApp Beta: opening a plugin tile created an AppDock host but left the user on a passive action list, even when the original KOReader plugin had exactly one primary action that normally starts immediately.
Direct single-action plugin start
After an AppDock plugin-host session is fully constructed, AppDock now checks its published main-menu actions. When there is exactly one action, it invokes that action on KOReader’s next UI cycle. The host has already been registered in Open apps at that point, so it remains a non-splittable AppDock session while the plugin opens its own UI.
| Real plugin | 4.0.2 behavior |
|---|---|
| Text editor | Its sole dynamic root menu opens immediately. The local TouchMenu adapter then supports the plugin’s item_table, page, and updateItems() lifecycle for settings, file history, and the return from editing. |
| AppStore.koplugin | Its sole direct callback runs immediately after the host opens, starting the AppStore browser without requiring a second AppDock tap. |
Boundaries retained
Plugin hosts remain excluded from split screen at every entry point. A plugin with multiple published actions still opens an explicit AppDock action list; AppDock does not guess which action to run. AppDock also does not rewrite third-party widgets into panes: buildAppDockPane(context) remains the opt-in contract for a true local plugin-owned pane.
Verification
The regression suite now covers the complete host-open-to-action path for a real Text editor-style dynamic root menu and for an AppStore-style direct callback, in addition to the previous dynamic-menu, notification, Open Apps, lifecycle, and split-screen checks. The complete Lua 5.1 syntax and existing AppDock test suite passed.
AppDock 4.0.1 Bueno
AppDock 4.0.1 „Bueno“
This patch release repairs the Plugin-in-DApp Beta introduced with 4.0.0 for two real KOReader plugin contracts.
Fixed plugin menu lifecycle
The core KOReader Text editor plugin exposes a dynamic sub_item_table_func. Its actions expect a TouchMenu-like argument with item_table, page, and updateItems(): it uses that object when creating or closing an editor to rebuild its dynamic history and settings menu. The AppDock plugin host now supplies a local compatibility adapter with those three responsibilities. Dynamic menus are therefore rebuilt inside the host instead of failing because the expected menu object was absent.
The external AppStore.koplugin entry is a direct callback that opens its own browser widget. The host now closes its temporary action menu first and starts that callback on KOReader’s next UI cycle. This removes the competing-menu timing that could prevent the plugin browser from appearing.
Boundaries retained
The patch preserves the 4.0.0 safety and hardware-independent boundaries. Plugin host sessions remain non-splittable, existing generic callbacks remain supported, AppDock notifications are used for host errors, and AppDock does not globally intercept or rewrite arbitrary third-party plugin dialogs. A plugin that exposes buildAppDockPane(context) remains the only contract for a true plugin-owned local pane.
Verification
Regression coverage now includes a Text editor-style dynamic menu that resets item_table, restores page 1, and calls updateItems(), plus an AppStore-style direct callback that runs after the AppDock host menu closes. The full Lua 5.1 syntax check and existing AppDock regression suite passed after the fix.