FixupXer - URL Enhancer
com.fixupxer
Zapstore _@zapstore.dev Republished from GitHub / F-Droid by the Zapstore main account.
FixupXer is a privacy-first Android app that removes tracking from URLs, improves social link previews, warns about sensitive data left in links, and lets you build your own offline URL rules. Processing is local. FixupXer declares no permissions, analytics, or telemetry and never sends URLs to external servers. 🔗 CLEAN AND IMPROVE LINKS • Remove hundreds of known tracking parameters from shared or pasted URLs • Dedicated cleaning for 25+ services, including YouTube, Facebook, Instagram, X, TikTok, Amazon, Google, LinkedIn, Reddit, Wikipedia, Pinterest, The Guardian, The New York Times, and more • Universal tracking removal for other websites • Unknown functional parameters are kept, so cleaned links keep working • Unwrap supported outbound redirect wrappers entirely offline • Optionally convert social links to embed-friendly domains or account-free readers • Pick built-in frontends per platform or add your own custom domains 🛡️ PRIVATE LINK GUARD Get an offline warning when a link still contains credentials, e-mail addresses, auth tokens, or precise GPS coordinates. • See what was found and where; values are never shown, logged, or stored • Remove the offending parameter with one tap • Sensitive originals never enter history; cleaned links stay as redacted entries 🧩 CUSTOM URL RULES Custom rules are opt-in and remain disabled until you enable them in Settings. • Scope rules by URL, host, domain, host group, or safe RE2/J pattern • Remove, keep, or replace parameters; extract redirects; rewrite URL components • Run rules before built-in cleaning, after cleaning, or after conversion; limit them to Main, Share, or Browser Mode • Preview changes in Test Lab and add per-rule test vectors that gate enabling • Teach by example: provide one URL and the desired result, and FixupXer drafts the rule for you • Import, export, and roll back validated rule bundles through Android's system file picker 📱 FOUR WAYS TO USE FIXUPXER SHARE FROM ANY APP Share a URL to FixupXer and then copy, share, or open the cleaned result. PASTE AND PROCESS Paste a URL, tap "Process URL," and review the before-and-after result. CLEAN LINK FROM SELECTED TEXT Select a URL in any app and choose "Clean link" — editable text is replaced in place. BROWSER MODE Use FixupXer as the default browser or through Open with. Add, edit or delete frontends for seven platforms; Save applies the changes. Browser and Main/Share choices stay separate. Remember a preferred browser or app choices per host. Native actions restore supported embed links to the original platform. Failed actions stay local for Retry. Verified App Links may bypass FixupXer. ✨ CLEAR, MODERN INTERFACE • Material 3 before-and-after flow with removed tracking highlighted • System, Light, and Dark themes • Right- or left-handed action layout • Optional local history with retention controls • Local backup and restore of settings and custom rules 🔒 PRIVACY BY DESIGN • Zero app permissions • No analytics, ads, telemetry, or user tracking • No personal data or URLs transmitted by FixupXer • Processing runs entirely on the device • History, preferences, custom proxies, rules, and rollback snapshots stay on your device ⚠️ THIRD-PARTY SERVICES Optional conversion rewrites URL text to third-party embed or reader domains such as fixupx.com, xcancel.com, toinstagram.com, and selectable proxies. FixupXer never contacts them. If you open the result, the receiving app or service makes the network request under its own policy. These services are not operated by NeatCode Labs and may change or stop working; conversion can be disabled. 📜 FREE AND OPEN SOURCE FixupXer is free and open-source software licensed under GPL-3.0-or-later. Source code: https://github.com/NeatCode-Labs/fixupxer Inspired by ClearURLs, Leon URL Cleaner, FxEmbed, InstaFix, and fxTikTok. Developed by NeatCode Labs. Not affiliated with or endorsed by any platform, website, or third-party proxy service mentioned.
First release: Jul 23, 2025, 26 total releases.
Most recent release: Sep 24, 2026.
Appears in 0 app stacks.
0 sats / 0 zaps received in the past year.
Sats Received
Underlying data available via MCP: app_zaps, app_releases.
Zap Count
Underlying data available via MCP: app_zaps, app_releases.
Releases
- Sep 24, 2026 2.8.3- Remove Guardian `CMP` share tracking on the exact public Guardian hosts. - Remove New York Times `smid` share tracking while preserving access codes and other parameters. - Remove 12 additional documented campaign and click-tracking parameters. - Keep all URL processing offline, with zero permissions. Verified with 815 debug and 815 release unit tests, 281 instrumentation tests, and 40 signed-artifact clean-install/upgrade checks. The APK also passes an independent Linux rebuild using the current F-Droid recipe.
- Sep 20, 2026 2.8.2Supported X, Instagram and TikTok embed links now open in their native apps when the native action is selected. - Fix native opening for known proxy aliases, including fxtwitter.com, and TikTok short-link subdomains. - Use consistent native URLs for automatic actions, manual opening and saved app choices. - Keep the processed proxy URL for Browser, Share, Copy and native-app fallback. Privacy readers and custom frontends retain their browser handling. FixupXer remains offline with zero permissions.
- Sep 19, 2026 2.8.1FixupXer v2.8.1 fixes Browser mode reopening the same link when returning through Recents, which could create a duplicate browser tab. Completed temporary Browser tasks are now removed after successful delivery. Existing launcher and caller tasks are preserved, and Cancel, Retry and genuinely new opens keep their behavior. Custom rule compilation and processing reuse validated patterns and matching results while preserving validation and rule behavior. Offline, with zero permissions. Android 5.0+ (API 21), target API 36, versionCode 52.
- Sep 14, 2026 2.8.0Browser settings now let you manage frontends and remember the browser you use most. - Add, edit and remove Browser frontends. Editing a built-in creates a custom replacement; removed built-ins can be restored. - Review frontend changes together and apply them with Save. Browser and Main/Share choices remain separate, with shared-selection effects explained before changes are saved. - Choose a preferred browser, use a browser once, or return to Always ask. An unavailable preferred browser opens the replacement picker. - Local backups include the preferred browser and remain compatible with older backups. FixupXer still processes links offline and requests no Android permissions. The attached signed APK is the GitHub/F-Droid variant. The Google Play variant is distributed through the existing Play listing.
- Sep 14, 2026 2.7.0# FixupXer v2.7.0 - Browser Frontend Choices ## What's New - Choose separate Browser frontends for TikTok, Instagram, X, Bluesky, Reddit, Pinterest and Facebook. Supported built-in readers, embeds and existing custom domains appear in separate groups; YouTube and Threads remain Clean only. - Open with > FixupXer now uses those choices. Copy, Share and Open receive the same final processed URL, including TikTok short-link subdomains. - Existing reader selections migrate without enabling new conversions. Changes
More…
and category restores stay drafts until Save; unavailable readers use the documented fallback without overwriting your remembered choice. - Backup schema v2 includes Browser choices and still imports v1 files safely. Deleting a custom domain also clears its active or remembered Browser choice. Theme changes and screen recreation preserve the latest saved settings. - Interrupted processing, changed settings and failed external actions keep the result available for Retry. Stale callbacks cannot dispatch a newer link; rotation preserves a completed transaction without duplicating history. - Host conversion preserves domain text inside query values and fragments. Cache entries are separated by cleaner/roster configuration and pass limits. FixupXer remains offline with zero permissions. Frontend conversion changes a URL locally; it does not verify the availability or privacy of a third-party service. ### Technical Details - Minimum Android: 5.0 (API 21) - Target Android: 16 (API 36) - Version Code: 50 - versionName: 2.7.0 - Sep 11, 2026 2.6.7FixupXer v2.6.7 renames the result status `Already clean` to `No changes made`. - The status now states what FixupXer did instead of judging the link. - It is accurate for links without known tracking, for conversions that are switched off or do not apply, and for opaque redirect or click-tracking links (for example MailerLite click links) whose destination is only known to the sender's server and cannot be unwrapped offline. - Regression coverage for MailerLite-style click links across Main, Share and Browser processing. Processing remains offline with zero permissions. Install `FixupXer-v2.6.7-release.apk` below. The APK is signed with the existing release key and built from the exact release tag in a fresh clone. F-Droid's independent build and availability follow its update process. Validation results and artifact checks are recorded in the repository's build and testing reports. `SHA256SUMS.txt` contains the download checksum.
- Sep 9, 2026 2.6.6FixupXer v2.6.6 fixes YouTube Music share tracking cleanup. - Remove `si` and `is` share identifiers from Music links instead of reporting `Already clean`. - Preserve song IDs, playlists, radio context, timestamps, unknown query values and fragments. - Keep YouTube Music links on their original domain. Processing remains offline with zero permissions. Install `FixupXer-v2.6.6-release.apk` below. The APK is signed with the existing release key and built from the exact release tag in a fresh clone. F-Droid's independent build and availability follow its update process. Validation results and artifact checks are recorded in the repository's build and testing reports. `SHA256SUMS.txt` contains the download checksum.
- Sep 5, 2026 2.6.5Instagram share tracking is cleaned again: - Removes the current `stkn` share identifier and the previously uncovered `ig_rid` tracker. - Keeps existing `igsi`, `igsh` and `igshid` cleaning on Instagram and recognised/custom frontends. - Preserves carousel selectors, unknown query values and fragments. - Adds regression coverage for the reported Reel and Main/Share processing. Minimum Android 5.0 (API 21), target Android 16 (API 36). Zero permissions; all processing remains offline. The APK is signed with the existing release certificate and built from the published tag in a fresh clone. F-Droid independently processes the new tag and binary through its existing update pipeline.
- Sep 5, 2026 2.6.4FixupXer 2.6.4 fixes URL input, copy feedback and history Undo while retaining the zero-permission, offline processing model. - Preserve valid percent-encoded filenames and query values, including Unicode, while rejecting malformed URL components. - Keep unfinished URL drafts editable and prevent processing of a stale previous value. - Mask copied URLs in supported system clipboard previews and show the appropriate copy feedback for each Android version. - Restore the original history record and timestamp with Undo; report failed delete, restore and clear operations accurately. - Align test dependencies and restore the official wrapper for the existing Gradle 8.11.1 runtime. Verification: 696 unit tests pass in each build variant, all 237 instrumentation tests pass on an API 35 emulator, and release lint reports 0 errors (40 warnings). REUSE checks pass. The signed APK was built from a fresh clone of tag v2.6.4; a repeat clean build produced the same SHA-256. The final signed-APK installation and startup check also passed on the API 35 emulator.
More…
Android 5.0+ (minimum SDK 21), target SDK 36, versionCode 46. The attached APK requests no permissions and contains no Google Play ownership or dependency metadata. Google Play and F-Droid distribution follow their separate publication processes. APK SHA-256: `064b8aaa8af5b4e715b813f652b4528854ce038006b3df43d24469562cd3ebf1` - Aug 20, 2026 2.6.3## Instagram's Renamed Share Tracker Instagram started appending `igsi` to shared Reel and post links — the same account-bound share identifier that used to appear as `igsh` / `igshid`, under a new name. Until this release that parameter survived cleaning, so a link such as `instagram.com/reel/…/?igsi=…` came back marked "Already clean". - `igsi` is now stripped from Instagram links exactly like `igsh` and `igshid` - All three spellings stay on the removal list, so cleaning keeps working if Instagram flips the name again - Functional parameters such as `img_index` are unchanged **Verification:** 664 unit + 235 instrumentation tests green, release lint clean. APK built reproducibly from a fresh clone of the `v2.6.3` tag.
More…
**Technical details:** minSdk 21 (Android 5.0), targetSdk 36 (Android 16), versionCode 45. - Aug 10, 2026 2.6.2## YouTube's Renamed Share Tracker YouTube quietly renamed the `si` share identifier on shared links to `is` — the same account-bound share tracker under a new name, flipped specifically to slip past existing blocklists. Until this release the renamed parameter survived cleaning. - `is` is now stripped from YouTube links exactly like `si` - Both spellings stay on the removal list, so cleaning keeps working if YouTube ever flips the name back - YouTube Music is unaffected: the share identifier stays deliberately preserved there (same policy as before, now for both spellings) Thanks to the user who reported this by e-mail.
More…
**Verification:** 662 unit + 235 instrumentation tests green, release lint clean. APK built reproducibly from a fresh clone of the `v2.6.2` tag. **Technical details:** minSdk 21 (Android 5.0), targetSdk 36 (Android 16), versionCode 44. - Jul 25, 2026 2.6.1## AliExpress links are actually cleaned now Cleaning an AliExpress product link removed `spm` but left `pdp_npi` untouched, and that single parameter is often longer than the rest of the URL put together, so the result looked unchanged. This release strips `pdp_npi` and 15 further confirmed tracking keys. Parameters that can carry functional data are deliberately kept: `pdp_ext_f` and `pvid` survive byte for byte, as does `gatewayAdapt`, which selects the regional gateway. ## Sharing from apps that use a wildcard text type `ACTION_SEND` intents were only accepted when the sending app declared exactly `text/plain`. Apps that share as `text/*` still match the manifest filter, so their links reached FixupXer and were then rejected with "No URL found in shared text". The share handler now accepts any text type it is offered.
More…
## Links containing a space are no longer discarded A single-line link whose query contained a literal space, which is what happens when a browser address bar hands over a partly decoded URL, was dropped entirely. Spaces in the query tail are percent-encoded instead. Whitespace before the query still rejects the input, so the host can never shift to a different domain. --- Verified with 659 unit and 235 instrumentation tests, release lint clean. The APK is built from a fresh clone of the `v2.6.1` tag and is free of Google Play metadata. - Jul 22, 2026 2.6.0## Redacted History for Sensitive Links Previously, any link whose input contained sensitive-looking data (auth tokens, e-mails, JWTs, precise coordinates) was kept out of history entirely — even when cleaning removed every sensitive part. This silently dropped common redirect wrappers such as Reddit's `out.reddit.com` links (functional `token=` parameter) and Google Ads `sig=` wrappers. Now, when the Private Link Guard flags the input but the final cleaned URL is verifiably safe, FixupXer saves a **redacted history entry**: - Only the safe final URL is stored — the original wrapper, its token, and its host are never written to the database. - The history card shows **"Sensitive input" / "Original URL was not saved"** with an **"Input redacted for privacy"** badge. - Copy, Share, open, and delete work on the safe final URL as usual.
More…
Links whose cleaned result **still** contains sensitive data continue to stay out of history and the cleaner cache completely. Sensitive inputs also still never enter the cleaner cache. No database migration required. **Verification:** 652/652 unit + 235/235 instrumentation tests, release lint clean. - Jul 22, 2026 2.5.1## Android 16 Target Compliance FixupXer now targets **Android 16 (API level 36)** to comply with Google Play target API requirements. Edge-to-edge display and predictive back support were already in place, so this release required no related app-code changes. ### Build Tooling - Android Gradle Plugin updated 8.3.2 -> 8.9.3 (official API 36 support line); Gradle 8.11.1 and JDK 17 unchanged There are **no user-facing feature changes** in this release. The app remains 100% offline with zero permissions. ### Verification
More…
- 642/642 unit tests, 235/235 instrumentation tests, release lint clean - APK built reproducibly from a fresh clone of the `v2.5.1` tag - Jul 21, 2026 2.4.1## FixupXer v2.4.1 - Privacy & Reliability Patch ### Privacy: fragment data no longer leaks into queries When converting links to alternative frontends, a `?...` inside the URL fragment (e.g. `.../status/1#section?access_token=...`) could be promoted into a real query and sent to the destination server. Fragment content now stays strictly inside the fragment across all conversion paths. ### Fixes - **Open button self-interception**: when FixupXer is set as the default browser, the Open button on Main/Share now hands the link to your real external browser instead of reopening FixupXer. Native apps via App Links keep working. - **Facebook frontend retargeting**: selecting a different Facebook frontend now also converts links already on another known frontend (e.g. `facebookez.com` -> your custom domain), like every other platform. - **Browser mode history duplicates**: opening a link through Browser mode and rotating the screen (or any configuration change mid-processing) no longer records the same conversion twice in History.
More…
### Verification - 628/628 unit tests, 229/229 instrumentation tests, `lintRelease` clean - Zero permissions, 100% offline - unchanged - Jul 20, 2026 2.4.0v2.4.0 — Browser mode hub, privacy readers, and local backup • Dedicated Browser mode settings screen with live status summaries • Privacy reader conversions in Browser mode for X, Bluesky, Reddit, and Pinterest • Expanded Main/Share picker with embed and reader frontends plus custom domains for all nine platforms • Save which app opens each site host in Ask mode, with a management dialog • Read-only Configuration status overview in Settings • Local backup and restore of settings, custom rules, and saved app choices • Left- or right-handed action button layout • Guided history-limit migration to the supported 1–10,000 range
More…
• Tracking cleaning is now always on - Jul 17, 2026 2.3.0v2.3.0 — Expanded international cleaning • Clean Bilibili share-tracking keys while preserving from and unknown parameters • Remove exact Yahoo/Guce referrer keys on destination links • Unwrap GeoRiot/Geniuslink and LinkSynergy/Rakuten redirects offline • Require exact wrapper hosts/paths and one-time percent decoding • Reject invalid ports, malformed escapes, fragment pseudo-queries, and unsafe duplicates • Preserve raw encoding, target fragments, +, and functional parameters
- Jul 8, 2026 2.0.0## Complete UI Redesign FixupXer 2.0 is a complete visual overhaul — the app looks entirely different, while the cleaning engine, proxy systems, browser mode, and zero-permission privacy posture are unchanged. ### The Before/After Flow Both the Main and Share screens now present your link as a **before → after flow**: the original URL sits in the top card with its tracking parameters ~~struck through~~ once processed, a flow line leads to the result card, and a status chip tells you exactly what happened — **Already clean**, **Tracking removed**, **Converted for embedding**, or **Tracking removed and converted**. - **Strikethrough diff** — see at a glance which tracking parameters were cleaned away - **Platform toggle cards** — the Embed toggle lives in a per-platform card (IG / FB / X / TT) with the active proxy and a **Change.** link right there - **History bottom sheet** — tap an entry to reload it, delete with undo
More…
- **Material 3 dialogs and Snackbars** throughout ### Full Dark Mode + Theme Picker Hand-tuned Material 3 DayNight palette with a **System / Light / Dark** picker in Settings. Every screen, dialog, card, and chip is theme-aware, from Android 5 to Android 15 edge-to-edge. ### New App Icon A new wizard-wand launcher icon, including a monochrome/themed-icon variant for Android 13+. ### Under the Hood - Distinct error messages for multiple-URL vs invalid input - Processing guarded against races (toggling mid-processing queues one reprocess) - Share edge cases: empty intents, `ClipData` fallback, config changes - Exact parameter-set URL diff (no false strikethrough matches) - 442 automated tests (252 unit + 190 instrumentation), all passing ### Technical Details - Minimum Android: 5.0 (API 21) • Target: Android 15 (API 35) - versionCode 34 • versionName 2.0.0 - Zero permissions, 100% offline - Jul 5, 2026 1.7.2## Bug Fixes ### Links opened from the Reddit app now work Opening a link from a Reddit post (with FixupXer as the default browser) landed on a `reddit.com/invalid_token…` error page instead of the real destination. Reddit wraps every outbound link in `out.reddit.com/…?url=<destination>&token=…`, and FixupXer's parameter cleaning stripped the functional `url=` and `token=` parameters. This is a **root-cause** fix, not just for Reddit: - `RedditCleaner` now extracts the real destination from the `out.reddit.com` wrapper (wrappers without a destination are left intact). - The input validator is now **host-agnostic**: any single URL carrying a nested destination in its query (Reddit, Facebook `l.facebook.com`, LinkedIn, newsletters, …) passes validation — v1.7.1 had only whitelisted Google/Gmail redirects. ### Valid single URLs rejected on slower devices
More…
The multiple-URL detector rebuilt large regexes on every call, which could exceed its 50 ms anti-DoS timeout on slower hardware and silently reject valid links. All patterns are now compiled once. **Security unchanged:** multi-URL pastes and glued host names are still rejected; only the single `url=`/`q=` destination is ever extracted downstream. ## Tests 211/211 unit + 186/186 instrumentation (100%) on Pixel API 35. ## Checksums SHA-256 (`FixupXer-v1.7.2-release.apk`): `F85CBA9F7E99582ED97305C03CF8ACE33291E58784028186DF0D4AD0863A6826` - Jul 3, 2026 1.7.1## Bug Fix: Gmail Links Work in Browser Mode Again A v1.6.0 regression broke **every link clicked in Gmail** when FixupXer was set as the default browser — the app showed "Error processing URL" instead of cleaning the link. Gmail wraps every link in a Google redirect (`google.com/url?q=<destination>`), and the security validator added in v1.6.0 counted the nested destination URL as a "multiple URLs" attack and rejected the input before URL processing ever started. The validator now recognizes legitimate Google redirect wrappers (including regional domains like `google.co.uk`) and lets them through — the existing redirect extraction then unwraps the real destination as before. Verified end-to-end on the emulator. **Security is not weakened:** - Only the multiple-URL check is skipped for these wrappers — all other input checks still apply. - The exemption requires the *entire input* to be a single Google redirect URL; multi-URL pastes are still rejected. - The downstream extractor only ever takes the single `url=`/`q=` destination, so smuggled extra URLs are dropped (covered by a new regression test).
More…
- Pasting a Google redirect link into the Main screen works again too. ## Technical Details - Version Code: 32 - Unit tests: 202 / 202 passing. Instrumentation: 186 / 186 passing. - APK SHA-256: `7AF79F246EC07032F52AB702D3A6B281B717B8862E586E8879CDF24046DA746B` - May 15, 2026 1.5.1## What's New ### One Selector, Two Screens v1.5.1 cleans up Instagram proxy management. The chooser now lives on the screens where you actually use it — Main and Share — and is **gone from Settings**. Both screens open the same dialog when you tap **Change.**, so the flow is identical regardless of where you start. ### What changed - **Main screen — Change. now opens the proxy dialog directly** (previously it launched Settings). No more screen switch, no lost context. - **Auto-reprocess parity with Share** — if a Processed URL already exists for an Instagram input on the Main screen (i.e. you've already tapped Process), picking a different proxy now refreshes the Processed URL field automatically. Fresh inputs that haven't been processed yet still go through the explicit **Process URL** button — typing a new link does not auto-process. - **Share screen — unchanged behaviour** (already used the dialog inline because Share is `noHistory="true"`); still re-processes the shared URL after you pick a different proxy. - **Settings — Instagram embed proxy section removed.** That whole card is gone, along with its info icon and three radio buttons. Settings now opens straight to Browser Integration / Conversion Defaults / Action Mode.
More…
- **Persistence and conversion logic — unchanged.** The selected proxy still lives under `instagram_proxy_domain` in `SharedPreferences`. Existing users keep their selection. Default remains `toinstagram.com`. ### Why Two surfaces with the same chooser were redundant. Settings used to be the "source of truth", but it was an unnecessary detour when Main and Share already render the **Active: \<proxy\>. Change.** row inline. ### Cleanup details - Removed: `MaterialCardView` for Instagram proxy in `activity_settings.xml`, the radio listener and `loadSettings` proxy block in `SettingsActivity.kt`, the duplicated `showInstagramProxyInfoDialog()` (the dialog helper already owns the info icon). - Removed strings: `settings_instagram_proxy_title`, `settings_instagram_proxy_summary`, `instagram_proxy_to`, `instagram_proxy_adamlikes`, `instagram_proxy_7`. - Kept strings (still used by `InstagramProxyDialogHelper`): `instagram_proxy_primary_label`, `instagram_proxy_backup_label`, `instagram_proxy_dialog_title`, `instagram_proxy_info_*`. - Added `res/values/ids.xml` declaring `instagramProxyInfoIcon` (the dialog helper builds its title row programmatically and needs the ID to outlive the layout removal). ### Tests - Removed: `SettingsActivityProxyTest` (tested radio buttons that no longer exist). - Added: `MainActivityProxyLabelTest.changeProxyShowsDialogAndUpdatesLabelInPlace` — clicking **Change.** opens the dialog and updates the label in place; Processed URL field stays empty when no Process tap preceded. - Added: `MainActivityProxyLabelTest.processedInstagramUrlReprocessesAfterProxyChange` — covers the auto-reprocess parity (Process → change proxy → Processed URL refreshes with the new proxy). - Unit tests: 119 / 119 passing. Instrumentation: 152 / 152 passing on `Pixel_API_35_Play`. ### Technical Details - Minimum Android: 5.0 (API 21) - Target Android: 15 (API 35) - Version Code: 29 - versionName: 1.5.1 ## Download - [FixupXer-v1.5.1-release.apk](https://github.com/NeatCode-Labs/fixupxer/releases/download/v1.5.1/FixupXer-v1.5.1-release.apk) - May 4, 2026 1.5.0## What's New ### MIUI/HyperOS Default Browser Fix On some Xiaomi and Redmi devices running MIUI/HyperOS, FixupXer was missing from the system **Default browser app** list even with Browser mode enabled. The OEM picker scans for apps that explicitly declare themselves as browsers via the `MAIN + APP_BROWSER` intent category — a mechanism used by Chrome, Firefox, Brave, and Edge — while FixupXer's `BrowserAlias` only declared the AOSP-minimum `VIEW + http/https` filter (sufficient on stock Pixel but ignored by MIUI's picker). v1.5.0 adds a second intent-filter to the existing `BrowserAlias`: ```xml <intent-filter> <action android:name="android.intent.action.MAIN" />
More…
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.APP_BROWSER" /> </intent-filter> ``` This is the same fix Mozilla shipped for Firefox in 2021 ([Bugzilla 1204655](https://bugzilla.mozilla.org/show_bug.cgi?id=1204655) / [Fenix #16780](https://github.com/mozilla-mobile/fenix/issues/16780)). The filter only activates when the user explicitly enables Browser mode (the alias is `enabled="false"` by default), so privacy-by-default is preserved. ### Compatibility Matrix - **Pixel / stock Android** — already worked (AOSP path), no change in behaviour. - **Samsung One UI, Oppo ColorOS, OnePlus OxygenOS** — likely also benefit (their pickers use the same `APP_BROWSER` mechanism). - **Xiaomi MIUI / HyperOS** (Redmi 15 and similar) — now appear in the default-browser list. ### Manual Step on MIUI/HyperOS Some MIUI builds cache the browser list. If FixupXer still doesn't appear after the update, **toggle Browser mode off and back on, then restart the phone** to flush the cache. ### No UI Changes This release is a manifest-only fix plus a regression test. No new screens, no removed features, no permission changes. Browser mode behaviour, post-clean actions, and the rest of the app are unchanged. ### Technical Details - Minimum Android: 5.0 (API 21) - Target Android: 15 (API 35) - Version Code: 28 - versionName: 1.5.0 - New instrumentation test: `BrowserAliasIntentResolutionTest` (4 cases) - Tests: 119 unit + 155 instrumentation = **274 tests passing** - 0 permissions, 0 network calls, 0 hardcoded secrets (verified) ## Reproducible Build This APK was built from a clean clone of the `v1.5.0` tag (`9ddd1a2`): ```bash git clone https://github.com/NeatCode-Labs/fixupxer.git cd fixupxer git checkout v1.5.0 ./gradlew assembleRelease ``` Signing certificate SHA-256: `78:E3:69:50:96:3A:98:EA:39:FE:30:B9:55:C2:73:64:E1:87:FE:CA:85:A1:AF:6A:D1:09:87:D1:5F:18:EC:2F` - May 2, 2026 1.4.9## Summary - Fixed browser-mode loops when FixupXer is set as the default browser. - Added a reliable FixupXer-owned "Ask every time" action dialog. - Improved native-app/browser fallback behavior and Google/Gmail redirect handling. - Verified 117/117 unit tests and 151/151 instrumentation tests passing. ## Release Artifact - `FixupXer-v1.4.9-release.apk` - SHA-256: `7997F683ECE48B0260E2FAE361FF9E78EB51BA543341F3CF7AC26A7890DEC007` - Signing certificate SHA-256: `78:E3:69:50:96:3A:98:EA:39:FE:30:B9:55:C2:73:64:E1:87:FE:CA:85:A1:AF:6A:D1:09:87:D1:5F:18:EC:2F`
More…
- Verified clean of `dependencies.pb` and `adi-registration.properties`. - Apr 24, 2026 1.4.7## 🚀 Major Release: Selectable Instagram Embed Proxy + F-Droid Settings Menu ### ✨ What's New **Instagram Proxy Selection** - Pick between `kkinstagram.com`, `eeinstagram.com`, and `instagram7.com` — one-tap switch when a proxy goes offline - Choice persists across Main, Share, and Settings screens (SharedPreferences) - Cross-proxy swaps supported (e.g. paste `eeinstagram` → convert to `instagram7` without round-tripping through real Instagram) - Browser mode honours the same preference for system-wide consistency
More…
**F-Droid Settings Menu Restored (Issue #3)** - Settings menu now available in the F-Droid build (was omitted in v1.4.6) - Browser mode, action priorities, and conversion defaults fully accessible - Codebase now fully synced root → GITHUB; only intentional build-config difference is `dependenciesInfo = false` for F-Droid reproducibility **Fastlane Metadata Compliance (Issue #4)** - `short_description.txt` trimmed to 72 chars (≤80 limit) - Oversized changelogs (12, 13, 15, 21, 23) trimmed to ≤500 chars - New `changelogs/25.txt` for v1.4.7 ### 🎨 UI / UX Improvements - "Embed?" toggle replaces the longer "Create embeddable link?" label (single horizontal row) - "Active: `<proxy>`. Change." row appears next to the toggle for Instagram links - On Main, "Change." opens Settings; on Share, it opens an inline dialog (required because `ShareActivity` is `noHistory` — any external intent would destroy the share flow) - Proxy row auto-hides for Facebook URLs (single-proxy platform) - Disclaimer text updated to list all three Instagram proxies ### 🔧 Technical Excellence - 257 tests, 100% pass rate (113 unit + 144 instrumentation) - 0 permissions, 0 network calls, 0 hardcoded secrets (verified) - 0 lint errors/warnings on `lintRelease` - ProGuard/R8 optimized release build ### 📱 Compatibility - Minimum Android: 5.0 (API 21) - Target Android: 15 (API 35) - versionCode: 25, versionName: 1.4.7 ### 📦 Download - **FixupXer-v1.4.7-release.apk** — Signed release build (~4.2 MB, F-Droid reproducible) --- **Full Changelog**: https://github.com/NeatCode-Labs/fixupxer/compare/v1.4.6...v1.4.7 - ## 🚀 Major Release: Browser Mode Integration ### ✨ What's New **Browser Mode** * Set FixupXer as your default browser for system-wide URL cleaning * Configurable action priorities with drag-and-drop interface * Smart native app integration with automatic app detection * ReVanced YouTube priority support for ad-free experience * Built-in step-by-step instructions dialog
More…
* Zero-configuration option with intelligent defaults **UI/UX Overhaul** * Perfect text formatting with proper HTML rendering * Material Design 3 compliance with edge-to-edge support * Enhanced settings screen with comprehensive configuration * Unicode typography with professional quotation marks * Improved menu structure with dedicated sections ### ⚙️ Browser Mode Features * **System Integration** - Automatic URL cleaning for all web links * **Action Priorities** - Customizable post-clean behavior (native app, browser, share, clipboard) * **Smart App Detection** - Intelligent handling of installed applications * **ReVanced Support** - Automatic preference for community YouTube alternatives * **Flexible Configuration** - Choose between "Ask every time" or priority-based actions * **Instructions Dialog** - Built-in setup guide with professional formatting ### 🔧 Technical Excellence * Lint-free codebase with zero code quality issues * Thread-safe architecture for enterprise-grade reliability * Comprehensive test suite with 212 tests passing (100% success rate) * Proper Android 15 compliance and deprecated API handling * GPL-3.0-or-later licensing with complete DCO compliance ### 📱 Compatibility * Minimum Android: 5.0 (API 21) * Target Android: 15 (API 35) * Supports phones, tablets, TVs, and cars * Full edge-to-edge design with Material Design 3 ### 📦 Download * **FixupXer-v1.4.6-release.apk** - Signed release build (4.2 MB) --- **Full Changelog**: https://github.com/NeatCode-Labs/fixupxer/compare/v1.4.5...v1.4.6 - ## 🚀 Major Release: Browser Mode Integration ### ✨ What's New **Browser Mode** * Set FixupXer as your default browser for system-wide URL cleaning * Configurable action priorities with drag-and-drop interface * Smart native app integration with automatic app detection * ReVanced YouTube priority support for ad-free experience * Built-in step-by-step instructions dialog
More…
* Zero-configuration option with intelligent defaults **UI/UX Overhaul** * Perfect text formatting with proper HTML rendering * Material Design 3 compliance with edge-to-edge support * Enhanced settings screen with comprehensive configuration * Unicode typography with professional quotation marks * Improved menu structure with dedicated sections ### ⚙️ Browser Mode Features * **System Integration** - Automatic URL cleaning for all web links * **Action Priorities** - Customizable post-clean behavior (native app, browser, share, clipboard) * **Smart App Detection** - Intelligent handling of installed applications * **ReVanced Support** - Automatic preference for community YouTube alternatives * **Flexible Configuration** - Choose between "Ask every time" or priority-based actions * **Instructions Dialog** - Built-in setup guide with professional formatting ### 🔧 Technical Excellence * Lint-free codebase with zero code quality issues * Thread-safe architecture for enterprise-grade reliability * Comprehensive test suite with 212 tests passing (100% success rate) * Proper Android 15 compliance and deprecated API handling * GPL-3.0-or-later licensing with complete DCO compliance ### 📱 Compatibility * Minimum Android: 5.0 (API 21) * Target Android: 15 (API 35) * Supports phones, tablets, TVs, and cars * Full edge-to-edge design with Material Design 3 ### 📦 Download * **FixupXer-v1.4.6-release.apk** - Signed release build (4.2 MB) --- **Full Changelog**: https://github.com/NeatCode-Labs/fixupxer/compare/v1.4.5...v1.4.6