···11+# MastodonAT (working title)
22+A fork of the Mastodon Android client with Bluesky/ATProto support. Currently work-in-progress.
33+44+## What?
55+Yes, really. This is a fork of the Mastodon Android client with added support for Bluesky and AT Protocol.
66+77+## Why??
88+yeah i just like the mastodon android client more since the react native-based bluesky client is near unusable on my phone but i don't really like the fediverse much sooooooooooo
99+1010+## How???
1111+This uses the [Ozone](https://github.com/christiandeange/ozone) Kotlin library (not to be confused with the Bluesky moderation tool of the same name) with a small Kotlin-to-Java wrapper to interact with the PDS's XRPC API. ATProto-specific code using the wrapper are written on calls that normally route to the Mastodon API. Unimplemented features will still try to use the Mastodon API on the PDS however though it'll fail every time in most cases.
1212+1313+## Can I still use my Mastodon account on this?
1414+Yes. I intended this to still support regular ActivityPub/Mastodon accounts. Bluesky/ATProto is just an added extra.
1515+1616+## Can I use this as a daily-driver?
1717+While technically has most of the features of the official Bluesky client, you probably shouldn't using this as your main client yet. It's missing feeds so you're basically stuck with the chronological Following feed, and refresh token aren't implemented yet meaning you have to constantly log out and re-log in every time you want to use it.
1818+1919+## Implemented features
2020+- [X] Logging in (password-based right now)
2121+- [X] Viewing the timeline
2222+- [X] Viewing posts
2323+- [X] Sending posts
2424+- [X] Like, repost, reply, quote, and pin
2525+- [X] Search
2626+- [ ] Mute, block, and report
2727+- [ ] Bookmarks
2828+- [ ] Lists
2929+- [ ] Filters
3030+- [ ] Trending posts
3131+- [ ] Live feed (using Firehose)
3232+- [ ] Notifications
3333+- [ ] Bluesky-specific features
3434+ - [ ] Feeds
3535+ - [ ] Chats
3636+ - [ ] Labels
3737+ - [ ] Tenor GIFs
3838+ - [ ] Starter packs
3939+ - [ ] Moderation stuff
4040+ - [ ] Post interaction settings (equivalent to post visibility settings in Mastodon)
4141+ - [ ] Multi-language posts (Mastodon only allows one languages on a post)
4242+ - [ ] Detaching quotes
4343+- [ ] Mastodon-specific features (implemented through custom lexicons)
4444+ - [ ] Polls (probably using [Red Dwarf](https://tangled.org/whey.party/red-dwarf)'s implementation)
4545+ - [ ] Custom emojis (using [Bluemoji](https://github.com/aendra-rinisland/bluemoji))
4646+ - [ ] Content warnings
4747+ - [ ] Video attachments coexisting with images (and also more than one videos)
4848+ - [ ] Client indicators (maybe)
4949+- [ ] Miscellaneous stuff
5050+ - [ ] Refresh tokens (i've written code for it but i couldn't figure out how to make it work)
5151+ - [ ] Custom appview servers
5252+ - [ ] (or alternatively) Fetch from [Constellation](https://constellation.microcosm.blue) and the PDS directly instead of relaying on the appview (ala ActivityPub, probably could reference Red Dwarf's implementation)
5353+ - [ ] [Moshidon](https://github.com/LucasGGamerM/moshidon)-specific features (Moshidon is currently based on the pre-UI change Mastodon though it's being rewritten, basing it off on post-UI change Mastodon)
5454+ - [ ] [Wafrn](https://wafrn.net)-specific features (Markdown posts, bites, etc.)
5555+ - [ ] Support for [Bridgy Fed](https://fed.brid.gy)-specific metadata
5656+ - [ ] Proper support for other ActivityPub-based servers (Misskey, Pleroma, etc) and their specific features
5757+5858+Original readme:
5959+160Mastodon for Android
261======================
362
+7-3
build.gradle
···11// Top-level build file where you can add configuration options common to all sub-projects/modules.
22buildscript {
33- repositories {
33+ ext {
44+ kotlin_version = '2.3.0'
55+ }
66+ repositories {
47 google()
58 mavenCentral()
69 }
710 dependencies {
811 classpath "com.android.tools.build:gradle:8.2.2"
912 classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1"
1010- // NOTE: Do not place your application dependencies here; they belong
1313+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
1414+ // NOTE: Do not place your application dependencies here; they belong
1115 // in the individual module build.gradle files
1216 }
1317}
14181519task clean(type: Delete) {
1620 delete rootProject.buildDir
1717-}2121+}
···3030 public Metadata meta;
31313232 public transient Drawable blurhashPlaceholder;
3333+ public transient sh.christian.ozone.api.model.Blob atProtoBlob;
33343435 public Attachment(){}
3536
···386386 <string name="alt_text">Alt text</string>
387387 <string name="help">Help</string>
388388 <string name="what_is_alt_text">What is alt text?</string>
389389- <string name="alt_text_help">Alt text provides image descriptions for people with vision impairments, low-bandwidth connections, or those seeking extra context.\n\nYou can improve accessibility and understanding for everyone by writing clear, concise, and objective alt text.\n\n<ul><li>Capture important elements</li>\n<li>Summarize text in images</li>\n<li>Use regular sentence structure</li>\n<li>Avoid redundant information</li>\n<li>Focus on trends and key findings in complex visuals (like diagrams or maps)</li></ul></string>
389389+ <string name="alt_text_help">Alt text provides image descriptions for people with vision impairments, low-bandwidth connections, or those seeking extra context.\n\nYou can improve accessibility and understanding for everyone by writing clear, concise, and objective alt text.\n\n<ul><li
390390+ >Capture important elements</li>\n<li>Summarize text in images</li>\n<li>Use regular sentence structure</li>\n<li>Avoid redundant information</li>\n<li>Focus on trends and key findings in complex visuals (like diagrams or maps)</li></ul></string>
390391 <string name="edit_post">Edit post</string>
391392 <string name="no_verified_link">No verified link</string>
392393 <string name="compose_autocomplete_emoji_empty">Browse emoji</string>
···930931 <string name="quote_followers_only_cancel">Back to editing</string>
931932 <string name="quote_followers_only_dont_show_again">Don\'t show this message again</string>
932933 <string name="more_replies_found">More replies found</string>
933933-</resources>934934+ <!-- Bluesky/ATProto -->
935935+ <string name="log_in_bsky">Log in to Bluesky</string>
936936+ <string name="server_url_bsky">PDS URL</string>
937937+ <string name="share_sheet_preview_profile_bsky">%s on Bluesky</string>
938938+ <string name="share_sheet_preview_post_bsky">%1$s on Bluesky: “%2$s”</string>
939939+</resources>