Requests from the owner on 12 November 2026, after using 0.3.1 on the Pixel 9a, with a
photo of Niagara Launcher's alphabet as the reference.
Drawer list
- Rows are 50dp with 34dp icons and 15sp names (were 64dp, 46dp, 17sp); letter headers are
34dp. A row grows with a large system font so a notification preview still fits.
Alphabet
- Letters sit 20dp apart at most (was 30dp). The strip keeps a stretch of edge as tall as
26 letters, low on the edge with its end 40dp above the navigation bar, and centres the
letters that exist in it. It used to spread over the whole edge, which put "A" out of a
thumb's reach.
- The wave follows Niagara's: letters keep their size, the wave is wide (104dp) so about
five letters on each side of the finger curve around the thumb, and the selected letter
is shown large in a light bubble just beyond the wave's peak. This replaces the enlarged
letter on a dark spot from 0.3.1, which collided with its neighbours at this spacing.
- The list dims a little during any scrub, more where the wave lies over it.
Backdrop
- The drawer's scrim is black at 78% in every theme (AllAppsState). Lawnchair's grey at 40%
left a light grey behind white names over a light wallpaper. LawnchairScrimView judges the
status bar icons by the scrim's own colour again, since that colour is now always dark.
Scrub from the home screen (PRD AD-10)
- On by default, the owner's decision; this closes the PRD's open question.
- It opens the drawer in 120 ms instead of the state manager's 600 ms, like swipe up and hold.
- A touch that lifts within 200 ms was a flick and opens the plain list.
Fix: undoing a scrub that was not meant
- 0.3.1 put the list back to "where it was", read from the list's rows. A closed drawer has
been told to return to the top but lays its rows out only when it opens, so the rows
still reported the place the drawer was last left at, and a quick swipe reopened it
there. The list now goes where a plainly opened drawer stands.
About
- A QR code for the release page, generated on the phone with ZXing core (new dependency),
black on white in every theme, with the address under it.
Checked on the Android 17 emulator with timed touches, a thumb-sized shape over the
screenshots, a 1.6 font scale, and by decoding the QR code from a screenshot.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
The app is distributed privately, outside any store. Every version is published as a
release with the APK attached in https://git.mariosem.es/msemes/Flexera-Launcher-Releases,
and installed copies update themselves from there.
Versioning
- flexera/version.properties holds the version name (now 0.1.0); build.gradle derives the
version code from it. This replaces Lawnchair's 16_00_02_01_00 / "16.Dev.(hash)".
- Debug builds always use the debug key, so the release key signs releases only.
Updater (app.flexera.update.FlexeraUpdater)
- Asks the release repository for the latest release at most once a day, when the home
screen or settings come to the front, and on demand from Settings > About > Updates.
- Downloads the APK into the cache, checks that it is a newer build of this app, and
hands it to Android's installer. Android enforces the signature.
- Posts a notification when an automatic check finds a newer version.
- Off in debug builds, whose app ID differs from the released one.
Network policy (reverses PRD SI-5, at the owner's request for in-app updates)
- The INTERNET permission is back, plus REQUEST_INSTALL_PACKAGES.
- The update check is the only network use. Lawnchair's online features stay off through
FlexeraNetwork.onlineFeaturesAllowed: web suggestions, the announcement feed, and the
crash-report upload button.
- The About screen's privacy text says what the app now does online.
Releasing
- flexera/release.ps1 raises the version, builds the signed APK, checks its signature,
creates the release and uploads the APK.
Also carries the strings for the next commit (alphabet side and drawer settings).
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
PRD SI-5: nothing leaves the device.
- flexera/AndroidManifest.xml removes android.permission.INTERNET; it is attached to the
debug and release build types so it outranks flavor and library manifests
- FlexeraNetwork (new, flexera/src): isAvailable() plus a crash guard, because OkHttp
rethrows Android's SecurityException on its dispatcher thread and that killed the launcher
- Drawer search skips web suggestions when the permission is missing
- LawnchairApp installs the guard; the bug reporter ignores the same exception
Tested on the Android 17 emulator: typing in the drawer search and opening the About
screen no longer crash; the guard logged and absorbed six refused requests.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
- App ID com.sema.flexeralauncher (debug builds add .debug)
- App name Flexera Launcher and an adaptive icon built from the artwork in flexera/branding
- New overlay folder flexera/res, wired into the lawnWithQuickstepGithub source set,
so branding and defaults override Lawnchair's without editing its files
- Defaults switched off: At a Glance, Lawnchair's announcement feed, nightly updater
- English strings that named Lawnchair now say Flexera Launcher
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This commit reimplements support for app predictions without root.
---------
Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
Co-authored-by: TheSuperDragon <70206496+SuperDragonXD@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>