A small LSPosed/Xposed module that converts the Pixel 8 Pro's stock single tap to wake/check phone behavior into double tap to wake.
This revision is targeted at the user's tested environment:
- Pixel 8 Pro (
husky) - Infinity-X custom ROM
- Android 16 / SDK 36
- Android security patch: 2026-07-05
- Reported fingerprint:
google/husky/husky:16/BP4A.260205.001/14624666:user/release-keys doze_tap_gesture=1doze_pulse_on_pick_up=0
The module is a standalone reimplementation of the DT2W behavior studied in PixelXpert's ScreenGestures code. It contains no PixelXpert UI or unrelated hooks.
There are two relevant SystemUI paths.
A screen-off tap reaches DozeTriggers.onSensor() with tap reason 9.
The module:
- Captures the
DozeSensors.TriggerSensorwhosemPulseReasonis9. - On tap #1, calls
updateListening()to re-arm the native tap sensor. - Only if re-arming succeeds, suppresses tap #1 and opens a 400 ms window.
- Tap #2 inside that window is allowed through untouched.
- Stock SystemUI performs the actual wake.
This path is fail-open. If the expected private class/field/method is missing, the module leaves stock single-tap wake intact rather than swallowing touches.
Android 16's com.android.systemui.shade.PulsingGestureListener has separate onSingleTapUp() and onDoubleTapEvent() handlers.
The module directly suppresses only onSingleTapUp(). It deliberately does not hook onDoubleTapEvent(), so SystemUI retains its own proximity checks, falsing checks, and wake call for the double tap.
A legacy NotificationShadeWindowViewController listener fallback is retained only in case Infinity-X contains a mixed/custom SystemUI merge where the direct PulsingGestureListener class is absent.
- Pixel 8 Pro / Android 16 recommended for this revision.
- Root.
- LSPosed or a compatible Xposed implementation.
- Tap to check phone must remain enabled.
- Build and install the APK.
- Enable Pixel Double Tap Wake in LSPosed.
- Scope it only to
com.android.systemui(System UI). - Reboot.
- Leave Tap to check phone enabled.
There is no launcher activity or settings screen.
Android Studio: open the project and build the app module.
Command line with Gradle 8.11.1:
gradle :app:assembleDebugOutput:
app/build/outputs/apk/debug/app-debug.apk
The included GitHub Actions workflow can also build the APK.
Filter LSPosed/logcat for PixelDT2W.
On startup, useful lines include:
PixelDT2W: DozeSensors$TriggerSensor=true
PixelDT2W: DozeTriggers=true
PixelDT2W: PulsingGestureListener=true
PixelDT2W: native PulsingGestureListener.onDoubleTapEvent present=true
Typical screen-off sequence:
PixelDT2W: captured tap TriggerSensor, class=...
PixelDT2W: first doze tap suppressed; 400 ms window opened
PixelDT2W: second doze tap accepted; stock SystemUI wake continues
Typical pulsing/AoD-transition sequence:
PixelDT2W: pulsing single tap suppressed
If you see:
PixelDT2W: tap event received but TriggerSensor not captured; fail-open
or:
PixelDT2W: tap TriggerSensor re-arm failed; fail-open
then that Infinity-X build has diverged from the expected Pixel doze implementation. Stock single-tap behavior should remain available, and the log tells us what to investigate next.
Windows:
adb logcat | findstr PixelDT2WClear the log first if desired:
adb logcat -c
adb logcat | findstr PixelDT2WGPL-3.0-or-later. PixelXpert by Siavash is credited as the reference implementation for the DT2W approach; PixelXpert itself credits nijel8/XDA for the original double-tap-to-wake technique.