github SysAdminDoc/HushFacebook v0.12.0

4 hours ago

This release gathers everything since v0.11.0 and still brings 88 patches for Facebook 582.0.0.50.54. New switches leave calls and chat notifications to Messenger, keep the top bar and the tab bar on screen while you scroll, let a tap on a reel's progress bar seek, and take Muse out of the share sheet. The settings home page gets Quick setups and a Report a problem row, and a setting that needs a restart now shows a row that restarts Facebook and brings you back to the same page. You can name the patched app when you patch, and Pick an app icon opens Facebook's App icon page on accounts where Facebook doesn't list it. The kept progress bar shows on every reel and stays where you drag it, and the Reported issues list below maps each report this release touches.

New in this release

  • A new switch under Chats, Leave calls and chats to Messenger, stops Facebook ringing and notifying beside Messenger when you have both (issues #39 and #100). With it on and Messenger installed, Facebook doesn't ring for incoming calls and doesn't post notifications for new messages, reactions, message requests or missed calls, so you only hear them once, from Messenger. Without Messenger, or with Messenger turned off in Android's settings, the switch does nothing and Facebook rings and notifies as before. Hushfacebook can't tell whether you're signed in to Messenger, so if you're signed out you'll miss calls and messages. It comes with Open Messenger from the top bar, starts off and needs no restart.

  • Two new switches under Appearance keep the bars on screen while you scroll, each on its own (issue #132). Keep the tab bar on screen stops the bottom tab bar from sliding away on accounts where Facebook does that by itself. It greys out while Hide the tab bar while scrolling is on, and needs a restart. With the bar kept, the bottom of every page stays above it, so a reel's progress bar isn't hidden behind the tabs. Keep the top bar on screen holds the top bar with search and Messenger in place as you scroll down, with the tabs too when they sit at the top. It works on the next scroll, no restart needed. Both start off.

  • Keep the progress bar has a new switch under Playback, Tap the bar to seek (issue #125). Facebook's bar on reels and videos only moves when you drag its dot, and a tap anywhere else on it did nothing. With the switch on, a tap jumps to that spot, and a drag can start anywhere on the bar. It works with or without Keep the progress bar, starts off and needs no restart.

  • Hushfacebook settings has an App name option (issue #105). Type a name in Morphe Manager when you patch, and it's what shows under the app icon, in App info and on the recent apps screen instead of Facebook, so a patched copy is easy to tell apart. It stays when you pick another app icon. Leave it empty and the labels stay exactly as Facebook ships them. It only changes the name. Clone app is still what lets a copy install next to the official Facebook.

  • The diagnostic report has a Network section with how much Facebook downloaded and uploaded since it finished starting up, and since it last came back on screen. Android already keeps those counts for every app. Hushfacebook just reads them when Facebook starts, when it comes back on screen and when you save the report, and nothing gets sent anywhere. The count covers all of Facebook, Hushfacebook's own saves included. It's there so a copy patched with Block background ad prefetch and one patched without it can be compared with real numbers.

  • A running save now says how fast it's downloading and how long it's been going, in its notification and on the Downloads page, like "1.3 MB a second, 0:42 elapsed". The speed covers about the last five seconds, so it drops when the connection stalls instead of showing the old number. Joining the picture and sound and copying to the gallery show the time only, since nothing's coming over the network then. The time keeps going once a second until the save ends.

  • Change a setting that only takes effect after a restart and a Restart Facebook to apply this change row shows up at the top of the settings page right away. It counts the changes when more than one is waiting. Tap it and Facebook closes and opens again on the same settings page, so you don't have to find your way back. Before, a change like that only got a short message.

  • Report a problem sits just above Support Hushfacebook at the end of the settings home page. It opens the GitHub bug form with your Hushfacebook and Facebook versions, your phone and the switches you've turned on already filled in, and all that's left is saying what happened.

  • Hide Meta upsells has a new switch under Meta's other products, Hide Muse in the share sheet. Muse is Meta's AI agent app, and Facebook lists it among the ways to share a post. With the switch on it's left out, and every other way to share stays in the same order. It starts off and needs no restart.

  • Quick setups, near the top of the settings home page, flips a set of switches in one tap. Quiet hides ads, suggestions, promos and prompts and stops the nagging notifications. Privacy holds back usage reports and camera roll scans, removes tracking from shared links and hides your typing and screenshots. Back to defaults puts every feature switch except Lock Facebook back the way it started. A message says how many settings changed, and the restart row comes up when one of them needs it.

  • Unlock app icons has a new Pick an app icon row right below it that opens Facebook's App icon page (issue #122). Facebook lists that page in Settings and privacy only on some accounts, so on the rest there was no way to get to the icons.

Fixes

  • With Keep the progress bar on, every reel in the Reels tab keeps its bar. Reels under a minute showed it on every other reel only (issue #73), because the Reels tab answers Facebook's minimum length check with its own version and the hook that gives a short reel its bar never ran there. A reel could also come up without the bar right after a swipe, when the hide Facebook meant for the reel leaving the screen landed on the next one.

  • With Keep the progress bar on, a reel no longer picks up the last one's "most replayed" graph or chapter marks. Facebook takes the graph away when the bar thins out, and a kept bar never does, so one reel's graph sat over the next one's bar until you dragged it. After a reel with chapters, the next one could also come up with no bar at all. Both get cleared as each new reel loads now, and the graph shows while you drag, the way Facebook shows it.

  • After you pick an app icon, the long press on the new icon lists Hushfacebook settings again right away. Android takes an app's shortcuts off when its launcher entry changes, and since Facebook keeps running after an icon change, the shortcut stayed gone until Facebook was closed and opened again (issue #119).

  • With Debug logging on, the report's list of screens opened no longer carries the id from a Facebook app link. A link like fb://profile/1234567890 is written as profile/#, since the report's redaction only caught ids of 15 digits or more and older accounts' and most Pages' ids are shorter. Addresses on Instagram, Threads, WhatsApp and m.me are now cut from the whole report the way facebook.com ones already were.

  • Default comment order set to All comments now picks the unfiltered row on posts whose sort menu doesn't list the usual All comments row. A diagnostic report on issue #110 showed menus like that, and those posts stayed on Most relevant. Where a menu has both, the usual row is picked, even if Facebook opened the post on the other one.

  • With Use the system font on, a phone font that draws Bengali or Devanagari itself and hangs the vowel signs past its own line box now gets the extra room too (issue #96). Only Latin letters were measured before, so a font like that could fit y and g and still cut the bottoms off its captions. Text the phone's usual fallback font draws keeps Facebook's layout.

  • No time limit is greyed out while Keep feed position on return is off, and says to turn that one on first (issue #130). It looked like it worked on its own, but with the switch above it off, Facebook refreshes the feed as usual. What you picked for it stays saved while it's greyed out, and settings search shows the same note.

  • Share sheet items to hide no longer loses a ticked item when the list runs out of room. A settings file can fill it with item names this build doesn't know yet, and Save used to keep what fit and quietly drop the rest. Now Save leaves the list open with a note that it's out of room, and nothing changes until you untick something. When the phone doesn't store the change, the list stays open with your ticks and says so, where it used to close as if the save had worked.

  • A real crash's report, and its file in Download/Hushfacebook, can't be wiped by an exception Facebook swallowed on another thread a moment earlier. Hushfacebook puts the report back as it was once Facebook swallows an exception, and it used to do that even when a newer crash had been written in between, deleting whichever file was written last. Each exception now takes back only what it wrote.

  • Hide posts you've already seen keeps its list through a restart when Facebook is busy. A save that came up while all of Facebook's background workers were taken was dropped and never tried again, so the posts seen after it showed up again after a restart, and Forget seen posts could leave the old list on the phone to come back the same way. A save the phone's storage turns down is tried again now too, and the list already saved stays whole until a new one is written in full.

  • Clear diagnostic data stays cleared when an exception Facebook swallowed just before the clear finishes after it. Hushfacebook used to put the crash report from before that exception back, with no Undo tap. Undo still brings back what was cleared, and a crash after the clear keeps its place. When that crash turns out to be one Facebook swallowed too, the report Undo brought back takes its place again.

  • Font file and Use your phone's font no longer stay greyed out when the app holding a picked font stops answering. After 30 seconds the rows come back, the font you had stays, and a note says Hushfacebook stopped waiting. If that app finishes later, nothing changes. The font it was copying isn't saved and doesn't replace yours. Picking another font waits until that app lets go, while Use your phone's font works right away.

  • A save that converts a video's picture or sound keeps to the space set aside for it. The conversion used to write whatever the encoder made, which could take room other saves running alongside were counting on, or the 128 MB every save leaves free. Now it stops at that limit and the save falls back to the plain video file. Sound that comes as xHE-AAC also gets room for the AAC it turns into, worked out from how long it runs. Three times the original file, the old guess, fell short on tracks over a few minutes. A photo that comes as AVIF becomes a JPEG only when the JPEG fits in its own set-aside space and under the size cap, and otherwise it's saved as the AVIF.

  • Tapping Download to phone, Save photo or Save all photos in a post's menu while three saves are already running now says there are too many saves at once. It used to say the video couldn't be found and to play it first, which didn't help. A copied video link waiting to save says the same thing instead of doing nothing.

  • Importing or exporting settings now gives the real answer when the file's app replies right as the 30 second wait runs out. A file turned down at that moment used to get "taking too long" instead of the reason, and a good file's preview never showed.

  • With Debug logging on, Hide sponsored profile posts no longer writes a line each time it draws a post on a profile. Scrolling a long profile could fill the log with them and push everything else in a diagnostic report out. It only logs the posts it hides now, and the report's counts still cover every post.

  • Individual photos, videos and photo chains share one three-save limit. Cancelling a save keeps its slot occupied until cleanup finishes, and a failed worker start gives the slot back.

  • The people, Pages and sites editor keeps rejected drafts open and shows its count and capacity as you type. Single-line editors keep Save and Cancel with the keyboard in landscape, as the word editors do. Search no longer matches the word null for rows without a summary.

  • Font file feedback distinguishes a selected file from an enabled font override. Replacing or removing a font file also keeps the restart reminder visible, including a replacement with the same name.

  • Push diagnostics keep newer observations when another Facebook process writes while a record update is delayed. The clock is sampled under the shared lock, so the delay is no longer mistaken for a restart.

  • With Keep the progress bar on, a reel goes where you drag it again (issue #120). Keeping the full-size look ran Facebook's time writer, which put the bar back at the player's old spot right before Facebook read it to seek. On reels that show preview frames while you drag, that sent the reel back to where the drag began. The same writer sent the bar to the start when the reel's length wasn't known yet.

  • With Show a reel's time on, the time comes back on its own after a reel ends or after a drag with preview frames (issue #73). Facebook hid it at those moments and only showed it again on the next drag, so a reel could play on with the bar but no time.

  • With Keep the progress bar on, reels Facebook gave no bar at all get one too (issue #73). Facebook decides per reel whether it has a bar before any of the patch's other checks, and says no for ads and for some reels it flags on its servers. Now any reel whose length is known gets the bar.

Other changes

  • The patch list now describes the separate Leave calls and chats to Messenger switch under Open Messenger from the top bar, including that it starts off.

  • Settings pages have larger headings and connected navigation lists, with more consistent spacing in dialogs. Search and saved choices work as before.

  • Use the system font, Use the phone's emoji, Text size and Accent color bring up the restart row when you change them. Each one only shows fully after Facebook restarts, and their summaries already said so. A page no longer opens with a line saying a change there applies after a restart, since the row says it and does it.

  • Settings search uses the same matcher as the other Hush apps. It finds the same rows as before: every word you type, in any order, with accents and capitals ignored.

  • A saved diagnostic report now goes in Download/Hushfacebook, the same folder as the crash files, so everything for a bug report is in one place. Reports saved before this stay in Download/Morphe.

  • Reels quality and Stories quality say how each choice relates to Playback quality (issue #90 asked). Their first choice is now called Same as Playback quality, and a quality of their own reads like "Highest for reels, whatever Playback quality is set to." instead of a bare "Highest".

  • The Unlock app icons summary names the Pick an app icon row that opens the App icon page, so it reads right in search results and in every language, and the hint in the list editors writes ID in capitals like the rest of the settings.

  • The README is a lot shorter. It sticks to installing, the settings, the patch table and fixes for the errors people run into, and it now lists the SHA-256 of the two Facebook bundles the patches are checked against. The long version, with every switch's fine print, is still in the repository history.

  • The install guide now points desktop-browser users to HushFacebook Web and its separate userscript instructions.

  • Settings controls have visible focus boundaries and distinct disabled actions in black, Material dark and Material light. Switches and button feedback follow the same small corner scale, and recovery spacing adapts to shorter screens and large text.

  • Downloads keeps the last generic save result until Facebook closes, including when notifications are off. It contains no filename or media address. Joining and gallery-copy notifications now match the phase shown in settings.

  • Diagnostic export shows copying or saving in its row, disables repeat actions while working, and leaves a readable result. Reopening the page keeps that state.

  • With Debug logging on and Hold back analytics uploads off, reports count when Analytics2 requests a retry or finishes without one. This observes the stored retry flag without changing uploads. A job finishing without a retry is not reported as successful delivery.

  • Diagnostic reports have a PUSH section for server registration outcomes and timing (issue #83). Separate lines cover FBNS transport readiness and FCM receive callbacks. Records survive process restarts, retain no tokens or message contents, and distinguish an unavailable observer from a route not observed in the window.

  • With Debug logging and reel downloads on, a reel missing both known sidebars can add a small layout sample to the report. It keeps actual native view class paths, without reading names, captions or count values, to help identify layouts whose Download button is missing (issue #18). Deeper component paths aren't available.

  • Playback quality has now been checked on a Page video story with anonymous viewing on. The 480p ceiling selected 360p from the available qualities, and Highest selected 1080p on the same story.

  • The known-issues notes now reflect reporter confirmations for Reels saving and ads. The original Xiaomi Gallery reporter also confirmed full-quality saves play with sound with Save videos other apps can open off.

  • The settings pages have larger headings and blue navigation icons, with more space between category links. Controls stay grouped, and the version and build details sit below the current status with a quieter appearance. Pause, Resume and Undo have outlined buttons.

Reported issues

  • #120 and #128 Progress bar resetting, and the bar snapping back after a drag: with Keep the progress bar on, a reel goes where you drag it and stays there when you let go.

  • #73 Keep the reel progress bar visible: every reel in the Reels tab keeps its bar, short reels and the ones Facebook gave no bar included, and the time comes back on its own after a reel ends.

  • #122, #137 and #109 App icons: a new Pick an app icon row under Unlock app icons opens Facebook's App icon page, for accounts where Facebook doesn't list it in Settings and privacy.

  • #119 Hushfacebook settings not opening from a long press on the icon: after you pick an app icon, the shortcut is back on the new icon right away, without restarting Facebook.

  • #131 and #105 A custom app name: Hushfacebook settings has an App name option you fill in when you patch, and that name shows under the icon.

  • #39 and #100 Calls and messages coming through both Facebook and Messenger: the new Leave calls and chats to Messenger switch under Chats. Facebook stayed quiet for calls when I tried it between two phones. The message notifications are harder to check, so please say on the issue whether they still come twice for you.

  • #132 Keep the top and bottom bars on screen while scrolling: Keep the tab bar on screen and Keep the top bar on screen under Appearance.

  • #125 Tap to seek in videos: the new Tap the bar to seek switch under Playback.

  • #130 No time limit not working for Block background refresh: No time limit is greyed out until Keep feed position on return is on, and says so.

  • #110 Comment sorting: Default comment order on All comments picks the unfiltered row on posts whose sort menu has no All comments row.

  • #96 Fonts that suit Bengali: with Use the system font on, a phone font that draws Bengali itself gets more room under the line for its vowel signs. I don't have that font on a phone, so please say on the issue whether the captions still get cut off.

  • #90 How Reels quality relates to Playback quality: Reels quality and Stories quality now say it in each choice.

  • #83 Notifications not working: the diagnostic report has a new PUSH section that shows whether Facebook registered for notifications and when. A report saved after a missed notification would help find where they stop.

  • #18 Download button not showing: with Debug logging and reel downloads on, a reel that has no Download button can add a small layout sample to the report.

Behind the scenes

  • patch-for-device.ps1 -PatchOptions hands option values to a patch, like @{ 'Hushfacebook settings' = @('appName=HushBook') }. It stops before patching when the patch isn't in the build or an entry isn't key=value.

  • scripts/fuzz-parsers.ps1 fuzzes the DASH manifest reader and the MP4 joiner with Jazzer, locally and only when you run it. It has to find a bug planted in a test-only reader before it trusts a clean run, keeps every input inside set limits, and minimizes what it finds. The seeds and any saved findings run with the ordinary unit tests. CONTRIBUTING.md has the setup. Its first seeds turned up one thing: a manifest's negative width, height or bitrate went through as a negative number. It reads as unknown now, the same as a missing one.

  • The release check refuses any change to a published patch's name or default, removals included, unless scripts/patch-catalog-compatibility.json records it with a migration note the CHANGELOG repeats word for word. Morphe Manager keeps patch choices by name, so those changes quietly reset what people picked. The baseline is the catalog at the published tag, read only after the hosted receipt matches SHA256SUMS.txt, and the check runs with or without a local receipt or bundle. New patches need nothing.

  • The fingerprint calibration reads the retired 577 and 580 from a folder of their own, HUSHFACEBOOK_FINGERPRINT_HISTORY_DIR, now that the fixture folder only keeps 582. Each bundle has to match the SHA-256, version, ABI and Meta signers scripts/fingerprint-history.txt pins, or the run stops and says what's off. It doesn't skip. Two new lists hold the ranker to nine feed, Reels and story menu targets each from 580 to both 582 builds. CONTRIBUTING.md has the one-time setup.

  • The fingerprint ranker reads back strings Redex moved into a string table, where the call proves which case it asks for, and counts them as the method's own. The report and the saved signature say which table and case each came from. Signatures saved before this are version 1 and get refused, so capture them again. A build with more tables than the ranker reads makes a signature that counts these strings fail closed, since its true match could be missing them. The ranker also stops counting the case number such a call asks for as one of the method's own numbers, since Redex renumbers those cases from build to build.

  • The build moves to Gradle 9.8.1, Kotlin 2.4.21, commons-lang3 3.21.0 and androidx.annotation 1.11.0. They're patch and minor releases, nothing in the patches changes, and the dependency checksums cover the new artifacts.

  • Settings previews are refreshed from both Android SDK capture runs, with focus, disabled, validation and export-result states checked in all three themes.

  • The source ledger now includes FacebookGoodies, current NexAlloy branches and ten reviewed duplicate ReVanced forks. Pinned source and license records are updated; global GitLab coverage remains incomplete.

  • The release receipt has been checked against retained, unforced patch runs for both supported 582 variants. It read all 88 patch results per input without running the patcher again or changing the retained files.

  • Settings captures keep separate copies for each Android SDK and include the end of every category, so long pages are checked below the first screen too. Marketplace previews use the current page layout as well.

  • Corrected the origin record for the download-speed helper so the source checks pass.

  • A fixture test follows the top bar's scroll-away name from where Facebook sets it into the field Keep the top bar on screen reads. A future build that moves the name now fails the test, where before the switch would have quietly done nothing with every test passing.

  • The release script's publish step now checks that the receipt was made for the commit it's about to tag. It read the commit from a field the receipt doesn't have, so the check never ran.

  • The release script's index step stops when it can't read the repository description. It used to leave the description as it was and still say the index was done.

  • The patch, receipt and register scripts read the Android SDK path the way Android Studio writes it in local.properties, with the drive's colon escaped (C\:\\Users\\...). That form used to leave a path Windows couldn't open.

  • patch-for-device.ps1 -Replace and the phone smoke test treat a phone without Facebook as not installed. pm path answers that with exit code 1 and no output, which the scripts took for an adb failure, so a replace install on a clean phone stopped before installing.

  • The translation generator refuses a row for an extra plural form (like "|few") when its table lacks the row that form belongs to. Both checks used to pass, and every other count would have stayed in English.

  • The two Python harnesses that copy the whole checkout delete the copy after a passing run. A failing run still leaves it in the temp folder to look at.

  • patch-for-device.ps1 holds the bundle to the sources it was built from instead of to file times. A deleted or renamed source, or an edit left with an older time, used to get through, so a phone could get a bundle that didn't match the checkout. The script now works out the same input digest the build stamps into the bundle and stops when the two differ. -AllowStaleBundle still patches anyway, and the output says it did.

  • The release receipt builder holds the bundle to the same input digest. It went by file times too, so a source deleted, renamed or put back with an older time since the build got past it. A bundle with no recorded inputs, like the ones published before the build started stamping them, gets the old checks.

  • A kept gate run counts toward the release receipt only while it still holds the files the gate checked. verify-all-patches.ps1 -KeepIn now stamps the SHA-256 of the patched APK, its report and the merge once every check has passed, and the receipt builder hashes them again before reading the run. A patched APK changed afterwards could keep its manifest and alignment and pass the checks the receipt repeats, while the resource table and register checks it skips had only seen the old one. A changed output, a missing hash or a stamp from before this gets the fixture patched again.

  • The release script's publish stage checks the staged release before it tags anything. It takes a copy of the five assets, holds SHA256SUMS.txt to exactly the four files it lists and their hashes, and holds the receipt to the bundle, SBOM and tooling report beside it and to the source commit. Then it uploads that same copy. Before this it only looked for the files, so a bundle or evidence file changed after the bundle stage could go out with checksums and a receipt that no longer matched, and comparing the downloads against the changed files didn't catch it.

  • The publish stage also holds the staged bundle to its source. The bundle has to carry an intact build identity naming the release commit, built clean, and the input digest of the checkout, which has to be that commit with nothing changed. A bundle with its identity taken out used to pass as one from before bundles carried one, once the receipt and checksums were rewritten to match. The checked copy now stays open for reading only until the downloads are compared, so no file in it can be swapped between the check and the upload. The receipt builder reads a kept gate run from its own copy too, and hashes it there.

  • The receipt check holds the receipt's list of extension payloads to the bundle it's checked with. Each payload the bundle carries has to be listed once, with its exact size and hash, and nothing else can be. Only their form was checked before, so a receipt could name payloads the bundle doesn't carry while the SBOM beside it named the right ones.

  • The publish stage won't tag a release whose checked copy holds a link. A link could be pointed somewhere else after the check, and gh would upload whatever it pointed at. The copy's folder and each file in it are held from before the check until the download back is compared, and each hold is checked against the path's own file ID, so a link put there before the open is caught too. The download back goes to a folder with a fresh random name each time. Every cleanup now removes links as links at any depth, so it never empties what one points at. The receipt builder holds its copy of a kept gate run the same way from the hash until that fixture's checks are done, and a copy it turns down is cleaned up without following links either.

  • Four settings files say where they came from. Quick setups, the settings search, Report a problem and the return to settings after a restart were brought over from HushPinterest at c5be4d9, but their headers named only this project. The headers, provenance.json, NOTICE and the README credit it now, and the app's Licenses page shows it with the rest. The check that holds every source file to its rule in provenance.json caught it, along with one download file that had no rule yet.

  • Linux codec checks clean up their tool processes even if the private launcher is terminated. A separate guard keeps ownership of the process group, so cleanup doesn't send a terminating signal through a group number that could have been reused.

The changelog has every earlier release too.

How to update

  1. Update Morphe Manager to 1.34.0 or newer, then refresh the Hushfacebook source.
  2. Patch Facebook 582.0.0.50.54. On most phones that's build 475417104, the arm64-v8a one. Phones with a 32-bit processor take build 475417036, the armeabi-v7a one.
  3. Install over your current patched Facebook with the manager's existing signing key. Keep that key so updates keep working.

The .mpp download is a patch bundle, not a Facebook APK. Installation instructions.

Look over a diagnostic report before you share it. The filter can still miss private text it doesn't recognize.

What was checked

Local checks passed: 2757 runtime tests and 932 patch tests with no failures, plus both Android lints and the release-script checks. All 88 patches applied without forcing to Facebook 582.0.0.50.54, both the arm64-v8a and the 32-bit build, and the only manifest changes are the four permission renames that let it install beside Meta's apps. I also patched 582 with this bundle and installed it over the build already on a phone. Facebook opened signed in on the first and second launch with no crash, and Hushfacebook settings showed 0.12.0. Pause and Resume each took effect through the new restart row, which brought Facebook back to the same settings page. A full diagnostic report saved to Download/Hushfacebook, and a reel saved at 1080p with sound. The same build opened signed in on an Android 16 emulator too.

Don't miss a new HushFacebook release

NewReleases is sending notifications on new releases.