Compare commits

...

128 Commits

Author SHA1 Message Date
LucasGGamerM
d95b395cfc docs: add changelog 2023-03-07 15:20:40 -03:00
LucasGGamerM
b41b2c8f3c build: bump version 2023-03-07 15:17:34 -03:00
LucasGGamerM
289dc4bf86 Merge remote-tracking branch 'weblate/master'
# Conflicts:
#	mastodon/src/main/res/values-de-rDE/strings_mo.xml
#	mastodon/src/main/res/values-pt-rBR/strings_mo.xml
#	mastodon/src/main/res/values-zh-rCN/strings_mo.xml
2023-03-07 14:52:54 -03:00
CDN18
c34e1e5f32 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (32 of 32 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/zh_Hans/
2023-03-07 17:52:01 +00:00
CDN18
729680df8c Translated using Weblate (Chinese (Simplified))
Currently translated at 97.3% (37 of 38 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/zh_Hans/
2023-03-07 17:52:01 +00:00
LucasGGamerM
b85b578ddd Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (38 of 38 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/pt_BR/
2023-03-07 17:52:01 +00:00
dontobi
8a7d2df7b8 Translated using Weblate (German)
Currently translated at 100.0% (38 of 38 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/de/
2023-03-07 17:52:01 +00:00
LucasGGamerM
3ff3eb819a Translated using Weblate (Portuguese (Brazil))
Currently translated at 9.3% (3 of 32 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/pt_BR/
2023-03-07 17:52:01 +00:00
gallegonovato
1ea24b5ff6 Translated using Weblate (Spanish)
Currently translated at 68.7% (22 of 32 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/es/
2023-03-07 17:52:01 +00:00
poesty
79d0ab311b Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (26 of 26 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/zh_Hans/
2023-03-07 17:52:01 +00:00
LucasGGamerM
79f7df089e Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (26 of 26 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/pt_BR/
2023-03-07 17:52:01 +00:00
gallegonovato
32464f8552 Translated using Weblate (Spanish)
Currently translated at 100.0% (26 of 26 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/es/
2023-03-07 17:52:01 +00:00
dontobi
7ce96a2311 Translated using Weblate (German)
Currently translated at 100.0% (26 of 26 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/de/
2023-03-07 17:52:01 +00:00
dontobi
a009ea212f Translated using Weblate (German)
Currently translated at 100.0% (32 of 32 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/de/
2023-03-07 17:52:01 +00:00
LucasGGamerM
8848b75325 Merge remote-tracking branch 'weblate/master' 2023-03-07 14:51:16 -03:00
LucasGGamerM
2eb04a3835 Merge remote-tracking branch 'megalodon_weblate/main' 2023-03-07 14:51:06 -03:00
LucasGGamerM
b61ce8399e docs: add translation widget to READMe 2023-03-07 14:49:07 -03:00
LucasGGamerM
52392c9ed9 feat: add toggle for defaulting to unlisted replies 2023-03-07 14:29:48 -03:00
LucasGGamerM
4b35ac6ad8 refactor(settings-page): move Disable Swipe setting between tabs to behavior section 2023-03-07 14:03:02 -03:00
LucasGGamerM
a56b603c5c refactor(settings-page): change the order of the sections 2023-03-07 14:00:38 -03:00
LucasGGamerM
48bd277769 refactor(mute-user-timer): add bottom padding for design consistency 2023-03-06 21:07:48 -03:00
LucasGGamerM
04101eb31b refactor(settings-page): adding new sections and reorganizing settings 2023-03-06 20:52:58 -03:00
LucasGGamerM
34c6a76a53 Translated using Weblate (Portuguese (Brazil))
Currently translated at 9.3% (3 of 32 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/pt_BR/
2023-03-06 23:39:04 +00:00
gallegonovato
3f20c6104a Translated using Weblate (Spanish)
Currently translated at 68.7% (22 of 32 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/es/
2023-03-06 23:39:04 +00:00
poesty
b5f82261b0 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (26 of 26 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/zh_Hans/
2023-03-06 23:39:04 +00:00
LucasGGamerM
b9a5db7ea4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (26 of 26 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/pt_BR/
2023-03-06 23:39:04 +00:00
gallegonovato
64cb6e52a8 Translated using Weblate (Spanish)
Currently translated at 100.0% (26 of 26 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/es/
2023-03-06 23:39:04 +00:00
dontobi
6e96e8929f Translated using Weblate (German)
Currently translated at 100.0% (26 of 26 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/de/
2023-03-06 23:39:04 +00:00
dontobi
bdd48f0001 Translated using Weblate (German)
Currently translated at 100.0% (32 of 32 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/de/
2023-03-06 23:39:04 +00:00
LucasGGamerM
4bf19adc8e chore: add new strings 2023-03-06 20:38:51 -03:00
LucasGGamerM
bb9ff3c33f feat(unlisted-replies-by-default-toggle): add relevant string 2023-03-06 20:24:05 -03:00
LucasGGamerM
ae11e78d78 refactor: increase border radius of inline buttons 2023-03-06 20:20:52 -03:00
LucasGGamerM
222c3a2526 refactor(add-mute-timer): change of the mute timer popup layout 2023-03-06 20:19:21 -03:00
LucasGGamerM
08aa64a666 fix(strings): fix typo in "day" 2023-03-06 20:00:51 -03:00
LucasGGamerM
f10c157598 Merge branch 'master' of https://github.com/LucasGGamerM/moshidon 2023-03-06 19:54:08 -03:00
LucasGGamerM
5059d8fc4f Merge pull request #111 from FineFindus/feat/mute-timer
feat: add mute timer
2023-03-06 19:53:45 -03:00
FineFindus
4152179dea fix(request/mute): add correct body on unmute 2023-03-06 22:00:49 +01:00
FineFindus
3619be71ab feat: add mute timer 2023-03-06 21:55:32 +01:00
AiOO
810e9eeb11 Translated using Weblate (Korean)
Currently translated at 100.0% (16 of 16 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/ko/
2023-03-05 15:08:20 +00:00
AiOO
25cff94665 Translated using Weblate (Korean)
Currently translated at 100.0% (262 of 262 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ko/
2023-03-05 15:08:20 +00:00
LucasGGamerM
0e08209f4c style: remove unused imports on CustomLocalTimelineFragment.java 2023-03-04 10:33:07 -03:00
LucasGGamerM
db0b4fb615 refactor(README): swappping "this app" to Moshidon in FAQ 2023-03-04 10:21:02 -03:00
LucasGGamerM
672cfe58d6 fix(notification-actions): replies done within the notification actions now respect the status language and visibility, and also automatically add a mention to the replied account at the end of the reply status. 2023-03-04 10:13:03 -03:00
LucasGGamerM
338e164143 refactor: moving "notification_action_replied" string to strings_mo.xml 2023-03-04 10:07:28 -03:00
LucasGGamerM
e964b76302 refactor: re-using strings in the notification actions instead of new ones 2023-03-04 10:03:53 -03:00
LucasGGamerM
8dedc77ff8 Merge pull request #108
feat(notification): add reply action
2023-03-04 09:44:14 -03:00
LucasGGamerM
3b762c14a1 docs: Add faq section to README 2023-03-04 08:25:43 -03:00
FineFindus
59941fc867 style(notifications-actions/reply): clean-up 2023-03-03 23:49:45 +01:00
FineFindus
50601853f5 feat(notifications/actions): add reply action
Closes https://github.com/LucasGGamerM/moshidon/issues/104
2023-03-03 23:45:07 +01:00
LucasGGamerM
3137f3c1e4 docs: Adding link to Google Play Store 2023-03-03 17:21:49 -03:00
LucasGGamerM
bfaa732544 refactor: Increasing the corner radius of statuses and accounts in the notification section 2023-03-03 16:30:19 -03:00
LucasGGamerM
1b7a257a48 Merge pull request #106 from FineFindus/feat/notification-badge
Feat(tabs): add unread badge to notification tab
2023-03-01 18:12:40 -03:00
LucasGGamerM
4d40fad10d fix: Notifcations not refreshing without manually doing so. Fixes #105 2023-03-01 18:11:07 -03:00
FineFindus
49015f3e3e style: remove unnecessary imports 2023-03-01 22:06:31 +01:00
LucasGGamerM
77b5819c65 Merge pull request #102 from FineFindus/feat/notification-actions
Feat: Add actions to notifications
2023-03-01 18:01:43 -03:00
FineFindus
ac5615497b refactor(notifications-tab/badge): use improved implementation
Removes the now unecessary network call, by hooking into the notification reciever instead.
2023-03-01 22:00:49 +01:00
FineFindus
4ecd525f13 feat(tabs/notifications): add unread badge 2023-03-01 21:44:11 +01:00
LucasGGamerM
e7cd1cfda2 docs: update screenshot for play store 2023-02-27 21:31:39 -03:00
LucasGGamerM
17afa8e6f5 docs: changelog 98 2023-02-27 20:36:32 -03:00
LucasGGamerM
8385fb9586 chore: wiping duplicate stuff 2023-02-27 20:35:36 -03:00
LucasGGamerM
ba44aa57d7 build: bump version number 2023-02-27 20:34:43 -03:00
LucasGGamerM
a70647da44 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (25 of 25 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/pt_BR/
2023-02-27 23:33:29 +00:00
LucasGGamerM
f97aafe374 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (25 of 25 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/pt_BR/
2023-02-27 23:28:58 +00:00
FineFindus
b38a460a02 style(notifications/action): fix whitespaces 2023-02-27 21:20:02 +01:00
FineFindus
bddf024ba0 fix(notifications/action): remove unused string 2023-02-27 21:18:51 +01:00
FineFindus
be7a7acadd fix(notifications/action): remove notification after tapping action 2023-02-27 21:15:28 +01:00
FineFindus
d05c90ca7f fix(notifications/action): use radom request code
Fixes the issue with pendingIntents overwriting each other. Probability of equal same request code should be near 0 with 2^32 ints available
2023-02-27 20:24:09 +01:00
FineFindus
4187da9168 feat(notifications/action): remove notfication after action 2023-02-26 21:56:18 +01:00
FineFindus
a051e636e6 feat(notifications/action): add unboost action 2023-02-26 20:50:03 +01:00
FineFindus
360cd7b5df feat(notifications/action): only show actions if necessary 2023-02-26 19:15:31 +01:00
FineFindus
55d2ca4a93 feat(notifications/action): use string titles 2023-02-26 15:23:38 +01:00
FineFindus
c7f61291ed feat(notifications/action): add boost action 2023-02-26 15:21:52 +01:00
LucasGGamerM
f836361644 fix: NPE in HeaderStatusDisplayItem when clicking on a "User followed you" avatar header in notifications fragment 2023-02-25 20:58:10 -03:00
FineFindus
f404895b5c feat(notification): add actions 2023-02-25 23:19:41 +01:00
FineFindus
94ed0c3f49 Merge branch 'master' 2023-02-25 21:00:09 +01:00
FineFindus
00ffe9c41e Merge branch 'master' 2023-02-25 21:00:04 +01:00
LucasGGamerM
529c1e2b07 Merge remote-tracking branch 'weblate/master' 2023-02-25 15:49:24 -03:00
LucasGGamerM
f2e04e6769 Merge remote-tracking branch 'megalodon_weblate/main'
# Conflicts:
#	metadata/it-IT/full_description.txt
2023-02-25 15:49:07 -03:00
LucasGGamerM
f1a7603bdf Adding 97 changelog 2023-02-25 15:48:22 -03:00
LucasGGamerM
280434b01f Bump version number 2023-02-25 15:46:46 -03:00
LucasGGamerM
023a6c3a49 fix(custom-local-timelines): Loading threads on custom local timelines now works! 2023-02-25 15:39:56 -03:00
LucasGGamerM
ed301cafe0 fix(custom-local-timelines): Profile lookup now is more robust and doesn't call the the user's instance unless a click happens 2023-02-25 14:27:21 -03:00
LucasGGamerM
5e97adcd3b fix(custom-local-timelines): Removing the get account by handle function for each status, and interactions now are fully working. 2023-02-25 14:18:27 -03:00
ewm
487deae044 Translated using Weblate (Polish)
Currently translated at 13.3% (4 of 30 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/pl/
2023-02-25 16:08:21 +00:00
ewm
a28daa3d75 Translated using Weblate (Polish)
Currently translated at 100.0% (25 of 25 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/pl/
2023-02-25 16:08:21 +00:00
LucasGGamerM
75f311b8a7 Merge pull request #100 from FineFindus/feat/custom-welcome-inputtype
feat(custom-welcome): use URI InputType
2023-02-25 11:17:26 -03:00
LucasGGamerM
5d11bee59d refactor(perf): initial optimizations for concurrent requests. Profile now loads faster 2023-02-24 15:55:49 -03:00
FineFindus
cd027f1220 feat(custom-welcome): use URI InputType 2023-02-24 08:43:20 +00:00
LucasGGamerM
1d55354be2 fix(custom-local-timelines): interactions now work! 2023-02-23 20:14:52 -03:00
nitrogenez47ab3e44720c4675
3143f28e04 Translated using Weblate (Ukrainian)
Currently translated at 13.3% (4 of 30 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/uk/
2023-02-23 04:08:21 +00:00
poesty
d381205bbf Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (25 of 25 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/zh_Hans/
2023-02-23 04:08:21 +00:00
nitrogenez47ab3e44720c4675
6b6852e134 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (25 of 25 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/uk/
2023-02-23 04:08:21 +00:00
Andrewblasco
f7a41906e4 Translated using Weblate (Spanish)
Currently translated at 100.0% (25 of 25 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/es/
2023-02-23 04:08:21 +00:00
dontobi
70ddea2e81 Translated using Weblate (German)
Currently translated at 100.0% (25 of 25 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/de/
2023-02-23 04:08:21 +00:00
dontobi
92a806462d Translated using Weblate (German)
Currently translated at 100.0% (30 of 30 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/de/
2023-02-23 04:08:20 +00:00
LucasGGamerM
8111ea04b9 fix: Profile lookups on custom local timelines now work 2023-02-22 17:21:33 -03:00
Espasant3
371f97fa5a Translated using Weblate (Galician)
Currently translated at 100.0% (16 of 16 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/gl/
2023-02-22 15:08:21 +00:00
gicorada
f7def3ab01 Translated using Weblate (Italian)
Currently translated at 100.0% (16 of 16 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/it/
2023-02-22 15:08:20 +00:00
gicorada
1cefc8aaf2 Translated using Weblate (Italian)
Currently translated at 100.0% (262 of 262 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/it/
2023-02-22 15:08:20 +00:00
LucasGGamerM
a72849bae1 Merge pull request #96 from FineFindus/feat/custom-timelines-input-type
feat(custom-timelines): use URI InputType
2023-02-20 18:29:14 -03:00
FineFindus
5e6b56a738 feat(custom-timelines): use URI InputType 2023-02-20 22:11:39 +01:00
LucasGGamerM
58c754ea2d Fixing typo 2023-02-20 17:21:20 -03:00
LucasGGamerM
c22374b712 96 changelog 2023-02-20 17:18:21 -03:00
LucasGGamerM
7820926e1a Bump version nummber 2023-02-20 17:15:33 -03:00
LucasGGamerM
fcf5887359 Changing the icon of the add timelines button 2023-02-20 17:01:01 -03:00
LucasGGamerM
aade898681 Merge pull request #95 from FineFindus/fix/typos
Fix/typos
2023-02-20 16:42:58 -03:00
FineFindus
d6653b5f78 style(readme): hability -> ability 2023-02-20 20:37:28 +01:00
FineFindus
89514dbf14 style(basestatuslist): THRESHHOLD -> THRESHOLD 2023-02-20 20:36:18 +01:00
LucasGGamerM
456fbb6fc9 Maybe fixing the broken custom timelines when there is a poll 2023-02-20 16:32:01 -03:00
LucasGGamerM
f2d29366bd Merge pull request #94 from FineFindus/fix/timeline-hint
fix(custom-timelines): remove default text
2023-02-20 14:46:46 -03:00
FineFindus
ea7c366981 fix(custom-timelines): remove default text 2023-02-20 18:30:31 +01:00
LucasGGamerM
fe7362bb28 Update README.md 2023-02-20 14:25:39 -03:00
LucasGGamerM
a4d739a9a9 Add 95 changelog 2023-02-20 14:08:32 -03:00
LucasGGamerM
d4cf12a0d9 Bump version number 2023-02-20 14:07:24 -03:00
LucasGGamerM
69af790e22 Merge remote-tracking branch 'megalodon_weblate/main' 2023-02-20 14:04:46 -03:00
ewm
2936ec81af Translated using Weblate (Polish)
Currently translated at 100.0% (24 of 24 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/pl/
2023-02-20 17:03:27 +00:00
a_mento
ef1965a41b Translated using Weblate (Basque)
Currently translated at 100.0% (262 of 262 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/eu/
2023-02-19 23:08:20 +00:00
Espasant3
c2d14c64cb Translated using Weblate (Galician)
Currently translated at 93.7% (15 of 16 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/gl/
2023-02-18 20:08:21 +00:00
ihor_ck
aa554d91f7 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (16 of 16 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/uk/
2023-02-18 20:08:21 +00:00
McKris
cc3845d6f4 Translated using Weblate (Polish)
Currently translated at 100.0% (16 of 16 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/pl/
2023-02-18 20:08:21 +00:00
gallegonovato
2571b2d4f7 Translated using Weblate (Spanish)
Currently translated at 100.0% (16 of 16 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/es/
2023-02-18 20:08:21 +00:00
Linerly
ac7cdb885d Translated using Weblate (Indonesian)
Currently translated at 100.0% (16 of 16 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/id/
2023-02-18 20:08:21 +00:00
ihor_ck
7b5d95f7ee Translated using Weblate (Ukrainian)
Currently translated at 100.0% (262 of 262 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/uk/
2023-02-18 20:08:21 +00:00
McKris
ccf311312e Translated using Weblate (Polish)
Currently translated at 100.0% (262 of 262 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/pl/
2023-02-18 20:08:20 +00:00
Linerly
42222cd327 Translated using Weblate (Indonesian)
Currently translated at 100.0% (262 of 262 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/id/
2023-02-18 20:08:20 +00:00
Espasant3
60961020c8 Translated using Weblate (Galician)
Currently translated at 99.6% (261 of 262 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/gl/
2023-02-18 20:08:20 +00:00
Choukajohn
2a7bba24de Translated using Weblate (French)
Currently translated at 100.0% (262 of 262 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/fr/
2023-02-18 20:08:20 +00:00
gallegonovato
fdbe3fcb13 Translated using Weblate (Spanish)
Currently translated at 100.0% (262 of 262 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/es/
2023-02-18 20:08:20 +00:00
94 changed files with 883 additions and 123 deletions

View File

@@ -5,16 +5,29 @@
> 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.
[![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 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)
[![Translation status](https://translate.codeberg.org/widgets/moshidon/-/svg-badge.svg)](https://translate.codeberg.org/engage/moshidon/)
 
<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://apt.izzysoft.de/fdroid/index/apk/org.joinmastodon.android.moshinda"><img height="50" alt="Get it on IzzyOnDroid" src="img/izzy-badge.png"></a>
---
## F.A.Q
### Q: What are the main differences between Moshidon and Megalodon?
### A: There are many, but the most outstanding differences are: the ability to have other server's local timeline inside the app. It can be acessed in the "Add community" option in the top right corner of the Edit timelines screen. Most other features are pretty minor, such as profile notes directly available in the person's profile. Other features are quite minor usability and visibility improvements. All of which can be found in the settings page.
[<img src="https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png"
alt="Get it on IzzyOnDroid"
height="80">](https://apt.izzysoft.de/fdroid/index/apk/org.joinmastodon.android.moshinda)
---
## Key features
### **The ability to add new custom local timelines!**
### **Material you theme support on Android 12+ devices!**
### **Show posts filtered with a warning!**
@@ -94,7 +107,7 @@ Variant with an integrated updater. If you download Moshidon from here (and not
([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 hability to remind yourself to add alt text to images!*
* 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!*

View File

@@ -9,8 +9,8 @@ android {
applicationId "org.joinmastodon.android.moshinda"
minSdk 23
targetSdk 33
versionCode 94
versionName "1.2.0+fork.94.moshinda"
versionCode 99
versionName "1.2.0+fork.99.moshinda"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
resConfigs "ar-rSA", "be-rBY", "bn-rBD", "bs-rBA", "ca-rES", "cs-rCZ", "de-rDE", "el-rGR", "es-rES", "eu-rES", "fi-rFI", "fil-rPH", "fr-rFR", "ga-rIE", "gd-rGB", "gl-rES", "hi-rIN", "hr-rHR", "hu-rHU", "hy-rAM", "in-rID", "is-rIS", "it-rIT", "iw-rIL", "ja-rJP", "kab", "ko-rKR", "nl-rNL", "oc-rFR", "pl-rPL", "pt-rBR", "pt-rPT", "ro-rRO", "ru-rRU", "si-rLK", "sl-rSI", "sv-rSE", "th-rTH", "tr-rTR", "uk-rUA", "vi-rVN", "zh-rCN", "zh-rTW"
}

View File

@@ -47,6 +47,8 @@ public class GlobalUserPreferences{
public static boolean collapseLongPosts;
public static boolean spectatorMode;
public static boolean autoHideFab;
public static boolean unreadNotifications;
public static boolean defaultToUnlistedReplies;
public static String publishButtonText;
public static ThemePreference theme;
public static ColorPreference color;
@@ -101,6 +103,8 @@ public class GlobalUserPreferences{
collapseLongPosts=prefs.getBoolean("collapseLongPosts", true);
spectatorMode=prefs.getBoolean("spectatorMode", false);
autoHideFab=prefs.getBoolean("autoHideFab", true);
unreadNotifications=prefs.getBoolean("unreadNotifications", false);
defaultToUnlistedReplies=prefs.getBoolean("defaultToUnlistedReplies", false);
publishButtonText=prefs.getString("publishButtonText", "");
theme=ThemePreference.values()[prefs.getInt("theme", 0)];
recentLanguages=fromJson(prefs.getString("recentLanguages", "{}"), recentLanguagesType, new HashMap<>());
@@ -150,8 +154,10 @@ public class GlobalUserPreferences{
.putBoolean("collapseLongPosts", collapseLongPosts)
.putBoolean("spectatorMode", spectatorMode)
.putBoolean("autoHideFab", autoHideFab)
.putBoolean("unreadNotifications", unreadNotifications)
.putString("publishButtonText", publishButtonText)
.putBoolean("bottomEncoding", bottomEncoding)
.putBoolean("defaultToUnlistedReplies", defaultToUnlistedReplies)
.putInt("theme", theme.ordinal())
.putString("color", color.name())
.putString("recentLanguages", gson.toJson(recentLanguages))

View File

@@ -7,10 +7,14 @@ import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import org.joinmastodon.android.api.ObjectValidationException;
import org.joinmastodon.android.api.requests.accounts.SetPrivateNote;
import org.joinmastodon.android.api.requests.statuses.SetStatusFavorited;
import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.events.StatusCountersUpdatedEvent;
import org.joinmastodon.android.fragments.ComposeFragment;
import org.joinmastodon.android.fragments.HomeFragment;
import org.joinmastodon.android.fragments.ProfileFragment;
@@ -19,12 +23,17 @@ import org.joinmastodon.android.fragments.onboarding.AccountActivationFragment;
import org.joinmastodon.android.fragments.onboarding.CustomWelcomeFragment;
import org.joinmastodon.android.fragments.onboarding.CustomWelcomeFragment;
import org.joinmastodon.android.model.Notification;
import org.joinmastodon.android.model.NotificationAction;
import org.joinmastodon.android.model.Relationship;
import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.ui.utils.UiUtils;
import org.joinmastodon.android.updater.GithubSelfUpdater;
import org.parceler.Parcels;
import androidx.annotation.Nullable;
import me.grishka.appkit.FragmentStackActivity;
import me.grishka.appkit.api.Callback;
import me.grishka.appkit.api.ErrorResponse;
public class MainActivity extends FragmentStackActivity{
@Override

View File

@@ -5,6 +5,7 @@ import android.app.NotificationChannel;
import android.app.NotificationChannelGroup;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.RemoteInput;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -16,15 +17,24 @@ import android.util.Log;
import org.joinmastodon.android.api.MastodonAPIController;
import org.joinmastodon.android.api.requests.notifications.GetNotificationByID;
import org.joinmastodon.android.api.requests.statuses.CreateStatus;
import org.joinmastodon.android.api.requests.statuses.SetStatusBookmarked;
import org.joinmastodon.android.api.requests.statuses.SetStatusFavorited;
import org.joinmastodon.android.api.requests.statuses.SetStatusReblogged;
import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.model.NotificationAction;
import org.joinmastodon.android.model.Preferences;
import org.joinmastodon.android.model.PushNotification;
import org.joinmastodon.android.model.StatusPrivacy;
import org.joinmastodon.android.ui.utils.UiUtils;
import org.parceler.Parcels;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.UUID;
import java.util.stream.Collectors;
import me.grishka.appkit.api.Callback;
@@ -37,6 +47,8 @@ public class PushNotificationReceiver extends BroadcastReceiver{
private static final String TAG="PushNotificationReceive";
public static final int NOTIFICATION_ID=178;
private static final String ACTION_KEY_TEXT_REPLY = "ACTION_KEY_TEXT_REPLY";
private static final int SUMMARY_ID = 791;
private static int notificationId = 0;
@@ -76,6 +88,8 @@ public class PushNotificationReceiver extends BroadcastReceiver{
@Override
public void onSuccess(org.joinmastodon.android.model.Notification result){
MastodonAPIController.runInBackground(()->PushNotificationReceiver.this.notify(context, pn, accountID, result));
GlobalUserPreferences.unreadNotifications = true;
GlobalUserPreferences.save();
}
@Override
@@ -92,6 +106,35 @@ public class PushNotificationReceiver extends BroadcastReceiver{
Log.w(TAG, "onReceive: invalid push notification format");
}
}
if(intent.getBooleanExtra("fromNotificationAction", false)){
String accountID=intent.getStringExtra("accountID");
int notificationId=intent.getIntExtra("notificationId", -1);
if (notificationId >= 0){
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(accountID, notificationId);
}
if(intent.hasExtra("notification")){
org.joinmastodon.android.model.Notification notification=Parcels.unwrap(intent.getParcelableExtra("notification"));
String statusID=notification.status.id;
if (statusID != null) {
AccountSessionManager accountSessionManager = AccountSessionManager.getInstance();
Preferences preferences = accountSessionManager.getAccount(accountID).preferences;
switch (NotificationAction.values()[intent.getIntExtra("notificationAction", 0)]) {
case FAVORITE -> new SetStatusFavorited(statusID, true).exec(accountID);
case BOOKMARK -> new SetStatusBookmarked(statusID, true).exec(accountID);
case BOOST -> new SetStatusReblogged(notification.status.id, true, preferences.postingDefaultVisibility).exec(accountID);
case UNBOOST -> new SetStatusReblogged(notification.status.id, false, preferences.postingDefaultVisibility).exec(accountID);
case REPLY -> handleReplyAction(context, accountID, intent, notification, notificationId, preferences);
default -> Log.w(TAG, "onReceive: Failed to get NotificationAction");
}
}
}else{
Log.e(TAG, "onReceive: Failed to load notification");
}
}
}
private void notify(Context context, PushNotification pn, String accountID, org.joinmastodon.android.model.Notification notification){
@@ -165,6 +208,90 @@ public class PushNotificationReceiver extends BroadcastReceiver{
if(AccountSessionManager.getInstance().getLoggedInAccounts().size()>1){
builder.setSubText(accountName);
}
nm.notify(accountID, GlobalUserPreferences.keepOnlyLatestNotification ? NOTIFICATION_ID : notificationId++, builder.build());
int id = GlobalUserPreferences.keepOnlyLatestNotification ? NOTIFICATION_ID : notificationId++;
if (notification != null){
switch (pn.notificationType){
case MENTION, STATUS -> {
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){
builder.addAction(buildReplyAction(context, id, accountID, notification));
}
builder.addAction(buildNotificationAction(context, id, accountID, notification, context.getString(R.string.button_favorite), NotificationAction.FAVORITE));
builder.addAction(buildNotificationAction(context, id, accountID, notification, context.getString(R.string.add_bookmark), NotificationAction.BOOKMARK));
if(notification.status.visibility != StatusPrivacy.DIRECT) {
builder.addAction(buildNotificationAction(context, id, accountID, notification, context.getString(R.string.button_reblog), NotificationAction.BOOST));
}
}
case UPDATE -> {
if(notification.status.reblogged)
builder.addAction(buildNotificationAction(context, id, accountID, notification, context.getString(R.string.sk_undo_reblog), NotificationAction.UNBOOST));
}
}
}
nm.notify(accountID, id, builder.build());
}
}
private Notification.Action buildNotificationAction(Context context, int notificationId, String accountID, org.joinmastodon.android.model.Notification notification, String title, NotificationAction action){
Intent notificationIntent=new Intent(context, PushNotificationReceiver.class);
notificationIntent.putExtra("notificationId", notificationId);
notificationIntent.putExtra("fromNotificationAction", true);
notificationIntent.putExtra("accountID", accountID);
notificationIntent.putExtra("notificationAction", action.ordinal());
notificationIntent.putExtra("notification", Parcels.wrap(notification));
PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, new Random().nextInt(), notificationIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_ONE_SHOT);
return new Notification.Action.Builder(null, title, actionPendingIntent).build();
}
private Notification.Action buildReplyAction(Context context, int notificationId, String accountID, org.joinmastodon.android.model.Notification notification){
String replyLabel = context.getResources().getString(R.string.button_reply);
RemoteInput remoteInput = new RemoteInput.Builder(ACTION_KEY_TEXT_REPLY)
.setLabel(replyLabel)
.build();
Intent notificationIntent=new Intent(context, PushNotificationReceiver.class);
notificationIntent.putExtra("notificationId", notificationId);
notificationIntent.putExtra("fromNotificationAction", true);
notificationIntent.putExtra("accountID", accountID);
notificationIntent.putExtra("notificationAction", NotificationAction.REPLY.ordinal());
notificationIntent.putExtra("notification", Parcels.wrap(notification));
int flags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ? PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT : PendingIntent.FLAG_UPDATE_CURRENT;
PendingIntent replyPendingIntent = PendingIntent.getBroadcast(context, new Random().nextInt(), notificationIntent,flags);
return new Notification.Action.Builder(null, replyLabel, replyPendingIntent).addRemoteInput(remoteInput).build();
}
private void handleReplyAction(Context context, String accountID, Intent intent, org.joinmastodon.android.model.Notification notification, int notificationId, Preferences preferences) {
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
if (remoteInput == null) {
Log.e(TAG, "handleReplyAction: Could not get reply input");
return;
}
CharSequence input = remoteInput.getCharSequence(ACTION_KEY_TEXT_REPLY);
CreateStatus.Request req=new CreateStatus.Request();
req.status = input.toString() + "\n\n" + "@" + notification.status.account.acct;
req.language = notification.status.language;
req.visibility = notification.status.visibility;
req.inReplyToId = notification.status.id;
if(!notification.status.spoilerText.isEmpty() && GlobalUserPreferences.prefixRepliesWithRe && !notification.status.spoilerText.startsWith("re: ")){
req.spoilerText = "re: " + notification.status.spoilerText;
}
new CreateStatus(req, UUID.randomUUID().toString()).exec(accountID);
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification.Builder builder = android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O ?
new Notification.Builder(context, accountID+"_"+notification.type) :
new Notification.Builder(context)
.setPriority(Notification.PRIORITY_DEFAULT)
.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE);
Notification repliedNotification = builder.setSmallIcon(R.drawable.ic_ntf_logo)
.setContentText(context.getString(R.string.mo_notification_action_replied, notification.status.account.getDisplayUsername()))
.build();
notificationManager.notify(accountID, notificationId, repliedNotification);
}
}

View File

@@ -0,0 +1,11 @@
package org.joinmastodon.android.api.requests.accounts;
import org.joinmastodon.android.api.MastodonAPIRequest;
import org.joinmastodon.android.model.Account;
public class GetAccountByHandle extends MastodonAPIRequest<Account>{
public GetAccountByHandle(String acct){
super(HttpMethod.GET, "/accounts/lookup", Account.class);
addQueryParameter("acct", acct);
}
}

View File

@@ -4,8 +4,15 @@ import org.joinmastodon.android.api.MastodonAPIRequest;
import org.joinmastodon.android.model.Relationship;
public class SetAccountMuted extends MastodonAPIRequest<Relationship>{
public SetAccountMuted(String id, boolean muted){
public SetAccountMuted(String id, boolean muted, long duration){
super(HttpMethod.POST, "/accounts/"+id+"/"+(muted ? "mute" : "unmute"), Relationship.class);
setRequestBody(new Object());
setRequestBody(muted ? new Request(duration): new Object());
}
private static class Request{
public long duration;
public Request(long duration){
this.duration=duration;
}
}
}

View File

@@ -13,13 +13,11 @@ import android.text.Layout;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowInsets;
import android.view.animation.TranslateAnimation;
import android.widget.ImageButton;
import android.widget.ImageButton;
import android.widget.Toolbar;
import org.joinmastodon.android.E;
@@ -34,7 +32,6 @@ import org.joinmastodon.android.model.Poll;
import org.joinmastodon.android.model.Relationship;
import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.ui.BetterItemAnimator;
import org.joinmastodon.android.model.DisplayItemsParent;
import org.joinmastodon.android.ui.PhotoLayoutHelper;
import org.joinmastodon.android.ui.TileGridLayoutManager;
import org.joinmastodon.android.ui.displayitems.ExtendedFooterStatusDisplayItem;
@@ -85,7 +82,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
protected HashMap<String, Relationship> relationships=new HashMap<>();
protected Rect tmpRect=new Rect();
private final int THRESHHOLD = 800;
private final int THRESHOLD = 800;
public BaseStatusListFragment(){
super(20);
@@ -303,7 +300,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
if (fab!=null && GlobalUserPreferences.enableFabAutoHide) {
// This piece of code should make it so that the fab is always visible if the status list scroll view is at the item at the top
if(list.getChildAt(0).getTop() == 0){
scrollDiff=THRESHHOLD+1;
scrollDiff= THRESHOLD +1;
}else{
if(dy > 0){
scrollDiff=0;
@@ -323,7 +320,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
fab.setVisibility(View.INVISIBLE);
scrollDiff = 0;
} else if (dy < 0 && fab.getVisibility() != View.VISIBLE) {
if (scrollDiff > THRESHHOLD) {
if (scrollDiff > THRESHOLD) {
TranslateAnimation animate = new TranslateAnimation(
0,
0,

View File

@@ -29,6 +29,7 @@ import android.graphics.drawable.LayerDrawable;
import android.icu.text.BreakIterator;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.opengl.Visibility;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcelable;
@@ -1945,7 +1946,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
}
private void loadDefaultStatusVisibility(Bundle savedInstanceState) {
if(replyTo != null) statusVisibility = replyTo.visibility;
if(replyTo != null) {
statusVisibility = (replyTo.visibility == StatusPrivacy.PUBLIC && GlobalUserPreferences.defaultToUnlistedReplies ? StatusPrivacy.UNLISTED : replyTo.visibility);
}
// A saved privacy setting from a previous compose session wins over the reply visibility
if(savedInstanceState !=null){

View File

@@ -1,14 +1,9 @@
package org.joinmastodon.android.fragments;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuInflater;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.timelines.GetPublicTimeline;
import org.joinmastodon.android.model.Filter;
import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.model.TimelineDefinition;
import org.joinmastodon.android.utils.StatusFilterPredicate;
import java.util.List;
@@ -16,7 +11,7 @@ import java.util.stream.Collectors;
import me.grishka.appkit.api.SimpleCallback;
public class CustomLocalTimelineFragment extends PinnableStatusListFragment {
public class CustomLocalTimelineFragment extends StatusListFragment {
// private String name;
private String domain;
@@ -40,11 +35,6 @@ public class CustomLocalTimelineFragment extends PinnableStatusListFragment {
setTitle(this.domain);
}
@Override
protected TimelineDefinition makeTimelineDefinition() {
return TimelineDefinition.ofCustomLocalTimeline(domain);
}
@Override
protected void doLoadData(int offset, int count){
currentRequest=new GetPublicTimeline(true, false, refreshing ? null : maxID, count)
@@ -55,6 +45,11 @@ public class CustomLocalTimelineFragment extends PinnableStatusListFragment {
maxID=result.get(result.size()-1).id;
if (getActivity() == null) return;
result=result.stream().filter(new StatusFilterPredicate(accountID, Filter.FilterContext.PUBLIC)).collect(Collectors.toList());
result.stream().forEach(status -> {
status.account.acct += "@"+domain;
status.reloadWhenClicked = true;
});
onDataLoaded(result, !result.isEmpty());
}
})

View File

@@ -7,6 +7,7 @@ import static org.joinmastodon.android.ui.utils.UiUtils.makeBackItem;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.text.InputType;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -150,7 +151,7 @@ public class EditTimelinesFragment extends BaseRecyclerFragment<TimelineDefiniti
FrameLayout inputWrap = new FrameLayout(getContext());
EditText input = new EditText(getContext());
input.setHint(R.string.sk_example_domain);
input.setText(GlobalUserPreferences.publishButtonText.trim());
input.setInputType(InputType.TYPE_TEXT_VARIATION_URI);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(V.dp(16), V.dp(4), V.dp(16), V.dp(16));
input.setLayoutParams(params);
@@ -190,7 +191,7 @@ public class EditTimelinesFragment extends BaseRecyclerFragment<TimelineDefiniti
hashtagsMenu.getItem().setIcon(R.drawable.ic_fluent_number_symbol_24_regular);
MenuItem addLocalTimelines = menu.add(0, R.id.menu_add_local_timelines, NONE, R.string.local_timeline);
addLocalTimelines.setIcon(R.drawable.ic_fluent_people_community_24_regular);
addLocalTimelines.setIcon(R.drawable.ic_fluent_add_24_regular);
makeBackItem(timelinesMenu);
makeBackItem(listsMenu);

View File

@@ -16,6 +16,10 @@ import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.annotation.IdRes;
import androidx.annotation.Nullable;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager;
@@ -28,8 +32,6 @@ import org.parceler.Parcels;
import java.util.ArrayList;
import androidx.annotation.IdRes;
import androidx.annotation.Nullable;
import me.grishka.appkit.FragmentStackActivity;
import me.grishka.appkit.fragments.AppKitFragment;
import me.grishka.appkit.fragments.LoaderFragment;
@@ -52,6 +54,7 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
private TabBar tabBar;
private View tabBarWrap;
private ImageView tabBarAvatar;
private ImageView notificationTabIcon;
@IdRes
private int currentTab=R.id.tab_home;
@@ -117,6 +120,9 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
Account self=AccountSessionManager.getInstance().getAccount(accountID).self;
ViewImageLoader.load(tabBarAvatar, null, new UrlImageLoaderRequest(self.avatar, V.dp(28), V.dp(28)));
notificationTabIcon=content.findViewById(R.id.tab_notifications);
setNotificationBadge();
if(savedInstanceState==null){
getChildFragmentManager().beginTransaction()
.add(R.id.fragment_wrap, homeTabFragment)
@@ -255,6 +261,13 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
scrollable.scrollToTop();
return;
}
if(tab == R.id.tab_notifications){
GlobalUserPreferences.unreadNotifications = false;
GlobalUserPreferences.save();
setNotificationBadge();
}
getChildFragmentManager().beginTransaction().hide(fragmentForTab(currentTab)).show(newFragment).commit();
maybeTriggerLoading(newFragment);
currentTab=tab;
@@ -327,4 +340,8 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
// getChildFragmentManager().putFragment(outState, "notificationsFragment", notificationsFragment);
// getChildFragmentManager().putFragment(outState, "profileFragment", profileFragment);
}
private void setNotificationBadge() {
notificationTabIcon.setImageDrawable(getContext().getDrawable(GlobalUserPreferences.unreadNotifications ? R.drawable.ic_notifications_tab_badged : R.drawable.ic_fluent_alert_28_selector));
}
}

View File

@@ -166,8 +166,11 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
@Override
protected void onShown(){
super.onShown();
// if(!getArguments().getBoolean("noAutoLoad") && !loaded && !dataLoading)
// loadData();
if(!getArguments().getBoolean("noAutoLoad") && !loaded && !dataLoading){
refreshing=true;
loadData();
}
}
@Override

View File

@@ -199,46 +199,38 @@ public class SettingsFragment extends MastodonToolbarFragment{
GlobalUserPreferences.alwaysExpandContentWarnings=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.sk_tabs_disable_swipe, R.drawable.ic_fluent_swipe_right_24_regular, GlobalUserPreferences.disableSwipe, i->{
GlobalUserPreferences.disableSwipe=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new SwitchItem(R.string.sk_enable_delete_notifications, R.drawable.ic_fluent_mail_inbox_dismiss_24_regular, GlobalUserPreferences.enableDeleteNotifications, i->{
GlobalUserPreferences.enableDeleteNotifications=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
// items.add(new SwitchItem(R.string.sk_settings_show_differentiated_notification_icons, R.drawable.ic_ntf_logo, GlobalUserPreferences.showUniformPushNoticationIcons, this::onNotificationStyleChanged));
items.add(new SwitchItem(R.string.mo_disable_dividers, R.drawable.ic_fluent_timeline_24_regular, GlobalUserPreferences.disableDividers, i->{
GlobalUserPreferences.disableDividers=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new SwitchItem(R.string.mo_hide_compose_button_while_scrolling_setting, R.drawable.ic_fluent_edit_24_regular, GlobalUserPreferences.enableFabAutoHide, i->{
GlobalUserPreferences.enableFabAutoHide =i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new SwitchItem(R.string.sk_tabs_disable_swipe, R.drawable.ic_fluent_swipe_right_24_regular, GlobalUserPreferences.disableSwipe, i->{
GlobalUserPreferences.disableSwipe=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new HeaderItem(R.string.mo_composer_behavior));
items.add(new SwitchItem(R.string.mo_change_default_reply_visibility_to_unlisted, R.drawable.ic_fluent_lock_closed_24_regular, GlobalUserPreferences.defaultToUnlistedReplies, i->{
GlobalUserPreferences.defaultToUnlistedReplies=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.mo_relocate_publish_button, R.drawable.ic_fluent_arrow_autofit_down_24_regular, GlobalUserPreferences.relocatePublishButton, i->{
GlobalUserPreferences.relocatePublishButton=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.sk_settings_single_notification, R.drawable.ic_fluent_convert_range_24_regular, GlobalUserPreferences.keepOnlyLatestNotification, i->{
GlobalUserPreferences.keepOnlyLatestNotification=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.sk_settings_prefix_reply_cw_with_re, R.drawable.ic_fluent_arrow_reply_24_regular, GlobalUserPreferences.prefixRepliesWithRe, i->{
GlobalUserPreferences.prefixRepliesWithRe=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.mo_disable_reminder_to_add_alt_text, R.drawable.ic_fluent_image_alt_text_24_regular, GlobalUserPreferences.disableAltTextReminder, i->{
GlobalUserPreferences.showNoAltIndicator=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new SwitchItem(R.string.sk_settings_prefix_reply_cw_with_re, R.drawable.ic_fluent_arrow_reply_24_regular, GlobalUserPreferences.prefixRepliesWithRe, i->{
GlobalUserPreferences.prefixRepliesWithRe=i.checked;
GlobalUserPreferences.save();
}));
items.add(new HeaderItem(R.string.sk_timelines));
items.add(new SwitchItem(R.string.sk_settings_show_replies, R.drawable.ic_fluent_chat_multiple_24_regular, GlobalUserPreferences.showReplies, i->{
@@ -303,6 +295,24 @@ public class SettingsFragment extends MastodonToolbarFragment{
items.add(new SwitchItem(R.string.sk_notify_update, R.drawable.ic_fluent_history_24_regular, pushSubscription.alerts.update, i->onNotificationsChanged(PushNotification.Type.UPDATE, i.checked), switchEnabled));
items.add(new SwitchItem(R.string.sk_notify_poll_results, R.drawable.ic_fluent_poll_24_regular, pushSubscription.alerts.poll, i->onNotificationsChanged(PushNotification.Type.POLL, i.checked), switchEnabled));
items.add(new HeaderItem(R.string.mo_miscellaneous_settings));
items.add(new SwitchItem(R.string.mo_disable_dividers, R.drawable.ic_fluent_timeline_24_regular, GlobalUserPreferences.disableDividers, i->{
GlobalUserPreferences.disableDividers=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new SwitchItem(R.string.sk_enable_delete_notifications, R.drawable.ic_fluent_mail_inbox_dismiss_24_regular, GlobalUserPreferences.enableDeleteNotifications, i->{
GlobalUserPreferences.enableDeleteNotifications=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new SwitchItem(R.string.sk_settings_single_notification, R.drawable.ic_fluent_convert_range_24_regular, GlobalUserPreferences.keepOnlyLatestNotification, i->{
GlobalUserPreferences.keepOnlyLatestNotification=i.checked;
GlobalUserPreferences.save();
}));
items.add(new HeaderItem(R.string.settings_account));
items.add(new TextItem(R.string.sk_settings_profile, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/settings/profile"), R.drawable.ic_fluent_open_24_regular));
items.add(new TextItem(R.string.sk_settings_posting, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/settings/preferences/other"), R.drawable.ic_fluent_open_24_regular));

View File

@@ -18,6 +18,7 @@ import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.ui.displayitems.ExtendedFooterStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.FooterStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
import org.joinmastodon.android.ui.utils.UiUtils;
import org.parceler.Parcels;
import java.util.ArrayList;
@@ -60,6 +61,18 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>{
Status status=getContentStatusByID(id);
if(status==null)
return;
if(status.reloadWhenClicked){
UiUtils.lookupStatus(getContext(), status, accountID, null, status1 -> {
status1.filterRevealed = true;
Bundle args=new Bundle();
args.putString("account", accountID);
args.putParcelable("status", Parcels.wrap(status1));
if(status1.inReplyToAccountId!=null && knownAccounts.containsKey(status1.inReplyToAccountId))
args.putParcelable("inReplyToAccount", Parcels.wrap(knownAccounts.get(status1.inReplyToAccountId)));
Nav.go(getActivity(), ThreadFragment.class, args);
});
return;
}
status.filterRevealed = true;
Bundle args=new Bundle();
args.putString("account", accountID);

View File

@@ -0,0 +1,9 @@
package org.joinmastodon.android.model;
public enum NotificationAction {
FAVORITE,
BOOST,
UNBOOST,
BOOKMARK,
REPLY,
}

View File

@@ -17,7 +17,7 @@ public class Poll extends BaseModel{
public boolean multiple;
public int votersCount;
public boolean voted;
@RequiredField
// @RequiredField
public List<Integer> ownVotes;
@RequiredField
public List<Option> options;

View File

@@ -62,6 +62,7 @@ public class Status extends BaseModel implements DisplayItemsParent, Searchable{
public transient boolean spoilerRevealed;
public transient boolean textExpanded, textExpandable;
public transient boolean hasGapAfter;
public boolean reloadWhenClicked;
private transient String strippedText;
@Override

View File

@@ -111,11 +111,11 @@ public class AccountCardStatusDisplayItem extends StatusDisplayItem{
rejectWrap=findViewById(R.id.reject_btn_wrap);
View card=findViewById(R.id.card);
card.setOutlineProvider(OutlineProviders.roundedRect(6));
card.setOutlineProvider(OutlineProviders.roundedRect(12));
card.setClipToOutline(true);
avatar.setOutlineProvider(OutlineProviders.roundedRect(12));
avatar.setClipToOutline(true);
cover.setOutlineProvider(OutlineProviders.roundedRect(3));
cover.setOutlineProvider(OutlineProviders.roundedRect(12));
cover.setClipToOutline(true);
actionButton.setOnClickListener(this::onActionButtonClick);
acceptButton.setOnClickListener(this::onFollowRequestButtonClick);

View File

@@ -191,6 +191,19 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
}
private void onReplyClick(View v){
if(item.status.reloadWhenClicked){
UiUtils.lookupStatus(v.getContext(),
item.status, item.accountID, null,
status -> {
v.startAnimation(opacityIn);
Bundle args=new Bundle();
args.putString("account", item.accountID);
args.putParcelable("replyTo", Parcels.wrap(status));
Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args);
}
);
return;
}
v.startAnimation(opacityIn);
Bundle args=new Bundle();
args.putString("account", item.accountID);
@@ -214,6 +227,16 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
}
private void onBoostClick(View v){
if(item.status.reloadWhenClicked){
UiUtils.lookupStatus(v.getContext(),
item.status, item.accountID, null,
status -> {
boost.setSelected(!status.reblogged);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setReblogged(status, !status.reblogged, null, r->boostConsumer(v, r));
}
);
return;
}
boost.setSelected(!item.status.reblogged);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setReblogged(item.status, !item.status.reblogged, null, r->boostConsumer(v, r));
}
@@ -310,6 +333,23 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
}
private void onFavoriteClick(View v){
if(item.status.reloadWhenClicked){
UiUtils.lookupStatus(v.getContext(),
item.status, item.accountID, null,
status -> {
favorite.setSelected(!status.favourited);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(status, !status.favourited, r->{
if (status.favourited) {
v.startAnimation(GlobalUserPreferences.reduceMotion ? opacityIn : animSet);
} else {
v.startAnimation(opacityIn);
}
bindButton(favorite, r.favouritesCount);
});
}
);
return;
}
favorite.setSelected(!item.status.favourited);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(item.status, !item.status.favourited, r->{
if (item.status.favourited) {
@@ -336,6 +376,18 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
}
private void onBookmarkClick(View v){
if(item.status.reloadWhenClicked){
UiUtils.lookupStatus(v.getContext(),
item.status, item.accountID, null,
status -> {
bookmark.setSelected(!status.bookmarked);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(status, !status.bookmarked, r->{
v.startAnimation(opacityIn);
});
}
);
return;
}
bookmark.setSelected(!item.status.bookmarked);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked, r->{
v.startAnimation(opacityIn);

View File

@@ -441,6 +441,14 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
return;
}
Bundle args=new Bundle();
if(item.status != null && item.status.reloadWhenClicked){
UiUtils.lookupAccount(v.getContext(), item.status.account, item.accountID, null, account -> {
args.putString("account", item.accountID);
args.putParcelable("profileAccount", Parcels.wrap(account));
Nav.go(item.parentFragment.getActivity(), ProfileFragment.class, args);
});
return;
}
args.putString("account", item.accountID);
args.putParcelable("profileAccount", Parcels.wrap(item.user));
Nav.go(item.parentFragment.getActivity(), ProfileFragment.class, args);

View File

@@ -67,13 +67,13 @@ public class InsetStatusItemDecoration extends RecyclerView.ItemDecoration{
paint.setColor(bgColor);
rect.left=V.dp(12);
rect.right=list.getWidth()-V.dp(12);
rect.inset(V.dp(4), V.dp(4));
c.drawRoundRect(rect, V.dp(4), V.dp(4), paint);
rect.intersect(V.dp(4), V.dp(4), V.dp(4), V.dp(-4));
c.drawRoundRect(rect, V.dp(12), V.dp(12), paint);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(V.dp(1));
paint.setColor(borderColor);
rect.inset(paint.getStrokeWidth()/2f, paint.getStrokeWidth()/2f);
c.drawRoundRect(rect, V.dp(4), V.dp(4), paint);
c.drawRoundRect(rect, V.dp(12), V.dp(12), paint);
}
@Override

View File

@@ -36,7 +36,9 @@ import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.HapticFeedbackConstants;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
@@ -99,6 +101,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.Duration;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
@@ -109,6 +112,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -464,12 +468,45 @@ public class UiUtils{
}
public static void confirmToggleMuteUser(Activity activity, String accountID, Account account, boolean currentlyMuted, Consumer<Relationship> resultCallback){
showConfirmationAlert(activity, activity.getString(currentlyMuted ? R.string.confirm_unmute_title : R.string.confirm_mute_title),
activity.getString(currentlyMuted ? R.string.confirm_unmute : R.string.confirm_mute, account.displayName),
activity.getString(currentlyMuted ? R.string.do_unmute : R.string.do_mute),
currentlyMuted ? R.drawable.ic_fluent_speaker_0_28_regular : R.drawable.ic_fluent_speaker_off_28_regular,
()->{
new SetAccountMuted(account.id, !currentlyMuted)
View menu = LayoutInflater.from(activity).inflate(R.layout.item_mute_duration, null);
Button button = menu.findViewById(R.id.button);
AtomicReference<Duration> muteDuration = new AtomicReference<>(Duration.ZERO);
PopupMenu popupMenu=new PopupMenu(activity, button, Gravity.CENTER_HORIZONTAL);
popupMenu.inflate(R.menu.mute_duration);
popupMenu.setOnMenuItemClickListener(item -> {
int id = item.getItemId();
if (id == R.id.duration_indefinite)
muteDuration.set(Duration.ZERO);
else if (id == R.id.duration_minutes_5) {
muteDuration.set(Duration.ofMinutes(5));
}else if (id == R.id.duration_minutes_30) {
muteDuration.set(Duration.ofMinutes(30));
}else if (id == R.id.duration_hours_1) {
muteDuration.set(Duration.ofHours(1));
}else if (id == R.id.duration_hours_6) {
muteDuration.set(Duration.ofHours(6));
}else if (id == R.id.duration_days_1) {
muteDuration.set(Duration.ofDays(1));
}else if (id == R.id.duration_days_3) {
muteDuration.set(Duration.ofDays(3));
}else if (id == R.id.duration_days_7) {
muteDuration.set(Duration.ofDays(7));
}
button.setText(item.getTitle());
return true;
});
button.setOnTouchListener(popupMenu.getDragToOpenListener());
button.setOnClickListener(v->popupMenu.show());
button.setText(popupMenu.getMenu().getItem(0).getTitle());
new M3AlertDialogBuilder(activity)
.setTitle(activity.getString(currentlyMuted ? R.string.confirm_unmute_title : R.string.confirm_mute_title))
.setMessage(activity.getString(currentlyMuted ? R.string.confirm_unmute : R.string.confirm_mute, account.displayName))
.setView(currentlyMuted ? null : menu)
.setPositiveButton(activity.getString(currentlyMuted ? R.string.do_unmute : R.string.do_mute), (dlg, i)-> {
new SetAccountMuted(account.id, !currentlyMuted, muteDuration.get().getSeconds())
.setCallback(new Callback<>(){
@Override
public void onSuccess(Relationship result){
@@ -486,7 +523,10 @@ public class UiUtils{
})
.wrapProgress(activity, R.string.loading, false)
.exec(accountID);
});
})
.setNegativeButton(R.string.cancel, null)
.setIcon(currentlyMuted ? R.drawable.ic_fluent_speaker_0_28_regular : R.drawable.ic_fluent_speaker_off_28_regular)
.show();
}
public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer<Status> resultCallback){
confirmDeletePost(activity, accountID, status, resultCallback, false);

View File

@@ -3,7 +3,7 @@
<item>
<shape>
<solid android:color="?colorPollVoted"/>
<corners android:radius="4dp"/>
<corners android:radius="8dp"/>
</shape>
</item>
</ripple>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_fluent_alert_28_selector" android:left="2dp" android:right="2dp" android:top="2dp" android:bottom="2dp"/>
<item android:width="14dp" android:height="14dp" android:gravity="top|right">
<shape android:shape="oval">
<stroke android:color="?android:colorPrimary" android:width="2dp"/>
<solid android:color="?android:colorAccent"/>
</shape>
</item>
</layer-list>

View File

@@ -36,7 +36,7 @@
android:layout_marginTop="16dp"
android:layout_marginBottom="8dp"
android:layout_marginHorizontal="16dp"
android:inputType="textFilter|textNoSuggestions"
android:inputType="textFilter|textNoSuggestions|textUri"
android:singleLine="true"
android:imeOptions="actionGo"
android:drawableStart="@drawable/ic_fluent_globe_20_regular"

View File

@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:paddingBottom="16dp"
android:gravity="center_vertical"
android:layoutDirection="locale">
<TextView
android:id="@+id/text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_weight="1"
android:layout_marginEnd="8dp"
android:paddingVertical="8dp"
android:gravity="center_vertical"
android:textColor="?android:textColorPrimary"
android:text="@string/mo_mute_label"
android:textSize="16sp" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_weight="0"
android:layout_marginEnd="24dp"
android:maxWidth="140dp"
android:background="@drawable/bg_inline_button"
android:elevation="0dp"
android:ellipsize="middle"
android:fontFamily="sans-serif-medium"
android:singleLine="true"
android:stateListAnimator="@null"
android:textColor="?android:textColorPrimary"
android:textSize="16sp"
tools:text="@string/mute_user" />
</LinearLayout>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/duration_indefinite" android:title="@string/mo_duration_indefinite" />
<item android:id="@+id/duration_minutes_5" android:title="@string/mo_duration_minutes_5"/>
<item android:id="@+id/duration_minutes_30" android:title="@string/mo_duration_minutes_30"/>
<item android:id="@+id/duration_hours_1" android:title="@string/mo_duration_hours_1"/>
<item android:id="@+id/duration_hours_6" android:title="@string/mo_duration_hours_6"/>
<item android:id="@+id/duration_days_1" android:title="@string/mo_duration_days_1"/>
<item android:id="@+id/duration_days_3" android:title="@string/mo_duration_days_3"/>
<item android:id="@+id/duration_days_7" android:title="@string/mo_duration_days_7"/>
</menu>

View File

@@ -26,4 +26,18 @@
<string name="mo_sending_error">Fehler beim Veröffentlichen</string>
<string name="mo_filtered">Gefiltert: %s</string>
<string name="mo_disable_reminder_to_add_alt_text">Erinnerung zum Hinzufügen einer Bildbeschreibung deaktivieren</string>
<string name="mo_add_custom_server_local_timeline">Füge eine lokale Timeline eines benutzerdefinierten Servers hinzu</string>
<string name="mo_notification_action_replied">Erfolgreich auf den Beitrag von %s geantwortet</string>
<string name="mo_duration_hours_1">1 Stunde</string>
<string name="mo_duration_hours_6">6 Stunden</string>
<string name="mo_duration_days_1">1 Tag</string>
<string name="mo_duration_days_3">3 Tage</string>
<string name="mo_mute_label">Dauer:</string>
<string name="mo_duration_indefinite">Unbestimmt</string>
<string name="mo_duration_minutes_5">5 Minuten</string>
<string name="mo_duration_minutes_30">30 Minuten</string>
<string name="mo_change_default_reply_visibility_to_unlisted">Standard Antwortsichtbarkeit auf nicht aufgelistet ändern</string>
<string name="mo_duration_days_7">7 Tage</string>
<string name="mo_composer_behavior">Verhalten des Verfassers</string>
<string name="mo_miscellaneous_settings">Sonstige Einstellungen</string>
</resources>

View File

@@ -20,4 +20,7 @@
<string name="mo_settings_contribute">Contribuir en Moshidon</string>
<string name="mo_no_image_desc">Las imágenes incluidas no tienen descripción. Por favor, piénsate añadir una para permitir a las personas con discapacidad participar.</string>
<string name="mo_filtered">Filtrado: %s</string>
<string name="mo_disable_reminder_to_add_alt_text">Desactivar recordatorio para añadir descripción</string>
<string name="mo_add_custom_server_local_timeline">Añadir una cronología de un servidor</string>
<string name="mo_notification_action_replied">Respondió correctamente a la publicación de %s</string>
</resources>

View File

@@ -259,4 +259,7 @@
<string name="sk_settings_prefix_reply_cw_with_re">Añadir \"re:\" a respuestas a Advertencias de Contenido</string>
<string name="sk_spectator_mode">Modo espectador</string>
<string name="sk_settings_hide_interaction">Ocultar los botones interactivos</string>
<string name="sk_follow_as">Seguir desde otra cuenta</string>
<string name="sk_followed_as">Seguido de %s</string>
<string name="sk_settings_hide_fab">Ocultar automáticamente el botón Redactar</string>
</resources>

View File

@@ -72,7 +72,7 @@
<string name="sk_settings_translation_availability_note_available">%s-k itzulpena onartzen du!</string>
<string name="sk_settings_translation_availability_note_unavailable">%s ez da itzulpena onartzen duten instantzien artean ageri.</string>
<string name="sk_clear_all_notifications">Ezabatu jakinarazpen guztiak</string>
<string name="sk_clear_all_notifications_confirm_action">Ezabatu dena</string>
<string name="sk_clear_all_notifications_confirm_action">Ezabatu denak</string>
<string name="sk_clear_all_notifications_confirm">Ziur al zaude jakinarazpen guztiak ezabatu nahi dituzula\?</string>
<string name="sk_loading_fediverse_resource_title">Fedibertsoan bilatzen</string>
<string name="sk_undo_reblog">Bultzada desegin</string>
@@ -146,7 +146,7 @@
<string name="sk_changelog">Aldaketen zerrenda</string>
<string name="sk_alt_text_missing">Eranskin batek gutxienez ez du deskribapenik.</string>
<string name="sk_publish_anyway">Argitaratu hala ere</string>
<string name="sk_settings_disable_alt_text_reminder">Desgaitu testu alternatiboaren jakinarazpena</string>
<string name="sk_settings_disable_alt_text_reminder">Desgaitu gogorarazlea testu alternatiboa gehitzeko</string>
<string name="sk_timelines">Denbora-lerroak</string>
<string name="sk_timeline_posts">Bidalketak</string>
<string name="sk_timelines_add">Gehitu</string>
@@ -218,7 +218,7 @@
<string name="sk_edit_timelines">Denbora-lerroak editatu</string>
<string name="sk_alt_button">ALT</string>
<string name="sk_post_edited">Editatua</string>
<string name="sk_notification_type_update">Bidalketa editatua</string>
<string name="sk_notification_type_update">Editatutako argitalpenak</string>
<string name="sk_notify_update">Bultzatutako bidalketa editatu</string>
<string name="sk_no_results">Emaitzarik ez</string>
<string name="sk_save_draft">Zirriborroa gorde\?</string>
@@ -232,4 +232,33 @@
<string name="sk_alt_text_missing_title">Testu alternatiboa falta da</string>
<string name="sk_searching">Bilatzen…</string>
<string name="sk_save_draft_message">Zirriborro honetako aldaketak gorde edo argitaratu nahi dituzu\?</string>
<string name="sk_settings_prefix_reply_cw_with_re">Gehitu \"re:\" hasieran edukiaren abisuen erantzunetan</string>
<string name="sk_filtered">Iragazita: %s</string>
<string name="sk_expand">Zabaldu</string>
<string name="sk_collapse">Itxi</string>
<string name="sk_settings_collapse_long_posts">Itxi argitalpen oso luzeak</string>
<string name="sk_unfinished_attachments">Finkatu eranskinak\?</string>
<string name="sk_unfinished_attachments_message">Eranskin batzuk ez dira igo oraindik.</string>
<string name="sk_notify_posts_info_banner">Pertsona batzuen argitalpenen jakinarazpenak gaitzen badituzu, beraien argitalpen berriak hemen ageriko dira.</string>
<string name="sk_updater_enable_pre_releases">Gaitu beta bertsioak</string>
<string name="sk_inline_direct">aipamenak soilik</string>
<string name="sk_separator">·</string>
<string name="sk_instance_features">Instantziaren ezaugarriak</string>
<string name="sk_settings_local_only_explanation">Zure jatorriko instantziak bertan soilik argitaratzea baimendu behar du hau ibili dadin. Aldatutako Mastodon bertsio askok darabilte, baina Mastodonek ez.</string>
<string name="sk_inline_local_only">bertan soilik</string>
<string name="sk_settings_support_local_only">Zerbitzariak bertan soilik argitaratzea baimentzen du</string>
<string name="sk_settings_glitch_instance">Glitch bertan soilik modua</string>
<string name="sk_settings_glitch_mode_explanation">Gaitu hau zure jatorrizko instantziak Glitch badarabil. Ez da beharrezkoa Hometown edo Akkomarako.</string>
<string name="sk_signed_up">izena emanda</string>
<string name="sk_reported">salatuta</string>
<string name="sk_sign_ups">Erabiltzaileen izen-ematea</string>
<string name="sk_new_reports">Salaketa berriak</string>
<string name="sk_local_only">Bertako instantzia soilik</string>
<string name="sk_settings_see_new_posts_button">\"Ikusi argitalpen berriak\" botoia</string>
<string name="sk_settings_server_version">Zerbitzariaren bertsioa: %s</string>
<string name="sk_notify_poll_results">Bozketaren emaitzak</string>
<string name="sk_settings_hide_interaction">Ezkutatu interakzio-botoiak</string>
<string name="sk_follow_as">Jarraitu beste kontu batetik</string>
<string name="sk_followed_as">%s-(d/t)ik jarraitua</string>
<string name="sk_settings_hide_fab">Automatikoki ezkutatu Idatzi botoia</string>
</resources>

View File

@@ -260,4 +260,7 @@
<string name="sk_unfinished_attachments_message">Certaines pièces jointes n\'ont pas fini de se télécharger.</string>
<string name="sk_spectator_mode">Mode spectateur</string>
<string name="sk_settings_hide_interaction">Masquer les boutons d\'interaction</string>
<string name="sk_follow_as">Suivre depuis un autre compte</string>
<string name="sk_followed_as">Suivi depuis %s</string>
<string name="sk_settings_hide_fab">Masquer automatiquement le bouton Composer</string>
</resources>

View File

@@ -259,4 +259,7 @@
<string name="sk_unfinished_attachments">Arranxar arquivos adxuntos\?</string>
<string name="sk_spectator_mode">Modo espectador</string>
<string name="sk_settings_hide_interaction">Ocultar botóns de interacción</string>
<string name="sk_follow_as">Seguir dende outra conta</string>
<string name="sk_followed_as">Seguida dende %s</string>
<string name="sk_settings_hide_fab">Auto-ocultar botón de redacción</string>
</resources>

View File

@@ -252,4 +252,15 @@
<string name="sk_settings_support_local_only">Server hanya mendukung pengiriman hanya lokal</string>
<string name="sk_settings_server_version">Versi server: %s</string>
<string name="sk_notify_poll_results">Hasil japat</string>
<string name="sk_filtered">Disaring: %s</string>
<string name="sk_expand">Buka</string>
<string name="sk_collapse">Tutup</string>
<string name="sk_settings_hide_interaction">Sembunyikan tombol interaksi</string>
<string name="sk_follow_as">Ikuti dari akun lain</string>
<string name="sk_followed_as">Diikuti dari %s</string>
<string name="sk_settings_prefix_reply_cw_with_re">Awali peringatan konten balasan dengan “re:”</string>
<string name="sk_settings_collapse_long_posts">Tutup kiriman yang sangat panjang</string>
<string name="sk_unfinished_attachments">Perbaiki lampiran\?</string>
<string name="sk_unfinished_attachments_message">Beberapa lampiran belum selesai diunggah.</string>
<string name="sk_settings_hide_fab">Sembunyikan tombol Komposer</string>
</resources>

View File

@@ -53,58 +53,58 @@
<string name="sk_post_language">Lingua: %s</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_confirm_clear_recent_languages">Sei sicuro di voler cancellare le lingue usate di recente\?</string>
<string name="sk_clear_recent_languages">Cancella lingue usate di recente</string>
<string name="sk_clear_recent_languages">Cancella le lingue usate di recente</string>
<string name="sk_welcome_title">Benvenuto!</string>
<string name="sk_example_domain">example.social</string>
<string name="sk_poll_allow_multiple">Consenti scelte multiple</string>
<string name="sk_available_languages">Lingue disponibili</string>
<string name="sk_welcome_text">Lo squalo ti saluta! Per iniziare inserisci il dominio dell\'istanza a cui sei iscritto.</string>
<string name="sk_welcome_text">Lo squalo ti saluta! Per iniziare inserisci qui sotto l\'indirizzo dell\'istanza a cui sei iscritto.</string>
<string name="sk_color_palette_material3">Sistema</string>
<string name="sk_timeline_local">Locale</string>
<string name="sk_timeline_federated">Federata</string>
<string name="sk_bookmark_as">Salva con un altro account</string>
<string name="sk_bookmark_as">Aggiungi ai segnalibri con un altro account</string>
<string name="sk_bookmarked_as">Salvato come %s</string>
<string name="sk_favorite_as">Inserisci tra i preferiti con un altro account</string>
<string name="sk_favorite_as">Aggiungi ai preferiti con un altro account</string>
<string name="sk_favorited_as">Inserito tra i preferiti come %s</string>
<string name="sk_already_favorited">Già tra i preferiti</string>
<string name="sk_already_favorited">Già aggiunto ai preferiti</string>
<string name="sk_reblog_as">Condividi con un altro account</string>
<string name="sk_already_reblogged">Condivisione già eseguita</string>
<string name="sk_settings_profile">Imposta il profilo</string>
<string name="sk_settings_posting">Preferenze dei post</string>
<string name="sk_settings_filters">Configura filtri</string>
<string name="sk_already_reblogged">Già condiviso</string>
<string name="sk_settings_profile">Impostazioni del profilo</string>
<string name="sk_settings_posting">Preferenze di pubblicazione</string>
<string name="sk_settings_filters">Configura i filtri</string>
<string name="sk_settings_rules">Regole</string>
<string name="sk_settings_about">Riguardo all\'app</string>
<string name="sk_settings_about">Informazioni sull\'app</string>
<string name="sk_settings_donate">Dona</string>
<string name="sk_delete_notification_confirm_action">Elimina notifica</string>
<string name="sk_enable_delete_notifications">Abilita l\'eliminazione delle notifiche</string>
<string name="sk_delete_notification_confirm_action">Elimina la notifica</string>
<string name="sk_enable_delete_notifications">Abilita la cancellazione delle notifiche</string>
<string name="sk_settings_publish_button_text">Testo del pulsante Pubblica</string>
<string name="sk_settings_publish_button_text_title">Personalizza il testo del pulsante Pubblica</string>
<string name="sk_settings_translation_availability_note_available">%s supporta la traduzione!</string>
<string name="sk_settings_translation_availability_note_unavailable">Sembra che %s non supporti la traduzione.</string>
<string name="sk_clear_all_notifications">Elimina tutte le notifiche</string>
<string name="sk_clear_all_notifications_confirm_action">Elimina tutto</string>
<string name="sk_clear_all_notifications_confirm">Sei sicuro di volere eliminare tutte le notifiche\?</string>
<string name="sk_settings_translation_availability_note_unavailable">%s non sembra supportare la traduzione.</string>
<string name="sk_clear_all_notifications">Cancella tutte le notifiche</string>
<string name="sk_clear_all_notifications_confirm_action">Cancella tutto</string>
<string name="sk_clear_all_notifications_confirm">Sei sicuro di voler eliminare tutte le notifiche\?</string>
<string name="sk_loading_fediverse_resource_title">Cercando nel Fediverso</string>
<string name="sk_quote_post">Crea un post riguardo a questo</string>
<string name="sk_undo_reblog">Annulla la condivisione</string>
<string name="sk_reblog_with_visibility">Condividi con visibilità</string>
<string name="sk_copy_link_to_post">Copia il link del post</string>
<string name="sk_reblog_with_visibility">Reblog con visibilità</string>
<string name="sk_copy_link_to_post">Copia il link al post</string>
<string name="sk_open_with_account">Apri con un altro account</string>
<string name="sk_resource_not_found">La risorsa non può essere trovata</string>
<string name="sk_resource_not_found">Non è stato possibile trovare la risorsa</string>
<string name="sk_draft">Bozza</string>
<string name="sk_schedule">Programma</string>
<string name="sk_confirm_delete_draft_title">Elimina bozza</string>
<string name="sk_draft_or_schedule">Bozza o programma</string>
<string name="sk_draft_or_schedule">Salva nelle bozze o programma</string>
<string name="sk_compose_scheduled">Programmato per</string>
<string name="sk_draft_saved">Bozza salvata</string>
<string name="sk_forward_report_to">Inoltra a %s</string>
<string name="sk_confirm_delete_scheduled_post_title">Elimina post programmato</string>
<string name="sk_confirm_delete_scheduled_post">Sei sicuro di volere eliminare questo post programmato\?</string>
<string name="sk_confirm_delete_scheduled_post">Sei sicuro di voler eliminare questo post programmato\?</string>
<string name="sk_compose_draft">Il post verrà salvato come bozza.</string>
<string name="sk_post_scheduled">Post programmato</string>
<string name="sk_scheduled_too_soon_title">L\'orario programmato è troppo presto</string>
<string name="sk_mark_as_draft">Segna come bozza</string>
<string name="sk_schedule_post">Programma post</string>
<string name="sk_schedule_post">Programma il post</string>
<string name="sk_compose_no_schedule">Non programmare</string>
<string name="sk_compose_no_draft">Non tenere in bozza</string>
<string name="sk_announcements">Annunci</string>
@@ -123,25 +123,25 @@
<string name="sk_reply_as">Rispondi con un altro account</string>
<string name="sk_settings_uniform_icon_for_notifications">Icona uniforme per tutte le notifiche</string>
<string name="sk_color_palette_red">Rosso</string>
<string name="sk_tabs_disable_swipe">Disabilita lo scorrimento tra schede</string>
<string name="sk_settings_auth">Impostazioni della sicurezza</string>
<string name="sk_delete_notification">Elimina notifica</string>
<string name="sk_delete_notification_confirm">Sei sicuro di volere eliminare questa notifica\?</string>
<string name="sk_settings_translate_only_opened">Traduci solamente i post aperti</string>
<string name="sk_loading_resource_on_instance_title">Cercando in %s</string>
<string name="sk_hashtags_you_follow">Hashtags che segui</string>
<string name="sk_already_bookmarked">Già salvato</string>
<string name="sk_tabs_disable_swipe">Disabilita lo scorrimento tra le schede</string>
<string name="sk_settings_auth">Impostazioni di sicurezza</string>
<string name="sk_delete_notification">Elimina la notifica</string>
<string name="sk_delete_notification_confirm">Sei sicuro di voler eliminare questa notifica\?</string>
<string name="sk_settings_translate_only_opened">Traduci solo i post aperti</string>
<string name="sk_loading_resource_on_instance_title">Cercando su %s</string>
<string name="sk_hashtags_you_follow">Hashtag che segui</string>
<string name="sk_already_bookmarked">Già aggiunto ai segnalibri</string>
<string name="sk_reblogged_as">Condivisione eseguita come %s</string>
<string name="sk_unsent_posts">Post annullati</string>
<string name="sk_confirm_save_draft">Salva bozza\?</string>
<string name="sk_confirm_save_changes">Salva le modifiche\?</string>
<string name="sk_unsent_posts">Post non pubblicati</string>
<string name="sk_confirm_save_draft">Salvare la bozza\?</string>
<string name="sk_confirm_save_changes">Salvare le modifiche\?</string>
<string name="sk_schedule_or_draft">Programma o bozza</string>
<string name="sk_settings_reduce_motion">Riduci il movimento delle animazioni</string>
<string name="sk_settings_about_instance">Riguardo all\'istanza</string>
<string name="sk_delete_list_confirm">Sei sicuro di volere eliminare la lista \"%s\"\?</string>
<string name="sk_timeline_home">Home</string>
<string name="sk_confirm_delete_draft">Sei sicuro di volere eliminare questo post in bozza\?</string>
<string name="sk_scheduled_too_soon">I post devono essere programmati almeno tra 10 minuti.</string>
<string name="sk_confirm_delete_draft">Sei sicuro di voler cancellare questa bozza\?</string>
<string name="sk_scheduled_too_soon">Il post deve essere programmato almeno 10 minuti prima.</string>
<string name="sk_recent_searches_placeholder">Scrivi per iniziare a cercare</string>
<string name="sk_remove_follower">Rimuovi come follower</string>
<string name="sk_remove_follower_confirm">Rimuovi %s come follower bloccandolo e sboccandolo immediatamente\?</string>
@@ -250,4 +250,15 @@
<string name="sk_settings_see_new_posts_button">Pulsante \"Mostra nuovi post\"</string>
<string name="sk_settings_server_version">Versione server:%s</string>
<string name="sk_notify_poll_results">Risultati del sondaggio</string>
<string name="sk_settings_prefix_reply_cw_with_re">Aggiungi \"re:\" prima dei CW</string>
<string name="sk_filtered">Filtrato: %s</string>
<string name="sk_expand">Espandi</string>
<string name="sk_collapse">Chiudi</string>
<string name="sk_settings_collapse_long_posts">Comprimi post molto lunghi</string>
<string name="sk_unfinished_attachments">Correggi gli allegati\?</string>
<string name="sk_unfinished_attachments_message">Alcuni allegati non hanno finito l\'upload.</string>
<string name="sk_settings_hide_interaction">Nascondi i pulsanti di interazione</string>
<string name="sk_follow_as">Segui con un altro account</string>
<string name="sk_followed_as">Seguito con %s</string>
<string name="sk_settings_hide_fab">Nascondi automaticamente il pulsante Pubblica</string>
</resources>

View File

@@ -259,4 +259,7 @@
<string name="sk_settings_collapse_long_posts">아주 긴 게시물 접기</string>
<string name="sk_spectator_mode">관객 모드</string>
<string name="sk_settings_hide_interaction">상호작용 버튼 가리기</string>
<string name="sk_follow_as">다른 계정으로 팔로우</string>
<string name="sk_followed_as">%s 계정으로 팔로우함</string>
<string name="sk_settings_hide_fab">게시 버튼 자동으로 가리기</string>
</resources>

View File

@@ -20,4 +20,6 @@
<string name="mo_disable_dividers">Wyłącz dzielenie postów</string>
<string name="mo_disable_relocate_publish_button_to_enable_customization">Wyłącz opcję Przenoszenia przycisku publikacji aby umożliwić dostosowywanie</string>
<string name="mo_filtered">Wyfiltrowano: %s</string>
<string name="mo_disable_reminder_to_add_alt_text">Wyłącz przypomnienie o dodaniu opisu</string>
<string name="mo_add_custom_server_local_timeline">Dodaj lokalną oś czasu innej instancji</string>
</resources>

View File

@@ -258,4 +258,7 @@
<string name="sk_settings_prefix_reply_cw_with_re">Zaczynaj CW odpowiedzi od “re:”</string>
<string name="sk_settings_collapse_long_posts">Zwijaj bardzo długie posty</string>
<string name="sk_settings_hide_interaction">Ukryj przyciski interakcji</string>
<string name="sk_followed_as">Obserwowane z %s</string>
<string name="sk_follow_as">Obserwuj z innego konta</string>
<string name="sk_settings_hide_fab">Automatycznie ukrywaj przycisk tworzenia nowego wpisu</string>
</resources>

View File

@@ -21,4 +21,18 @@
<string name="mo_poll_option_add">Adicionar nova opção de enquete</string>
<string name="mo_filtered">Filtrado: %s</string>
<string name="mo_disable_reminder_to_add_alt_text">Desabilitar lembrete de adicionar textos descritivos</string>
<string name="mo_add_custom_server_local_timeline">Adicionar a linha local de um servidor customizado</string>
<string name="mo_notification_action_replied">Respondeu com sucesso ao post de %s</string>
<string name="mo_composer_behavior">Comportamento do Compositor</string>
<string name="mo_duration_hours_1">1 hora</string>
<string name="mo_duration_hours_6">6 horas</string>
<string name="mo_duration_days_1">1 dia</string>
<string name="mo_duration_days_3">3 dias</string>
<string name="mo_duration_days_7">7 dias</string>
<string name="mo_mute_label">Duração:</string>
<string name="mo_duration_indefinite">Indefinido</string>
<string name="mo_duration_minutes_5">5 minutos</string>
<string name="mo_duration_minutes_30">30 minutos</string>
<string name="mo_change_default_reply_visibility_to_unlisted">Mudar visibilidade padrão das respostas para não listado</string>
<string name="mo_miscellaneous_settings">Configurações Diversas</string>
</resources>

View File

@@ -1,4 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>
<string name="mo_welcome_text">Щоб розпочати, будь ласка, введіть адресу вашого екземпляру нижче.</string>
<string name="mo_no_image_desc">Зображення не мають опису. Ви можете додати його, щоб люди із вадами зору могли зрозуміти, яке забарвлення в котика.</string>
<string name="mo_disable_relocate_publish_button_to_enable_customization">Вимкніть переміщення кнопки \"Опублікувати\" для кастомізації</string>
<string name="mo_color_palette_nord">Nord</string>
<string name="mo_disable_dividers">Вимкнути роздільники публікацій</string>
<string name="mo_relocate_publish_button">Перемістити кнопку \"Опублікувати\"</string>
<string name="mo_hide_compose_button_while_scrolling_setting">Сховати кнопку \"Нова публікація\" під час прокручування</string>
<string name="mo_personal_note">Додати нотатку до цього профілю</string>
<string name="mo_personal_note_confirm">Підтвердити зміни</string>
<string name="mo_personal_note_update_failed">Не вдалося зберегти нотатку</string>
<string name="mo_settings_contribute">Допомогти у розробці Moshidon</string>
<string name="mo_update_available">Moshidon %s готовий до завантаження.</string>
<string name="mo_update_ready">Moshidon %s готовий до встановлення.</string>
<string name="mo_no_image_desc_title">Немає опису зображення</string>
<string name="mo_emoji_recent">Нещодавні</string>
<string name="mo_clear_recent_emoji">Очистити нещодавні емоджи</string>
<string name="mo_disable_reminder_to_add_alt_text">Вимкнути повідомлення про додавання опису зображення</string>
<string name="mo_poll_option_add">Опція \"додати нове опитування\"</string>
<string name="mo_fab_compose">Новий допис</string>
<string name="mo_sending_error">Помилка при публікації</string>
<string name="mo_filtered">Відфільтровано: %s</string>
<string name="mo_add_custom_server_local_timeline">Додати місцеву стрічку іншого серверу</string>
</resources>

View File

@@ -259,4 +259,7 @@
<string name="sk_unfinished_attachments_message">Деякі вкладення не повністю завантажилися.</string>
<string name="sk_spectator_mode">Режим глядача</string>
<string name="sk_settings_hide_interaction">Сховати кнопки взаємодії</string>
<string name="sk_follow_as">Підписатися з іншого облікового запису</string>
<string name="sk_followed_as">Відстежується з %s</string>
<string name="sk_settings_hide_fab">Автоматично ховати кнопку компонування</string>
</resources>

View File

@@ -21,4 +21,18 @@
<string name="mo_sending_error">发布帖文时出错</string>
<string name="mo_filtered">已过滤:%s</string>
<string name="mo_disable_reminder_to_add_alt_text">禁用添加ALT文本的提醒</string>
<string name="mo_add_custom_server_local_timeline">添加自定义实例的本地时间线</string>
<string name="mo_notification_action_replied">成功回复了 %s 的帖文</string>
<string name="mo_duration_minutes_5">5分钟</string>
<string name="mo_duration_hours_6">6小时</string>
<string name="mo_duration_days_1">1天</string>
<string name="mo_duration_days_3">3天</string>
<string name="mo_mute_label">持续时间:</string>
<string name="mo_duration_indefinite">无限</string>
<string name="mo_duration_minutes_30">30分钟</string>
<string name="mo_duration_hours_1">1小时</string>
<string name="mo_change_default_reply_visibility_to_unlisted">将回复的默认可见性改为“不公开列出”</string>
<string name="mo_duration_days_7">7天</string>
<string name="mo_composer_behavior">作者的行为</string>
<string name="mo_miscellaneous_settings">杂项设置</string>
</resources>

View File

@@ -26,10 +26,26 @@
<string name="mo_disable_relocate_publish_button_to_enable_customization">Disable "Relocate publish button" to allow customization</string>
<string name="mo_disable_reminder_to_add_alt_text">Disable reminder to add alt text</string>
<string name="mo_add_custom_server_local_timeline">Add a custom server\'s local timeline</string>
<string name="mo_notification_action_replied">Successfully replied to the post by %s</string>
<string name="mo_change_default_reply_visibility_to_unlisted">Change default reply visibility to unlisted</string>
<string name="mo_composer_behavior">Composer\'s Behavior</string>
<string name="mo_miscellaneous_settings">Miscellaneous Settings</string>
<!-- accessibility labels-->
<string name="mo_poll_option_add">Add new poll option</string>
<string name="mo_fab_compose">Compose</string>
<string name="mo_sending_error">Error publishing</string>
<!-- duration labels-->
<string name="mo_mute_label">Duration:</string>
<string name="mo_duration_indefinite">Indefinite</string>
<string name="mo_duration_minutes_5">5 minutes</string>
<string name="mo_duration_minutes_30">30 minutes</string>
<string name="mo_duration_hours_1">1 hour</string>
<string name="mo_duration_hours_6">6 hours</string>
<string name="mo_duration_days_1">1 day</string>
<string name="mo_duration_days_3">3 days</string>
<string name="mo_duration_days_7">7 days</string>
</resources>

View File

@@ -0,0 +1,5 @@
Neue Dinge für 94:
- Verbesserungen am Verhalten des Fabs
- Geringfügige Änderungen am Launchersymbol
- Verbesserungen des Benachrichtigungsverhaltens
- Kleinere Fehlerbehebungen und Verbesserungen

View File

@@ -0,0 +1,3 @@
Neue Dinge für 95:
- Hinzufügen der Möglichkeit, die lokalen Timelines anderer Server in den Timelines anzuzeigen
- Kleinere Korrekturen und Verbesserungen

View File

@@ -0,0 +1,3 @@
Neue Dinge für 96:
- Verbesserung der Möglichkeit, die lokalen Timelines anderer Server in den Timelines anzuzeigen
- Kleinere Korrekturen und Verbesserungen

View File

@@ -0,0 +1,3 @@
Version 97 fügt hinzu:
- Die neue Funktion "Benutzerdefinierte lokale Zeitleisten". Sie kann über das Menü "Zeitleisten hinzufügen" aufgerufen werden.
- Kleinere Korrekturen und Verbesserungen

View File

@@ -0,0 +1 @@
Erste Veröffentlichung im Play Store

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

After

Width:  |  Height:  |  Size: 170 KiB

View File

@@ -0,0 +1,6 @@
- Añadir selector de idioma
- Añadir función de traducción
- Mejorar la semántica para votar en las encuestas (botones de radio y casillas de verificación)
- Añadir la opción de permitir la votación de múltiples opciones en las encuestas
- Nueva pantalla de inicio de sesión
- Corrección de errores

View File

@@ -0,0 +1,5 @@
- Nuevos esquemas de color: Material You y Rojo
- Nuevos tonos gris oscuro para todos los esquemas
- Icono de impulso ahora más distinguible
- Animaciones para botones de interacción.
- Corrección de errores (bloqueo en algunas publicaciones, "listas de", idioma predeterminado para nuevas publicaciones)

View File

@@ -0,0 +1,11 @@
- Botón de publicación personalizable
- Abrir enlaces de Fediverse en la aplicación
- Botón boost de pulsación larga para "citar" un post
- Copiar la URL de la publicación al pulsar prolongadamente el botón de compartir
- Implementar la eliminación de notificaciones (desactivada por defecto)
- Iconos específicos para los distintos tipos de notificaciones
- Nuevos colores grises
- Añadir la opción de desactivar el deslizamiento entre pestañas.
- Añadir varios enlaces a la configuración de la cuenta
- Mostrar/ocultar el botón de traducción en la línea de tiempo
- Corrección de errores y ajustes

View File

@@ -0,0 +1,6 @@
- Opción para seleccionar la visibilidad manteniendo presionado el botón de reblog
- Ahora se muestra la visibilidad de los reblogs propios.
- Lista agregada de hashtags seguidos
- Mantenga presionado a la izquierda para copiarlos
- Opción de abrir publicaciones con otra cuenta
- Corrección de errores y ajustes menores

View File

@@ -1,6 +0,0 @@
- Filtros mejorados, incluida la compatibilidad con la opción "Ocultar con advertencia"
- Página de perfil rediseñada con los metadatos directamente debajo de la biografía.
- Función de contraer/expandir para mensajes muy largos.
- Opción de anteponer automáticamente el prefijo "re:" a los mensajes de respuesta.
- Opción de ocultar los botones de interacción en la línea de tiempo
- Varias correcciones de errores, ajustes y mejoras

View File

@@ -0,0 +1,4 @@
- Manter pulsado o botón de seguir para seguir perfís de outra conta
- Opción de abrir perfís de outra conta
- Auto-ocultar o botón de redacción cando deslizas cara abaixo na cronoloxía
- Arranxado o bloqueo ao abrir os perfís dos administradores do servidor

View File

@@ -0,0 +1,6 @@
- Saringan ditingkatkan, termasuk kompatibilitas “Sembunyikan dengan peringatan”
- Rancang ulang halaman profil dengan metadata langsung di bawah bio
- Fungsi buka/tutup untuk kiriman yang sangat panjang
- Opsi untuk menambahkan peringatan konten pada balasan dengan “re:”
- Opsi untuk menyembunyikan tombol interaksi di lini masa
- Banyak perbaikan kutu, perubahan, dan peningkatan

View File

@@ -0,0 +1,4 @@
- Tekan lama pada tombol ikuti untuk mengikuti profil dari akun lain
- Opsi untuk membuka profil di akun yang lain
- Sembunyikan tombol komposer secara otomatia ketika menggulir lini masa ke bawah
- Perbaiki kemogokan ketika membuka profil admin server

View File

@@ -0,0 +1,10 @@
- Nuova home con timeline pubbliche
- Mostra annunci del server
- Testo scalato in base alle impostazioni di sistema
- Filtro migliorato (no, "Nascondi con avvertimento" non funziona ancora) da @thiagojedi
- Funzionalità di gestione delle liste
- Rimozione di follower con blocco morbido
- Respinte le connessioni con fascisti
- Risolto il non caricamento delle immagini se connessi all'istanza di Akkoma
- Risoluzioni di bug e miglioramenti UI
- Aggiunto il registro delle modiifche da @LucasGGamerM

View File

@@ -0,0 +1,9 @@
- Le timelines possono essere fissate e riorganizzate
- Supporto per post solo locali
- Aggiunti indicatori per testi alternativi mancanti
- Migliorato l'editor del testo alternativo
- Aggiunta intestazione nella home per gli hashtag seguiti
- Più categorie di notifiche
- Aggiunta nuovamente la possibilità di aprire file
- Aggiunto avviso quando si salvano le bozze
- Aggiunta opzione per disabilitare il tasto "Visualizza nuovi post"

View File

@@ -0,0 +1,6 @@
- Migliorati i filtri, compresa la compatibilità con "Nascondi con avvertimento"
- Ripensata la pagina del profilo con metadati sotto la bio
- Funzione mostra/nascondi per post molto lunghi
- Possibilità di iniziare le risposte a dei Content Warning con "re:"
- Possiblità di nascondere i pulsanti di interazione nello scorrimento della timeline
- Numerose correzioni di bug e miglioramenti

View File

@@ -0,0 +1,4 @@
- Possibilità di seguire con un altro account con tocco prolungato
- Possibilità di aprire profili con un altro account
- Aggiunta la possibilità di nascondere il pulsante per pubblicare quando si scorre nella timeline
- Corretti crash nell'apertura di profili degli amministratori del server

View File

@@ -0,0 +1,4 @@
- 팔로우 버튼을 길게 눌러 다른 계정으로 프로필 팔로우
- 다른 계정으로 프로필을 열 수 있는 옵션
- 타임라인을 아래로 스크롤할 때 게시 버튼 자동으로 가리기
- 서버 관리자 프로필로 앱을 열 때 발생하는 오류 수정

View File

@@ -0,0 +1,4 @@
- Długie naciśnięcie przycisku "obserwacji" teraz pozwoli ci obserwować profile z innego konta
- Opcja otwierania profili innym kontem
- Automatyczne ukrywanie przycisku pisania nowego posta podczas przewijania w dół osi czasu
- Naprawiono crash podczas otwierania profili administratora serwera

View File

@@ -0,0 +1 @@
Mastodon na Android ale ma motyw Material You i ma więcej funkcji

1
metadata/pl/title.txt Normal file
View File

@@ -0,0 +1 @@
Moshidon

View File

@@ -0,0 +1,16 @@
Moshidon é uma versão modificada do aplicativo Mastodon oficial para Android adicionando recursos importantes que estão faltando no aplicativo oficial, como o federado linha do tempo, postagem não listada e um visualizador de descrição de imagem.
<b>Principais recursos<b>
- <b>Muitas cores<b>: Traz material do seu tema e muitas opções coloridas de temas!
- <b>Postagens filtradas!<b>: A capacidade de exibir postagens filtradas com um aviso!
- <b>Botão Traduzir<b>: Traz um botão traduzir!
- <b>Seletor de idioma do toot<b>: Traz um seletor de idioma do toot!
- <b>Postagem não listada<b>: Poste publicamente sem que sua postagem apareça em tendências, hashtags ou cronogramas públicos.
- <b>Linha do tempo federada<b>: Veja todas as postagens públicas de pessoas em todos os outros bairros do Fediverse aos quais sua instância inicial está conectada.
- <b>Visualizador de descrição de imagem<b>: Verifique rapidamente se uma imagem ou vídeo tem um texto alternativo anexado a ele.
- <b>Pinagem de postagens<b>: Fixe suas postagens mais importantes em seu perfil e veja o que outras pessoas fixaram usando a guia "Fixadas".
- <b>Seguir hashtags<b>: veja novas postagens de hashtags específicas diretamente em sua linha do tempo inicial, seguindo-as.
- <b>Responder a solicitações de acompanhamento<b>: Aceite ou recuse solicitações de acompanhamento de suas notificações ou da lista dedicada de solicitações de acompanhamento.
- <b>Excluir e rediscutir<b>: O recurso muito apreciado que tornou a edição possível sem uma função de edição real.
- <b>Extras<b>: Traz muitos recursos extras de UI, como ícones de interação nas Notificações e remove muitos incômodos com a UI original!<b>

View File

@@ -0,0 +1 @@
Mastodon para Android mas é Material You e tem mais recursos

1
metadata/pt-BR/title.txt Normal file
View File

@@ -0,0 +1 @@
Moshidon

View File

@@ -0,0 +1,4 @@
- Затискання кнопки підписатися, щоб підписатися на профілі з іншого облікового запису
- Можливість відкривати профілі в іншому обліковому записі
- Автоприховування кнопки компонування під час гортання стрічки вниз
- Виправлено збій під час відкриття профілів адміністратора сервера

View File

@@ -0,0 +1 @@
Mastodon для Android, але має більше функцій й дизайн Material You

1
metadata/uk/title.txt Normal file
View File

@@ -0,0 +1 @@
Moshidon

View File

@@ -0,0 +1,6 @@
新增语言选择器
- 新增翻译功能
- 改进投票贴文语义 (单选/多选)
- 新增允许在投票中设置多选的功能
- 新登录界面
- 修复部分bug

View File

@@ -0,0 +1,5 @@
- 新增颜色主题Material You和红色主题
- 为全部主题新增深灰色调
- 转发图标改为更醒目的填充式图标
- 为互动按钮添加了动画
- 修复部分bug发布部分贴文时崩溃“特定列表”贴文默认语言

View File

@@ -0,0 +1,11 @@
- 可自定义发布按钮
- 在应用中打开Fedivese链接
- 长按转发按钮可引用一篇帖子
- 长按分享按钮可复制贴文URL
- 实现了删除通知功能(默认禁用)
- 为不同类型通知提供了专门的图标
- 新增灰色色调
- 添加禁用滑动切换选项卡的设置
- 添加各种链接到账户设置
- 添加在时间轴上显示/隐藏翻译按钮的开关
- 修复bug与程序微调

View File

@@ -0,0 +1,6 @@
- 长按可选选择特定转发的可见性
- 显示自己转发的可见性
- 添加已关注的标签列表
- 长按复制链接
- 添加使用其它账户打开帖子的选项
- 修复bug与程序微调

View File

@@ -0,0 +1,10 @@
- 草稿和定时发布功能
- 回复时显示原帖
- 与Mastodon 4.0兼容的过滤器(目前还没有“隐藏并警告功能”)
- 长按可通过其它已登录账户与贴文交互
- 在所有菜单中添加图标
- 新增转发举报的开关
- 添加使用“发布关于此事的贴文”功能时的提及(@)功能
- 添加使用统一通知图标而非不同图标的设置项
- 添加从设置中访问应用内规则列表的选项
- 修复bug

View File

@@ -0,0 +1,10 @@
- 新的主页选项卡,包含公共时间轴
- 显示服务器公告
- 根据系统设置进行文本缩放
- 改进了过滤功能(目前还没有“带警告标识并隐藏”功能)(由@thiagojedi实现
- 列表管理功能
- 使用“软拉黑”移除关注你的用户
- 不允许与法西斯主义者建立联系
- 在连接到Akkoma实例时修复图像加载问题
- 修复bug和UI调整
- 更新日志刷新器(由@LucasGGamerM实现

View File

@@ -0,0 +1,9 @@
- 时间轴可以被固定和重新排列
- 支持仅在本地服务器发布
- 新增缺失alt文本的提示
- 改进alt文本编辑器
- 新增标题:时间轴中关注的标签
- 更多通知分类
- 重新添加文件打开器
- 在保存已编辑的草稿时提示
- 新增禁用“查看新帖子”按钮的选项

View File

@@ -0,0 +1,6 @@
- 改进过滤器,包括兼容“警告并隐藏”
- 重新设计个人资料页面,元信息直接显示在自我介绍下方
- 针对非常长的帖子的折叠/展开功能
- 自动为回复加上“re:”前缀的选项
- 新增在时间轴中隐藏互动按钮的选项
- 各种错误修复、调整和改进

View File

@@ -0,0 +1,4 @@
- 长按关注按钮可从其他帐户关注个人资料
- 新增从其他帐户打开个人资料的选项
- 向下滚动时间轴时自动隐藏发帖按钮
- 修复打开服务器管理员资料时崩溃的问题

View File

@@ -0,0 +1,5 @@
版本91的新功能
- 新增为带过滤标签的帖子显示警告的功能
- 修复了自动更新程序的问题
- 修复了一些与过滤系统相关的崩溃问题
- 进行了小规模的优化,提高用户体验

View File

@@ -0,0 +1,4 @@
版本92的更新内容
- 更好的过滤器
- 新的个人资料页面布局
- 大量微小的调整和改进

View File

@@ -0,0 +1,5 @@
版本94的更新内容
- 改进浮动操作按钮的行为
- 对启动器图标进行了微小的更改
- 改进通知行为
- 其它小修复与改进

View File

@@ -0,0 +1,3 @@
版本95的更新内容
- 增加在时间轴中添加其他服务器的本地时间轴的功能
- 一些小修复和改进

View File

@@ -0,0 +1,3 @@
版本96的更新内容
- 改进在时间轴中添加其他服务器的本地时间轴的功能
- 一些小修复和改进

View File

@@ -0,0 +1,3 @@
版本97的更新内容
- 新增自定义本地时间轴功能。可以在添加时间轴菜单中访问。
- 一些小修复和改进

View File

@@ -0,0 +1 @@
首个Play Store发布版本

View File

@@ -3,6 +3,7 @@ Moshidon 是<a href="https://github.com/mastodon/mastodon-android">官方 Mastod
<b>主要特点</b>
- <b>许多颜色</b>:为您提供 material you 主题和许多丰富多彩的主题选项!
- <b>过滤贴文</b>:可为带过滤内容标记的贴文显示敏感内容警告!
- <b>翻译按钮</b>:带来翻译按钮!
- <b>嘟文语言选择器</b>:引入了嘟文语言选择器!
- <b>不公开发帖</b>:公开发布而不让您的嘟文出现在趋势、主题标签或公共时间轴中。