Cliptic (clip + automatic) is an Android app that copies screenshots to the clipboard the moment they are taken — paste them anywhere without opening the gallery first.
Standalone (no root required)
MediaStore.createTrashRequestLSPosed / Vector module (root + LSPosed or Vector required)
Both modes can run simultaneously (both) or independently (auto or xposed).
minSdk = 34)./gradlew assembleDebug # all debug APKs
./gradlew :app:assembleDebug # standalone app only
./gradlew :xposed:assembleDebug # LSPosed module only
./gradlew test # local unit tests
Standalone app
./gradlew :app:installDebug
On first launch, grant photo and notification permissions when prompted. Auto-copy can be toggled from the app UI or the Quick Settings tile.
LSPosed module
:xposed:assembleDebug and install the APK on the rooted device.com.android.systemui and art.yniyniyni.cliptic.ScreenshotService runs as a foreground service and owns a ScreenshotDetector. The detector observes MediaStore.Images.Media.EXTERNAL_CONTENT_URI, filters for recent images whose RELATIVE_PATH contains Screenshots, waits ~500 ms for the file to finish writing, then passes the URI to the service. The service copies the image into cacheDir/cliptic_clipboard, exposes it through FileProvider, and writes that URI to the clipboard via ClipboardWriter. Cached files expire after one hour by default.
When Cliptic receives an image/* share intent, ShareReceiverActivity runs the same cache-and-copy pipeline, shows a short confirmation toast, and finishes without showing any UI.
CopyButtonInjector hooks ScreenshotShelfViewBinder.access$updateActions in the com.android.systemui process, prepending a Copy ActionButtonViewModel to the action list so the framework renders, styles, and recycles the chip exactly like Share and Edit. On tap the module reads the IPC secret from XposedSecretProvider and broadcasts ACTION_COPY_SCREENSHOT (with the screenshot URI and the secret) to the Cliptic app. The app validates the secret, caches the image, and writes it to the clipboard. It then sends ACTION_COPY_SCREENSHOT_ACK back; CopyAckReceiver in SystemUI validates the ACK secret and silently trashes the original.
MarkupCopyInjector hooks the Pixel Markup editor (com.google.android.markup → AnnotateActivity) and adds a Copy button that invokes the editor’s built-in clipboard-export path, suppressing the trailing finishAndRemoveTask() so the editor stays open.
OriginalScreenshotCleanup uses MediaStore.createTrashRequest. If MediaStore.canManageMedia is true, it trashes silently with a retry ladder plus a WorkManager job for durability. Otherwise it queues the URI and shows a confirmation notification so the user can approve removal.
| Key | Default | Description |
|---|---|---|
auto_copy_enabled |
true |
Enables or disables automatic screenshot watching. |
share_sheet_enabled |
true |
Adds or removes Cliptic from the Share Sheet. |
remove_original_after_copy |
true |
Requests removal of the original gallery screenshot after copying. |
start_on_boot |
true |
Starts the foreground service after device boot. |
copy_mode |
auto |
auto, xposed, or both — controls which copy path is active. |
xposed_secret |
random UUID | Per-install shared secret for app ↔ Xposed IPC validation. |
cache_duration_ms |
3600000 |
Clipboard cache lifetime in milliseconds. |
The Xposed module runs inside com.android.systemui while clipboard writes happen in the app process. Two checks gate the bridge:
XposedSecretProvider (exported ContentProvider at ${applicationId}.secrets) returns the per-install UUID secret only to callers whose UID maps to com.android.systemui.CopyBroadcastReceiver validates that secret before accepting any screenshot URI from SystemUI.IPC constants are mirrored in AppActions.kt (app side) and AppProtocol.kt (xposed side) — keep them in sync. After a successful copy the app sends ACTION_COPY_SCREENSHOT_ACK back; CopyAckReceiver in the SystemUI process validates the secret and silently trashes the original.
See LICENSE.
See Privacy Policy.