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>
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>
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>
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>
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>
PRD M3 (AD-4 to AD-6, AD-17), plus three look changes the owner asked for.
Wave alphabet
- WaveAlphabetView (flexera/src): a strip of letters on the drawer's end edge showing only
letters that have apps. Touching it jumps the list to that letter with a haptic tick; the
letters near the finger bulge away from the edge and reach further the further in the
finger moves; the selected letter is enlarged.
- The strip reserves the edge from the system back gesture and tells the drawer not to
drag closed under a scrub.
- Launcher3's scroll bar is hidden by default and no longer takes touches while hidden.
Swipe up and hold
- NoButtonNavbarToOverviewTouchController reuses its motion-pause detector on an ordinary
swipe up from the home screen: a pause finishes opening the drawer and hands the same
touch to the alphabet. Swipes that start on the navigation bar keep their stock meaning.
Look
- The drawer fades in over the home screen instead of sliding up from the bottom.
- No background panel or drag handle (drawer opacity default 0); the wallpaper keeps
Lawnchair's blur and scrim.
- App names, letter headers and alphabet letters are white with a soft shadow.
Tested on the Android 17 emulator: quick swipe opens the drawer, edge scrub jumps the
list, swipe up and hold opens the drawer and scrubs from mid-screen, Back closes it.
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>
* fix: Clear stuck workspace icon blur on home
Drop leftover All Apps RenderEffect from workspace/hotseat when settled on NORMAL, including after resume and skipped depth animations.
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: Simplify workspace RenderEffect clear path
Use clearWorkspaceRenderEffects when shouldBlurWorkspace is false instead of a null-effect loop.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Depth blur could leave RenderEffect on workspace/hotseat when SurfaceControl apply returned early, then setDepth(0) skipped re-apply. Always sync view blur with depth and force re-apply when settling to NORMAL; also clear leftover effects on folder dismiss.
blurWorkspaceDepthTargets can run on API 30; setRenderEffect and
createBlurEffect require API 31 and would throw on R.
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(bug): address issue crashes when adding widget in 13 below
- Closes: #6781
* 📝 Add docstrings to `fix/adding-widget-13-below`
Docstrings generation was requested by @MrSluffy.
The following files were modified:
* `quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java`
* `quickstep/src/com/android/quickstep/util/AsyncClockEventDelegate.java`
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>