Widgets of other apps used to fill their cells minus Launcher3's widget
padding, which is a few pixels wider than the icons' edges and reaches down
into the room kept for icon labels; on the owner's phone they hung about
13 px past the icons sideways and 40 px below. Now the room a widget keeps in
its cells is the distance from the cell edges to the icon edges, worked out
as IconFrame does for the launcher's own widgets, so every widget's edges
meet the edges of the icons around it.
The one function (FlexeraWidgets.appWidgetPadding) is used for the layout,
for the size the app is told, for the drop animation and through
WidgetSizes for previews. The cells a widget needs are still worked out
with Launcher3's padding, so no widget changes its cell count. A new switch
under Settings, Home screen, Widgets ("Line up with icons", on by default)
turns it off; Lawnchair's Widget padding slider shows only then.
Checked on the emulator against lines drawn at the icon edges: Google
Calendar's widgets meet them within 2 px; Google Clock's sits about 20 px
inside, because it draws an empty margin of its own.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The app used to be started only once the black page had settled, and then
came in with Android's zoom. Now it is started the moment the swipe is
decided, while the page is still settling, with FLAG_ACTIVITY_NO_ANIMATION
and the same intent as its icon, so it appears on the page at full size as
soon as it has a frame. An app still in memory shows its last screen at
once. Apps of another profile still go through LauncherApps, which takes no
flags, and open with the usual animation.
On the emulator, lift to first app frame went from 646 ms to 140 ms
(Camera in memory), 684 ms to 248 ms (Camera closed), and 249 ms for Clock
in memory, which came up on its last screen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When a swipe past the first or the last home screen page is set to open an
app, the home screen no longer stretches. It moves aside with the finger, as
for a real page, an empty black page comes in from that edge, and the home
screen (icons and wallpaper) blurs and darkens the further it goes. Let go
past 40% of the width, or flick, and the page settles over the whole screen
and the app comes up on it; let go earlier and the home screen comes back.
Swipes set to other actions keep the stretch.
The home screen is moved with the drag layer's animation matrix, which does
not move touch coordinates, so the pages keep reading the same touch. The
blur is a second index on the folder blur's property in the depth controller.
The status bar icons turn light over the black page. Once the app is in
front the launcher stops and the page resets; if nothing comes within 1.5 s
the home screen slides back.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Labels: each layer's pin now sits on its outer rounded corner, the
layer's rightmost point, so a tag straight across from it is joined by
a short line that crosses nothing; the stack moves left by just enough
for the tags to fit, and the open stack is a little smaller so it keeps
clear of the chapter's heading. While the stack is open, scrolling walks
through the layers from the glass to the wallpaper: the one looked at
stays bright and its tag lights up cyan, the others dim (where the tags
are shown). Chapter 8 is three screens long for it.
Centring: the labels' list sat in the stage's grid flow, so the grid
split its height into two rows and the story phone was centred in the
top one (about 100 px high on a 1146 px window). It is out of the flow
now; measured equal gaps above and below at 2000 x 1146, 1440 x 900
and 1280 x 720.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The separate Under the glass section is gone; its exploded phone is now
chapter 8 of How it works, so the pinned story phone carries straight
into it. After Out of sight the list closes, the drawn phone is swapped
for its layered double (the same home screen closed; measured at about
1-2% of pixels apart, from anti-aliasing), which tilts and comes apart,
holds, and goes back together before the section ends. The chapter is
two screens long and its text stays put meanwhile.
Labels redone: a column of numbered solid tags beside the stack, evenly
spaced, each joined by an elbow line to a dot on its layer's edge; the
stack moves left as it opens to make room. The glass sheen and the frame
now match the drawn phone, so the swap is not seen.
Also fixed: the layered phone sat at its full 414 px until first used,
which made the page wider than a phone and zoomed it out; it is scaled
from the start, and on phones the story stage clips. The story now
counts its progress in chapter heights rather than window heights,
which drifted apart on phones when the address bar hides. The long
chapter's height lost to the general chapter rule; it now wins.
Section numbers close up (Details 02 to Get it 06); the page alphabet's
U leads to the new chapter.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The flowing bands of light on a canvas behind the hero are gone (markup,
styles, code and the README line); the hero keeps its dark background
with the grid and the two soft glows. The link-preview image is retaken
without them.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Wave headline: the hero's letters swell from weight 560 to 900 around
the mouse (a wave rolls through on its own without one).
- Page alphabet: one letter per section on the right edge, like the
launcher's; hover shows the wave and a bubble, drag jumps between
sections, tap scrolls there; on phones it appears while scrolling.
Blended so it reads on dark, cyan and violet sections.
- Detail cards are switches now: left-handed alphabet, compact/comfy
rows and four icon shapes, applied to every phone on the page.
- Under the glass: a new section where the phone pulls apart into its
layers (wallpaper, widgets, icons, app list, glass) with labels.
- Race: a new section; find an app in a shuffled grid of 40, then in the
list with the wave alphabet, timed. The list phone reuses the
playground controller, locked to the list. The phone comes on screen
before the clock starts.
- Living wallpaper: light bands on a canvas behind the hero.
- Magnetic buttons and a finger cursor over the phones (desktop only).
- Easter eggs: scrub to F in the playground, or type "flexera".
- A vibration tick per letter while scrubbing, on phones that have it.
- 40 generic apps instead of 29; the alphabet now sits from the bottom.
- Fixed: the alphabet's magnifier had no size, so its 300 px svg box
covered the list once the alphabet moved to the left and took taps.
Reduced motion stops everything that moves on its own. Checked in
Chrome at 1440 x 900 and 390 x 844: no console errors or sideways
scrolling, every playground gesture, the camera chapter without flash,
each switch, both eggs, a full race, and the QR code as drawn.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Updates section of About is now a card with the status on top and
the next step as a full-width filled button: Check for updates, Download
and install, Install now, or Try again. Before, each step was a plain
settings row that looked like every other row.
Download and install hands the APK to Android's installer as soon as the
download is done, without another tap. If Android first wants this app
to be allowed to install apps, its setting opens, and the installer
follows by itself when the owner comes back having allowed it. The
request is kept on disk for 30 minutes, so it survives Android ending
the process in between but does not pop an installer up hours later.
Tested on the emulator with a release build numbered 0.12.9: check,
download with progress, the Install unknown apps setting, the installer
opening by itself on return, and the update to 0.13.0 from the server.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The sections now meet with a plain change of colour: the white rule at
the bottom of the hero, story, details, privacy, playground and download
sections is gone, as is the white edge of the marquee bands (the tilted
pink band keeps a dark edge where it crosses the cyan one) and the white
line under the menu bar once the page scrolls. Lines inside sections
(cards, stats, FAQ) stay.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Unbounded is a variable font whose letters are built from overlapping
shapes; an outline (text-stroke) traces every overlap, which drew stray
lines inside the hero's giant FLEXERA and the story's chapter number.
Both are now a faint solid fill (the hero's with a cyan-to-violet tint).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The camera now behaves as the page to the left of the first one: a swipe
right pushes the home screen (wallpaper included) to the right while the
camera follows the finger in from the left edge, and finishes the slide
when the finger lets go. Before, the home screen rubber-banded and the
camera was revealed by a clip from the edge. Same in the scroll story,
the playground gesture and its demo button; in the playground a short
swipe springs back, and a swipe left slides the camera out again.
The white flash at the end of the camera chapter was a shutter flash
over the whole screen; it read as a glitch while scrolling into the next
chapter. The shutter button now presses in instead.
Checked in Chrome: the camera chapters stepped through in 0.02 steps
show no brightness spike; the playground swipe in, swipe back, short
swipe and demo button; no console errors or sideways scrolling at
1440 x 900 and 390 x 844.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One page, English, plain HTML/CSS/JS with no build step and no third-party
requests: the four fonts (OFL) are served from the folder.
Brutal layout in the icon's colours (cyan, electric blue, violet, pink on
near black): hard 2px lines, solid slabs, offset shadows, marquee bands.
The centrepiece is a phone drawn in HTML at 390 x 844, used three times:
a looping teaser in the hero; a scroll-driven story of seven chapters
(home, swipe up, wave-alphabet scrub, folder blur, quick launch, clock
options, hide app) where the scroll position maps to a state, so it plays
both ways; and a playground that answers to touch and mouse (swipe up,
scrub, hold to hide with Undo, folder, quick launch, clock options, page
two, edge swipe home) plus buttons that run each demo.
Also: privacy section ("goes online for exactly two things"), download
with a QR code for the fixed-name latest APK, install steps, FAQ, link
preview image. Reduced motion shows each chapter's finished picture.
Checked in Chrome at 1440 x 900 and 390 x 844: no console errors, no
sideways scrolling, every playground gesture, and the QR as drawn scans.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hide app: a new entry in the menu a long press on an app opens in the app
list. It adds the app to Lawnchair's hidden list (hidden_apps), which the
list and its search already leave out and which Settings > App drawer >
Hidden apps already shows, so that page is where an app is brought back.
A message with Undo follows. The entry is offered in the app list only
(not for home screen icons, which hiding does not touch) and not while
the home screen is locked.
Preference collectors: five collectors in PreferenceManager2 (icon shape,
dock mode, dock on/off, dock search provider, labels in the dock) had
drop(1) before distinctUntilChanged. The first emission after the dropped
one then always passed, so the first write of any preference after the
launcher started reloaded the model, rebuilt the grid three times and
recreated the launcher. Hiding an app is such a write, made while the
launcher is on screen: the list went blank for a moment and the Undo
message was lost with the old activity. The operators are swapped, so
only a changed value passes.
Checked on the emulator: both menu layouts (labelled rows and the icon
row), hiding right after a fresh start (no relaunch in the log, message
stays), Undo, and unticking the apps under Hidden apps.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Folder blur: while a folder is open on the home screen, what is behind it
is blurred, icons and widgets through a RenderEffect and the wallpaper
through the launcher surface's background blur. It is a new input of the
depth controller (folderBlur, 0 to 1), because that controller already
owns both kinds of blur and cleared anything set past it on every frame
of the folder's wallpaper zoom. The folder's spring animation drives it in
step with the dimming, and the places that reset the dimming reset it too.
It works with the wallpaper depth effect switched off, without bringing
the folder's wallpaper zoom along. Setting: Folders > Blur behind open
folders, on by default (flexera_folder_blur). Folders in the app list are
left as they were.
Dock: with the dock switched off the hotseat has no height, but its icons
were still drawn just below the screen edge, and the 97.5% zoom-out behind
an open folder brought their tops into view. One more alpha channel on
the icons hides them.
Checked on the emulator (Android 17 image, window blur available): open,
close by tap outside, Back and Home, an app started from the folder, sleep
and wake, the setting off, and the depth effect off.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Weather: a clock for which the owner picks a place shows a third line, the
temperature and a word for the sky there. The place is looked up by name in the
clock's options; the data comes from Open-Meteo, which needs no account. It is
off until a place is picked, asks at most every 45 minutes while a clock with
weather is in view, sends only the place's coordinates rounded to about a
kilometre, and needs no location permission. The About screen's note on what
goes online says so.
Font weight: thin, light (as before), regular or bold figures.
Centring: the text stood in the middle of the icons' box, which lies in the
upper part of the widget's cells, so it looked too high inside the outline shown
while editing. It now stands in the middle of the widget's own cells, measured
on what is seen of the text.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
The first version filled its widget with the figures, which the owner found
huge. The figures are now measured against the icons: small is half an icon
tall, medium (the default) most of an icon, large taller than an icon, with the
widget's own height and width as the limit.
The owner chooses left, center or right and the size from the widget's edit
button. The options are a sheet over the home screen, kept per widget, and each
choice shows on the widget at once.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Clock is a second widget that comes with the launcher: the time in large light
figures and the date under it, written onto the wallpaper in the colour of the
icon labels. It follows the phone's 12 or 24 hour setting, updates with the
minute, and a tap opens the phone's clock app. Like Pictures it is drawn by the
launcher itself and keeps to the box of the icons in its cells.
What Pictures and Clock share moved into two places: IconFrame works out that
box, and FlexeraWidgets is where Launcher3's widget code asks about the
launcher's own widgets.
The QR code on the About screen now holds the address of the newest APK, so
that scanning it starts the download; the release page's address stays under it
for typing. For that address to work, the release script uploads each APK a
second time under a name that does not change.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
When the release build is the emulator's home app, Android restarts it while
the files are still being replaced, and that start can fail inside
ActivityThread.handleBindApplication. The start-up check now waits for the swap
to settle, stops the app, and judges a fresh start.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Swiping on from the first home screen page, towards the page that is not
there, now does what the owner chose under Settings, Gestures, Quick launch:
open an app, or any other of the launcher's gesture actions. The last page has
a choice of its own.
The stretch the pages already show at either end is an edge effect; quick
launch replaces it with one that also counts how far the finger has pulled.
Lifting the finger after a pull of about a seventh of the screen, or after a
flick, does the action; a short pull or one that is taken back does nothing.
An app opens out of the screen edge the finger pulled from.
From Android 12, where the stretch is Android's own. Infinite scrolling takes
those swipes for itself, so the two do not combine.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
On Android 17 an app that targets it may not connect to devices on the local
network without the new ACCESS_LOCAL_NETWORK permission; a blocked connection is
dropped and ends as a timeout. At the owner's home the update server's name
leads to its address on the home network, so the check for updates failed there
with "did not answer" while the same server answered every other device.
The updater now recognises this case before it connects (Android 17, permission
not granted, server address inside one of the phone's own network ranges) and
says so at once. A tap on that message asks for the permission and runs the
check again; a refusal that Android no longer asks about leads to the app's
page in the phone's settings.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Pictures is a widget that comes with the launcher: one picture, or several that
take turns every 10 seconds with a cross-fade (a tap shows the next at once).
Android knows it as an ordinary app widget, so it is added, moved, resized and
removed like any other, but the launcher draws it itself. That lets its frame
sit exactly on the outer edges of the icons of the cells it covers and take the
corners of the icon shape in use.
Pictures are chosen with Android's photo picker and copied, scaled down, into
the launcher's own storage, one folder per widget, so no gallery permission is
needed. The widget's edit button opens the picker again; removing the widget
deletes its copies.
Launcher3's widget host view shows the launcher's own view for this provider
and skips the views Android would send, and the cell container gives the widget
its cells without the usual inset.
The Smart Launcher import now turns that launcher's photo widget into a
Pictures widget in the same place. Its photo is taken from the backup and
handed to the widget when the owner taps it to set it up.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Opening the launcher like an app (the installer's "Open") and then making it
the home app leaves two launcher activities in one process. A changed setting
recreated whichever one LawnchairApp.launcher returned, which could be the one
in the background, so the home screen kept its old look until a restart.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Row size (Settings, App drawer, Style): Compact is the list as it was, Comfy
has taller rows, larger icons and slightly larger names and letter headers.
In the open drawer the alphabet no longer reserves the screen edge. Its letters
rest 30dp from the edge, clear of the strip where Android starts Back. A touch
that starts on that strip becomes a scrub once it moves up or down or rests for
a moment; a sideways swipe is left to Android and goes back. The band that
starts a scrub from the home screen is narrower than the one in the drawer.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
The owner's phone answered a manual check with "Couldn't reach the update server" while
the same published version found the update on the emulator and the server answered from
the PC. The message gave no way to tell a missing network permission from a VPN, a name
that does not resolve, or a server error.
- A failed check now carries what kind of failure it was (no network permission, server
not found, no answer, no secure connection, server error, unreadable answer) and the
error's own words. The About screen says the kind in plain words with what to try, and
shows the words under it as "Details".
- The no-permission case is told apart before any request is made; some Android systems
let the owner switch the network off per app.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Asked for by the owner on 12 November 2026, with one of their own backups to work from.
Import (Settings > Backup and restore > Import from Smart Launcher)
- A .slbk file is a zip of Smart Launcher's files. The importer reads its database
(HomeItem, Launchable, Action, Widget) and the grid from its preferences, and writes the
home screens as a Launcher3 database that Launcher3's restore code takes in, the way
Lawnchair's Nova import does. The format is not documented; this follows one real
backup of data version 64 and refuses a file without those tables.
- One to one, by the owner's decision: every icon, folder and widget in the cell it had, on
a grid of the same size, and the dock switched off because Smart Launcher has none.
Home screen labels follow the backup.
- Widgets arrive as "tap to set up". Android has each launcher ask for its own widgets and
keeps a widget's settings with the launcher that made it.
- Left out, and said so on the screen before the owner agrees: Smart Launcher's own widgets,
items of other profiles, anything without a usable target or free cells. Icons of apps
that are not installed are dropped by Launcher3 when it loads the layout.
- Settings are changed only after Launcher3 has accepted the layout, so a failed import
changes nothing.
- Entry names in the zip are not trusted: only the database and the preference files are
unpacked, each under a fixed name, with a size limit.
Fix in Launcher3 (WidgetSizeHandler)
- A widget waiting for "tap to set up" has an id Android has reserved but not bound.
Android 17 answers a size update for such an id with a NullPointerException, which ended
the launcher whenever the grid reloaded with such a widget on a home screen. Found
because the import first changed a setting that reloads the grid while the previous
layout still had unset widgets. The answer is now logged and dropped.
Checked on the Android 17 emulator: the owner's backup itself (two apps of it exist there
and land in their cells), a copy of its layout pointed at apps the emulator has (all 7
icons, 6 folders and 4 widgets in place, one widget set up through Android's dialog), and
two grid reloads with unset widgets on screen.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Three more requests from the owner on 12 November 2026.
Search field
- The field scrolls away with the list and comes back at the list's top, so the list has
the whole height once it is scrolled. The field is not turned into a list row. The list
now starts at the top of the drawer instead of under the field and keeps the field's room
as top padding (ActivityAllAppsContainerView.replaceAppsRVContainer and
AdapterHolder.applyPadding); FlexeraDrawer.moveSearchFieldWithList shifts the field by as
much as the list has scrolled, measured from the first row, and cuts it at the same line
the rows are cut at, the lower edge of the status bar.
- With work tabs, a hidden or a floating search field, and during a search, nothing changes.
Alphabet
- A magnifier above the letters stands for the search field. Scrubbing to it jumps the list
to its top; the bubble shows the magnifier. The stretch of edge kept for the strip grows
by one place for it.
- The strip measures its room from where the list's rows start, not from the list's top.
Chosen letter
- A scrub brings the letter's group to the middle of the screen, where the thumb is,
instead of to the top: the group's middle on the list's middle, a long group's header no
higher than 22% of the height. At either end of the list the list stops at its end, so
the first groups stay at the top and the last ones rest at the bottom.
Checked on the Android 17 emulator: scrolling by hand, scrubs to a middle letter, the last
letter and the magnifier, typing a search and leaving it, reopening after a scrub, the hold
and edge gestures, and a row's long-press menu.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
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>
Gradle prints compiler warnings on its error stream. When the script's output was piped or
sent to a file, PowerShell 5.1 took the first such line for an error and stopped the build
at step 2 (seen on the first 0.3.1 attempt). The streams are now merged inside cmd, and
only the exit code decides whether the build failed.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Two reports from first use on the Pixel 9a (PRD AD-5, AD-6, AD-17).
Swipe up and hold was slow to hand over to the alphabet:
- After the hold was noticed, the drawer was sent to its open state through the state
manager, which takes 600 ms, and the alphabet took the finger only after that, and then
only on the next touch movement. A finger held perfectly still never started it.
- Now the alphabet takes the finger's position in the same call that notices the hold, and
the drawer finishes opening under it by playing the swipe's own animation to its end in
120 ms.
- A still finger counts as holding after 150 ms instead of 300 (MotionPauseDetector gains
setForcePauseTimeout, reset by clear()), and the swipe has to travel 32dp instead of 72dp
before a hold counts.
- Because the list now jumps at once, a finger that lifts within 200 ms of the hold being
noticed is treated as an ordinary swipe that slowed down at its end: the scrub is undone
and the list stays where it was.
The selected letter sat under the thumb:
- The wave's peak was 52dp beyond the finger, about 8 mm, and a thumb hides about 11 mm to
each side of where it touches. It is now 104dp, and at least 96dp out from the edge.
- The peak may travel to within 36dp of the far edge (was 70% of the width), so the gap
holds when the finger is in the middle of the screen.
- A taller wave is wider (a third of its reach), so the neighbouring letters bend around
the thumb instead of vanishing under it.
- A soft dark spot behind the selected letter keeps it readable where it lands on an app
name or a light wallpaper.
Checked on the Android 17 emulator with touches injected at millisecond timing (a monkey
script) and a thumb-sized shape drawn over the screenshots.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
PRD AD-11, the last buildable row of M4.
- FlexeraNotificationPreview keeps the text of the notifications that currently show a
dot, fed by Launcher3's NotificationListener on its worker thread, and sets a second,
smaller and dimmer line on a drawer row whenever the row's dot state is applied.
- It uses what the dots already use: the same notification access and the same filter
for which notifications count. Without notification access nothing changes.
- PopupDataProvider now refreshes an app's icons on every posted notification, so a
notification updated in place brings its new text to the row.
- Only rows of the drawer list take the second line (marked with a view tag); search
result icons share the "all apps" display type but stay as they were.
- New setting under Settings > App drawer: Notification previews, on by default.
Checked on the Android 17 emulator (debug build): a test SMS showed under Messages,
a second one replaced it while the drawer was open, removing the notification put the
plain name back, and the setting switches the line off and on.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
First run (PRD SI-1)
- The request to become the default home app never appeared. Started from onResume, it
was still pending when the launcher finished resuming, and Quickstep cancels any
pending request at that point. It now starts from onDeferredResumed, after that
check, through Launcher3's own ApiWrapper.assignDefaultHomeRole.
Updater
- An automatic check that fails (phone offline, say) no longer leaves "couldn't reach
the update server" on the About screen. The screen keeps what it showed before, and
the check runs again in an hour. A check started by hand still reports the failure.
Checked on the Android 17 emulator with the 0.2.0 release build made before this commit:
swipe up and hold in gesture and in three-button navigation, the list darkening under
a wave that reaches in from the right edge, and the work profile tabs. The two changes
in this commit are not yet checked.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Release script
- The first 0.2.0 build crashed at start with NoSuchFieldError: $stable. Its Kotlin was
compiled incrementally on top of the 0.1.0 output after a preference class had changed,
the same fault seen earlier in debug builds. It was caught by hand before publishing.
- flexera/release.ps1 now deletes the release variant's Kotlin output and builds without
the build cache, so a release never reuses earlier compiled code.
- New step: install the APK on the running emulator, start it, and stop without
publishing if it crashes or is not running after 25 seconds. Installed copies update
themselves, so a release that crashes at start must not get out. -NoSmokeTest skips
the step on a machine without an emulator.
First run (PRD SI-1)
- The first time the launcher comes to the front while another app is the home app, it
asks Android to offer it as the default home app (FlexeraFirstRun). Asked once; if
declined, Launcher3's own hint and the reminder in settings remain.
Not yet checked on a device: the first-run prompt.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Scrub from home (PRD AD-10)
- New setting, off by default: a vertical slide along the alphabet's edge of the home
screen opens the drawer and scrubs it in the same touch (FlexeraEdgeScrubController).
It claims a touch only once it has clearly moved up or down, and never during an item
drag. Nothing is drawn on the home screen.
Work profile (PRD AD-14)
- The Personal and Work tabs and the work info card were one icon wide, because their
width came from grid maths that assumes several columns. In the one-column list they
now line up with the search bar.
- The info card's own scroller section no longer shows up as a letter in the alphabet.
Navigation modes (PRD SI-2, AD-17)
- With three-button navigation, the controller that carries swipe up and hold stood aside
completely, so a hold did nothing there. It now takes the ordinary swipe up from the
home screen in that mode too.
Wave alphabet
- The list darkens under the wave where the letters cross icons and names: always from
the left edge, and from the right edge in proportion to how far the wave reaches in.
Release script
- -BuildOnly builds and checks the APK without publishing, so a version can be tried
first and then published with -SkipBuild.
Checked on the Android 17 emulator (debug build): work tabs at full width, scrub from the
home screen's edge, the search field keeping its background while typing. The
three-button change and the right-edge darkening were written after that build and are
not yet checked.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>