* merge toolbar fragment * Fix store screenshot generator * Fix alert color * Fix #609 * Fix crash * bigger hitbox for chips * support mastodon languages * merge ui utils * merge stuff * fix icon * ensure 48dp touch target * init local prefs, add helper function for enum values * update compose action layout * merge compose-adj files * update extended footer * fix poll wrong option checked closes sk22#641 * no border when disabled closes sk22#640 * Fix #610 * Minor fixes * Fix alert color * Fix #609 * Fix crash * Fix #610 * Minor fixes * add resources * more compatible mastodon language * fix html parser * mark as read on refresh * update tab bar * tweak m3 buttons * update compose-adj files * tweak and update styles * m3 expand button * flag icon should be 18dp, actually * More minor fixes closes #612 * More minor fixes closes #612 * Bump version * fix no create status event when redrafting * add material 3 assets * New translations strings.xml (Greek) * New translations strings.xml (Greek) * New translations strings.xml (Italian) * New translations strings.xml (Greek) * New translations strings.xml (Italian) * New translations strings.xml (Thai) * New translations strings.xml (Thai) * New translations strings.xml (Italian) * New translations strings.xml (Thai) * use new buttons for profile fragment * merge compose fragment * merge all the styles! oh dear * New translations full_description.txt (Indonesian) * New translations full_description.txt (Chinese Simplified) * New translations strings.xml (Chinese Simplified) * New translations full_description.txt (Chinese Simplified) * Fix #615 * Minor fixes * Fix #611 * A bunch of crash fixes * New translations strings.xml (Greek) * Make the default server configurable * Pass the system timezone to server when signing up * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Japanese) * Fix #615 * Minor fixes * Fix #611 * A bunch of crash fixes * Make the default server configurable * Pass the system timezone to server when signing up * oops. accidentally pasted the commit message in the code * Remove unused code that caused a crash for some users ¯\_(ツ)_/¯ * New translations strings.xml (Japanese) * New translations strings.xml (Japanese) * Remove unused code that caused a crash for some users ¯\_(ツ)_/¯ * New translations strings.xml (Polish) * New translations strings.xml (Polish) * New translations strings.xml (Turkish) * New translations strings.xml (Belarusian) * prepare merging profile fragment * merge profile fragment * New translations strings.xml (Belarusian) * New translations strings.xml (Greek) * fix icon padding * apply post header changes * minor margin tweaks * fix footer buttons * fix header announcement buttons * New translations strings.xml (Japanese) * New translations strings.xml (Japanese) * New translations strings.xml (Japanese) * New translations strings.xml (Japanese) * New translations strings.xml (Japanese) * New translations strings.xml (Japanese) * New translations full_description.txt (Japanese) * New translations strings.xml (Icelandic) * New translations strings.xml (Icelandic) * New translations strings.xml (Icelandic) * fix replying * New translations strings.xml (Icelandic) * fix translate button * fix more button visibility * fix counts label styling * fix disabled boost button opacity * fix tab layouts * fix notification icon color crash * New translations strings.xml (Greek) * implement elevation listener in home tab * fix elevation and listener in home tab * add elevation scroll listener to notifications * New translations strings.xml (Scottish Gaelic) * Add editorconfig So that PRs like #625 don't happen again * Crash fix * 🤔 * New translations strings.xml (Greek) * New translations strings.xml (Japanese) * New translations strings.xml (French) * New translations strings.xml (French) * New translations strings.xml (French) * fix notification elevation and integrate divider * 🤔 * Crash fix * Add editorconfig So that PRs like #625 don't happen again * New translations strings.xml (Turkish) * save interactions in cache * New translations strings.xml (Turkish) * merge new discover/search * New translations strings.xml (Bengali) * New translations strings.xml (Scottish Gaelic) * New translations strings.xml (Bengali) * merge new settings fragments * fix no auth callback always being executed * allow opening server info from profile closes sk22#593 * fix hide boosts icon color closes sk22#676 * New translations strings.xml (Turkish) * New translations strings.xml (Turkish) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (German) * New translations strings.xml (German) * New translations strings.xml (Turkish) * update fedinuke list from source; doesn't contain any modifications regarding a recent issue * New translations strings.xml (Turkish) * remove unused class * fix crash * darken m3 outline color a bit * use m3 outline again * fix misalignment closes sk22#682 * New translations strings.xml (Turkish) * New translations full_description.txt (Turkish) * New translations short_description.txt (Turkish) * fix crash * fix metadata sorting * show pronouns in header/account lists * fix broken divider line closes sk22#679 * trim pronouns * improve pronoun display * New translations strings.xml (French) * New translations strings.xml (Japanese) * fix broken federated timeline closes sk22#685 * fix broken -1 fallback behavior closes sk22#681 * don't display nothing if server about request fails closes sk22#678 * New translations strings.xml (Ukrainian) * migrate global prefs to local prefs * do confirm unfollow by default * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * New translations full_description.txt (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Russian) * New translations strings.xml (Vietnamese) * New translations strings.xml (Ukrainian) * New translations strings.xml (Vietnamese) * New translations full_description.txt (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Vietnamese) * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * make sure list in prefs are always mutable and nut null * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Russian) * fix pronouns edge case * add back fix for stretched images closes sk22#636 * fix null pointer on missing default posting language * fix default posting language not being applied * bigger username hitbox closes sk22#688 * fix rtl header username alignment closes sk22#689 * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * hopefully fix crashes closes sk22#692 * New translations strings.xml (Ukrainian) * New translations full_description.txt (Ukrainian) * fix pronoun crash * New translations strings.xml (Persian) * New translations strings.xml (Ukrainian) * re-add true black mode * asterisk can be a pronoun * New translations strings.xml (Persian) * true black mode fixes and clean-ups * material 3 button background for switcher * darker tab bar selected background * better align follow/following button widths * restore rainbow refresh colors * fix search transition * fix min width issue with switcher button * fix no elevation when true black is enabled in light theme * use statusForContent to determine spoilerRevealed closes sk22#694 * New translations strings.xml (Persian) * New translations strings.xml (Persian) * New translations strings.xml (Persian) * New translations strings.xml (Persian) * New translations strings.xml (Persian) * New translations strings.xml (Persian) * fix profile tab bar in true black theme * fix m3 default button style closes sk22#697 * prettier role badges closes sk22#663 * fix translate button spacing closes sk22#655 * use m3 switches in dialogs closes sk22#653 * implement color palette switcher * fix color palettes being overwritten * add display and notification settings * clean up code * per-account single notification setting * add missing items to notification types * add prefix replies setting * add show replies/boosts and reply visibility * add load/see new posts settings * fix spectator mode missing spoiler padding * add a bunch of display settings * update fedinuke * add content type settings * add settings for local-onlu * add missing settings items * fix visibility button icon tint * hopefully fix some crashes * normalize padding above edit text * apparently, some people don't like pills closes sk22#706 * fix play button color closes sk22#705
Megalodon
A fork of the Mastodon Android app adding important features that are missing in the official app, focusing on Glitch compatibility, a pretty UI and adding new features that I feel make using the Fediverse a more pleasant experience.
Key features
Unlisted posting
Allows you to post publicly without having your post show up in trends, hashtags or public timelines (i.e., in the tabs “Community”, “Federated” and “Posts”).
When posting with Unlisted visibility, your posts will still be publicly accessible in your profile. They will also be shown in people’s Home timelines, but only if they follow you or someone they follow reblogged/replied to your post.
The Mastodon documentation has some more information about Unlisted posting and Public timelines.
Federated timeline
This allows you to chronologically see all Public posts from people on all other Fediverse neighborhoods your home instance is connected to.
Despite being one of the main features of federated social media, the Federated timeline wasn’t included in the official Mastodon app – supposedly, because this conflicts with Google’s safety requirements for apps on the Play Store.
That’s one of the reasons why choosing a small, well-moderated instance is important. Instance admins and moderators should always make sure to ban abusive users and stop federating with instances who platform them. On well-moderated instances, the Federated timeline can be a welcoming place to meet new people!
Customizable timelines
You can customize Megalodon’s home tab and not only add local and federated timelines, but also pin lists and hashtags.
Even better: You can rename every timeline however you please and pick a distinct icon for each timeline. This way, you can pin the hashtag “#Caturday”, rename your timeline to “CUTENESS OVERLOAD” and set as its icon. :3 You can find the timelines editor by opening your home tab, tapping the
⋮ button in the top right and going to “Edit timelines”.
Draft and schedule posts
Allows to prepare a post and schedule it to send it automatically at a specific time.
You can create drafts, edit them, send them manually later or set a scheduled date. Drafts are technically saved as scheduled posts, so you can view and edit them from other apps that support scheduled posts. Scheduled posts are handled by your home instance, so they'll work even if you uninstall Megalodon.
Installation
IzzyOnDroid
apt.izzysoft.de/fdroid/index/apk/org.joinmastodon.android.sk
Note that you'll need to add Izzy's F-Droid repository to your F-Droid app first:
https://apt.izzysoft.de/fdroid/repo
Google Play Store
play.google.com/store/apps/details?id=org.joinmastodon.android.sk
F-Droid
F-Droid.org? Not yet, sorry!
If you want, you can help me figure out if something's missing in the Issue #47: F-Droid.org
Direct
Press the download button to download the APK. Open the downloaded file on your Android device to install it. Megalodon will automatically notify you about new updates inside the app.
You might have to accept installing APK files from your browser when trying to install it. You can also take a look at all releases on the Releases page.
Megalodon makes use of Mastodon for Android’s automatic update checker. Megalodon will check for new updates available on GitHub and offer to download and install them. You can also manually press “Check for updates” at the bottom of the settings page!
Release variants
All downloads can be found on the Releases page. When downloading a pre-release, expect to see unfinished features and bugs. If you don’t want that, just download the latest full release.
megalodon.apk
Variant with an integrated updater. If you download Megalodon from here (and not from an app store), just download the regular megalodon.apk.
upstream-1234abc.apk
This is an unmodified version of the official Mastodon for Android app the respective Megalodon release is based on. Should you find any bugs in Megalodon (which you will), try to see if it occurs with this variant, too. The last 7 digits of the file name are important to know which version of the official app you're using.
Contribution
Translation
The translation for the base of the app is sourced from the upstream Mastodon for Android project, which you can contribute to on its Crowdin project: https://crowdin.com/project/mastodon-for-android
There's also a bunch of custom strings exclusive to this project that need to be translated. You can help translate Megalodon on Weblate: https://translate.codeberg.org/projects/megalodon
Detailed changes
Features
- Add “Unlisted” as a post visibility option (Pull request)
- Add “Federation” tab and change Discover tab order (Closes issue)
- Add image description button and viewer (Pull request)
- Implement pinning posts and displaying pinned posts (Pull request)
- Implement deleting and re-drafting (Closes issue)
- Implement a bookmark button and list (Closes issue)
- Add “Check for update” button in addition to integrated update checker
- Add “Mark media as sensitive” option
- Add settings to hide replies and reblogs from the timeline (Pull request)
- Follow and unfollow hashtags (Closes issue)
- Notification bell for posts (Closes issue)
- Viewing lists and adding/removing users from lists based on @obstsalatschuessel's Pull request
- List favorited posts
- Accept/reject follow requests
- Display content warning title above text
- Add notifications tab for posts
- Show visibility of original post when replying
- Clickable reply/boost line above posts
- Add push notification setting for post notifications
- Add option to allow voting for multiple options on polls
- Add translate function
- Add language selector
- Implement deleting notifications (disabled by default)
- Long-click boost button to "quote" a post
- Draft and schedule posts
- Display original post when replying
- Display server announcements
- Create, edit and delete lists
- Soft-blocking (by blocking and immediately unblocking)
- Pinnable custom timelines
- Support for local-only posts
- Support for copying the URL to posts/accounts/… in Pixel launcher’s Recent apps view
- Compatibility for Akkoma Bubble timeline
- Listings of followers/following/favorites/boosts can be loaded from the origin instance (there’s an option to disable this in in the settings)
- Allow opening posts/accounts in-app by sharing a URL/handle to Megalodon (Originally implemented in Moshidon, PR)
Behavior
- Make back button return to the home tab before exiting the app (Closes issue)
- Always preserve content warnings when replying (Closes issue)
- Display full image when adding image description (Pull request)
- Set spoiler height independently to content height (Closes issue)
- Option to hide interaction numbers
- Option to always reveal content warnings
- Option to disable scrolling title bars
- No ellipsis for long poll answers
- Show poll vote button for multiple and single answer polls
- Show own vote after voting (Closes issue)
- Make inline emoji search case-insensitive and don't only search from start of emoji names (Pull request)
- Include subject line when sharing e.g. a website to Megalodon
- Improve semantics for voting on polls (radio buttons and checkboxes)
- Copy post URL when long-pressing share button
- Add option to disable swiping between tabs
- Resolve Fediverse links in the app
- Preserve whitespaces in HTML
- Long-click to copy links
- Improved filtering using Mastodon 4.0 API: #202, #212, #255 by @thiagojedi
- Support admin notifications and notifications for edited reblogged posts
- Android file opener added back in addition to image picker
- Replies are inserted below the replied-to post in thread view
- Option to auto-reveal equal content warnings in threads
Visual
- Custom extended footer redesign
- Improvements to the true black mode
- Profile header tweaks
- Custom color themes by @LucasGGamerM
- Custom "megalodon" text logo by @LucasGGamerM
- Custom login screen
- More distinct filled boost icon
- Material You color theme by @LucasGGamerM
- Animations for interaction buttons
- Dedicated icons for different notification types by @florian-obernberger
- Scale text according to system settings
- Header in timeline for followed hashtags
- Indicator for missing alt texts
- Visually grouped (by removing divider lines and reducing padding) threaded replies in thread view
Building
As this app is using Java 17 features, you need JDK 17 or newer to build it. Other than that, everything is pretty standard. You can either import the project into Android Studio and build it from there, or run the following command in the project directory:
./gradlew assembleRelease
Note that Megalodon might be depending on an in-development version of AppKit – a library by Mastodon for Android’s developer. In case the used AppKit version isn’t published to Maven Central yet, you might have to clone, build and publish it to your local Maven repository. For more information, see this GitHub issue.
License
This project is released under the GPL-3 License.


