Releases: SysAdminDoc/OpenTasker
Release list
OpenTasker v0.2.93
OpenTasker v0.2.93 removes the exposed development signing key from the repository and rotates the APK to a private external signing identity. It also includes the refreshed adaptive icon source package.
Important: uninstall v0.2.92 before installing this release. Android won't accept the new signing identity as an in-place update.
The APK passed unit tests, Android lint, signature verification, installation, and a cold-launch check on Android 15.
OpenTasker v0.2.92 (withdrawn)
The v0.2.92 APK was removed because its signing key was publicly available. Install v0.2.93 instead.
If v0.2.92 is installed, uninstall it first. v0.2.93 uses a new signing identity and Android won't accept it as an in-place update.
v0.2.91
A new OT launcher mark with adaptive foreground, monochrome themed-icon support, density-specific legacy icons, a notification glyph, Play Store artwork, and a launch screen that stays crisp across Android launcher masks.
The app shell and every main destination now share one navy, cyan, and AMOLED design system.
Profiles opens directly on its search and automation rows.
OpenTasker v0.2.90
Imported "Run only if" guards now hold at runtime on flow-control actions, and they survive a Tasker XML export.
v0.2.89 made the importer keep an action's guard, but the engine still ignored that guard on flow control. An imported "Stop If" stopped its task unconditionally; the condition sat in the data and never ran. The engine checks the guard for ordinary actions in one place and dispatches flow-control markers before it, which is why only these actions were affected.
What changed:
- An unmet guard now skips the control action instead of aborting. Stop falls through to the next action, For and Try skip their whole block, and End For exits the loop, matching what Tasker does when a guarded action is skipped.
- An If with a guard that differs from its own test applies both, and a guard the importer copied into the If's test field still evaluates exactly once. A guarded Else now runs as Tasker's Else If: its branch only executes when the If was false and the guard holds.
- The dry-run preflight preview simulates the same rules, so what the preview shows is what the engine does.
- Tasker XML export writes the guard back as the ConditionList element real Tasker exports use, so a guarded action round-trips instead of coming back unconditional. A guard that can't fit Tasker's single comparison shape is dropped with a warning rather than exported wrong, and one containing a secret value is omitted like every other sensitive field.
If you still run v0.2.79 or earlier, uninstall first (those builds were signed with a key that no longer exists).
OpenTasker v0.2.89
Tasker imports now keep their "Run only if" guards. The importer fix was contributed by felalex in #13.
Real Tasker exports attach an action's guard as a ConditionList element, and the importer never read it. Guarded actions came in unconditional, and an If action's own test degraded to the literal "true" with no warning. In one real backup that touched 118 of 210 actions, most of them ordinary actions like Set Variable rather than flow control.
What changed:
- The importer parses ConditionList into OpenTasker's condition syntax, covering string and numeric comparisons plus Is Set and Not Set. The parsed condition also lands in flow.if's editor field, so an imported If no longer opens with a blank required field or re-exports as "true".
- Imported Matches and Doesn't Match conditions run through the linear-time RE2 engine with the same length bounds as every other runtime-built pattern, and the parser requires whitespace around ~ and !~ so a literal tilde in a value can't break an unrelated comparison.
- A multi-condition list, an unknown operator, or a regex Matches guard (which imports as a plain wildcard match) now reports a lossy import warning instead of degrading silently.
There was no v0.2.88 release build published; this release supersedes it and carries all of its changes too. If you still run v0.2.79 or earlier, uninstall first (those builds were signed with a key that no longer exists).
OpenTasker v0.2.87
A complete visual redesign for the ten main workspaces. Profiles, Tasks, Variables, Flow, Scenes, Inspector, Setup, Run Log, Diagnostics, and Settings now share a compact true-black hierarchy with clearer navigation, denser rows, contextual secondary actions, and consistent full-width primary controls. Includes updated accessibility semantics, visual references, emulator comparisons, and refreshed store screenshots.
OpenTasker v0.2.86
Critical reliability release.
- Restores task execution on Android by fixing the ICU-incompatible TaskRunner regex.
- Fixes guided-template crashes by packaging automation input fields in the APK.
- Prevents database deadlocks, unrelated event matches, secret deletion, NFC task stacking, and unsafe failed-download replacement.
- Adds a release-time audit for referenced OpenTasker classes missing from packaged DEX files.
OpenTasker v0.2.85
OpenTasker v0.2.85
A correctness and polish release. Every change below is in the app you install; the release build itself was also broken and is fixed.
Fixed
- The release build. Since the staged module split,
:appand eachcore/*module compiled the same source files, so every shared class existed twice. D8 tolerated that in debug builds, which is why it went unnoticed, but R8 rejects duplicate types and no release build had succeeded since. Exactly one copy of each class now ships. - Success messages no longer look like errors. Toggling a profile showed "Error: Profile enabled", as did removing an action, a context, or a scene element. Messages are passed as resources from the call site instead of matched by English string.
- Deleting a profile, task, or scene can be undone. Deletions bypassed the edit-history engine the app already uses for edits, so one dialog tap destroyed a task permanently. Deletes are now snapshotted and offer Undo, and the "cannot be undone" warning appears only where it is true.
- Setup no longer stalls on resume. The permission checklist ran
PackageManager,UsageStatsManager, andSettings.Securecalls inside composition, re-running the whole set every time you came back from a Settings screen. - Cold start no longer flashes the first-run screen. An empty list and an unread database looked identical, so Profiles, Tasks, and Scenes showed "Build your first automation" for the first frames even when you had data.
Added
- AMOLED black theme using true
#000000surfaces, so an OLED panel can switch pixels off. The previous dark scheme was#101211; it is unchanged and now named for what it is. Body text keeps 18.6:1 contrast on black. - Material You as an opt-in theme on Android 12+, following the system light/dark setting. It is not offered on older releases, where it would do nothing.
Changed
- Undo and Redo are disabled when there is nothing to undo, and say so to a screen reader, instead of being permanently live and answering with a snackbar.
- Profile and task lists reserve room for the floating action button, so it no longer covers the last row. Empty states scroll — at large font scale their last action could sit off-screen with no way to reach it.
- The action editor says where to enable a setup-gated action, not just what is missing. Elevated device actions point at Setup and Shizuku.
- Profile execution slots decide and store under one lock for every automation mode, not only Queued, so a second dispatch path cannot start a Single-mode profile twice or leave a superseded Restart job running untracked.
- The exported automation broadcast target answers status and name lookups with bounded queries instead of loading the whole profile and task tables inside its broadcast deadline.
- A setup item with no available action shows status text rather than a button that only reported the item was already ready.
Notes
- The APK is unsigned by the usual release identity and built from the tagged commit. If you installed a build signed with a different key, uninstall first.
- Store screenshots were re-captured for this version.
OpenTasker v0.2.67
Deep engineering audit — thread safety, correctness, UX, and design system hardening
Thread safety
ArrayStoreandVariableStorelocal scopes now useConcurrentHashMapto prevent crashes in parallel automation mode- WiFi/Connectivity monitor state and CameraMicContextEvents callbacks marked
@Volatile - AppOps watchers now properly unregistered on service destroy (was leaking)
Correctness fixes
- HTTP response decoding no longer corrupts multi-byte UTF-8 characters at read boundaries
- Brightness auto mode correctly sets
SCREEN_BRIGHTNESS_MODEinstead of writing-1 - Screen timeout clamps to 30 min max to prevent integer overflow
- Sunrise/sunset calculator uses event-time DST offset instead of noon (fixes 1-hour error on DST transition days)
- Battery level and charging state seeded at service start so battery-based profiles match immediately
- TTS action guards against double-resume crash from racing callbacks
- Flow graph card handles missing profile node gracefully
Safety
- Vibration capped at 10 seconds
- Queued task depth per profile capped at 50 to prevent unbounded memory growth
- Database backup uses
TRUNCATEWAL checkpoint for safer consistency - Notification PendingIntent request codes use hash to prevent overflow
UX & design
- Disabled element overlay fixed for light theme (was drawing black)
- Warning color changed from green to warm amber/peach
- Navigation icons have accessibility labels
- Card radius consolidated into design system token (
Radii.xxl)
OpenTasker v0.2.0
Full UI layer with database integration, action editor, and context picker. Profiles, tasks, and actions can now be created, edited, and deleted with persistence. All 43 actions have dynamic form generation. Contexts are fully configurable with all 6 families supported.