CleanShare is an Xposed module that removes Direct Share’s suggested contact/conversation shortcuts from Android’s Share Sheet.
Direct Share suggests contacts you emailed once five years ago, colleagues from jobs you no longer have, and people you’d rather not be reminded of. The suggestions are rarely useful. I’ve yet to hit a case where they helped. Might as well cut the row and skip the hassle.
CleanShare tricks the Share Sheet into thinking it’s running on a low-RAM device. Android then skips the Direct Share pipeline to save resources, so the row never loads.
On devices with Android System Intelligence, it also blocks backend shortcut queries to prevent share target profiling.
Download the APK:
Install and enable the module in LSPosed.
Configure the scope:
Android 13+
com.android.intentresolver)com.google.android.as)Android 11-12
android)com.google.android.as)Reboot your device.
System Framework is only needed if you use the delete-after-share feature. The module checks your Android version and only applies what’s needed.
It uses Android’s standard MediaStore trash. The file gets flagged as trashed but stays on disk for 30 days before Android auto-removes it. You can recover it from the trash in Google Photos, Files by Google, or any gallery app that supports MediaStore trash.
When you edit a screenshot, the editor creates a temporary copy with a different filename. The module tries to find the original screenshot by querying MediaStore for recent files in your Screenshots folder, but it depends on the filename matching a configurable pattern. If your device uses a non-standard naming convention, it may not find a match. You can adjust the pattern in settings.
The receiving app needs time to process the shared file. If the file is deleted immediately, the share may fail. The delay is configurable in settings.
It targets the standard AOSP IntentResolver package. Some OEMs (e.g. HyperOS) use heavily modified share sheets with different packages and are currently unsupported.
Some apps (e.g. Firefox) implement their own custom share sheet instead of using Android’s native
one. CleanShare can only hook the system share sheet (com.android.intentresolver). If an app
rolls its own, there’s nothing the module can do about it.
No. Direct Share hiding and Quick Share filtering work without root. Only the delete-after-share feature requires root because it needs to modify MediaStore entries and delete files outside the app’s storage sandbox.
git clone --recurse-submodules https://github.com/hxreborn/cleanshare.git
cd cleanshare
./gradlew buildLibxposed
./gradlew assembleRelease
Requires JDK 21 and Android SDK. Configure local.properties:
sdk.dir=/path/to/android/sdk
# Optional signing
RELEASE_STORE_FILE=<path/to/keystore.jks>
RELEASE_STORE_PASSWORD=<store_password>
RELEASE_KEY_ALIAS=<key_alias>
RELEASE_KEY_PASSWORD=<key_password>
This project is licensed under the GNU General Public License v3.0 – see the LICENSE file for details.
eu.hxreborn.cleanshare
Release Type: Stable
2/27/2026, 7:03:40 AM
f239675 - (deletion) Add trash as alternative to permanent delete by @hxreborn
Add new mode to move screenshots to trash alongside permanent delete. Defaults to trash.
d22edd1 - (hook) Detect edited screenshots via IPC resolution by @hxreborn
Add async method to detect recently edited screenshots so they're offered to delete.
47f23df - (hook) Skip trashed files in screenshot detection by @hxreborn
4ad0b1f - (hook) Reset share session state on each chooser open by @hxreborn
Prevent stale deletion state from leaking into subsequent share sessions.
9cfcc45 - (quickshare) Gate debug logs behind BuildConfig.DEBUG by @hxreborn
Revert verbose diagnostic logging from hook mechanism. All QuickShareFilterHooker logs now use debugLog which only emits in debug builds. Removed unused findMethodsByName and formatMethodSig utilities.
21a5d16 - (ui) Replace deletion mode dialog with segmented buttons by @hxreborn