Compare commits

..

77 Commits

Author SHA1 Message Date
LucasGGamerM
dae5989d64 docs: add changelog 2025-01-05 19:34:29 -03:00
LucasGGamerM
1d1c4f2666 build: bump version number 2025-01-05 19:33:11 -03:00
LucasGGamerM
0fecdf345a Merge pull request #570
Upgrade build dependencies for the project
2025-01-04 15:15:24 -03:00
Aurimas
82bcfe3fa8 Update gradle.properties
Co-authored-by: Zongle Wang <wangzongler@gmail.com>
2024-11-17 18:46:51 -08:00
Aurimas
203c43343a Update build.gradle
Co-authored-by: Zongle Wang <wangzongler@gmail.com>
2024-11-17 18:46:43 -08:00
Aurimas Liutikas
4c105acc30 Upgrade build dependencies for the project
- Upgrade to Gradle 8.11
- Upgrade to Android Gradle Plugin 8.7.2
- Remove deprecated android.defaults.buildfeatures.buildconfig=true
  gradle property, it is not needed as mastodon/build.gradle already
  sets android { buildFeatures { buildConfig true } }
- Move plugin repository definition to settings.gradle to match latest
  Gradle practices
- Move to using plugin {} mechanism to add Android Gradle Plugin to
  match the latest Gradle practices
- Remove root project clean task as this project does not produce any
  real artifacts, it seems to be leftover from original Android new
  project template
2024-11-15 17:21:37 -08:00
LucasGGamerM
d81eb6ad0a Merge pull request #538 from FineFindus/fix/hashtag-timeline-open-crash
fix(Timeline/Hashtag): check if hashtag is null
2024-09-09 09:03:54 -03:00
FineFindus
08542cd16f fix(Timeline/Hashtag): check if hashtag is null
Fixes a crash when clicking on hashtags in profiles, since the hashtag
is for some reason null.
2024-09-09 12:03:10 +02:00
LucasGGamerM
f30e12f5c6 Merge pull request #526 from FineFindus/fix/empty-hashtag
feat(Error): disable clicking + crash fix
2024-09-02 09:39:41 -03:00
LucasGGamerM
3a14fb5912 Merge pull request #529 from FineFindus/fix/hashtag-timeline-follow-icon
fix(HashtagTimeline): update follow menu icon
2024-09-02 08:55:15 -03:00
FineFindus
cc64a1b6a2 fix(HashtagTimeline): update follow menu icon
Fixes an issue, where the menu follow icon was not correctly updated,
and would always show the follow state.
2024-08-31 17:49:04 +02:00
FineFindus
7fa079e362 fix(HtmlParser): check if hashtag has text
Fixes a crash, where the text of an hashtag was empty, leading to an oob
string access.
2024-08-31 10:44:53 +02:00
FineFindus
c2e6280a18 feat(ErrorStatusDisplayItem): disable clicking on error item
Disable clicking on the ErrorStatusDisplayItem, since there is no valid
content that can be displayed.
2024-08-31 10:42:09 +02:00
LucasGGamerM
01225b05f2 Merge pull request #515 from collingsr/master
Updated README formatting & content
2024-08-29 20:25:16 -03:00
Ruth Collings
89f27984b7 Update FAQ.md
Co-authored-by: FineFindus <63370021+FineFindus@users.noreply.github.com>
2024-08-22 14:22:30 -04:00
Ruth Collings
61b933655c clean up
removing stuff I dropped in there earlier
2024-08-21 14:22:13 -04:00
Ruth Collings
d47e1939d0 formatting 2024-08-21 14:18:42 -04:00
Ruth Collings
00b934dc69 spacing and lines
it was bothering me
2024-08-19 16:34:22 -04:00
Ruth Collings
c86ff1cce4 update
Reformatted header buttons and donate section, rewrote blurb, shortened up features descriptions and moved some to FAQ which I will tidy up later
2024-08-19 16:30:50 -04:00
LucasGGamerM
5427b21365 Merge pull request #508 from FineFindus/feat/duration
feat(MuteSheet): revert to row
2024-08-18 17:35:05 -03:00
Ruth Collings
d875edbc23 Update README.md 2024-08-15 14:57:57 -04:00
LucasGGamerM
4aecb17497 Merge pull request #507 from FineFindus/fix/note-save-crash
fix(Profile) note save crash
2024-08-14 15:56:20 -03:00
LucasGGamerM
806db1d09f Merge pull request #496 from FineFindus/fix/share-theme
fix(ExternalShareActivity): set theme before opening compose
2024-08-14 15:55:16 -03:00
FineFindus
49cf100d37 fix(MuteAccountSheet): set selected mute time 2024-08-14 19:12:35 +02:00
FineFindus
259a0ae140 feat: use mute row
Partially 6c519b3cb9 to use the full row
again, but keep the selection in a dialog. This improves the UI, as the
secondary button is confusing, and feels out-of-place.
2024-08-14 18:50:58 +02:00
FineFindus
420233da14 fix(Profile): remove note text before hiding NoteTextField
Fixes an issue, where if the NoteTextField was focussed and the note was
hidden, the note would saved and reshown once the NoteTextField was
hidden.
2024-08-12 07:16:15 +02:00
FineFindus
78ec24ff0c feat(Profile): only show note saved if note has not been hidden
The note text field being hidden is already enough comfirmation that the
note has been hidden.
2024-08-12 07:15:22 +02:00
FineFindus
a6f1d981db fix(Profile): use global context for note toast
Uses the global context for displaying the note saved toast. When using
the local context, it was somehow, sometimes null, leading to crashes.
2024-08-12 07:09:17 +02:00
LucasGGamerM
b07789b346 Merge pull request #505 from FineFindus/fix/scheduled-status-quote-crash
fix(StatusDisplayItem): check if account is null before adding quote
2024-08-11 19:32:08 -03:00
FineFindus
42c55d5eee fix(StatusDisplayItem): check if account is null before adding quote
This should fix crashes in the ScheduledStatusListFragment,
as ScheduledStatus do not contain an account.
2024-08-11 23:48:31 +02:00
LucasGGamerM
13545fd5ef Merge pull request #503 from FineFindus/feat/profile-note-save-feedback
feat(Profile): display Toast when saving note
2024-08-11 09:38:45 -03:00
FineFindus
134513babd feat(ProfileFragment): display toast when saving note
It can be quite unclear if the note has been saved. This adds a toast,
to indicate that the profile note has been saved.
2024-08-11 11:48:51 +02:00
FineFindus
91cb616164 refactor(ProfileFragment): remove duplicated InputType setting
The NoteEdit InputType is already set in the UI file.
2024-08-11 11:47:34 +02:00
FineFindus
f3d600282e fix(ExternalShareActivity): set theme before opening compose
Fixes https://github.com/sk22/megalodon/issues/926.
2024-08-05 14:28:20 +02:00
Jacocococo
c26df5762f Still set desired height 2024-08-04 14:44:08 -03:00
Jacocococo
2021c335ac None-square emoji for reactions 2024-08-04 14:44:08 -03:00
Jacocococo
d121f14d30 Non-square emoji in text views 2024-08-04 14:44:08 -03:00
LucasGGamerM
d1a2a70cdc Merge pull request #495 from FineFindus/feat/trending-links-timeline-improvements
feat(Timeline/TrendingLinks): display URL, update icon
2024-08-04 12:16:42 -03:00
FineFindus
89ef482e2e feat(Timeline/TrendingLink): use open icon for open action
The previous icon made it hard to recognize what the action was supposed
to do. Additionally, the new one also indicate that it will take the
user to an external website.
2024-08-04 15:58:35 +02:00
FineFindus
9918649d7c feat(Timeline/TrendingLink): provide WebURL
Since the Web version now has a user-visible timeline, we can provide a
URL to that.
2024-08-04 15:56:32 +02:00
LucasGGamerM
09185faf9a Merge remote-tracking branch 'refs/remotes/FineFindus/feat/quote-filter-hide'
# Conflicts:
#	mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java
2024-08-04 09:33:55 -03:00
LucasGGamerM
bed201a2f7 docs: add 107 changelog 2024-08-03 10:01:56 -03:00
LucasGGamerM
5e7a4c0136 build: bump version number 2024-08-03 09:55:17 -03:00
gallegonovato
bcb8717d5f Translated using Weblate (Spanish)
Currently translated at 100.0% (420 of 420 strings)

