- Verify with a real prototype whether a secure overlay produces black/empty pixels or preserved underlying content in screenshots and
MediaProjection. - Build a minimal Android spike using
MediaProjectionplusTYPE_APPLICATION_OVERLAYto measure practical limitations. - Investigate a rooted implementation that drives screenshot capture through privileged/system APIs instead of public
MediaProjection. - Evaluate LSPosed hooks into SystemUI/framework screenshot flow to inject an excluded preview layer or temporarily redirect capture args.
- Evaluate a Shizuku-backed service for calling privileged screenshot or window-management APIs from the app process.
- Map the actual screenshot classes on crDroid 11.9 / Android 15 by inspecting
SystemUI.apkand framework jars from the device. - Prototype an LSPosed hook on the screenshot capture path first, before building a standalone app UI.
- Prototype a visible "hook active" cue by recoloring the screenshot preview border to red inside SystemUI's screenshot shelf.
- Inspect
framework.jar/services.jarfrom the device to find the cleanest exclusion path for the screenshot window type used by SystemUI. - Determine whether excluding the whole
ScreenshotUIwindow is sufficient, or whether a child surface from the screenshot shelf must be excluded instead. - Resolve how to obtain the live
SurfaceControlfor the attachedScreenshotWindowdecor view from the SystemUI screenshot process. - Prototype replacing
ImageCaptureImpl.captureDisplay(...)with a call that addssetExcludeLayers(...)for the screenshot UI surface. - Validate whether excluding only the screenshot window surface removes the floating preview while preserving underlying app pixels.
- Convert docs/lsposed-hook-blueprint.md into a minimal LSPosed module skeleton.
- Trim diagnostic logging down to the minimum needed once the prototype behavior is stable.
- Verify visually on-device that the previous screenshot shelf remains continuously visible during screenshot N+1, not only that it is absent from the saved file.
- Verify whether the continuity overlay fully eliminates the visible blink for both hardware-key and three-finger screenshot entry paths.
- If any blink remains, move the continuity snapshot earlier or seed it from a cached previous shelf snapshot instead of waiting for reentry-time
PixelCopy. - Verify on-device that the stacked shelf renders correctly for 2-shot and 3-shot bursts, including the count badge and rear-card offsets.
- Decide the first batch interaction model for the stacked shelf (tap/edit/share latest screenshot only vs explicit batch-aware affordances).
- Re-enable short-tap markup editor launch once the preview stack tap/hold routing is reliable on-device.
- Add a safe fallback interaction model where short tap is consumed locally and the stock chooser only appears after a deliberate multi-second hold.
- Add upper-right share action to the markup editor and route it through the Android share sheet for the edited screenshot output.
- Add save-vs-delete confirmation when leaving the markup editor via
Done. - Implement actual editor tools: freehand pen/highlighter, colors, stroke width, and basic shape insertion.
- Turn the current static crop handles into real draggable crop bounds with corner and edge affordances.
- Add drag-to-dismiss for the screenshot shelf and make dismissal behavior configurable: auto-dismiss timeout, manual drag-away enabled/disabled, and whether drag-dismiss also deletes the screenshot.
- Build a small companion/settings surface inside the same APK/package so the LSPosed module and app can share preferences for shelf dismissal, drag behavior, export defaults, and diagnostics.
- Investigate hooking the screenshot save pipeline to store new screenshots as
JXL/JPEG XL by default to reduce storage use. - Decide the edited-output policy for
JXLsources: keep untouched screenshots asJXL, but convert toPNGautomatically for crop/drag/export flows that require broad sharing compatibility. - Decide whether batch editing should open only the newest screenshot first or support stack navigation inside the editor.
- Add clearer visual paging affordances to the markup editor now that left/right swipe navigation is live.
- Add iOS-style editor affordances next: undo/redo, highlighter thickness, text callouts, signatures, shapes/arrows, and magnifier.
- Define the editor document model and sidecar format for non-destructive edits.
- Keep the editor layout native XML and the edit document data-driven; defer any Lua/JS scripting surface until the core tool model is stable.
- Determine whether excluding the whole
ScreenshotUIwindow removes any stock controls that should remain in the final UX. - Convert the current proof-of-concept module into a cleaner LSPosed package structure with configuration and safer runtime guards.
- Decide whether to delete the remaining
reset()diagnostic hook now that continuity overlay and stacked-shelf rendering are the primary UX path. - Investigate whether Android 14+ app-window sharing is useful for a scoped variant that captures only the selected app window.
- Inspect AOSP/SystemUI screenshot flow in more detail and identify the smallest privileged patch that excludes the thumbnail overlay layer.
- Decide target product model: stock unprivileged app with compromises; rooted app using Shizuku / LSPosed / hidden APIs; privileged app on rooted/device-owner builds; or AOSP/SystemUI modification.
- If Android implementation starts, add a concrete architecture doc and test matrix.