Translation: Moshidon/megalodon_values
Translate-URL: https://translate.codeberg.org/projects/moshidon/megalodon_values/es/
2024-08-03 12:50:50 +00:00
gallegonovato
ed1c1bd097 Translated using Weblate (Spanish)
Currently translated at 100.0% (39 of 39 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/es/
2024-08-03 12:50:50 +00:00
joenepraat
f480532fd6 Translated using Weblate (Dutch)
Currently translated at 100.0% (39 of 39 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/nl/
2024-08-03 12:50:50 +00:00
Vaclovas Intas
cc056cef08 Translated using Weblate (Lithuanian)
Currently translated at 23.0% (9 of 39 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/lt/
2024-08-03 12:50:50 +00:00
Hayny
9e7445b8d8 Translated using Weblate (French)
Currently translated at 5.1% (2 of 39 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/fr/
2024-08-03 12:50:50 +00:00
Lefteris T
e2d96d3bc7 Translated using Weblate (Greek)
Currently translated at 100.0% (420 of 420 strings)

Translation: Moshidon/megalodon_values
Translate-URL: https://translate.codeberg.org/projects/moshidon/megalodon_values/el/
2024-08-03 12:50:50 +00:00
Lefteris T
4f5c99be21 Translated using Weblate (Greek)
Currently translated at 100.0% (120 of 120 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/el/
2024-08-03 12:50:50 +00:00
LucasGGamerM
0388f9d9be fix(toggle-expanded): fix crash when headers happen to be empty 2024-08-03 09:40:28 -03:00
LucasGGamerM
c45128ced0 fix(unofficial-quotes): fix crash when results.statuses is null 2024-08-03 09:36:16 -03:00
LucasGGamerM
f404d2f9cd Merge pull request #491 from FineFindus/fix/discover-scroll-regression
fix(Discover): switch post and hashtag fragments everywhere
2024-08-03 08:05:10 -03:00
FineFindus
2dada69eb8 fix(Discover): switch post and hashtag fragments everywhere
Fixes a regression in 5edbe9b826, whcih
did not switch the fragments everywhere. This caused the scroll-to-top
functionality to not work and the posts to not immediatly load.

Closes https://github.com/LucasGGamerM/moshidon/issues/483.
2024-08-03 11:30:58 +02:00
FineFindus
b7e0596014 feat(StatusDisplayItem): do not hide self-quoted posts 2024-08-03 11:22:40 +02:00
FineFindus
dbef984908 feat(StatusDisplayItem): hide statuses with quotes of muted/blocked
accounts

Hides Statuses with non-official quotes of accounts that are
blocked/muted. This is equivalent to how misskey handles muted quotes.

Closes https://github.com/LucasGGamerM/moshidon/issues/488.
2024-08-03 10:59:51 +02:00
FineFindus
55259f103d feat(Quote): hide filtered quotes
Hides quote of that would have been hidden by a filter, essentially
reverting back to the previous behaviour.

(Partially) Closes: https://github.com/LucasGGamerM/moshidon/issues/488
2024-08-03 00:08:45 +02:00
LucasGGamerM
81519fe906 fix(f-droid): remove f-droid version suffix 2024-08-02 16:43:55 -03:00
LucasGGamerM
07ab3c394a Merge pull request #485 from FineFindus/feat/draft-improvements
feat(Draft): display ScheduledStatus highlighted and formatted
2024-08-02 16:15:05 -03:00
LucasGGamerM
620cc94351 fix(pixelfed): make pixelfed login work again 2024-08-02 16:02:04 -03:00
LucasGGamerM
2494918171 fix(self-updater): export receiver for android 13 and plus 2024-08-02 15:30:27 -03:00
Grishka
a0bed5e739 fix: cherrypick a patch for the Sdk 34 from upstream 2024-08-02 15:24:03 -03:00
FineFindus
a42bf86a1e feat: display ScheduledStatus rendered
Fakes the highlighting and formatting of ScheduledStatus by injecting
the correct HTML tags.

Fixes https://github.com/LucasGGamerM/moshidon/issues/478.
2024-08-01 19:32:53 +02:00
LucasGGamerM
9c7ae9653b Merge pull request #487 from FineFindus/fix/uri-crash
fix: check if uri is hierarchical
2024-08-01 14:27:05 -03:00
FineFindus
44473705b9 feat(Settings/About): hide pre-release option in nightly 2024-08-01 14:07:54 +02:00
FineFindus
f1d40f8963 fix(Tacking): check if uri is hierarchical
Checks if the given uri is hierarchical, as otherwise the
`getQueryParameterNames` function will throw an exception.
2024-08-01 14:07:38 +02:00
FineFindus
fbae5d8816 feat(Draft): only hide media preview if status is senstive
Closes https://github.com/LucasGGamerM/moshidon/issues/478.
2024-07-31 22:39:26 +02:00
LucasGGamerM
43afbb7523 Merge pull request #484 from FineFindus/fix/quote
fix: correctly render more unofficial quotes
2024-07-30 20:05:23 -03:00
LucasGGamerM
080815846f Merge pull request #482 from FineFindus/feat/GNOME-icon
feat(Timelines): add GNOME icon
2024-07-30 20:03:43 -03:00
FineFindus
4b6c6cbcfe refactor(Quotes): inlcude URL scheme in quote regex
This should increase the performance, whilst rejecting more incorrect
URLs and allowing more correct ones.
2024-07-30 21:51:36 +02:00
FineFindus
117037e7e8 feat(Quote): only show quotes for status without attachments 2024-07-30 20:47:37 +02:00
FineFindus
05972fc702 fix(Quotes): increase TLD max length 2024-07-30 20:47:08 +02:00
LucasGGamerM
28084b9f9e Merge remote-tracking branch 'refs/remotes/weblate/master' 2024-07-29 19:43:19 -03:00
joenepraat
02010df408 Translated using Weblate (Dutch)
Currently translated at 100.0% (420 of 420 strings)

Translation: Moshidon/megalodon_values
Translate-URL: https://translate.codeberg.org/projects/moshidon/megalodon_values/nl/
2024-07-29 22:34:59 +00:00
joenepraat
38f77c69d1 Translated using Weblate (Dutch)
Currently translated at 100.0% (39 of 39 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/nl/
2024-07-29 22:34:58 +00:00
joenepraat
d0a8c26b65 Translated using Weblate (Dutch)
Currently translated at 100.0% (120 of 120 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/nl/
2024-07-29 22:34:58 +00:00
FineFindus
401602e5bc feat(Timelines): add GNOME icon 2024-07-29 22:38:56 +02:00
96 changed files with 793 additions and 444 deletions

54
FAQ.md
View File

@@ -7,3 +7,57 @@ A: There are many, but the most outstanding differences are: the ability to have
Q: Will there ever be a version of Moshidon for iOS?
A: No. As android and iOS apps do not share code, it is incredibly hard to port.
## Detailed changes
### Features
* [Adding the ability to view other server's local timelines](https://github.com/LucasGGamerM/moshidon/tree/feature/local-timelines)
* [Adding the ability to load followers and following from remote instance](https://github.com/LucasGGamerM/moshidon/tree/feature/remote-followers)
* [Adding the ability to have filtered posts show with a warning](https://github.com/LucasGGamerM/moshidon/tree/feature/filters_again)
* [Add “Unlisted” as a post visibility option](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/enable-unlisted)
([Pull request](https://github.com/mastodon/mastodon-android/pull/103))
* Adding a useful private profile note box
* Auto hiding the compose button on scroll
* Adding the ability to remind yourself to add alt text to images
* An indicator for if an image has alt text or not
* Adding the ability to have drafts
* Also adding the ability to view announcements from your instance
* Adding the ability to post for local timeline only (Only on instances that support it!)
* [Add image description button and viewer](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/display-alt-text) ([Pull request](https://github.com/mastodon/mastodon-android/pull/129))
* [Implement pinning posts and displaying pinned posts](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/pin-posts) ([Pull request](https://github.com/mastodon/mastodon-android/pull/140))
* [Implement deleting and re-drafting](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/delete-redraft) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/21))
* [Implement a bookmark button and list](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/bookmarks) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/22))
* [Add “Check for update” button in addition to integrated update checker](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/check-for-update-button)
* [Add “Mark media as sensitive” option](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/mark-media-as-sensitive)
* [Add settings to hide replies and reposts from the timeline](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/filter-home-timeline) ([Pull request](https://github.com/mastodon/mastodon-android/pull/317))
* [Follow and unfollow hashtags](https://github.com/sk22/megalodon/commit/7d38f031f197aa6cefaf53e39d929538689c1e4e) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/233))
* [Notification bell for posts](https://github.com/sk22/megalodon/commit/b166ca705eb9169025ef32bbe6315b42491b57ea) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/81))
* [Viewing lists and adding/removing users from lists](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:list-timeline-views) based on [@obstsalatschuessel](https://github.com/obstsalatschuessel)'s [Pull request](https://github.com/mastodon/mastodon-android/pull/286)
* [List favorited posts](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/favs-list)
* [Accept/reject follow requests](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/follow-requests)
* [Display content warning title above text](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/cw-above-text)
* [Add notifications tab for posts](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/posts-notifications-tab)
* [Show visibility of original post when replying](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/display-reply-visibility)
* [Clickable reply/boost line above posts](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:clickable-boost-reply-line)
* [Clickable reply line while replying to open original post](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/clickable-reply-line-compose)
### Behavior
* Ask for confirmation before reblogging
* Adding a bottom option for the publish button, allowing for easier use on larger screens!
* [Make back button return to the home tab before exiting the app](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/back-returns-home) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/118))
* [Always preserve content warnings when replying](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/always-preserve-cw) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/113))
* [Display full image when adding image description](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/compose-image-description-full-image) ([Pull request](https://github.com/mastodon/mastodon-android/pull/182))
* [Set spoiler height independently to content height](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:spoiler-height-independent) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/166))
* [Option to hide interaction numbers](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:settings/hide-interaction-numbers)
* [Option to always reveal content warnings](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/cw-above-text)
* [Option to disable scrolling title bars](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:settings/disable-marquee)
### Visual
* [Custom extended footer redesign](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:compact-extended-footer)
* [Improvements to the true black mode](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:true-black-improvements)
* [Profile header tweaks](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:ui/profile-header-tweaks)

215
README.md
View File

@@ -1,185 +1,91 @@
![MoshidonLogo](mastodon/src/main/res/mipmap-xhdpi/ic_launcher_round.png)
# ![MoshidonLogo](mastodon/src/main/res/mipmap-xhdpi/ic_launcher_round.png) Moshidon, the material you mastodon client!
# Moshidon, the material you mastodon client!
> A fork of [megalodon](https://github.com/sk22/megalodon) which is a fork of [official Mastodon Android app](https://github.com/mastodon/mastodon-android) adding important features that are missing in the official app and possibly wont ever be implemented, such as the federated timeline, unlisted posting, bookmarks and an image description viewer.
> A fast, highly customizable, up-to-date fork of [megalodon](https://github.com/sk22/megalodon) adding important features such as a fully federated timeline, unlisted posting, drafts, scheduled posts, bookmarks, and alt text warnings.
[![Download latest release](https://img.shields.io/badge/dynamic/json?color=282C37&label=Download%20APK&query=%24.tag_name&url=https%3A%2F%2Fapi.github.com%2Frepos%2FLucasGGamerM%2Fmoshidon%2Freleases%2Flatest&style=for-the-badge)](https://github.com/LucasGGamerM/moshidon/releases/latest/download/moshidon.apk)
## Download Now
[![Download nightly release](https://img.shields.io/badge/dynamic/json?color=282C37&label=Download%20Nightly%20APK&query=%24.tag_name&url=https%3A%2F%2Fapi.github.com%2Frepos%2FLucasGGamerM%2Fmoshidon%2Freleases%2Flatest&style=for-the-badge)](https://github.com/LucasGGamerM/moshidon-nightly/releases/latest/download/moshidon-nightly.apk)
<a href="https://play.google.com/store/apps/details?id=org.joinmastodon.android.moshinda"><img height="35" alt="Get it on Google Play" src="img/google-play-badge.png"></a> <a href="https://f-droid.org/pt_BR/packages/org.joinmastodon.android.moshinda"><img height="35" alt="Get it on F-Droid" src="img/f-droid-badge.png"></a> <a href="https://apt.izzysoft.de/fdroid/index/apk/org.joinmastodon.android.moshinda"><img height="35" alt="Get it on IzzyOnDroid" src="img/izzy-badge.png"></a>
[![GitHub Release Download](https://img.shields.io/badge/dynamic/json?color=282C37&label=Download%20APK&query=%24.tag_name&url=https%3A%2F%2Fapi.github.com%2Frepos%2FLucasGGamerM%2Fmoshidon%2Freleases%2Flatest&style=for-the-badge)](https://github.com/LucasGGamerM/moshidon/releases/latest/download/moshidon.apk) [![Translation status](https://translate.codeberg.org/widgets/moshidon/-/svg-badge.svg)](https://translate.codeberg.org/engage/moshidon/) [![GitHub Nightly Download](https://img.shields.io/badge/dynamic/json?color=282C37&label=Download%20Nightly%20APK&query=%24.tag_name&url=https%3A%2F%2Fapi.github.com%2Frepos%2FLucasGGamerM%2Fmoshidon%2Freleases%2Flatest&style=for-the-badge)](https://github.com/LucasGGamerM/moshidon-nightly/releases/latest/download/moshidon-nightly.apk) [![GitHub Nightly Build Download](https://github.com/LucasGGamerM/moshidon/actions/workflows/nightly-builds.yml/badge.svg)](https://github.com/LucasGGamerM/moshidon/actions/workflows/nightly-builds.yml)
[![Translation status](https://translate.codeberg.org/widgets/moshidon/-/svg-badge.svg)](https://translate.codeberg.org/engage/moshidon/)
&nbsp;
[![Nightly build](https://github.com/LucasGGamerM/moshidon/actions/workflows/nightly-builds.yml/badge.svg)](https://github.com/LucasGGamerM/moshidon/actions/workflows/nightly-builds.yml)
## Donate
<a href="https://play.google.com/store/apps/details?id=org.joinmastodon.android.moshinda"><img height="50" alt="Get it on Google Play" src="img/google-play-badge.png"></a>
&nbsp;
<a href="https://f-droid.org/pt_BR/packages/org.joinmastodon.android.moshinda"><img height="50" alt="Get it on F-Droid" src="img/f-droid-badge.png"></a>
&nbsp;
<a href="https://apt.izzysoft.de/fdroid/index/apk/org.joinmastodon.android.moshinda"><img height="50" alt="Get it on IzzyOnDroid" src="img/izzy-badge.png"></a>
<a href="https://github.com/sponsors/LucasGGamerM">Github Sponsors</a> | <a href="https://liberapay.com/LucasGGamerM/donate">Liberapay</a> | Monero Wallet Key: `4886mdarcyB6Yf8Qc6vDJBK1fz6ibHFLZUmHb4GZZz9yLGNhcG3XC64e5UZ8dVQYTLZb82W6P9WhteowW4STJEec97Gf22j`
## Help out the project by donating at: https://github.com/sponsors/LucasGGamerM!
### We also support LiberaPay at: https://liberapay.com/LucasGGamerM/donate
## Key Features
### You can also donate some Monero through this wallet address as well:
4886mdarcyB6Yf8Qc6vDJBK1fz6ibHFLZUmHb4GZZz9yLGNhcG3XC64e5UZ8dVQYTLZb82W6P9WhteowW4STJEec97Gf22j
[ screenshot of full timeline in default colour scheme ]
[ screenshot of full timeline in an alt colour scheme ]
[ screenshot of profile page ]
[ screenshot of compose post window ]
---
### Flexible Timelines
## Key features
[ Home dropdown menu ]
### **The ability to add other server's local timeline to your timelines**
Under the Home menu by default you can see your active account's timeline, your server's local timeline, and your server's federated timeline. You can also pin hashtags, lists, other servers, or make a custom view of just your posts, your bookmarks, or your favourites for quick access. Then sort these timelines to prioritize the ones you visit most often.
It can be accessed in the "Edit timelines" menu, where you can add a new "Community" to see other server's local posts!
### Multiple Accounts & Crossposting
### **View remote profiles**
Sign in to multiple accounts in the same app and easily switch between them. Press and hold on the boost or fave button to boost or fave a post to a different account than the one you are currently browsing with.
You can now see all of a profile follows and followers, by directly loading them from the profile's home instance. In case of a failed lookup, the app will automatically fall back to the older method.
[ boost icon pop up select profile ]
### **Translate posts easily**
### Drafts & Scheduled Posts
Allows you to easily translate posts in another language with a translate button! Your instance must support translation, otherwise it will not work.
Write posts and save them, or schedule them to post later. Edit and delete your drafts.
### **Show posts filtered with a warning**
### Alt Text Tag & Reminder
Allows you to have filtered posts collapsed with a warning! As shown in the screenshots:
An unobtrusive ALT tag appears on images with alt text. Clicking on the icon makes the alt text appear. By default, Moshidon will show a warning to add alt text if your post has any attachments lacking alt text. This is for better accessibility, and it can be disabled in settings. You can also hide from your feed all posts that are lacking in alt text.
Before | After
:-------------------------:|:-------------------------:
![Screenshot_20230205-100200edited](https://user-images.githubusercontent.com/71328265/216820539-20802dc5-e433-4511-b2d9-291d810e4ef2.png) | ![Screenshot_20230205-100203edited](https://user-images.githubusercontent.com/71328265/216820544-231b2966-f38f-4ec6-b555-d39c62433839.png)
[ image with alt text icon higlighted ]
[ alt text expanded ]
### Themes & Customization
### **Color themes**
Moshidon is designed according to Material Design principles. Follow your device's light or dark mode settings or change colour palette - your system's default, purple, black & white, "pitch black" (battery saving) and more. Customize your experience by moving or renaming the publish button, show or hide sensitive media by default, reduce motion, collapse long posts, add haptic feedback, or making the fave button a heart &hearts; or a star &starf;.
Allows you to change theme within the app. Supports Material You, purple, pink, green, blue, red, orange, yellow and Nord!
### Not Just For Mastodon
### **Unlisted posting**
Supports features available on other types of fediverse servers such as admin announcements, showing pronouns in user names, post translation, emoji reactions, local-only posting, and markdown or html in posts.
**Allows you to post publicly without having your post show up in trends, hashtags or public timelines (i.e., in the tabs “Local”, “Community” and “Posts”).**
### Fully Federated Feed & Profiles
When posting with Unlisted visibility, your posts will still be publicly accessible in your profile. They will also be shown in peoples Home timelines, but only if they follow you or someone they follow reposted/replied to your post.
The Mastodon documentation has some more information about [Unlisted posting](https://docs.joinmastodon.org/user/posting/#unlisted) and [Public timelines](https://docs.joinmastodon.org/user/network/#timelines).
See all public posts from servers your server federates with and fetch profiles from a user's local server for accurate up to date information.
### **Federated timeline**
## And more...
- quote-posts - links to fediverse posts in other posts will be loaded inline like quote-tweets
- manage pinned posts and bookmarks
- manage lists, filters, and most privacy settings
- display pronouns in timelines, threads, and user listings
- get only specific types of notifications (no more finished polls!), limit who you get notifications from, or group all notifications into one.
- automatically add "re:" to beginning of replies with content warnings
- ask before boosting or deleting posts
- when replying to a boosted post automatically mention the person who boosted it
- overlay audio from posts, allowing your existing media to keep playing
- auto-reveal CWs that are the same as ones you've already opened, or always reveal content warnings and sensitive media
- hide media previews in timelines (save data)
- show post interaction counts in timeline
- allow custom emoji in display names
- enable scrolling text for long display names
- hide interaction buttons
- show post dividers
**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 wasnt included in the official Mastodon app supposedly, because this conflicts with Googles safety requirements for apps on the Play Store.
Thats 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!
## Installation & Releases
### **Image description viewer**
Moshidon is available on GitHub, Google Play, F-Droid, and the IzzyOnDroid repo. All sources provide the same ` moshidon.apk ` stable release. Older releases are available on the [Releases](https://github.com/LucasGGamerM/moshidon/releases) page.
**Allows you to quickly check whether an image or video has an alternative text attached to it.**
### How to Install from GitHub
[Download the latest stable release from Github](https://github.com/LucasGGamerM/moshidon/releases/latest/download/moshidon.apk) and open it. You might have to accept installing APK files from your browser. Moshidon will automatically check for new updates available on GitHub and offer to download and install them within the app. You can also manually press “Check for updates” at the bottom of the settings page.
This is important to **ensure the content youre sharing is as accessible as possible** to people who cant see the images and rely on software to read back the provided content descriptions. Thankfully, its quite common for people on the Fediverse to provide such alt texts, and hopefully things stay this way!
### Nightly Version
All ` moshidon-night.apk ` nightly builds can be downloaded on the [Nightly Releases](https://github.com/LucasGGamerM/moshidon-nightly/releases) page. This is an unstable version with an integrated updater for development and testing purposes. If you find any bugs with it, please file a bug report on our [Issues](https://github.com/LucasGGamerM/moshidon/issues) page.
### **Reminder to add alt text to attached media**
By default, Moshidon will show a warning to add alt text if your post has any attachments without any alt text. This is for better accessibility, and it can easily be bypassed and disabled in settings.
### **Pinning posts**
**This lets you can highlight important posts on your profile. A dedicated “Pinned” tab in peoples profiles shows all the posts they pinned.**
On the Fediverse, its quite common for people to pin posts they want others to read before following them. You can pin/unpin posts yourself by clicking the `⋯` button in the top right corner of your posts.
### **Bookmarks**
**They allow for quickly saving posts and viewing them through the Bookmarks button on the top right of your profile.**
To bookmark a post, press the button between the Favorite and Share buttons on the bottom of the post. Bookmarks are saved privately, so the post authors wont know you saved their post the list of bookmarked posts is only visible to you.
## Installation
**Press the download button above to download the APK. Open the downloaded file on your Android device to install it. Moshidon will automatically notify you about new updates inside the app.**
To install this app on your Android device, download the [latest release from GitHub](https://github.com/LucasGGamerM/moshidon/releases/latest/download/moshidon.apk) and open it. 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](https://github.com/LucasGGamerM/moshidon/releases) page.
Moshidon makes use of [Mastodon for Android](https://github.com/mastodon/mastodon-android)s automatic update checker. Moshidon 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!
Moshidon is also available in [IzzyOnDroid repo](https://apt.izzysoft.de/fdroid/index/apk/org.joinmastodon.android.moshinda), compatible with all F-Droid clients. The APK provided here is the same as the one included in the Releases.
## Release variants
### Stable variant
All stable version downloads can be found on the [Releases](https://github.com/LucasGGamerM/moshidon/releases) page.
**`moshidon.apk`**
Variant with an integrated updater. If you download Moshidon from here (and not from an app store), just download the regular `moshidon.apk`.
### Nightly variant
All nightly builds can be downloaded at [Nightly Releases](https://github.com/LucasGGamerM/moshidon-nightly/releases) page.
**`moshidon-nightly.apk`**
Unstable variant with an integrated updater. It's for development and testing purposes. If you find any bugs with it, please file a bug report at our [issues](https://github.com/LucasGGamerM/moshidon/issues) page.
---
## Detailed changes
### Features
* [Adding the ability to view other server's local timelines](https://github.com/LucasGGamerM/moshidon/tree/feature/local-timelines)
* [Adding the ability to load followers and following from remote instance](https://github.com/LucasGGamerM/moshidon/tree/feature/remote-followers)
* [Adding the ability to have filtered posts show with a warning](https://github.com/LucasGGamerM/moshidon/tree/feature/filters_again)
* [Add “Unlisted” as a post visibility option](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/enable-unlisted)
([Pull request](https://github.com/mastodon/mastodon-android/pull/103))
* Adding a useful private profile note box
* Auto hiding the compose button on scroll
* Adding the ability to remind yourself to add alt text to images
* An indicator for if an image has alt text or not
* Adding the ability to have drafts
* Also adding the ability to view announcements from your instance
* Adding the ability to post for local timeline only (Only on instances that support it!)
* [Add image description button and viewer](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/display-alt-text) ([Pull request](https://github.com/mastodon/mastodon-android/pull/129))
* [Implement pinning posts and displaying pinned posts](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/pin-posts) ([Pull request](https://github.com/mastodon/mastodon-android/pull/140))
* [Implement deleting and re-drafting](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/delete-redraft) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/21))
* [Implement a bookmark button and list](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/bookmarks) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/22))
* [Add “Check for update” button in addition to integrated update checker](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/check-for-update-button)
* [Add “Mark media as sensitive” option](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/mark-media-as-sensitive)
* [Add settings to hide replies and reposts from the timeline](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/filter-home-timeline) ([Pull request](https://github.com/mastodon/mastodon-android/pull/317))
* [Follow and unfollow hashtags](https://github.com/sk22/megalodon/commit/7d38f031f197aa6cefaf53e39d929538689c1e4e) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/233))
* [Notification bell for posts](https://github.com/sk22/megalodon/commit/b166ca705eb9169025ef32bbe6315b42491b57ea) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/81))
* [Viewing lists and adding/removing users from lists](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:list-timeline-views) based on [@obstsalatschuessel](https://github.com/obstsalatschuessel)'s [Pull request](https://github.com/mastodon/mastodon-android/pull/286)
* [List favorited posts](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/favs-list)
* [Accept/reject follow requests](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/follow-requests)
* [Display content warning title above text](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/cw-above-text)
* [Add notifications tab for posts](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/posts-notifications-tab)
* [Show visibility of original post when replying](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/display-reply-visibility)
* [Clickable reply/boost line above posts](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:clickable-boost-reply-line)
* [Clickable reply line while replying to open original post](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/clickable-reply-line-compose)
### Behavior
* Allow for confirmation before reblogging
* Adding a bottom option for the publish button, allowing for easier use on larger screens!
* [Make back button return to the home tab before exiting the app](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/back-returns-home) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/118))
* [Always preserve content warnings when replying](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/always-preserve-cw) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/113))
* [Display full image when adding image description](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/compose-image-description-full-image) ([Pull request](https://github.com/mastodon/mastodon-android/pull/182))
* [Set spoiler height independently to content height](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:spoiler-height-independent) ([Closes issue](https://github.com/mastodon/mastodon-android/issues/166))
* [Option to hide interaction numbers](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:settings/hide-interaction-numbers)
* [Option to always reveal content warnings](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/cw-above-text)
* [Option to disable scrolling title bars](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:settings/disable-marquee)
### Visual
* [Custom extended footer redesign](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:compact-extended-footer)
* [Improvements to the true black mode](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:true-black-improvements)
* [Profile header tweaks](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:ui/profile-header-tweaks)
## Building
## Building & Contributing
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:
@@ -191,14 +97,13 @@ As this app is using Java 17 features, you need JDK 17 or newer to build it. Oth
This project is released under the [GPL-3 License](./LICENSE).
## Links
## Contact & Support
**<a rel="me" href="https://floss.social/@moshidon">@moshidon@floss.social</a>**
[Official Matrix Chatroom](https://matrix.to/#/#moshidon:floss.social)
[F.A.Q](FAQ.md)
[Official matrix chatroom:](https://matrix.to/#/#moshidon:floss.social) https://matrix.to/#/#moshidon:floss.social
[Moshidon Roadmap](https://github.com/users/LucasGGamerM/projects/1)
[Moshidon roadmap](https://github.com/users/LucasGGamerM/projects/1)
<a rel="me" href="https://floss.social/@moshidon">@moshidon<wbr>@floss.social</a>
---

View File

@@ -1,23 +1,3 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
mavenCentral()
maven {
url "https://www.jitpack.io"
content {
includeModule 'com.github.UnifiedPush', 'android-connector'
}
}
mavenLocal()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
plugins {
id("com.android.application") version "8.7.2" apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}

View File

@@ -17,7 +17,5 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=false
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=true
android.nonFinalResIds=false
org.gradle.configuration-cache=true
org.gradle.configuration-cache=true

View File

@@ -1,7 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=e111cb9948407e26351227dabce49822fb88c37ee72f1d1582a69c68af2e702f
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
distributionSha256Sum=57dafb5c2622c6cc08b993c85b7c06956a2f53536432a30ead46166dbca0f1e9
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -16,8 +16,8 @@ android {
applicationId "org.joinmastodon.android.moshinda"
minSdk 23
targetSdk 34
versionCode 106
versionName "2.3.0+fork.106.moshinda"
versionCode 108
versionName "2.3.0+fork.108.moshinda"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
resourceConfigurations += ['ar-rSA', 'ar-rDZ', 'be-rBY', 'bn-rBD', 'bs-rBA', 'ca-rES', 'cs-rCZ', 'da-rDK', 'de-rDE', 'el-rGR', 'es-rES', 'eu-rES', 'fa-rIR', 'fi-rFI', 'fil-rPH', 'fr-rFR', 'ga-rIE', 'gd-rGB', 'gl-rES', 'hi-rIN', 'hr-rHR', 'hu-rHU', 'hy-rAM', 'ig-rNG', 'in-rID', 'is-rIS', 'it-rIT', 'iw-rIL', 'ja-rJP', 'kab', 'ko-rKR', 'my-rMM', 'nl-rNL', 'no-rNO', 'oc-rFR', 'pl-rPL', 'pt-rBR', 'pt-rPT', 'ro-rRO', 'ru-rRU', 'si-rLK', 'sl-rSI', 'sv-rSE', 'th-rTH', 'tr-rTR', 'uk-rUA', 'ur-rIN', 'vi-rVN', 'zh-rCN', 'zh-rTW']
}
@@ -108,7 +108,8 @@ android {
}
fdroidRelease {
initWith release
versionNameSuffix '-fdroid'
// The F-droid build system doesn't like this at all for some reason.
// versionNameSuffix '-fdroid'
// signingConfig signingConfigs.release
}
}

View File

@@ -211,7 +211,13 @@ public class GithubSelfUpdaterImpl extends GithubSelfUpdater{
if(state==UpdateState.DOWNLOADING)
throw new IllegalStateException();
DownloadManager dm=MastodonApp.context.getSystemService(DownloadManager.class);
MastodonApp.context.registerReceiver(downloadCompletionReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.TIRAMISU){
MastodonApp.context.registerReceiver(downloadCompletionReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE), Context.RECEIVER_EXPORTED);
}else{
MastodonApp.context.registerReceiver(downloadCompletionReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
downloadID=dm.enqueue(
new DownloadManager.Request(Uri.parse(getPrefs().getString("apkURL", null)))
.setDestinationUri(Uri.fromFile(getUpdateApkFile()))

View File

@@ -5,7 +5,8 @@
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>

View File

@@ -88,8 +88,13 @@ public class AudioPlayerService extends Service{
nm=getSystemService(NotificationManager.class);
// registerReceiver(receiver, new IntentFilter(Intent.ACTION_MEDIA_BUTTON));
registerReceiver(receiver, new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY));
registerReceiver(receiver, new IntentFilter(ACTION_PLAY_PAUSE));
registerReceiver(receiver, new IntentFilter(ACTION_STOP));
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.TIRAMISU){
registerReceiver(receiver, new IntentFilter(ACTION_PLAY_PAUSE), RECEIVER_EXPORTED);
registerReceiver(receiver, new IntentFilter(ACTION_STOP), RECEIVER_EXPORTED);
}else{
registerReceiver(receiver, new IntentFilter(ACTION_PLAY_PAUSE));
registerReceiver(receiver, new IntentFilter(ACTION_STOP));
}
instance=this;
}

View File

@@ -86,6 +86,8 @@ public class ExternalShareActivity extends FragmentStackActivity{
}
private void openComposeFragment(String accountID){
AccountSession session=AccountSessionManager.get(accountID);
UiUtils.setUserPreferredTheme(this, session);
getWindow().setBackgroundDrawable(null);
Intent intent=getIntent();

View File

@@ -9,6 +9,7 @@ import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.util.Pair;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowInsets;
@@ -709,26 +710,17 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
}
public void updateStatusWithQuote(DisplayItemsParent parent) {
int startIndex=-1;
int endIndex=-1;
for(int i=0; i<displayItems.size(); i++){
StatusDisplayItem item = displayItems.get(i);
if(item.parentID.equals(parent.getID())) {
startIndex= startIndex==-1 ? i : startIndex;
endIndex=i;
}
}
if (startIndex==-1 || endIndex==-1)
Pair<Integer, Integer> items=findAllItemsOfParent(parent);
if (items==null)
return;
// Only StatusListFragments/NotificationsListFragments can display status with quotes
assert (this instanceof StatusListFragment) || (this instanceof NotificationsListFragment);
List<StatusDisplayItem> oldItems = displayItems.subList(startIndex, endIndex+1);
List<StatusDisplayItem> oldItems = displayItems.subList(items.first, items.second+1);
List<StatusDisplayItem> newItems=this.buildDisplayItems((T) parent);
int prevSize=oldItems.size();
oldItems.clear();
displayItems.addAll(startIndex, newItems);
displayItems.addAll(items.first, newItems);
// Update the cache
final CacheController cache=AccountSessionManager.get(accountID).getCacheController();
@@ -738,8 +730,19 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
cache.updateNotification((Notification) parent);
}
adapter.notifyItemRangeRemoved(startIndex, prevSize);
adapter.notifyItemRangeInserted(startIndex, newItems.size());
adapter.notifyItemRangeRemoved(items.first, prevSize);
adapter.notifyItemRangeInserted(items.first, newItems.size());
}
public void removeStatus(DisplayItemsParent parent) {
Pair<Integer, Integer> items=findAllItemsOfParent(parent);
if (items==null)
return;
List<StatusDisplayItem> statusDisplayItems = displayItems.subList(items.first, items.second+1);
int prevSize=statusDisplayItems.size();
statusDisplayItems.clear();
adapter.notifyItemRangeRemoved(items.first, prevSize);
}
public void onVisibilityIconClick(HeaderStatusDisplayItem.Holder holder) {
@@ -815,6 +818,8 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
adapter.notifyItemChanged(text.getAbsoluteAdapterPosition());
}
List<HeaderStatusDisplayItem.Holder> headers=findAllHoldersOfType(itemID, HeaderStatusDisplayItem.Holder.class);
if (headers.isEmpty())
return;
HeaderStatusDisplayItem.Holder header=headers.size() > 1 && isForQuote ? headers.get(1) : headers.get(0);
if(header!=null) header.animateExpandToggle();
else notifyItemChanged(itemID, HeaderStatusDisplayItem.class);
@@ -943,6 +948,23 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
return null;
}
@Nullable
protected Pair<Integer, Integer> findAllItemsOfParent(DisplayItemsParent parent){
int startIndex=-1;
int endIndex=-1;
for(int i=0; i<displayItems.size(); i++){
StatusDisplayItem item = displayItems.get(i);
if(item.parentID.equals(parent.getID())) {
startIndex= startIndex==-1 ? i : startIndex;
endIndex=i;
}
}
if(startIndex==-1 || endIndex==-1)
return null;
return Pair.create(startIndex, endIndex);
}
protected <I extends StatusDisplayItem, H extends StatusDisplayItem.Holder<I>> List<H> findAllHoldersOfType(String id, Class<H> type){
ArrayList<H> holders=new ArrayList<>();
for(int i=0;i<list.getChildCount();i++){

View File

@@ -297,8 +297,8 @@ public class FollowRequestsListFragment extends MastodonRecyclerFragment<FollowR
cover.setImageDrawable(image);
}else{
item.emojiHelper.setImageDrawable(index-2, image);
name.invalidate();
bio.invalidate();
name.setText(name.getText());
bio.setText(bio.getText());
}
if(image instanceof Animatable a && !a.isRunning())
a.start();

View File

@@ -105,6 +105,11 @@ public class HashtagTimelineFragment extends PinnableStatusListFragment{
muteMenuItem.setIcon(newMute ? R.drawable.ic_fluent_speaker_2_24_regular : R.drawable.ic_fluent_speaker_off_24_regular);
}
private void updateFollowState(boolean following) {
followMenuItem.setTitle(getString(following ? R.string.unfollow_user : R.string.follow_user, "#"+hashtagName));
followMenuItem.setIcon(following ? R.drawable.ic_fluent_person_delete_24_filled : R.drawable.ic_fluent_person_add_24_regular);
}
private void showMuteDialog(boolean mute) {
UiUtils.showConfirmationAlert(getContext(),
mute ? R.string.mo_unmute_hashtag : R.string.mo_mute_hashtag,
@@ -148,8 +153,6 @@ public class HashtagTimelineFragment extends PinnableStatusListFragment{
}).exec(accountID);
}
@Override
protected TimelineDefinition makeTimelineDefinition() {
return TimelineDefinition.ofHashtag(hashtagName);
@@ -292,6 +295,7 @@ public class HashtagTimelineFragment extends PinnableStatusListFragment{
followMenuItem=optionsMenu.findItem(R.id.follow_hashtag);
pinMenuItem=optionsMenu.findItem(R.id.pin);
followMenuItem.setVisible(toolbarContentVisible);
updateFollowState(hashtag!=null && hashtag.following);
// pinMenuItem.setShowAsAction(toolbarContentVisible ? MenuItem.SHOW_AS_ACTION_NEVER : MenuItem.SHOW_AS_ACTION_ALWAYS);
super.updatePinButton(pinMenuItem);
@@ -388,8 +392,7 @@ public class HashtagTimelineFragment extends PinnableStatusListFragment{
followButton.setTextVisible(true);
followProgress.setVisibility(View.GONE);
if(followMenuItem!=null){
followMenuItem.setTitle(getString(hashtag.following ? R.string.unfollow_user : R.string.follow_user, "#"+hashtagName));
followMenuItem.setIcon(hashtag.following ? R.drawable.ic_fluent_person_delete_24_filled : R.drawable.ic_fluent_person_add_24_regular);
updateFollowState(hashtag.following);
}
if(muteMenuItem!=null){
muteMenuItem.setTitle(getString(filter.isPresent() ? R.string.unmute_user : R.string.mute_user, "#" + hashtag));
@@ -429,6 +432,7 @@ public class HashtagTimelineFragment extends PinnableStatusListFragment{
return;
hashtag=result;
updateHeader();
updateFollowState(result.following);
followRequestRunning=false;
}

View File

@@ -58,6 +58,7 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import androidx.viewpager2.widget.ViewPager2;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.MastodonApp;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.accounts.GetAccountByID;
import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships;
@@ -287,11 +288,10 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
noteEdit.setOnFocusChangeListener((v, hasFocus)->{
if(hasFocus){
hideFab();
noteEdit.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
}else{
showFab();
savePrivateNote(noteEdit.getText().toString());
return;
}
showFab();
savePrivateNote(noteEdit.getText().toString());
});
FrameLayout sizeWrapper=new FrameLayout(getActivity()){
@@ -454,8 +454,8 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
}
private void hidePrivateNote(){
noteWrap.setVisibility(View.GONE);
noteEdit.setText(null);
noteWrap.setVisibility(View.GONE);
}
private void savePrivateNote(String note){
@@ -469,6 +469,8 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
public void onSuccess(Relationship result) {
updateRelationship(result);
invalidateOptionsMenu();
if(!TextUtils.isEmpty(result.note))
Toast.makeText(MastodonApp.context, R.string.mo_personal_note_saved, Toast.LENGTH_SHORT).show();
}
@Override
@@ -1587,8 +1589,9 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
public void setImage(int index, Drawable image){
CustomEmojiSpan span=index>=item.nameEmojis.length ? item.valueEmojis[index-item.nameEmojis.length] : item.nameEmojis[index];
span.setDrawable(image);
title.invalidate();
value.invalidate();
title.setText(title.getText());
value.setText(value.getText());
toolbarTitleView.setText(toolbarTitleView.getText());
}
@Override

View File

@@ -85,7 +85,7 @@ public class ScheduledStatusListFragment extends BaseStatusListFragment<Schedule
@Override
protected List<StatusDisplayItem> buildDisplayItems(ScheduledStatus s) {
return StatusDisplayItem.buildItems(this, s.toStatus(), accountID, s, knownAccounts, null,
return StatusDisplayItem.buildItems(this, s.toFormattedStatus(accountID), accountID, s, knownAccounts, null,
StatusDisplayItem.FLAG_NO_EMOJI_REACTIONS |
StatusDisplayItem.FLAG_NO_FOOTER |
StatusDisplayItem.FLAG_NO_TRANSLATE);

View File

@@ -279,8 +279,8 @@ public class DiscoverAccountsFragment extends MastodonRecyclerFragment<DiscoverA
cover.setImageDrawable(image);
}else{
item.emojiHelper.setImageDrawable(index-2, image);
name.invalidate();
bio.invalidate();
name.setText(name.getText());
bio.setText(bio.getText());
}
if(image instanceof Animatable a && !a.isRunning())
a.start();

View File

@@ -260,8 +260,8 @@ public class DiscoverFragment extends AppKitFragment implements ScrollableToTop,
private Fragment getFragmentForPage(int page){
return switch(page){
case 0 -> hashtagsFragment;
case 1 -> postsFragment;
case 0 -> postsFragment;
case 1 -> hashtagsFragment;
case 2 -> newsFragment;
case 3 -> accountsFragment;
default -> throw new IllegalStateException("Unexpected value: "+page);

View File

@@ -131,8 +131,7 @@ public class DiscoverTrendingLinkTimelineFragment extends StatusListFragment{
@Override
public Uri getWebUri(Uri.Builder base) {
//TODO: add URL link once web version implements a UI
return base.path("/explore/links").build();
return base.path("/links").appendPath(trendingLink.url).build();
}
@Override

View File

@@ -94,7 +94,7 @@ public class SettingsAboutAppFragment extends BaseSettingsFragment<Void> impleme
copyCrashLogItem=new ListItem<>(getString(R.string.sk_settings_copy_crash_log), lastModified, 0, this::onCopyCrashLog)
));
if(GithubSelfUpdater.needSelfUpdating()){
if(GithubSelfUpdater.needSelfUpdating() && !BuildConfig.BUILD_TYPE.equals("nightly") ){
items.add(enablePreReleasesItem=new CheckableListItem<>(R.string.sk_updater_enable_pre_releases, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.enablePreReleases, i->toggleCheckableItem(enablePreReleasesItem)));
}

View File

@@ -38,7 +38,7 @@ public class EmojiReaction {
reaction.staticUrl=info.staticUrl;
reaction.accounts=new ArrayList<>(Collections.singleton(me));
reaction.accountIds=new ArrayList<>(Collections.singleton(me.id));
reaction.request=new UrlImageLoaderRequest(info.url, V.sp(24), V.sp(24));
reaction.request=new UrlImageLoaderRequest(info.url, 0, V.sp(24));
return reaction;
}

View File

@@ -1,17 +1,27 @@
package org.joinmastodon.android.model;
import android.util.Patterns;
import androidx.annotation.NonNull;
import org.joinmastodon.android.api.ObjectValidationException;
import org.joinmastodon.android.api.RequiredField;
import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.model.Poll.Option;
import org.parceler.Parcel;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@Parcel
public class ScheduledStatus extends BaseModel implements DisplayItemsParent{
private static final Pattern HIGHLIGHT_PATTER=Pattern.compile("(?<!\\w)(?:@([a-z0-9_]+)(@[a-z0-9_\\.\\-]*)?|#([^\\s.]+)|:([a-z0-9_]+))|" +Patterns.WEB_URL, Pattern.CASE_INSENSITIVE);
@RequiredField
public String id;
@RequiredField
@@ -87,7 +97,61 @@ public class ScheduledStatus extends BaseModel implements DisplayItemsParent{
s.visibility=params.visibility;
s.language=params.language;
s.sensitive=params.sensitive;
// hide media preview only if status is marked as sensitive
s.sensitiveRevealed=!params.sensitive;
if(params.poll!=null) s.poll=params.poll.toPoll();
return s;
}
/**
* Creates a fake status, which has (somewhat) correctly formatted mentions, hashtags and URLs.
*
* @param accountID the ID of the account
* @return the formatted Status object
*/
public Status toFormattedStatus(String accountID){
AccountSession self=AccountSessionManager.get(accountID);
Status s=this.toStatus();
// the mastodon api does not return formatted (html) content, only the raw content, so we modify it
s.content=s.content.replace("\n", "<br>");
if(!s.content.contains("@") && !s.content.contains("#") && !s.content.contains(":"))
return s;
StringBuffer sb=new StringBuffer();
Matcher matcher=HIGHLIGHT_PATTER.matcher(s.content);
// I'm sure this will cause problems at some point...
while(matcher.find()){
String content=matcher.group();
String href="";
// add relevant links, so on-click actions work
// hashtags are done by the parser
if(content.startsWith("@"))
href=" href=\""+formatMention(content, self.domain)+"\" class=\"u-url mention\"";
else if(content.startsWith("https://"))
href=" href=\""+content+"\"";
matcher.appendReplacement(sb, "<a"+href+">"+content+"</a>");
}
matcher.appendTail(sb);
s.content=sb.toString();
return s;
}
/**
* Converts a string mention into a URL of the account.
* @param mention Mention in the form a of user name with an optional instance URL
* @param instanceURL URL of the home instance of the user
* @return Formatted HTML or the mention
*/
@NonNull
private static String formatMention(@NonNull String mention, @NonNull String instanceURL){
String[] parts=mention.split("@");
if(parts.length>1){
String username=parts[1];
String domain=parts.length==3 ? parts[2] : instanceURL;
return "https://"+domain+"/@"+username;
}
return mention;
}
}

View File

@@ -336,6 +336,7 @@ public class TimelineDefinition {
THUNDERSTORM(R.drawable.ic_fluent_weather_thunderstorm_24_regular, R.string.sk_icon_thunderstorm),
RAIN(R.drawable.ic_fluent_weather_rain_24_regular, R.string.sk_icon_rain),
SNOWFLAKE(R.drawable.ic_fluent_weather_snowflake_24_regular, R.string.sk_icon_snowflake),
GNOME(R.drawable.ic_gnome_logo, R.string.mo_icon_gnome),
HOME(R.drawable.ic_fluent_home_24_regular, R.string.sk_timeline_home, true),
LOCAL(R.drawable.ic_fluent_people_community_24_regular, R.string.sk_timeline_local, true),

View File

@@ -1,15 +1,15 @@
package org.joinmastodon.android.model;
import org.joinmastodon.android.api.AllFieldsAreRequired;
import org.joinmastodon.android.api.RequiredField;
/**
* Represents an OAuth token used for authenticating with the API and performing actions.
*/
@AllFieldsAreRequired
public class Token extends BaseModel{
/**
* An OAuth token to be used for authorization.
*/
@RequiredField
public String accessToken;
/**
* The OAuth token type. Mastodon uses Bearer tokens.
@@ -23,5 +23,6 @@ public class Token extends BaseModel{
* When the token was generated.
* (unixtime)
*/
@RequiredField
public long createdAt;
}

View File

@@ -225,8 +225,8 @@ public class AccountCardStatusDisplayItem extends StatusDisplayItem{
cover.setImageDrawable(image);
}else{
item.emojiHelper.setImageDrawable(index-2, image);
name.invalidate();
bio.invalidate();
name.setText(name.getText());
bio.setText(bio.getText());
}
if(image instanceof Animatable && !((Animatable) image).isRunning())
((Animatable) image).start();

View File

@@ -172,7 +172,7 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
addButton.setSelected(false);
AccountSession session=item.parentFragment.getSession();
item.status.reactions.forEach(r->r.request=r.getUrl(item.playGifs)!=null
? new UrlImageLoaderRequest(r.getUrl(item.playGifs), V.sp(24), V.sp(24))
? new UrlImageLoaderRequest(r.getUrl(item.playGifs), 0, V.sp(24))
: null);
emojiKeyboard=new CustomEmojiPopupKeyboard(
(Activity) item.parentFragment.getContext(),
@@ -342,7 +342,9 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
@Override
public void setImage(int index, Drawable drawable){
drawable.setBounds(0, 0, V.sp(24), V.sp(24));
int height=V.sp(24);
int width=drawable.getIntrinsicWidth()*height/drawable.getIntrinsicHeight();
drawable.setBounds(0, 0, width, height);
btn.setCompoundDrawablesRelative(drawable, null, null, null);
if(drawable instanceof Animatable) ((Animatable) drawable).start();
}

View File

@@ -39,6 +39,16 @@ public class ErrorStatusDisplayItem extends StatusDisplayItem{
findViewById(R.id.button_copy_error_details).setOnClickListener(this::copyErrorDetails);
}
@Override
public void onClick(){
// explicitly do nothing when clicked
}
@Override
public boolean isEnabled(){
return false;
}
@Override
public void onBind(ErrorStatusDisplayItem item) {
openInBrowserButton.setEnabled(item.status!=null && item.status.url!=null);

View File

@@ -422,7 +422,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
public void setImage(int index, Drawable drawable){
if(index>0){
item.emojiHelper.setImageDrawable(index-1, drawable);
name.invalidate();
name.setText(name.getText());
}else{
avatar.setImageDrawable(drawable);
}

View File

@@ -141,7 +141,7 @@ public class NotificationHeaderStatusDisplayItem extends StatusDisplayItem{
avatar.setImageDrawable(image);
}else{
item.emojiHelper.setImageDrawable(index-1, image);
text.invalidate();
text.setText(text.getText());
}
if(image instanceof Animatable)
((Animatable) image).start();

View File

@@ -136,7 +136,7 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{
@Override
public void setImage(int index, Drawable image){
item.emojiHelper.setImageDrawable(index, image);
text.invalidate();
text.setText(text.getText());
if(image instanceof Animatable){
((Animatable) image).start();
}
@@ -145,7 +145,7 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{
@Override
public void clearImage(int index){
item.emojiHelper.setImageDrawable(index, null);
text.invalidate();
text.setText(text.getText());
}
private void onButtonClick(View v){

View File

@@ -152,8 +152,8 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{
int firstHelperCount=item.emojiHelper.getImageCount();
CustomEmojiHelper helper=index<firstHelperCount ? item.emojiHelper : item.extra.emojiHelper;
helper.setImageDrawable(firstHelperCount>0 ? index%firstHelperCount : index, image);
text.invalidate();
extraText.invalidate();
text.setText(text.getText());
extraText.setText(extraText.getText());
}
@Override

View File

@@ -114,7 +114,7 @@ public class SpoilerStatusDisplayItem extends StatusDisplayItem{
@Override
public void setImage(int index, Drawable image){
item.emojiHelper.setImageDrawable(index, image);
title.invalidate();
title.setText(title.getText());
}
@Override

View File

@@ -17,8 +17,10 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships;
import org.joinmastodon.android.api.requests.search.GetSearchResults;
import org.joinmastodon.android.api.session.AccountLocalPreferences;
import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.fragments.BaseStatusListFragment;
import org.joinmastodon.android.fragments.HashtagTimelineFragment;
@@ -35,6 +37,7 @@ import org.joinmastodon.android.model.FilterResult;
import org.joinmastodon.android.model.LegacyFilter;
import org.joinmastodon.android.model.Notification;
import org.joinmastodon.android.model.Poll;
import org.joinmastodon.android.model.Relationship;
import org.joinmastodon.android.model.ScheduledStatus;
import org.joinmastodon.android.model.SearchResults;
import org.joinmastodon.android.model.Status;
@@ -87,7 +90,7 @@ public abstract class StatusDisplayItem{
private final static Pattern QUOTE_MENTION_PATTERN=Pattern.compile("(?:<p>)?\\s?(?:RE:\\s?(<br\\s?\\/?>)?)?<a href=\"https:\\/\\/[^\"]+\"[^>]*><span class=\"invisible\">https:\\/\\/<\\/span><span class=\"ellipsis\">[^<]+<\\/span><span class=\"invisible\">[^<]+<\\/span><\\/a>(?:<\\/p>)?$");
private final static Pattern QUOTE_PATTERN=Pattern.compile("[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$");
private final static Pattern QUOTE_PATTERN=Pattern.compile("https://[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,8}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$");
public void setAncestryInfo(
boolean hasDescendantNeighbor,
@@ -338,8 +341,8 @@ public abstract class StatusDisplayItem{
if(!statusForContent.mediaAttachments.isEmpty() && statusForContent.poll==null) // add spacing if immediately preceded by attachment
contentItems.add(new DummyStatusDisplayItem(parentID, fragment));
contentItems.addAll(buildItems(fragment, statusForContent.quote, accountID, parentObject, knownAccounts, filterContext, FLAG_NO_FOOTER|FLAG_INSET|FLAG_NO_EMOJI_REACTIONS|FLAG_IS_FOR_QUOTE));
} else if((flags & FLAG_INSET)==0){
tryAddNonOfficialQuote(statusForContent, fragment, accountID);
} else if((flags & FLAG_INSET)==0 && statusForContent.mediaAttachments.isEmpty() && statusForContent.account!=null){
tryAddNonOfficialQuote(statusForContent, fragment, accountID, filterContext);
}
if(contentItems!=items && statusForContent.spoilerRevealed){
items.addAll(contentItems);
@@ -421,29 +424,55 @@ public abstract class StatusDisplayItem{
* Tries to adds a non-official quote to a status.
* A non-official quote is a quote on an instance that does not support quotes officially.
*/
private static void tryAddNonOfficialQuote(Status status, BaseStatusListFragment fragment, String accountID) {
private static void tryAddNonOfficialQuote(Status status, BaseStatusListFragment fragment, String accountID, FilterContext filterContext) {
Matcher matcher=QUOTE_PATTERN.matcher(status.getStrippedText());
if(!matcher.find())
return;
String quoteURL="https://"+matcher.group();
String quoteURL=matcher.group();
if (UiUtils.looksLikeFediverseUrl(quoteURL)) {
new GetSearchResults(quoteURL, GetSearchResults.Type.STATUSES, true, null, 0, 0).setCallback(new Callback<>(){
@Override
public void onSuccess(SearchResults results){
if (!results.statuses.isEmpty()){
status.quote=results.statuses.get(0);
fragment.updateStatusWithQuote(status);
}
}
// account may be null for scheduled posts
if (!UiUtils.looksLikeFediverseUrl(quoteURL))
return;
@Override
public void onError(ErrorResponse error){
Log.w("StatusDisplayItem", "onError: failed to find quote status with URL: " + quoteURL + " " + error);
}
}).exec(accountID);
}
new GetSearchResults(quoteURL, GetSearchResults.Type.STATUSES, true, null, 0, 0).setCallback(new Callback<>(){
@Override
public void onSuccess(SearchResults results){
AccountSessionManager.get(accountID).filterStatuses(results.statuses, filterContext);
if (results.statuses == null || results.statuses.isEmpty())
return;
Status quote=results.statuses.get(0);
new GetAccountRelationships(Collections.singletonList(quote.account.id))
.setCallback(new Callback<>(){
@Override
public void onSuccess(List<Relationship> relationships){
if(relationships.isEmpty())
return;
Relationship relationship=relationships.get(0);
String selfId=AccountSessionManager.get(accountID).self.id;
if(!status.account.id.equals(selfId) && (relationship.domainBlocking || relationship.muting || relationship.blocking)) {
// do not show posts that are quoting a muted/blocked user
fragment.removeStatus(status);
return;
}
status.quote=results.statuses.get(0);
fragment.updateStatusWithQuote(status);
}
@Override
public void onError(ErrorResponse error){}
})
.exec(accountID);
}
@Override
public void onError(ErrorResponse error){
Log.w("StatusDisplayItem", "onError: failed to find quote status with URL: " + quoteURL + " " + error);
}
}).exec(accountID);
}
public enum Type{

View File

@@ -173,7 +173,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
@Override
public void setImage(int index, Drawable image){
getEmojiHelper().setImageDrawable(index, image);
text.invalidate();
text.setText(text.getText());
if(image instanceof Animatable){
((Animatable) image).start();
if(image instanceof MovieDrawable)
@@ -184,7 +184,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
@Override
public void clearImage(int index){
getEmojiHelper().setImageDrawable(index, null);
text.invalidate();
text.setText(text.getText());
}
private CustomEmojiHelper getEmojiHelper(){

View File

@@ -2,14 +2,8 @@ package org.joinmastodon.android.ui.sheets;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Typeface;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.Toast;
import org.joinmastodon.android.R;
import org.joinmastodon.android.model.Account;
@@ -17,6 +11,7 @@ import org.joinmastodon.android.ui.M3AlertDialogBuilder;
import org.joinmastodon.android.ui.views.M3Switch;
import java.time.Duration;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
@@ -44,10 +39,10 @@ public class MuteAccountConfirmationSheet extends AccountRestrictionConfirmation
addRow(R.drawable.ic_fluent_alert_off_24_regular, R.string.mo_mute_notifications, m3Switch);
// add mute duration (Moshidon)
secondaryBtn.setVisibility(View.VISIBLE);
secondaryBtn.setOnClickListener(v->getMuteDurationDialog(context, muteDuration, secondaryBtn).show());
secondaryBtn.setText(R.string.sk_duration_indefinite);
secondaryBtn.setTypeface(null, Typeface.BOLD_ITALIC);
Button muteDurationBtn=new Button(getContext());
muteDurationBtn.setOnClickListener(v->getMuteDurationDialog(context, muteDuration, muteDurationBtn).show());
muteDurationBtn.setText(R.string.sk_duration_indefinite);
addRow(R.drawable.ic_fluent_clock_20_regular, R.string.sk_mute_label, muteDurationBtn);
}
@NonNull
@@ -55,6 +50,15 @@ public class MuteAccountConfirmationSheet extends AccountRestrictionConfirmation
M3AlertDialogBuilder builder=new M3AlertDialogBuilder(context);
builder.setTitle(R.string.sk_mute_label);
builder.setIcon(R.drawable.ic_fluent_clock_20_regular);
List<Duration> durations =List.of(Duration.ZERO,
Duration.ofMinutes(5),
Duration.ofMinutes(30),
Duration.ofHours(1),
Duration.ofHours(6),
Duration.ofDays(1),
Duration.ofDays(3),
Duration.ofDays(7),
Duration.ofDays(7));
String[] choices = {context.getString(R.string.sk_duration_indefinite),
context.getString(R.string.sk_duration_minutes_5),
@@ -65,35 +69,14 @@ public class MuteAccountConfirmationSheet extends AccountRestrictionConfirmation
context.getString(R.string.sk_duration_days_3),
context.getString(R.string.sk_duration_days_7)};
builder.setSingleChoiceItems(choices, 0, (dialog, which) -> {});
builder.setSingleChoiceItems(choices, durations.indexOf(muteDuration.get()), (dialog, which) -> {});
builder.setPositiveButton(R.string.ok, (dialog, which)->{
int selected = ((AlertDialog) dialog).getListView().getCheckedItemPosition();
if(selected==0){
muteDuration.set(Duration.ZERO);
}else if(selected==1){
muteDuration.set(Duration.ofMinutes(5));
}else if(selected==2){
muteDuration.set(Duration.ofMinutes(30));
}else if(selected==3){
muteDuration.set(Duration.ofHours(1));
}else if(selected==4){
muteDuration.set(Duration.ofHours(6));
}else if(selected==5){
muteDuration.set(Duration.ofDays(1));
}else if(selected==6){
muteDuration.set(Duration.ofDays(3));
}else if(selected==7){
muteDuration.set(Duration.ofDays(7));
}
if(selected >= 0 && selected <= 7){
button.setText(choices[selected]);
} else {
Toast.makeText(context, "" + selected, Toast.LENGTH_SHORT).show();
}
muteDuration.set(durations.get(selected));
button.setText(choices[selected]);
});
builder.setNegativeButton(R.string.cancel, ((dialogInterface, i) -> {}));
builder.setNegativeButton(R.string.cancel, null);
return builder;
}

View File

@@ -24,7 +24,8 @@ public class CustomEmojiSpan extends ReplacementSpan{
@Override
public int getSize(@NonNull Paint paint, CharSequence text, int start, int end, @Nullable Paint.FontMetricsInt fm){
return Math.round(paint.descent()-paint.ascent());
int size = Math.round(paint.descent()-paint.ascent());
return drawable!=null ? (int) (drawable.getIntrinsicWidth()*(size/(float) drawable.getIntrinsicHeight())) : size;
}
@Override
@@ -45,7 +46,8 @@ public class CustomEmojiSpan extends ReplacementSpan{
}
canvas.save();
canvas.translate(x, top);
canvas.scale(size/(float)dw, size/(float)dh, 0f, 0f);
float scale = size/(float)dh;
canvas.scale(scale, scale, 0f, 0f);
drawable.draw(canvas);
canvas.restore();
}
@@ -56,7 +58,6 @@ public class CustomEmojiSpan extends ReplacementSpan{
}
public UrlImageLoaderRequest createImageLoaderRequest(){
int size=V.dp(20);
return new UrlImageLoaderRequest(GlobalUserPreferences.playGifs ? emoji.url : emoji.staticUrl, size, size);
return new UrlImageLoaderRequest(GlobalUserPreferences.playGifs ? emoji.url : emoji.staticUrl, 0, V.dp(20));
}
}

View File

@@ -140,7 +140,7 @@ public class HtmlParser{
String href=el.attr("href");
LinkSpan.Type linkType;
String text=el.text();
if(el.hasClass("hashtag") || text.startsWith("#")){
if(!TextUtils.isEmpty(text) && (el.hasClass("hashtag") || text.startsWith("#"))){
// MOSHIDON: we have slightly refactored this so that the hashtags properly work in akkoma
// TODO: upstream this
linkType=LinkSpan.Type.HASHTAG;

View File

@@ -417,7 +417,6 @@ public class UiUtils {
CustomEmojiSpan[] spans = text.getSpans(0, text.length(), CustomEmojiSpan.class);
if (spans.length == 0)
return;
int emojiSize = V.dp(20);
Map<Emoji, List<CustomEmojiSpan>> spansByEmoji = Arrays.stream(spans).collect(Collectors.groupingBy(s -> s.emoji));
for (Map.Entry<Emoji, List<CustomEmojiSpan>> emoji : spansByEmoji.entrySet()) {
ViewImageLoader.load(new ViewImageLoader.Target() {
@@ -428,14 +427,14 @@ public class UiUtils {
for (CustomEmojiSpan span : emoji.getValue()) {
span.setDrawable(d);
}
view.invalidate();
view.setText(view.getText());
}
@Override
public View getView() {
return view;
}
}, null, new UrlImageLoaderRequest(emoji.getKey().url, emojiSize, emojiSize), null, false, true);
}, null, new UrlImageLoaderRequest(emoji.getKey().url, 0, V.dp(20)), null, false, true);
}
}

View File

@@ -185,8 +185,8 @@ public class AccountViewHolder extends BindableViewHolder<AccountViewModel> impl
avatar.setImageDrawable(image);
}else{
item.emojiHelper.setImageDrawable(index-1, image);
name.invalidate();
bio.invalidate();
name.setText(name.getText());
bio.setText(bio.getText());
}
if(image instanceof Animatable a && !a.isRunning())

View File

@@ -64,7 +64,7 @@ public class Tracking{
@NonNull
public static String removeTrackingParameters(@NonNull String url){
Uri uri=Uri.parse(url);
if(uri==null)
if(uri==null || !uri.isHierarchical())
return url;
Uri.Builder uriBuilder=uri.buildUpon().clearQuery();

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M17.75,2.007a2.25,2.25 0,0 1,2.245 2.096l0.005,0.154v15.498A2.25,2.25 0,0 1,17.904 22l-0.154,0.005H6.25a2.25,2.25 0,0 1,-2.245 -2.096L4,19.755V4.257a2.25,2.25 0,0 1,2.096 -2.245l0.154,-0.005h11.5ZM7.75,7a0.75,0.75 0,1 0,0 1.5h8.5a0.75,0.75 0,0 0,0 -1.5h-8.5ZM7,11.75c0,0.414 0.336,0.75 0.75,0.75h8.5a0.75,0.75 0,0 0,0 -1.5h-8.5a0.75,0.75 0,0 0,-0.75 0.75ZM7.75,15a0.75,0.75 0,1 0,0 1.5h8.5a0.75,0.75 0,0 0,0 -1.5h-8.5Z"
android:fillColor="#212121"/>
</vector>

View File

@@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:viewportHeight="103.97" android:viewportWidth="85.6" android:width="19.759546dp">
<path android:fillColor="@color/fluent_default_icon_tint" android:pathData="m74.46,0c-11.52,0 -18.66,8.37 -20.99,16.54 -1.17,4.08 -1.28,8.19 -0.1,11.64 1.18,3.45 4.25,6.36 8.26,6.36 4,0 7.83,-2.21 11.44,-5.17 3.61,-2.95 6.93,-6.79 9.28,-10.75 2.35,-3.96 3.91,-8.07 2.96,-12.02 -0.48,-1.97 -1.78,-3.83 -3.68,-4.96 -1.91,-1.13 -4.29,-1.63 -7.17,-1.63zM40.1,4c-2.84,0.56 -5.36,2.67 -6.65,5.04 -1.48,2.71 -1.87,5.83 -1.68,8.83 0.19,3 0.98,5.9 2.28,8.28 1.29,2.38 3.22,4.58 6.17,4.76 1.58,0.1 2.97,-0.57 4.03,-1.41 1.06,-0.84 1.92,-1.9 2.67,-3.11 1.52,-2.4 2.64,-5.4 3.26,-8.47 0.62,-3.08 0.76,-6.22 -0.2,-9.03 -0.96,-2.81 -4,-5.3 -7.22,-5.3h-0c-1.04,0.07 -1.77,0.19 -2.65,0.42zM74.46,5.29c2.25,0 3.68,0.42 4.46,0.88 0.78,0.47 1.06,0.89 1.24,1.66 0.37,1.53 -0.39,4.73 -2.37,8.08 -1.98,3.35 -4.99,6.82 -8.08,9.35 -2.76,2.26 -5.64,3.65 -7.48,3.92 -0.22,0.03 -0.42,0.05 -0.6,0.05 -1.77,0 -2.55,-0.75 -3.25,-2.78 -0.7,-2.04 -0.74,-5.24 0.18,-8.46 1.84,-6.45 6.89,-12.7 15.9,-12.7zM42.74,8.87c1.55,0 1.76,0.34 2.24,1.72 0.47,1.38 0.51,3.81 0.02,6.28 -0.49,2.47 -1.48,5 -2.55,6.69 -0.53,0.84 -1.09,1.47 -1.48,1.78 -0.39,0.31 -0.52,0.27 -0.42,0.28 -0.12,-0.01 -1.01,-0.46 -1.85,-2 -0.84,-1.54 -1.5,-3.83 -1.64,-6.09 -0.15,-2.26 0.23,-4.46 1.04,-5.95 0.81,-1.49 1.85,-2.38 3.97,-2.66 0.26,-0.03 0.48,-0.05 0.68,-0.05zM22.67,11.53c-0.99,0.02 -1.98,0.25 -2.95,0.66 -3.04,1.25 -4.97,3.81 -5.62,6.49 -0.65,2.68 -0.26,5.43 0.59,7.93 0.85,2.5 2.17,4.78 3.82,6.51 1.65,1.74 3.85,3.23 6.54,2.69 2.76,-0.56 3.98,-2.91 4.74,-5.16 0.76,-2.25 1.07,-4.85 0.98,-7.46 -0.08,-2.61 -0.54,-5.22 -1.7,-7.46 -1.16,-2.24 -3.49,-4.26 -6.4,-4.2zM22.79,16.82c0.69,-0.02 0.98,0.18 1.59,1.34 0.6,1.16 1.04,3.15 1.11,5.19 0.06,2.04 -0.23,4.17 -0.71,5.61 -0.48,1.44 -1.14,1.73 -0.78,1.66h-0v0c0.09,-0.02 -0.65,-0.1 -1.64,-1.15 -1,-1.05 -2.04,-2.77 -2.65,-4.57 -0.61,-1.8 -0.78,-3.65 -0.46,-4.98 0.32,-1.33 0.89,-2.18 2.49,-2.85 0.48,-0.2 0.82,-0.25 1.05,-0.26zM8.02,23.93c-1.45,-0.05 -2.92,0.46 -4.2,1.35 -2.49,1.72 -3.76,4.44 -3.82,6.99 -0.06,2.55 0.82,4.93 2.06,7 1.24,2.07 2.86,3.84 4.68,5.08 1.82,1.24 4.13,2.19 6.52,1.14 2.34,-1.03 3.02,-3.29 3.3,-5.32 0.28,-2.03 0.12,-4.26 -0.35,-6.46 -0.47,-2.2 -1.26,-4.37 -2.49,-6.19 -1.23,-1.82 -3.14,-3.5 -5.69,-3.58zM7.85,29.22c0.28,0.01 0.79,0.24 1.48,1.26 0.69,1.02 1.34,2.66 1.7,4.34 0.36,1.69 0.45,3.44 0.29,4.63 -0.16,1.13 -0.54,1.34 -0.2,1.19 0.19,-0.09 -0.37,0.03 -1.4,-0.67 -1.04,-0.7 -2.26,-1.99 -3.12,-3.43 -0.86,-1.43 -1.34,-2.99 -1.31,-4.15 0.03,-1.16 0.31,-1.92 1.54,-2.77 0.58,-0.4 0.86,-0.42 1.02,-0.42zM50.43,33.42c-8.43,-0.14 -18.01,1.86 -26.16,6.06 -8.15,4.21 -15,10.78 -17.01,19.79 -2.21,9.88 2.23,20.9 9.71,29.56 7.47,8.66 18.2,15.14 29.59,15.14 11.79,0 24.28,-9.92 26.76,-23.02v-0c0.3,-1.6 0.09,-3.25 -0.67,-4.57 -0.76,-1.32 -1.94,-2.22 -3.18,-2.8 -2.48,-1.16 -5.34,-1.3 -8.18,-1.01 -2.84,0.29 -5.66,1.05 -7.96,2.31 -1.15,0.63 -2.2,1.38 -3.03,2.42 -0.83,1.04 -1.41,2.53 -1.21,4.06 0.36,2.73 -0.54,4.08 -1.64,4.68 -1.1,0.6 -2.9,0.67 -5.28,-1.14 -2.11,-1.61 -2.94,-2.91 -3.16,-3.72 -0.22,-0.82 -0.11,-1.43 0.61,-2.51 1.44,-2.17 5.65,-5.13 10.54,-8.16 4.88,-3.02 10.41,-6.27 14.7,-10.25 4.29,-3.98 7.5,-9.12 6.48,-15.17 -0.68,-4.07 -3.67,-7.1 -7.43,-8.92 -3.76,-1.82 -8.41,-2.66 -13.47,-2.74zM50.34,38.71c4.5,0.08 8.5,0.88 11.26,2.22 2.76,1.33 4.16,2.94 4.51,5.03 0.65,3.84 -1.21,7.02 -4.86,10.41 -3.65,3.39 -8.94,6.56 -13.88,9.63 -4.95,3.06 -9.59,5.86 -12.16,9.73 -1.29,1.93 -1.97,4.42 -1.31,6.84 0.67,2.43 2.42,4.52 5.06,6.53 3.59,2.73 7.82,3.34 11.04,1.57 3.22,-1.77 4.9,-5.68 4.34,-10.01 0.01,0.06 -0.08,0.15 0.11,-0.09 0.19,-0.24 0.68,-0.67 1.41,-1.06 1.45,-0.79 3.75,-1.47 5.96,-1.69 2.21,-0.23 4.36,0.05 5.4,0.54 0.52,0.24 0.74,0.48 0.83,0.64 0.09,0.16 0.18,0.34 0.06,0.97 -1.93,10.22 -12.95,18.71 -21.56,18.71 -9.34,0 -18.91,-5.57 -25.58,-13.3 -6.67,-7.73 -10.22,-17.45 -8.54,-24.95 1.57,-7.04 7.03,-12.5 14.27,-16.24 7.24,-3.74 16.14,-5.6 23.64,-5.47z"/>
</vector>

View File

@@ -2,7 +2,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/open_link"
android:icon="@drawable/ic_fluent_document_one_page_24_filled"
android:icon="@drawable/ic_fluent_open_24_regular"
android:showAsAction="always"
android:title="@string/mo_trending_link_read"/>
</menu>

View File

@@ -53,7 +53,7 @@
<string name="mo_swap_bookmark_with_reblog">Εναλλαγή σελιδοδείκτη με ενέργεια αναδημοσίευσης</string>
<string name="mo_show_media_preview">Εμφάνιση προεπισκόπησης πολυμέσων στις ροές</string>
<string name="mo_settings_unifiedpush_warning">UnifiedPush μη ενεργό</string>
<string name="mo_mention_reblogger_automatically">Αυτόματη αναφορά λογαριασμού που αναδημοσίευσε την ανάρτηση, στις απαντήσεις</string>
<string name="mo_mention_reblogger_automatically">Αυτόματη επισήμανση λογαριασμού που αναδημοσίευσε την ανάρτηση, στις απαντήσεις</string>
<string name="mo_confirm_unfollow_title">Άρση ακολούθησης Λογαριασμού</string>
<string name="mo_settings_unifiedpush_warning_no_distributors">Δεν έχουν εγκατασταθεί διανομείς UnifiedPush. Δεν θα λάβεις ειδοποιήσεις.</string>
<string name="mo_mute_notifications">Απόκρυψη ειδοποιήσεων από αυτόν τον χρήστη;</string>

View File

@@ -249,7 +249,7 @@
<string name="sk_add_timeline_tag_error_empty">Η ετικέτα δε μπορεί να είναι κενή</string>
<string name="sk_updater_enable_pre_releases">Ενεργοποίηση προ-κυκολοφορίας</string>
<string name="sk_inline_local_only">Μόνο τοπικά</string>
<string name="sk_inline_direct">Μόνο με αναφορά</string>
<string name="sk_inline_direct">Μόνο με επισήμανση</string>
<string name="sk_separator">·</string>
<string name="sk_local_only">Μόνο τοπική οντότητα</string>
<string name="sk_instance_features">Δυνατότητες οντότητας</string>
@@ -374,7 +374,7 @@
<string name="sk_duration_hours_6">6 ώρες</string>
<string name="sk_duration_days_1">1 ημέρα</string>
<string name="sk_duration_days_3">3 ημέρες</string>
<string name="sk_notification_mention">Αναφέρθηκες από τον χρήστη %s</string>
<string name="sk_notification_mention">Επισημάνθηκες από τον χρήστη %s</string>
<string name="sk_suicide_search_terms">Αυτοκτονία</string>
<string name="sk_search_suicide_title">Σε περίπτωση που είσαι σε κρίση…</string>
<string name="sk_search_suicide_hotlines">Βρες γραμμή βοήθειας</string>

View File

@@ -16,7 +16,7 @@
<string name="sk_image_description">Descripción de la imagen</string>
<string name="sk_visibility_unlisted">No listada</string>
<string name="sk_settings_show_replies">Mostrar respuestas</string>
<string name="sk_settings_show_boosts">Mostrar boosts</string>
<string name="sk_settings_show_boosts">Mostrar mejoras</string>
<string name="sk_settings_load_new_posts">Cargar publicaciones nuevas automáticamente</string>
<string name="sk_settings_show_interaction_counts">Mostrar recuento de interacciones</string>
<string name="sk_mark_media_as_sensitive">Marcar contenido como delicado</string>

View File

@@ -1,95 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="mo_hide_compose_button_while_scrolling_setting">Verberg knop \"Nieuw bericht\" tijdens scrollen</string>
<string name="mo_personal_note">Voeg een notitie toe over dit profiel</string>
<string name="mo_personal_note_confirm">Bevestig de wijzigingen aan de notitie</string>
<string name="mo_personal_note_update_failed">Notitie bewaren mislukt</string>
<string name="mo_personal_note">Voeg een opmerking toe over dit account</string>
<string name="mo_personal_note_confirm">Bevestig de wijzigingen van de opmerking</string>
<string name="mo_personal_note_update_failed">Bewaren van opmerking mislukt</string>
<string name="mo_settings_contribute">Bijdragen aan Moshidon</string>
<string name="mo_update_ready">Moshidon %s is gedownload en gereed voor installatie.</string>
<string name="mo_update_available">Moshidon %s staat gereed om te downloaden.</string>
<string name="mo_no_image_desc_title">Geen beschrijving bij afbeelding</string>
<string name="mo_emoji_recent">Recent gebruikt</string>
<string name="mo_poll_option_add">Voeg een nieuwe peiling optie toe</string>
<string name="mo_poll_option_add">Voeg een nieuwe peilingkeuze toe</string>
<string name="mo_sending_error">Fout bij plaatsen bericht</string>
<string name="mo_disable_dividers">Berichten scheidingslijn uitschakelen</string>
<string name="mo_relocate_publish_button">Knop voor opstellen bericht verplaatsen</string>
<string name="mo_welcome_text">Om te beginnen vul je hieronder de domeinnaam in van de instance (server).</string>
<string name="mo_clear_recent_emoji">Wis recent gebruikte emoji</string>
<string name="mo_no_image_desc">De bijgesloten afbeeldingen hebben geen omschrijving. Overweeg deze alsnog toe te voegen, zodat ook mensen met een visuele handicap kunnen deelnemen.</string>
<string name="mo_share_open_url">Open in app</string>
<string name="mo_disable_reminder_to_add_alt_text">Herinnering uitschakelen om alt tekst toe te voegen</string>
<string name="mo_welcome_text">Om te beginnen vul je hieronder de domeinnaam in van de server (instance).</string>
<string name="mo_clear_recent_emoji">Recent gebruikte emoji\'s wissen</string>
<string name="mo_no_image_desc">De bijgesloten afbeeldingen hebben geen omschrijving. Overweeg deze alsnog toe te voegen, zodat ook blinde of slechtziende mensen kunnen deelnemen.</string>
<string name="mo_share_open_url">In een andere app openen</string>
<string name="mo_disable_reminder_to_add_alt_text">Herinnering uitschakelen om alt-tekst toe te voegen</string>
<string name="mo_filtered">Filter: %s</string>
<string name="mo_mute_label">Duur:</string>
<string name="mo_duration_minutes_30">30 minuten</string>
<string name="mo_duration_minutes_5">5 minuten</string>
<string name="mo_duration_indefinite">Onbepaald</string>
<string name="mo_duration_indefinite">Voor onbepaalde tijd</string>
<string name="mo_duration_days_3">3 dagen</string>
<string name="mo_duration_days_1">1 dag</string>
<string name="mo_duration_hours_6">6 uur</string>
<string name="mo_duration_hours_1">1 uur</string>
<string name="mo_duration_days_7">7 dagen</string>
<string name="mo_miscellaneous_settings">Diverse instellingen</string>
<string name="mo_swap_bookmark_with_reblog">Gebruik reblog in plaats van bookmark</string>
<string name="mo_swap_bookmark_with_reblog">Gebruik boost in plaats van bookmark</string>
<string name="mo_notification_action_replied">Succesvol gereageerd op het bericht door %s</string>
<string name="mo_load_remote_followers">Volgers en gevolgde accounts van het profiel op afstand laden</string>
<string name="mo_download_latest_nightly_release">Download nieuwste nightly versie</string>
<string name="mo_disable_double_tap_to_swipe_between_tabs">Uitschakelen dubbele tik om te vegen tussen tabs</string>
<string name="mo_fab_compose">Samenstellen</string>
<string name="mo_change_default_reply_visibility_to_unlisted">Reageer standaard met zichtbaarheid \"unlisted\"</string>
<string name="mo_fab_compose">Bericht opstellen</string>
<string name="mo_change_default_reply_visibility_to_unlisted">Standaard met zichtbaarheid \'minder openbaar\' reageren</string>
<string name="mo_color_palette_nord">Nord</string>
<string name="mo_add_custom_server_local_timeline">Toevoegen lokale tijdlijn van een aangepaste server</string>
<string name="mo_confirm_unfollow_title">Ontvolg account</string>
<string name="mo_notification_management_settings">Beheer meldingen</string>
<string name="mo_setting_true_black_summary">Kan batterij besparen bij AMOLED scherm</string>
<string name="mo_add_custom_server_local_timeline">Lokale tijdlijn van een andere server toevoegen</string>
<string name="mo_confirm_unfollow_title">Account ontvolgen</string>
<string name="mo_notification_management_settings">Meldingen beheren</string>
<string name="mo_setting_true_black_summary">Kan batterijverbruik van AMOLED-apparaten beperken</string>
<string name="mo_confirm_unfollow">Bevestig ontvolgen van %s</string>
<string name="mo_setting_play_gif_summary">Autoplay GIFs in avatars en emoji</string>
<string name="mo_double_tap_to_swipe_between_tabs">Dubbeltikken om te swipen tussen tabs</string>
<string name="mo_enable_dividers">Toon lijnen tussen berichten</string>
<string name="mo_setting_play_gif_summary">GIF\'s in profielfoto\'s en emoji\'s automatisch afspelen</string>
<string name="mo_double_tap_to_swipe_between_tabs">Dubbeltik om tussen tabs te schakelen</string>
<string name="mo_enable_dividers">Lijnen tussen berichten weergeven</string>
<string name="mo_notification_audience_settings">Doelgroep van meldingen</string>
<string name="mo_setting_uniform_summary">Gebruik het icon van de app voor alle meldingen</string>
<string name="mo_swap_bookmark_with_reblog_summary">Bookmark of reblog vanuit de melding</string>
<string name="mo_setting_uniform_summary">App-pictogram voor alle meldingen gebruiken</string>
<string name="mo_swap_bookmark_with_reblog_summary">Bladwijzer aanmaken of boosten vanuit de melding</string>
<string name="mo_instance_registration">Registratie</string>
<string name="mo_instance_status">Status</string>
<string name="mo_instance_users">Gebruikers</string>
<string name="mo_instance_contact">Contact</string>
<string name="mo_severity_silence">Genegeerd</string>
<string name="mo_severity_silence">Beperkt</string>
<string name="mo_instance_info_moderated_servers">Gemodereerde servers</string>
<string name="mo_instance_info_open_timeline">Lokale tijdlijn</string>
<string name="mo_instance_registration_approval">Toestemming vereist</string>
<string name="mo_instance_registration_open">Open</string>
<string name="mo_instance_admin">Beheerd door</string>
<string name="mo_open_camera">Maak foto</string>
<string name="mo_severity_suspend">Geblokkeerd</string>
<string name="mo_setting_remote_follower_summary">Toon volgers van andere instances</string>
<string name="mo_setting_reduced_motion_summary">Uitschakelen animatie bij interacties</string>
<string name="mo_setting_interaction_count_summary">Toon hoeveel mensen interactie hebben met een bericht op de tijdlijn</string>
<string name="mo_setting_default_reply_privacy_summary">Reacties worden dan niet meegenomen in de discovery features</string>
<string name="mo_open_camera">Foto maken</string>
<string name="mo_severity_suspend">Opgeschort</string>
<string name="mo_setting_remote_follower_summary">Toon volgers van andere servers</string>
<string name="mo_setting_reduced_motion_summary">Animaties bij interacties uitschakelen</string>
<string name="mo_setting_interaction_count_summary">Hoeveel mensen interactie met een bericht op de tijdlijn hebben weergeven</string>
<string name="mo_setting_default_reply_privacy_summary">Reacties worden niet onder verkennen weergeven</string>
<string name="mo_setting_relocate_publish_summary">Knop voor opstellen bericht naar de onderste balk verplaatsen</string>
<string name="mo_setting_disable_swipe_summary">Niet naar andere tijdlijnen kunnen swipen</string>
<string name="mo_setting_disable_swipe_summary">Naar andere tijdlijnen kunnen vegen</string>
<string name="mo_setting_marquee_summary">Schakelt de horizontaal scrollende tekst uit</string>
<string name="mo_mention_reblogger_automatically">In reacties automatisch ook het account erbij vermelden, van degene die het bericht boost</string>
<string name="mo_mention_reblogger_automatically">In reacties automatisch ook het account van degene die het bericht boostte erbij vermelden</string>
<string name="mo_color_palette_black_and_white">Zwart Wit</string>
<string name="mo_setting_haptic_feedback_summary">Tril bij interactie met berichten</string>
<string name="mo_setting_haptic_feedback_summary">Bij interactie met berichten laten trillen</string>
<string name="mo_camera_not_available">Geen camera beschikbaar!</string>
<string name="mo_repo_url">https://github.com/LucasGGamerM/moshidon</string>
<string name="mo_settings_show_posts_without_alt">Toon berichten zonder alt tekst in media</string>
<string name="mo_settings_show_posts_without_alt_summary">Berichten worden verborgen in tijdlijnen, maar kunnen zichtbaar zijn in threads en meldingen</string>
<string name="mo_settings_show_posts_without_alt">Toon mediaberichten zonder alt-tekst</string>
<string name="mo_settings_show_posts_without_alt_summary">Berichten worden op alle tijdlijnen verborgen, maar kunnen zichtbaar zijn in gesprekken en meldingen</string>
<string name="mo_donate_url">https://github.com/sponsors/LucasGGamerM</string>
<string name="mo_unmute_hashtag">Hashtag niet meer negeren</string>
<string name="mo_show_media_preview">Toon media preview in tijdlijnen</string>
<string name="mo_show_media_preview">Media-voorvertoning op tijdlijnen weergeven</string>
<string name="mo_muted_accounts">Genegeerde accounts</string>
<string name="mo_confirm_to_unmute_hashtag">Weet je zeker dat je deze hashtag niet meer wilt negeren\?</string>
<string name="mo_blocked_accounts">Geblokkeerde accounts</string>
<string name="mo_mute_hashtag">Hashtag negeren</string>
<string name="mo_confirm_to_mute_hashtag">Weet je zeker dat je deze hashtag wilt negeren\?</string>
<string name="mo_haptic_feedback">Haptische feedback</string>
<string name="mo_muted_conversation_successfully">Succesvol genegeerd gesprek</string>
<string name="mo_muted_conversation_successfully">Negeren van gesprek geslaagd</string>
<string name="mo_filter_notifications">Filter meldingen</string>
<string name="mo_double_tap_to_search">Dubbeltik om \"zoeken\" te openen</string>
<string name="mo_mute_conversation">Negeer gesprek</string>
<string name="mo_double_tap_to_search">Dubbeltik om te zoeken</string>
<string name="mo_mute_conversation">Gesprek negeren</string>
<string name="mo_unmute_conversation">Gesprek niet meer negeren</string>
<string name="mo_confirm_to_mute_conversation">Weet je zeker dat je dit gesprek wilt negeren?</string>
<string name="mo_mute_notifications">Verberg meldingen van dit account?</string>
<string name="mo_mute_notifications">Meldingen van dit account verbergen?</string>
<string name="mo_confirm_to_unmute_conversation">Weet je zeker dat je dit gesprek niet meer wilt negeren?</string>
<string name="mo_instance_view_info">Bekijk serverinformatie</string>
<string name="mo_settings_remove_tracking_params_summary">Websitetracking uit links verwijderen</string>

View File

@@ -2,20 +2,20 @@
<resources>
<string name="sk_app_name">Megalodon</string>
<string name="sk_pinned_posts">Vastgemaakt</string>
<string name="sk_delete_and_redraft">Verwijderen en opnieuw opstellen</string>
<string name="sk_confirm_delete_and_redraft_title">Verwijder en stel bericht opnieuw op</string>
<string name="sk_delete_and_redraft">Verwijderen en herschrijven</string>
<string name="sk_confirm_delete_and_redraft_title">Bericht verwijderen en herschrijven</string>
<string name="sk_confirm_delete_and_redraft">Weet je zeker dat je dit bericht wilt verwijderen en opnieuw wilt opstellen\?</string>
<string name="sk_pin_post">Vastmaken aan profiel</string>
<string name="sk_confirm_pin_post_title">Bericht vastmaken aan profiel</string>
<string name="sk_confirm_pin_post">Wil je dit bericht vastmaken aan je profiel\?</string>
<string name="sk_pin_post">Aan profielpagina vastmaken</string>
<string name="sk_confirm_pin_post_title">Aan profielpagina vastmaken</string>
<string name="sk_confirm_pin_post">Wil je dit bericht aan je profielpagina vastmaken?</string>
<string name="sk_pinning">Bericht vastmaken…</string>
<string name="sk_unpin_post">Losmaken van profiel</string>
<string name="sk_confirm_unpin_post_title">Bericht losmaken van profiel</string>
<string name="sk_unpin_post">Van profielpagina losmaken</string>
<string name="sk_confirm_unpin_post_title">Van profielpagina losmaken</string>
<string name="sk_confirm_unpin_post">Weet je zeker dat je dit bericht wilt losmaken\?</string>
<string name="sk_unpinning">Bericht losmaken…</string>
<string name="sk_follow_requests">Volgverzoeken</string>
<string name="sk_visibility_unlisted">Minder openbaar</string>
<string name="sk_image_description">Afbeelding beschrijving</string>
<string name="sk_image_description">Afbeeldingbeschrijving</string>
<string name="sk_settings_show_replies">Reacties weergeven</string>
<string name="sk_settings_show_boosts">Boosts weergeven</string>
<string name="sk_settings_load_new_posts">Automatisch nieuwe berichten laden</string>
@@ -24,11 +24,11 @@
<string name="sk_mark_media_as_sensitive">Markeer media als gevoelig</string>
<string name="sk_user_post_notifications_on">Berichtmeldingen aangezet voor %s</string>
<string name="sk_user_post_notifications_off">Berichtmeldingen uitgezet voor %s</string>
<string name="sk_federated_timeline">Federatie</string>
<string name="sk_federated_timeline_info_banner">Dit zijn de meest recente berichten van de mensen in jouw federatie.</string>
<string name="sk_federated_timeline">Globaal</string>
<string name="sk_federated_timeline_info_banner">Dit zijn de meest recente berichten van mensen in het voor jou zichtbare deel van de fediverse.</string>
<string name="sk_update_available">Moshidon %s is klaar om te downloaden.</string>
<string name="sk_update_ready">Moshidon %s is gedownload en klaar om te installeren.</string>
<string name="sk_check_for_update">Controleren op update</string>
<string name="sk_check_for_update">Op update controleren</string>
<string name="sk_no_update_available">Geen update beschikbaar</string>
<string name="sk_list_timelines">Lijsten</string>
<string name="sk_reject_follow_request">Volgverzoek afwijzen</string>
@@ -37,29 +37,29 @@
<string name="sk_settings_always_reveal_content_warnings">Onthul altijd inhoudswaarschuwingen</string>
<string name="sk_settings_enable_marquee">Schakel scrollende tekst in titelbalken uit</string>
<string name="sk_settings_contribute">Bijdragen aan Megalodon</string>
<string name="sk_settings_show_federated_timeline">Toon gefedereerde tijdlijn</string>
<string name="sk_settings_show_federated_timeline">Globale tijdlijn bekijken</string>
<string name="sk_notification_type_status">Berichten</string>
<string name="sk_notification_type_posts">Een bericht publiceert</string>
<string name="sk_notify_posts">Een bericht publiceert</string>
<string name="sk_timeline_local">Lokaal</string>
<string name="sk_timeline_home">Home</string>
<string name="sk_timeline_federated">Federatie</string>
<string name="sk_translate_post">Vertaal</string>
<string name="sk_timeline_federated">Globaal</string>
<string name="sk_translate_post">Vertalen</string>
<string name="sk_clear_recent_languages">Wis recent gebruikte talen</string>
<string name="sk_welcome_text">De haai groet je! Graag je instance naam (Mastodon server) hieronder invullen om te beginnen.</string>
<string name="sk_welcome_text">De haai groet je! Graag je servernaam (instance) hieronder invullen om te beginnen.</string>
<string name="sk_welcome_title">Welkom!</string>
<string name="sk_translated_using">Vertaald met %s</string>
<string name="sk_post_language">Taal: %s</string>
<string name="sk_bookmarked_as">Bookmark opgeslagen als %s</string>
<string name="sk_already_bookmarked">Al als bookmark opgeslagen</string>
<string name="sk_bookmarked_as">Bladwijzer opgeslagen als %s</string>
<string name="sk_already_bookmarked">Al als bladwijzer opgeslagen</string>
<string name="sk_favorited_as">Als favoriet opgeslagen als %s</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_example_domain">example.social</string>
<string name="sk_reply_as">Antwoord met ander account</string>
<string name="sk_settings_uniform_icon_for_notifications">Zelfde icoon voor alle meldingen</string>
<string name="sk_settings_tabs_disable_swipe">Swipen tussen tabs uitschakelen</string>
<string name="sk_settings_uniform_icon_for_notifications">Hetzelfde pictogram voor alle meldingen</string>
<string name="sk_settings_tabs_disable_swipe">Vegen tussen tabs uitschakelen</string>
<string name="sk_settings_profile">Profiel instellen</string>
<string name="sk_settings_posting">Bericht voorkeuren</string>
<string name="sk_settings_posting">Berichtvoorkeuren</string>
<string name="sk_settings_filters">Filters instellen</string>
<string name="sk_settings_auth">Beveiliging instellen</string>
<string name="sk_settings_rules">Regels</string>
@@ -74,24 +74,24 @@
<string name="sk_color_palette_brown">Bruin</string>
<string name="sk_color_palette_red">Rood</string>
<string name="sk_color_palette_yellow">Geel</string>
<string name="sk_delete_notification_confirm_action">Verwijder melding</string>
<string name="sk_delete_notification_confirm_action">Melding verwijderen</string>
<string name="sk_delete_notification_confirm">Weet je zeker dat je de melding wilt verwijderen\?</string>
<string name="sk_settings_enable_delete_notifications">Meldingen verwijderen inschakelen</string>
<string name="sk_settings_publish_button_text">Tekst op publiceerknop</string>
<string name="sk_settings_publish_button_text_title">Tekst publiceerknop aanpassen</string>
<string name="sk_settings_publish_button_text">Tekst op knop voor opstellen bericht</string>
<string name="sk_settings_publish_button_text_title">Tekst op knop voor opstellen bericht aanpassen</string>
<string name="sk_settings_translation_availability_note_available">%s ondersteunt vertaling!</string>
<string name="sk_settings_translation_availability_note_unavailable">%s lijkt vertaling niet te ondersteunen.</string>
<string name="sk_clear_all_notifications">Wis alle meldingen</string>
<string name="sk_clear_all_notifications_confirm_action">Verwijder alles</string>
<string name="sk_clear_all_notifications">Alle meldingen verwijderen</string>
<string name="sk_clear_all_notifications_confirm_action">Alles verwijderen</string>
<string name="sk_clear_all_notifications_confirm">Weet je zeker dat je alle meldingen wilt verwijderen\?</string>
<string name="sk_loading_fediverse_resource_title">Opzoeken in de Fediverse</string>
<string name="sk_loading_fediverse_resource_title">Opzoeken in de fediverse</string>
<string name="sk_copy_link_to_post">Kopieer link naar bericht</string>
<string name="sk_loading_resource_on_instance_title">Opzoeken op %s</string>
<string name="sk_open_with_account">Open met ander account</string>
<string name="sk_unsent_posts">Niet-verzonden berichten</string>
<string name="sk_draft">Concept</string>
<string name="sk_schedule">Inplannen</string>
<string name="sk_confirm_delete_draft">Weet je zeker dat je dit concept bericht wilt verwijderen\?</string>
<string name="sk_confirm_delete_draft">Weet je zeker dat je dit conceptbericht wilt verwijderen?</string>
<string name="sk_confirm_delete_scheduled_post_title">Verwijder ingepland bericht</string>
<string name="sk_draft_or_schedule">Concept of ingepland</string>
<string name="sk_compose_draft">Bericht wordt als concept bewaard.</string>
@@ -106,26 +106,26 @@
<string name="sk_settings_reduce_motion">Beweging in animaties verminderen</string>
<string name="sk_announcements">Aankondigingen</string>
<string name="sk_mark_as_read">Markeer als gelezen</string>
<string name="sk_settings_about_instance">Over instance</string>
<string name="sk_settings_about_instance">Over server</string>
<string name="sk_settings_single_notification">Toon maar één melding</string>
<string name="sk_create">Maken</string>
<string name="sk_create_list_title">Maak lijst</string>
<string name="sk_list_name_hint">Lijstnaam</string>
<string name="sk_list_replies_policy">Toon reacties aan</string>
<string name="sk_list_replies_policy_none">Niemand</string>
<string name="sk_list_replies_policy_followed">Gevolgde users</string>
<string name="sk_list_replies_policy_followed">Gevolgde gebruikers</string>
<string name="sk_delete_list">Verwijder lijst</string>
<string name="sk_delete_list_confirm">Weet je zeker dat je deze lijst wilt verwijderen: “%s”\?</string>
<string name="sk_edit_list_title">Bewerk lijst</string>
<string name="sk_your_lists">Je lijsten</string>
<string name="sk_translate_show_original">Toon origineel</string>
<string name="sk_translate_show_original">Origineel bekijken</string>
<string name="sk_available_languages">Beschikbare talen</string>
<string name="sk_confirm_clear_recent_languages">Weet je zeker dat je de laatst gebruikte talen wilt wissen\?</string>
<string name="sk_delete_notification">Verwijder melding</string>
<string name="sk_delete_notification">Melding verwijderen</string>
<string name="sk_settings_translate_only_opened">Vertaal alleen geopende berichten</string>
<string name="sk_hashtags_you_follow">Hashtags die je volgt</string>
<string name="sk_resource_not_found">Bron kon niet worden gevonden</string>
<string name="sk_bookmark_as">Bookmark met ander account</string>
<string name="sk_bookmark_as">Bladwijzer aanmaken met ander account</string>
<string name="sk_favorite_as">Maak favoriet met ander account</string>
<string name="sk_already_favorited">Al als favoriet opgeslagen</string>
<string name="sk_forward_report_to">Doorsturen naar %s</string>
@@ -151,10 +151,10 @@
<string name="sk_icon_star">Ster</string>
<string name="sk_timeline_posts">Berichten</string>
<string name="sk_timelines_add">Toevoegen</string>
<string name="sk_alt_text_missing_title">Ontbrekende alt tekst</string>
<string name="sk_alt_text_missing_title">Ontbrekende alt-tekst</string>
<string name="sk_alt_text_missing">Minstens één bijlage bevat geen omschrijving.</string>
<string name="sk_publish_anyway">Toch publiceren</string>
<string name="sk_settings_disable_alt_text_reminder">Alt tekst herinnering uitschakelen</string>
<string name="sk_settings_disable_alt_text_reminder">Alt-tekst herinnering uitschakelen</string>
<string name="sk_notify_posts_info_banner">Als je meldingen voor berichten van bepaalde mensen inschakelt, dan zie je hier hun nieuwe berichten.</string>
<string name="sk_icon_pi">Pi</string>
<string name="sk_icon_city">Stad</string>
@@ -162,7 +162,7 @@
<string name="sk_icon_dog">Hond</string>
<string name="sk_icon_turtle">Schildpad</string>
<string name="sk_icon_balloon">Ballon</string>
<string name="sk_icon_image">Plaatje</string>
<string name="sk_icon_image">Afbeelding</string>
<string name="sk_icon_bot">Bot</string>
<string name="sk_icon_language">Taal</string>
<string name="sk_icon_location">Locatie</string>
@@ -172,7 +172,7 @@
<string name="sk_icon_keyboard">Keyboard</string>
<string name="sk_icon_coffee">Koffie</string>
<string name="sk_icon_laugh">Lach</string>
<string name="sk_edit_timeline">Bewerk tijdlijn</string>
<string name="sk_edit_timeline">Tijdlijn bewerken</string>
<string name="sk_icon_color_palette">Kleurpalet</string>
<string name="sk_icon_tag">Label</string>
<string name="sk_icon_stethoscope">Stethoscoop</string>
@@ -199,7 +199,7 @@
<string name="sk_icon_human">Mens</string>
<string name="sk_icon_globe">Wereldbol</string>
<string name="sk_attach_file">Voeg bestand toe</string>
<string name="sk_edit_timelines">Bewerk tijdlijnen</string>
<string name="sk_edit_timelines">Tijdlijnen bewerken</string>
<string name="sk_notification_type_update">Bewerkte berichten</string>
<string name="sk_timelines">Tijdlijnen</string>
<string name="sk_timeline">Tijdlijn</string>
@@ -207,7 +207,7 @@
<string name="sk_pin_timeline">Zet tijdlijn vast</string>
<string name="sk_unpin_timeline">Maak tijdlijn los</string>
<string name="sk_remove">Verwijder</string>
<string name="sk_timeline_icon">Icoon</string>
<string name="sk_timeline_icon">Pictogram</string>
<string name="sk_icon_heart">Hart</string>
<string name="sk_icon_rabbit">Konijn</string>
<string name="sk_icon_news">Nieuws</string>
@@ -224,47 +224,47 @@
<string name="sk_searching">Zoeken…</string>
<string name="sk_no_results">Geen resultaten</string>
<string name="sk_save_draft">Concept opslaan\?</string>
<string name="sk_no_alt_text">Geen alt tekst beschikbaar</string>
<string name="sk_settings_show_alt_indicator">Indicator voor alt tekst</string>
<string name="sk_settings_show_no_alt_indicator">Indicator voor ontbrekende alt tekst</string>
<string name="sk_no_alt_text">Geen alt-tekst beschikbaar</string>
<string name="sk_settings_show_alt_indicator">Indicator voor alt-tekst</string>
<string name="sk_settings_show_no_alt_indicator">Indicator voor ontbrekende alt-tekst</string>
<string name="sk_updater_enable_pre_releases">Pre-releases inschakelen</string>
<string name="sk_save_draft_message">Wil je de wijzingen aan dit concept opslaan of dit nu publiceren\?</string>
<string name="sk_save_draft_message">Wil je de wijzigingen aan dit concept opslaan of dit nu plaatsen?</string>
<string name="sk_schedule_or_draft">Inplannen of concept</string>
<string name="sk_separator">·</string>
<string name="sk_sign_ups">Gebruikers die zich aanmelden</string>
<string name="sk_settings_see_new_posts_button">Knop \"Zie nieuwe berichten\"</string>
<string name="sk_inline_local_only">alleen-lokaal</string>
<string name="sk_local_only">Alleen lokale instance</string>
<string name="sk_local_only">Alleen lokale server</string>
<string name="sk_settings_glitch_instance">Glitch alleen-lokaal modus</string>
<string name="sk_instance_features">Instance mogelijkheden</string>
<string name="sk_instance_features">Servermogelijkheden</string>
<string name="sk_settings_support_local_only">Server ondersteunt alleen-lokaal berichten plaatsing</string>
<string name="sk_settings_server_version">Serverversie: %s</string>
<string name="sk_notify_poll_results">Peiling uitslagen publiceert</string>
<string name="sk_pinned_timeline">Vastgemaakt aan Home</string>
<string name="sk_unpinned_timeline">Losgemaakt van Home</string>
<string name="sk_notify_poll_results">Uitslagen peiling gepubliceerd</string>
<string name="sk_pinned_timeline">Aan Start vastgemaakt</string>
<string name="sk_unpinned_timeline">Van Start losgemaakt</string>
<string name="sk_expand">Uitvouwen</string>
<string name="sk_collapse">Inklappen</string>
<string name="sk_filtered">Gefilterd: %s</string>
<string name="sk_settings_collapse_long_posts">Lange berichten inklappen</string>
<string name="sk_unfinished_attachments_message">Enkele bijlagen zijn nog niet klaar met uploaden.</string>
<string name="sk_compose_no_draft">Niet opslaan als concept</string>
<string name="sk_settings_hide_interaction">Verberg interactie knoppen</string>
<string name="sk_settings_hide_interaction">Verberg interactie-knoppen</string>
<string name="sk_follow_as">Volgen met ander account</string>
<string name="sk_followed_as">Gevolgd met %s</string>
<string name="sk_quoting_user">Quoting %s</string>
<string name="sk_quoting_user">%s citeren</string>
<string name="sk_settings_reply_visibility">Zichtbaarheid reactie</string>
<string name="sk_settings_reply_visibility_all">Alle reacties</string>
<string name="sk_settings_auto_reveal_anyone">Reacties van iedereen</string>
<string name="sk_settings_auto_reveal_author">Reacties van dezelfde auteur</string>
<string name="sk_settings_auto_reveal_author">Reacties van dezelfde gebruiker</string>
<string name="sk_settings_auto_reveal_nobody">Nooit</string>
<string name="sk_settings_prefix_replies_never">Nooit</string>
<string name="sk_settings_prefix_replies_always">Als reactie op iemand</string>
<string name="sk_settings_auto_reveal_equal_spoilers">Dezelfde CW\'s automatisch tonen in reacties</string>
<string name="sk_settings_allow_remote_loading">Laad informatie van remote instances (servers)</string>
<string name="sk_no_remote_info_hint">remote info niet beschikbaar</string>
<string name="sk_settings_allow_remote_loading_explanation">Probeer meer accurate informatie te krijgen van volgers, favorieten en boosts, door informatie te laden van de originele instance (server).</string>
<string name="sk_settings_forward_report_default">Standaardinstelling \"Forward report\"</string>
<string name="sk_settings_hide_fab">Automatisch Compose knop verbergen</string>
<string name="sk_settings_allow_remote_loading">Laad informatie van externe servers (instances)</string>
<string name="sk_no_remote_info_hint">externe info niet beschikbaar</string>
<string name="sk_settings_allow_remote_loading_explanation">Probeer meer accurate informatie te krijgen van volgers, favorieten en boosts, door informatie te laden van de originele server (instance).</string>
<string name="sk_settings_forward_report_default">Standaardinstelling \"rapportage doorsturen\"</string>
<string name="sk_settings_hide_fab">Automatisch knop voor opstellen bericht verbergen</string>
<string name="sk_list_exclusive_switch">Maak lijst exclusief</string>
<string name="sk_compact_reblog_reply_line">Compacte boost/reply regel</string>
<string name="sk_reply_line_above_avatar">“In reply to” regel boven avatar</string>
@@ -276,7 +276,7 @@
<string name="sk_advanced_options_show">Toon geavanceerde opties</string>
<string name="sk_open_in_app">Open in app</string>
<string name="sk_advanced_options_hide">Verberg geavanceerde opties</string>
<string name="sk_settings_emoji_reactions">Gebruik emoji reacties</string>
<string name="sk_settings_emoji_reactions">Emoji-reacties gebruiken</string>
<plurals name="sk_users_reacted_with">
<item quantity="one">Eén persoon reageerde met %2$s</item>
<item quantity="other">%1$,d personen reageerden met %2$s</item>
@@ -298,26 +298,26 @@
<string name="sk_content_type_html">HTML</string>
<string name="sk_content_type_plain">Alleen tekst</string>
<string name="sk_content_type_unspecified">Niet gespecificeerd</string>
<string name="sk_settings_default_content_type">Standaard formaat</string>
<string name="sk_settings_default_content_type">Standaard inhoudstype</string>
<string name="sk_content_type_markdown">Markdown</string>
<string name="sk_content_type_bbcode">BBCode</string>
<string name="sk_content_type_mfm">MFM</string>
<string name="sk_tab_notifications">Meldingen</string>
<string name="sk_tab_search">Zoek</string>
<string name="sk_tab_home">Home</string>
<string name="sk_tab_search">Zoeken</string>
<string name="sk_tab_home">Start</string>
<string name="sk_external_share_or_open_title">Deel of open met account</string>
<string name="sk_instance_info_unavailable">Instance informatie tijdelijk niet beschikbaar</string>
<string name="sk_settings_show_labels_in_navigation_bar">Toon tab labels op navigatiebalk</string>
<string name="sk_instance_info_unavailable">Server-informatie tijdelijk niet beschikbaar</string>
<string name="sk_settings_show_labels_in_navigation_bar">Toon tab-labels op navigatiebalk</string>
<string name="sk_tab_profile">Profiel</string>
<plurals name="sk_posts_count_label">
<item quantity="one">bericht</item>
<item quantity="other">berichten</item>
</plurals>
<string name="sk_load_missing_posts_below">Laad oudere berichten</string>
<string name="sk_load_missing_posts_above">Laad nieuwere berichten</string>
<string name="sk_suicide_helplines_url">https://www.113.nl/</string>
<string name="sk_load_missing_posts_below">Oudere berichten laden</string>
<string name="sk_load_missing_posts_above">Nieuwere berichten laden</string>
<string name="sk_suicide_helplines_url">https://www.113.nl (Nederland), https://www.zelfmoord1813.be (Vlaanderen)</string>
<string name="sk_suicide_search_terms">Zelfmoord</string>
<string name="sk_notification_mention">Je werd genoemd door %s</string>
<string name="sk_notification_mention">%s vermeldde jou</string>
<string name="sk_time_hours">%d uren</string>
<string name="sk_time_minutes">%d minuten</string>
<string name="sk_do_not_show_again">Niet meer laten zien</string>
@@ -331,9 +331,9 @@
<string name="sk_settings_show_emoji_reactions_only_opened">Alleen als een bericht geopend is</string>
<string name="sk_add_timeline">Tijdlijn toevoegen</string>
<string name="sk_set_as_default">Instellen als standaard</string>
<string name="sk_settings_like_icon">Gebruik een hartje als icoon voor favoriet</string>
<string name="sk_settings_like_icon">Gebruik een hartje als pictogram voor favoriet</string>
<string name="sk_settings_color_palette_default">Standaard (%s)</string>
<string name="sk_settings_show_emoji_reactions">Toon emoji reacties in tijdlijnen</string>
<string name="sk_settings_show_emoji_reactions">Emoji-reacties op tijdlijnen weergeven</string>
<string name="sk_blocked_accounts">Geblokkeerde accounts</string>
<string name="sk_icon_feed">Feed</string>
<string name="sk_edit_timeline_tag_main">Berichten met hashtag…</string>
@@ -341,37 +341,37 @@
<string name="sk_settings_underlined_links">Onderstreepte links</string>
<string name="sk_settings_lock_account">Handmatig nieuwe volgers goedkeuren</string>
<string name="sk_settings_instance">Instance</string>
<string name="sk_settings_display_pronouns_in_timelines">Toon voornaamwoorden in tijdlijnen</string>
<string name="sk_settings_display_pronouns_in_timelines">Toon voornaamwoorden op tijdlijnen</string>
<string name="sk_switch_timeline">Tijdlijn wisselen</string>
<string name="sk_hashtag_timeline_local_only_switch">Alleen lokale berichten tonen\?</string>
<string name="sk_icon_umbrella">Paraplu</string>
<string name="sk_unfinished_attachments">Uploaden bijlagen</string>
<string name="sk_timeline_cache_cleared">Cache gewist van de home tijdlijn</string>
<string name="sk_timeline_cache_cleared">Buffer van de starttijdlijn leeggemaakt</string>
<string name="sk_muted_accounts">Genegeerde accounts</string>
<string name="sk_settings_true_black">Diepzwarte modus</string>
<string name="sk_edit_timeline_tag_any">...of een van deze</string>
<string name="sk_settings_display_pronouns_in_threads">Toon voornaamwoorden in threads</string>
<string name="sk_settings_display_pronouns_in_threads">Toon voornaamwoorden in gesprekken</string>
<string name="sk_edit_timeline_tag_all">...en elke van deze</string>
<string name="sk_icon_diamond">Diamant</string>
<string name="sk_trending_posts_info_banner">Deze berichten zijn momenteel populair in de Fediverse.</string>
<string name="sk_trending_posts_info_banner">Deze berichten zijn momenteel populair in de fediverse.</string>
<string name="sk_settings_display_pronouns_in_user_listings">Toon voornaamwoorden in gebruikersoverzichten</string>
<string name="sk_icon_doctor">Dokter</string>
<string name="sk_edit_timeline_tag_hint">Voer hashtag in…</string>
<string name="sk_icon_bed">Bed</string>
<string name="sk_edit_timeline_tag_none">...maar geen van deze</string>
<string name="sk_icon_beaker">Beker</string>
<string name="sk_button_mutuals">Vrienden</string>
<string name="sk_button_mutuals">Jullie volgen elkaar</string>
<string name="sk_exclusive_list">Exclusieve lijst</string>
<string name="sk_settings_continues_playback">Audio overlay</string>
<string name="sk_icon_recycle_bin">Recycle bak</string>
<string name="sk_trending_links_info_banner">Deze nieuwsberichten worden besproken in de Fediverse.</string>
<string name="sk_search_fediverse">Zoek in de Fediverse</string>
<string name="sk_settings_continues_playback">Audio-overlay</string>
<string name="sk_icon_recycle_bin">Recycle-bak</string>
<string name="sk_trending_links_info_banner">Deze nieuwsberichten worden besproken in de fediverse.</string>
<string name="sk_search_fediverse">In de fediverse zoeken</string>
<string name="sk_post_contains_media">Bericht bevat media</string>
<string name="sk_settings_clear_timeline_cache">Wis de cache van de home tijdlijn</string>
<string name="sk_edit_alt_text">Bewerk alt tekst</string>
<string name="sk_settings_clear_timeline_cache">Buffer van de starttijdlijn leegmaken</string>
<string name="sk_edit_alt_text">Alt-tekst bewerken</string>
<string name="sk_settings_unifiedpush">Gebruik UnifiedPush</string>
<string name="sk_add_timeline_tag_error_empty">Hashtag mag niet leeg zijn</string>
<string name="sk_list_exclusive_switch_explanation">Berichten van leden op een exclusieve lijst worden niet getoond in je home tijdlijn - als je instance dit ondersteunt.</string>
<string name="sk_list_exclusive_switch_explanation">Berichten van leden op een exclusieve lijst worden niet op je starttijdlijn getoond - als je server dit ondersteunt.</string>
<string name="sk_pronouns_label">Voornaamwoorden</string>
<string name="sk_settings_reply_visibility_following">Reageert op accounts die ik volg</string>
<string name="sk_settings_reply_visibility_self">Reageert op mij</string>
@@ -405,15 +405,27 @@
<string name="sk_content_type">Inhoudstype</string>
<string name="sk_settings_default_content_type_explanation">Hiermee wordt tijdens het opstellen van een bericht standaard een inhoudstype geselecteerd. De instelling onder “bericht-instellingen” wordt hiermee overschreven.</string>
<string name="sk_settings_prefix_replies_to_others">Alleen als reactie op anderen</string>
<string name="sk_settings_emoji_reactions_explanation">Emoji-reacties op berichten tonen en het plaatsen daarvan toestaan. Dit wordt door verscheidende Fediverse-servers ondersteund, maar niet door Mastodon.</string>
<string name="sk_settings_emoji_reactions_explanation">Emoji-reacties op berichten tonen en het plaatsen daarvan toestaan. Dit wordt door verscheidende fediverse-servers ondersteund, maar niet door Mastodon.</string>
<string name="sk_settings_show_emoji_reactions_hide_empty">Lege emoji-reacties verbergen</string>
<string name="sk_settings_show_emoji_reactions_always">Altijd de knop tonen om ze toe te voegen</string>
<string name="sk_enter_emoji_toast">Type een emoji</string>
<string name="sk_search_suicide_title">Wanneer je in nood verkeert…</string>
<string name="sk_search_suicide_message">Wanneer je op zoek bent naar een reden om geen zelfmoord te plegen, is dit de juiste plek. Overweeg wanneer je in nood verkeert om contact op te nemen met de lokale zelfmoordpreventie.</string>
<string name="sk_search_suicide_message">Wanneer je op zoek bent naar een reden om geen zelfmoord te plegen, is dit de juiste plek. Overweeg wanneer je in nood verkeert om contact op te nemen met je lokale zelfmoordpreventie.</string>
<string name="sk_settings_default_visibility">Standaard zichtbaarheid van nieuwe berichten</string>
<string name="sk_private_note_hint">Een persoonlijke opmerking over dit account toevoegen</string>
<string name="sk_confirm_changes">Wijzigingen bevestigen</string>
<string name="sk_settings_continues_playback_summary">Laat media wat al aan het afspelen is, over het nieuwe afspeelvenster heen doorgaan met afspelen</string>
<string name="sk_bubble_timeline_info_banner">Dit zijn de meest recente berichten uit het netwerk, samengesteld door jouw serverbeheerders.</string>
<string name="sk_settings_continues_playback_summary">Laat media wat al aan het afspelen is, over het nieuwe afspeelvenster heen doorspelen</string>
<string name="sk_bubble_timeline_info_banner">Dit zijn de meest recente berichten uit het door jou serverbeheerders samengestelde deel van het netwerk.</string>
<string name="sk_private_note_update_failed">Opslaan van opmerking mislukt</string>
<string name="sk_private_note_confirm_delete">Persoonlijke opmerking over %s verwijderen?</string>
<string name="sk_delete_note">Persoonlijke opmerking verwijderen</string>
<string name="sk_settings_copy_crash_log">Laatste crash-log kopiëren</string>
<string name="sk_crash_log_copied">Crash-log gekopieerd</string>
<string name="sk_open_post_preview">Bericht voorvertonen</string>
<string name="sk_post_preview">Voorvertonen</string>
<string name="sk_poll_multiple_choice">Meerkeuzevragen</string>
<string name="sk_poll_show_results">Resultaten bekijken</string>
<string name="sk_poll_hide_results">Resultaten verbergen</string>
<string name="sk_add_note">Persoonlijke opmerking toevoegen</string>
<string name="sk_settings_crash_log_unavailable">(Alsnog) niks aanwezig</string>
</resources>

View File

@@ -16,6 +16,7 @@
<string name="mo_settings_app_version" translatable="false">Moshidon v%1$s (%2$d)</string>
<string name="mo_personal_note">Add a note about this profile</string>
<string name="mo_personal_note_saved">Note saved</string>
<string name="mo_personal_note_confirm">Confirm changes to note</string>
<string name="mo_personal_note_update_failed">Failed to save note</string>
<string name="mo_settings_contribute">Contribute to Moshidon</string>
@@ -141,4 +142,5 @@
<string name="mo_error_display_text">Something went wrong while loading this post. If the problem persists, please report it on our Issues page along with the error details.</string>
<string name="mo_error_display_copy_error_details">Copy details</string>
<string name="mo_trending_link_read">Read</string>
<string name="mo_icon_gnome" translatable="false">GNOME</string>
</resources>

View File

@@ -206,7 +206,13 @@ public class GithubSelfUpdaterImpl extends GithubSelfUpdater{
if(state==UpdateState.DOWNLOADING)
throw new IllegalStateException();
DownloadManager dm=MastodonApp.context.getSystemService(DownloadManager.class);
MastodonApp.context.registerReceiver(downloadCompletionReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.TIRAMISU){
MastodonApp.context.registerReceiver(downloadCompletionReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE), Context.RECEIVER_EXPORTED);
}else{
MastodonApp.context.registerReceiver(downloadCompletionReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
downloadID=dm.enqueue(
new DownloadManager.Request(Uri.parse(getPrefs().getString("apkURL", null)))
.setDestinationUri(Uri.fromFile(getUpdateApkFile()))

View File

@@ -0,0 +1,4 @@
- Fixes Pixelfed login
- Fixes numerous crashes
For full changelog, see https://github.com/LucasGGamerM/moshidon/releases/tag/2.3.0%2Bfork.107.moshinda

View File

@@ -0,0 +1,2 @@
- Fixed a bunch of crashes
- Small bug fixes and improvements

View File

@@ -0,0 +1,9 @@
* Importar configuraciones de exportación (solo para cuentas registradas)
* Representar las URL de las publicaciones como si fueran publicaciones de citas reales
* Ver aspectos destacados del filtro
* Advertir si UnifiedPush está deshabilitado en fdroid
* Colocar los botones de descarga/compartir en el visor de imágenes en su lugar anterior
* Ver líneas de tiempo de enlaces de tendencia (el servidor debe soportarlo)
* Agregar opción para eliminar los parámetros de seguimiento de la URL
* Ahora puedes elegir una cuenta al iniciar la redacción desde un menú de inicio
* Muchas correcciones de errores menores y mejoras.

View File

@@ -0,0 +1 @@
Mastodon pour Android, mais avec Material You et plus de fonctionnalités

View File

@@ -0,0 +1,9 @@
* Impor. ir ekspor. nustat. (tik prisijung. paskyroms)
* Atvaiz. įrašų URL adres. taip, tarsi jie būtų tikri cita. įrašai
* Žr. filtro akcentus
* Įspėti, jei „UnifiedPush“ išjungtas per „F-Droid“
* Įd. atsisiun. / bendrin. myg. vaizdų žiūryklėje į ankstesnę vietą
* Žr. laiko skales prie tenden. nuorodų (serve. turi tai palaikyti)
* Prid. parinktį, kad būtų galima pašal. URL sekimo parametr.
* Dabar galima pasirin. paskyrą palei. rengyklę iš paleid. meniu
* Daug smulkių klai. taisym. ir patobul.

View File

@@ -0,0 +1,3 @@
Nauji dalykai 96 leidimui:
- Patobulinta galimybė turėti kitų serverių vietines laiko skales laiko skalėse
- Smulkūs pataisymai ir patobulinimai

View File

@@ -0,0 +1,3 @@
97 leidimas pridėta:
- Nauja funkcija Pasirinktinės vietinės laiko skalės. Ją galima pasiekti meniu Pridėti laiko skales
- Nedideli pataisymai ir patobulinimai

View File

@@ -0,0 +1,6 @@
Nauji dalykai 99 leidimui:
- Pridėti pranešimų veiksmus
- Pridėti parinktį, leidžiančią pagal numatytuosius nustatymus įjungti neįtrauktus į sąrašą atsakymus
- Pridėti nutildymo laikmatį
- Pridėti pranešimo ženklelį, jei yra neperskaitytų pranešimų
- Nedideli klaidų pataisymai ir naudojimo patogumo patobulinimai

View File

@@ -0,0 +1,9 @@
- Completely redesigned settings fragment
- New camera shortcut added to the Composition fragment
- Fixes many crashes on Calckey
- Many improvements to Akkoma/Pleroma
- Many improvements to filters behavior
- New redesigned Account sheet
- Add the option to change post content style (Plain text, markdown, etc) on instances that support it
- Add the ability to view one's server info by tapping on their username inside of anyone's profile
- Many, many small fixes and improvements

View File

@@ -0,0 +1,11 @@
This new release comes with:
- New completely updated Material 3 design from upstream
- UnifiedPush notifications support (Thanks @FineFindus!)
- Blocks and mutes are now visible from your profile
- You can now mute hashtags directly from the hashtag view
- Emoji reactions are now a thing on instances that support it (Thanks @sk22!)
- Editing filters in app is also now a thing (Thanks upstream)
- You can now hide media previews from timelines
- New Black & White theme added
- Muting conversations is now possible
- Many small fixes and improvements

View File

@@ -0,0 +1,9 @@
- You can now filter notifications shown in the notification tab directly from the 'Filter notifications' button
- Improvements for akkoma: translations, quoted posts will now be displayed correctly, and the ability to preview posts before publishing (Thanks Megalodon!)
- Reach and Privacy settings now available in app
- Option to disable underlined links
- Using a Heart as a favorite icon is now possible
- You can now copy crash logs in case you need to file a bug report
- Added Bookmarks and Your favorites as pinnable timelines (Thanks Megalodon!)
- You can now see the difference between the edited and original posts in the edit history (Thanks @FineFindus!)
- Many small bug fixes

View File

@@ -0,0 +1,2 @@
- Enabled sharing directly from the image viewer (No need to download the media to share it anymore)
- Many minor bugfixes and improvements

View File

@@ -0,0 +1,3 @@
- Merged upstream (2.3.0)
- Added remote fetching for status history
- Fixed a bunch of bugs

View File

@@ -0,0 +1,9 @@
* Import export settings (for logged accounts only)
* Render post URLs as if they were actual quote posts
* See filter highlights
* Warn if UnifiedPush is disabled on fdroid
* Put the download/share buttons on the image viewer in their previous place
* See timelines to trending links (server must support it)
* Add option to strip url's tracking parameters
* You can now pick an account when launching compose from a launcher menu
* Many minor bugfixes and improvements

View File

@@ -0,0 +1,6 @@
- The latest crash log is now kept and ready to be copied from the "About Megalodon" settings page
- Add and display personal notes on profiles
- Text modifications are now highlighted in the edit history
- Akkoma: Quoted posts are displayed in the timeline; translation; preview posts before publishing
- Added Bookmarks and Your favorites as pinnable timelines
- Various bugfixes

View File

@@ -0,0 +1,6 @@
- Add language selector
- Add translate function
- Improve semantics for voting on polls (radio buttons and checkboxes)
- Add option to allow voting for multiple options on polls
- New login screen
- Bugfixes

View File

@@ -0,0 +1,5 @@
- New color themes: Material You and Red
- New dark gray tones for all themes
- More distinct filled boost icon
- Animations for interaction buttons
- Bugfixes (Crash on some posts, "Lists with", default posting language)

View File

@@ -0,0 +1,11 @@
- Customizable Publish button
- Open Fediverse links in the app
- Long-click boost button to "quote" a post
- Copy post URL when long-pressing share button
- Implement deleting notifications (disabled by default)
- Dedicated icons for different notification types
- New gray colors
- Add setting to disable swiping between tabs
- Add various links to account settings
- Toggle for showing/hiding the translate button in the timeline
- Bugfixes and tweaks

View File

@@ -0,0 +1,6 @@
- Option to reblog with specific visibility on long-click
- Show visibility of own reblogs
- Add list of followed hashtags
- Long-click to copy links
- Option to open posts with other account
- Bugfixes and minor tweaks

View File

@@ -0,0 +1,10 @@
- Drafts and scheduled posts
- Display original post when replying
- Mastodon 4.0 compatible filters (no "hide with warning" function yet)
- Long-click to interact with posts (reply, boost, like, bookmark) from other logged-in accounts
- Icons in all menus
- Toggle for forwarding reports
- Add mention when using "Post about this" function
- Option to use uniform notifications icon instead of distinct icons
- Option to access in-app rules list from settings
- Bugfixes

View File

@@ -0,0 +1,10 @@
- New home tab with public timelines
- Display server announcements
- Text is scaled according to system settings
- Improved filtering (no, "Hide with a warning" doesn't work yet) by @thiagojedi
- List management features
- Remove followers by soft-blocking them
- Disallow connections with fascists
- Fix images not loading when connected to Akkoma instance
- Bugfixes and UI tweaks
- Add changelog to updater by @LucasGGamerM

View File

@@ -0,0 +1,9 @@
- Timelines can be pinned and rearranged
- Support local-only posts
- Indicator for missing alt texts
- Improved alt text editor
- Header in timeline for followed hashtags
- More notification categories
- Add back file opener
- Prompt when saving edited draft
- Option to disable “See new posts” button

View File

@@ -0,0 +1,9 @@
- Timelines can be pinned and rearranged
- Support local-only posts
- Indicator for missing alt texts
- Improved alt text editor
- Header in timeline for followed hashtags
- More notification categories
- Add back file opener
- Prompt when saving edited draft
- Option to disable “See new posts” button

View File

@@ -0,0 +1,6 @@
- Improved filters, including “Hide with warning”-compatibility
- Redesigned profile page with metadata directly below the bio
- Collapse/expand function for very long posts
- Option to automatically prefix replys CWs with “re:”
- Option to hide interaction buttons in the timeline
- Various bugfixes, tweaks and improvements

View File

@@ -0,0 +1,4 @@
- Long-press follow button to follow profiles from other account
- Option to open profiles in other account
- Auto-hide compose button when scrolling down the timeline
- Fix crash when opening server admin's profiles

View File

@@ -0,0 +1 @@
Removing the toot dividers on the main timeline! Its also configurable.

View File

@@ -0,0 +1 @@
Adding a donate button!

View File

@@ -0,0 +1 @@
Now adding an optional toggle for bringing the publish button to a more reachable position! It's the default now!

View File

@@ -0,0 +1,2 @@
Fixing publish button being cut of on low DPIs or on longer languages. Its now an icon when its on the reachable state!
Minor fixes to the changelog preview

View File

@@ -0,0 +1,9 @@
Release 82 adds a lot of features from upstream, such as:
- Drafts and scheduled posts
- A settings page rework
- The ability to choose the publish button text
- The ability to reduce animations
- A bot icon for bot account profiles! Thanks @FineFindus
- And updated German translation! Thanks @dantobi
- A lot of minor UI improvements
- Major usability improvements, as the ability to hold action buttons to interact with another account

View File

@@ -0,0 +1,4 @@
Release 83 brings some minor improvements, such as:
- Fixing crashing issues when clicking mentions
- Reworking the bot icon
- Adding a reminder to add an image description if you post an attachment allow visually impaired people to better participate. Thanks @FineFindus!

View File

@@ -0,0 +1,3 @@
Release 84 fixes a few bugs, such as:
- Login callback not working
- Updating german translation. Thanks @DanTobi!

View File

@@ -0,0 +1,7 @@
New stuff that comes with Release 85:
Adding long click search button to bring up the keyboard
Clicking the search button when already in search tab also brings up keyboard
Bringing up a bot icon to toots from bot accounts, Thanks @FineFindus!
Improving visibility of bot icon inside account profile, Thanks @FineFindus!
Updating german translation, Thanks @Dontobi!
Fixing minor UI issues

View File

@@ -0,0 +1,4 @@
New things for release 86:
- Ability to stack notifications, ie: having multiple notifications;
- Introducing Announcements;
- Many minor UI fixes.

View File

@@ -0,0 +1,5 @@
New things for 87:
- A new home layout from Megalodon, having the ability to switch between them is WIP
- Better handling of notifications
- A new ravamped bot icon
- A bunch of minor improvements

View File

@@ -0,0 +1,6 @@
New things for release number 88:
- An improved Fab behavior
- Better handling on alt texts
- Enable local-only posting for instances that support it
- Fix some crashes
- Minor improvements

View File

@@ -0,0 +1 @@
Release 89 is a bug fix release, so a few crashes have been fixed as well as a few settings not being saved.

View File

@@ -0,0 +1,5 @@
New things for release 91:
- The ability to have filtered posts show with a warning
- Fixed included auto updater
- Fixed a few crashes with the filtering system
- Minor quality of life improvements

View File

@@ -0,0 +1,4 @@
New things for release 92:
- Better filters
- New profile page layout
- A bunch of minor tweaks and improvements

View File

@@ -0,0 +1,5 @@
New things for 94:
- Improvements on the fab behavior
- Minor changes to the launcher icon
- Improvements on the notification behavior
- Minor bugfixes and improvements

View File

@@ -0,0 +1,3 @@
New things for 95:
- Adding the ability to have other server's local timelines in the timelines
- Minor fixes and improvements

View File

@@ -0,0 +1,3 @@
New things for 96:
- Improving the ability to have other server's local timelines in the timelines
- Minor fixes and improvements

View File

@@ -0,0 +1,3 @@
Release 97 adds:
- New Custom Local Timelines feature. It can be accessed on the add timelines menu
- Minor fixes and improvements

View File

@@ -0,0 +1 @@
Initial play store release

View File

@@ -0,0 +1,6 @@
New things for release 99:
- Add notification actions
- Add option to enable unlisted replies by default
- Add mute timer
- Add notification badge if there are unread notifications
- Minor bugfixes and usability improvements

View File

@@ -0,0 +1,16 @@
Moshidon is a modified version of the <a href="https://github.com/mastodon/mastodon-android">official Mastodon Android app</a> adding important features that are missing in the official app, such as the federated timeline, unlisted posting and an image description viewer.
<b>Key features</b>
- <b>Many colors</b>: Brings material you theme and many colorful options for themes!
- <b>Filtered posts!</b>: The ability to have filtered posts show with a warning!
- <b>Translate button</b>: Brings a translate button!
- <b>Toot language picker</b>: Brings in a toot language picker!
- <b>Unlisted posting</b>: Post publicly without having your post show up in trends, hashtags or public timelines.
- <b>Federated timeline</b>: See all public posts from people on all other Fediverse neighborhoods your home instance is connected to.
- <b>Image description viewer</b>: Quickly check whether an image or video has an alt text attached to it.
- <b>Pinning posts</b>: Pin your most important posts to your profile and see what others have pinned using the “Pinned“ tab.
- <b>Follow hashtags</b>: See new posts from specific hashtags directly in your home timeline by following them.
- <b>Answering follow requests</b>: Accept or decline follow requests from your notifications or the dedicated Follow requests list.
- <b>Delete and re-draft</b>: The much-loved feature that made editing possible without an actual editing function.
- <b>Extras</b>: Brings many extra UI features, such as interaction icons on the Notifications and removing many annoyances with the original UI!

View File

@@ -1,3 +1,16 @@
pluginManagement {
repositories {
google()
mavenCentral()
maven {
url "https://www.jitpack.io"
content {
includeModule 'com.github.UnifiedPush', 'android-connector'
}
}
mavenLocal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {