Compare commits

...

256 Commits

Author SHA1 Message Date
LucasGGamerM
cd749e9c9c feat: rework SettingsCategoryItem, and add visual appearance settings 2023-04-23 12:47:49 -03:00
LucasGGamerM
1d25d80186 Merge remote branch 'FineFindus/feat/settings-redesign' 2023-04-23 12:09:49 -03:00
FineFindus
cdeeb24eac refactor(settings): add red header item 2023-04-23 15:20:57 +02:00
FineFindus
5a5181fde8 refactor(settings): move about to about page 2023-04-23 15:10:47 +02:00
FineFindus
69420b2399 refactor: move account and instance setttings to account page 2023-04-23 15:02:26 +02:00
FineFindus
aaa80f80f1 refactor: move miscellanious settings 2023-04-23 14:50:00 +02:00
FineFindus
9b11fbbbfe refactor: move notifications to NotificationsFragment 2023-04-23 14:45:57 +02:00
FineFindus
57f513048a refactor: move timelines to TimelineFragment 2023-04-23 12:44:40 +02:00
FineFindus
c5e35e550c refactor: add compose behaviour to behaviour page 2023-04-23 12:38:51 +02:00
FineFindus
2751b804fe refactor: move behaviour settings to behaviour page 2023-04-23 12:33:03 +02:00
FineFindus
d310673f92 refactor: use SettingsCategory to move between pages 2023-04-23 12:24:06 +02:00
FineFindus
afca57501f fix: move method to fix compiler error 2023-04-23 12:10:43 +02:00
LucasGGamerM
34443726e2 feat: trying to add the theme settings. Still missing some things
What is an enclosed class? What am I missing?
2023-04-22 23:01:31 -03:00
LucasGGamerM
fc9ffc9aef feat: add settings category view holder
Also adds a small proof of concept
2023-04-22 22:35:39 -03:00
LucasGGamerM
44b1bc70af feat: add all previously missing view holders
This includes: Updater View holder, theme view holder and notification policy view holder
2023-04-22 18:02:54 -03:00
LucasGGamerM
45796000c4 Merge https://github.com/LucasGGamerM/moshidon into HEAD 2023-04-22 17:22:46 -03:00
LucasGGamerM
22febe019b build: update proguard rules for better clarity 2023-04-22 16:29:31 -03:00
LucasGGamerM
e0f4f87086 build: fix missing proguard rules 2023-04-22 16:19:49 -03:00
LucasGGamerM
7917e34568 build: fix on startup crash on nightly release 2023-04-22 15:32:53 -03:00
LucasGGamerM
d7287441ca build: fix compilation errors 2023-04-22 14:47:53 -03:00
LucasGGamerM
5b391b44d3 Merge remote-tracking branch 'megalodon_main/main'
# Conflicts:
#	mastodon/build.gradle
#	mastodon/src/github/AndroidManifest.xml
#	mastodon/src/main/res/values-de-rDE/strings_sk.xml
#	mastodon/src/main/res/values-es-rES/strings_sk.xml
#	mastodon/src/main/res/values-eu-rES/strings_sk.xml
#	mastodon/src/main/res/values-ko-rKR/strings_sk.xml
#	mastodon/src/main/res/values-pl-rPL/strings_sk.xml
#	mastodon/src/main/res/values-uk-rUA/strings_sk.xml
#	metadata/es/changelogs/83.txt
#	metadata/fr/short_description.txt
#	metadata/gl-ES/changelogs/83.txt
2023-04-22 13:53:50 -03:00
LucasGGamerM
fe20fe4254 feat(compose): add automatically mentioning Reblogger functionality
Fixes #173
2023-04-22 13:44:50 -03:00
sk
63e536c66c fix hidden no alt/alt badge remaining clickable
closes sk22#498
2023-04-22 18:20:05 +02:00
Jacoco
b5a08b1b98 Pleroma emoji reaction notifications (#499) 2023-04-22 17:39:41 +02:00
r3g_5z
226e2a7cdc Minor maintenance things (#501)
* validate gradle wrapper jar file

this is extremely important. see the following:

https://blog.gradle.org/wrapper-attack-report
https://github.com/gradle/wrapper-validation-action#the-gradle-wrapper-problem-in-open-source

Signed-off-by: r3g_5z <june@girlboss.ceo>

* update gradle wrapper to 8.1.1

it is necessary to run the gradlew update command twice to actually
update the jar file properly, e.g.:

./gradlew wrapper --gradle-version=8.1.1 --gradle-distribution-sha256-sum=e111cb9948407e26351227dabce49822fb88c37ee72f1d1582a69c68af2e702f
./gradlew wrapper --gradle-version=8.1.1 --gradle-distribution-sha256-sum=e111cb9948407e26351227dabce49822fb88c37ee72f1d1582a69c68af2e702f

Signed-off-by: r3g_5z <june@girlboss.ceo>

* use Gradle toolchain

this allows for better build reproducibility and avoid mix and matching
JDKs from other projects

https://docs.gradle.org/current/userguide/toolchains.html

Signed-off-by: r3g_5z <june@girlboss.ceo>

* update dependencies and fix build errors

Signed-off-by: r3g_5z <june@girlboss.ceo>

---------

Signed-off-by: r3g_5z <june@girlboss.ceo>
Co-authored-by: sk22 <sk22@mailbox.org>
2023-04-22 17:28:16 +02:00
sk
4d7c4aed4c enable nonTransitiveRClass 2023-04-22 16:51:44 +02:00
sk
c9bcd000c3 update gradle 2023-04-22 16:49:42 +02:00
sk22
de42145f30 Translated using Weblate (German)
Currently translated at 100.0% (273 of 273 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/de/
2023-04-22 14:38:25 +00:00
sk
7bcdd6070a boost instead of reblog 2023-04-22 16:38:16 +02:00
sk
8a215e90d0 Merge remote-tracking branch 'weblate/main' 2023-04-22 16:34:11 +02:00
sk
b736fa18bb remove empty french metadata 2023-04-22 16:32:00 +02:00
ihor_ck
43c19e4942 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (273 of 273 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/uk/
2023-04-22 14:30:34 +00:00
Eryk Michalak
ffc18029bb Translated using Weblate (Polish)
Currently translated at 100.0% (273 of 273 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/pl/
2023-04-22 14:30:34 +00:00
Linerly
b88b3d15f8 Translated using Weblate (Indonesian)
Currently translated at 100.0% (273 of 273 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/id/
2023-04-22 14:30:34 +00:00
Choukajohn
c817886a2d Translated using Weblate (French)
Currently translated at 100.0% (273 of 273 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/fr/
2023-04-22 14:30:34 +00:00
gallegonovato
aae239494e Translated using Weblate (Spanish)
Currently translated at 100.0% (273 of 273 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/es/
2023-04-22 14:30:34 +00:00
a_mento
b0b2daa5d5 Translated using Weblate (Basque)
Currently translated at 100.0% (272 of 272 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/eu/
2023-04-22 14:30:34 +00:00
Espasant3
eea2e38f1b Translated using Weblate (Galician)
Currently translated at 100.0% (17 of 17 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/gl/
2023-04-22 14:30:34 +00:00
AiOO
f894ecd25b Translated using Weblate (Korean)
Currently translated at 100.0% (17 of 17 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/ko/
2023-04-22 14:30:34 +00:00
AiOO
e0b6ed7103 Translated using Weblate (Korean)
Currently translated at 100.0% (272 of 272 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ko/
2023-04-22 14:30:34 +00:00
Espasant3
a78e75747a Translated using Weblate (Galician)
Currently translated at 100.0% (17 of 17 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/gl/
2023-04-22 14:30:34 +00:00
ihor_ck
3b25e367bb Translated using Weblate (Ukrainian)
Currently translated at 100.0% (17 of 17 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/uk/
2023-04-22 14:30:34 +00:00
gallegonovato
08b29dff3d Translated using Weblate (Spanish)
Currently translated at 100.0% (17 of 17 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/es/
2023-04-22 14:30:34 +00:00
Choukajohn
2f2e053d26 Translated using Weblate (French)
Currently translated at 17.6% (3 of 17 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/fr/
2023-04-22 14:30:34 +00:00
Pegasus89
191d582c30 Translated using Weblate (Croatian)
Currently translated at 12.5% (2 of 16 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/hr/
2023-04-22 14:30:34 +00:00
Pegasus89
8d3380ff6e Translated using Weblate (Croatian)
Currently translated at 97.4% (265 of 272 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/hr/
2023-04-22 14:30:34 +00:00
AiOO
ba85d18574 Translated using Weblate (Korean)
Currently translated at 100.0% (272 of 272 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ko/
2023-04-22 14:30:34 +00:00
sk22
0f53b17515 Translated using Weblate (Spanish)
Currently translated at 100.0% (272 of 272 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/es/
2023-04-22 14:30:34 +00:00
Anonymous
cb9c869712 Translated using Weblate (Russian)
Currently translated at 92.2% (251 of 272 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ru/
2023-04-22 14:30:34 +00:00
poesty
aa3d9e7b8f Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (272 of 272 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/zh_Hans/
2023-04-22 14:30:34 +00:00
sk
b3a9b5824d fix non-positional subtitution in string 2023-04-22 16:29:41 +02:00
LucasGGamerM
218503a739 Merge remote-tracking branch 'weblate/master' 2023-04-22 09:55:07 -03:00
FineFindus
f2c13ed379 refactor: add abstract settingsbase fragment 2023-04-21 21:17:20 +02:00
FineFindus
fd21b9e568 feat: move Settingsfragment to settings folder 2023-04-21 18:34:00 +02:00
LucasGGamerM
13480ce575 fix(status-display-item): add null check for statusForContent
Fuck java
2023-04-21 12:58:05 -03:00
LucasGGamerM
581ee53f12 Merge pull request #180 from FineFindus/fix/compose-shortcut
fix: compose shortcut contrast
2023-04-21 12:22:33 -03:00
LucasGGamerM
02545f3dd2 Merge pull request #179 from FineFindus/fix/version-name-footer
fix(settings/footer): use footer item
2023-04-21 12:19:58 -03:00
Andrewblasco
37fe0a1145 Translated using Weblate (Spanish)
Currently translated at 100.0% (273 of 273 strings)

Translation: Moshidon/values_sk
Translate-URL: https://translate.codeberg.org/projects/moshidon/values_sk/es/
2023-04-21 13:51:50 +00:00
dontobi
e753eea23f Translated using Weblate (German)
Currently translated at 100.0% (273 of 273 strings)

Translation: Moshidon/values_sk
Translate-URL: https://translate.codeberg.org/projects/moshidon/values_sk/de/
2023-04-21 13:51:50 +00:00
Andrewblasco
9d8cf2dc02 Translated using Weblate (Spanish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/es/
2023-04-21 13:51:50 +00:00
Andrewblasco
de589d1fdf Translated using Weblate (Spanish)
Currently translated at 100.0% (45 of 45 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/es/
2023-04-21 13:51:50 +00:00
dontobi
573872291c Translated using Weblate (German)
Currently translated at 100.0% (45 of 45 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/de/
2023-04-21 13:51:50 +00:00
Oliebol
e4232fb3de Translated using Weblate (Dutch)
Currently translated at 93.4% (255 of 273 strings)

Translation: Moshidon/values_sk
Translate-URL: https://translate.codeberg.org/projects/moshidon/values_sk/nl/
2023-04-21 13:51:50 +00:00
Eryk Michalak
04f805e846 Translated using Weblate (Polish)
Currently translated at 100.0% (45 of 45 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/pl/
2023-04-21 13:51:50 +00:00
Oliebol
ae2769a1b9 Translated using Weblate (Dutch)
Currently translated at 93.3% (42 of 45 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/nl/
2023-04-21 13:51:50 +00:00
gallegonovato
d8d6cd8258 Translated using Weblate (Spanish)
Currently translated at 100.0% (45 of 45 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/es/
2023-04-21 13:51:50 +00:00
LucasGGamerM
8bc395cb16 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (45 of 45 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/pt_BR/
2023-04-21 13:51:50 +00:00
a_mento
6d06c4d740 Translated using Weblate (Basque)
Currently translated at 100.0% (273 of 273 strings)

Translation: Moshidon/values_sk
Translate-URL: https://translate.codeberg.org/projects/moshidon/values_sk/eu/
2023-04-21 13:51:50 +00:00
gallegonovato
fc8784393b Translated using Weblate (Spanish)
Currently translated at 100.0% (273 of 273 strings)

Translation: Moshidon/values_sk
Translate-URL: https://translate.codeberg.org/projects/moshidon/values_sk/es/
2023-04-21 13:51:50 +00:00
Eryk Michalak
ce92ffe6dd Translated using Weblate (Polish)
Currently translated at 100.0% (273 of 273 strings)

Translation: Moshidon/values_sk
Translate-URL: https://translate.codeberg.org/projects/moshidon/values_sk/pl/
2023-04-21 13:51:50 +00:00
Weblate
1953cab173 Added translation using Weblate (Arabic (Algeria)) 2023-04-21 13:51:50 +00:00
FineFindus
2525714bc9 fix(shortcut): use visible colors 2023-04-21 13:41:12 +02:00
FineFindus
debdda5fed fix(settings/footer): use footer item 2023-04-21 13:30:16 +02:00
LucasGGamerM
c4c17e3aea feat(remote-followers): remote constant remoteLookup function on long follower lists
This optimizes the scrolling process, where the dialog now doesnt happen more than once
2023-04-20 20:23:09 -03:00
LucasGGamerM
04699c3684 Merge pull request #175
Feat/settings debug improvement
2023-04-20 17:52:58 -03:00
LucasGGamerM
d78fce92c6 Merge pull request #176
Fix/nightly updater
2023-04-20 17:51:37 -03:00
LucasGGamerM
73a9073ee4 feat(remote-followers): fallback when results from remote server are empty 2023-04-20 15:00:45 -03:00
LucasGGamerM
ef541058c4 feat(for-you): increase corner radius on account card 2023-04-20 14:52:28 -03:00
FineFindus
bf4c905674 feat(settings/debug): add reset action 2023-04-20 17:56:32 +02:00
FineFindus
d256c759ee feat(settings/debug): add open icon to external actions 2023-04-20 17:56:32 +02:00
FineFindus
6b8418845e feat(settings/debug): add action to open app info 2023-04-20 17:56:32 +02:00
FineFindus
47a3834716 fix(settings/debug): typo e-mail → E-Mail 2023-04-20 17:56:32 +02:00
FineFindus
b540729f6b feat(settings/debug): add action to open dev settings 2023-04-20 17:56:32 +02:00
FineFindus
98e24a5285 feat(settings/debug): add copy pref debug action 2023-04-20 17:56:32 +02:00
FineFindus
ec1e850549 feat(settings/version): tap to copy version 2023-04-20 17:56:26 +02:00
sk
b6186a349f update gradle 2023-04-20 16:03:57 +02:00
FineFindus
730aa28979 fix(settings/updater): hide updater if info is null 2023-04-20 15:55:31 +02:00
FineFindus
d15d8a0169 fix(updater/nightly): remove old info when no update is available 2023-04-20 15:51:47 +02:00
FineFindus
6077bf4b55 feat(status): hide boosts on direct privacy 2023-04-20 13:12:55 +02:00
LucasGGamerM
b568dac138 fix(remote-followers): actually fix the infinite loading bug on misskey accounts 2023-04-19 18:46:06 -03:00
LucasGGamerM
2c7df11e84 fix: infinite loading screens when when fetching remote followers on some accounts 2023-04-19 16:58:55 -03:00
LucasGGamerM
29777c2513 fix: fix inconsistencies with the follow button on OnboardingFollowSuggestionsFragment 2023-04-19 16:33:22 -03:00
LucasGGamerM
f70a9cbe3f feat: make follow button consistent with current theme on FollowSuggestions fragment 2023-04-19 16:17:55 -03:00
LucasGGamerM
7bc49aa21c feat: re-add long click press home to open OnboardingFollowSuggestionsFragment
This is also a small redesign, as I like consistency
2023-04-19 16:11:57 -03:00
LucasGGamerM
4d0790dcec fix: fix keyboard moving over edittext views
Merge this @sk22, as its particularly annoying for when editing account roles on a shorter screen
2023-04-19 15:01:21 -03:00
LucasGGamerM
bb7b18e148 style: removing whitespace from function 2023-04-19 14:31:21 -03:00
LucasGGamerM
b7b646f03a feat: add follow button on remote follower lists
NOTE: This doesn't actually load remote relationships, so its always going to be in the "follow" state.
2023-04-18 15:09:14 -03:00
LucasGGamerM
7c59b700da fix: inconsistent true black text colors on account picker dialog 2023-04-18 13:26:21 -03:00
LucasGGamerM
cf64e75e2f fix: inconsistent true black text colors on toolbar menus 2023-04-18 12:09:00 -03:00
LucasGGamerM
e121fccfc1 feat: add an error toast in case remote account lookup fails with new method
I forgot to add it
2023-04-17 16:20:43 -03:00
LucasGGamerM
5a1a2ac9f5 feat: bypass instances which dont allow unauthenticated searches
This bypasses the search function for when an account is searched for, which makes it work with instances like universeodon and many others. This is used for remote lookups of profiles, and it works wonders!
2023-04-17 16:15:55 -03:00
LucasGGamerM
00d6f29285 feat: increase corner radius of auto updater view 2023-04-16 21:39:27 -03:00
LucasGGamerM
a649ea0a00 feat: move some settings around
Make it so that the ones which default to True are always on the top
2023-04-16 21:36:37 -03:00
LucasGGamerM
180cf3c902 feat: add a settings toggle for remote profile lookups
Adds a toggle for the remote followers
2023-04-16 21:29:17 -03:00
LucasGGamerM
ba997903b6 Merge branch 'feature/remote-followers' 2023-04-16 20:10:41 -03:00
LucasGGamerM
8a4231686b Revert "feat(linkSpan/longClick): use share intent istead of copy text"
This reverts commit bcfb63b57c.
This revert is necessary for consistency, as the other links arent long pressable
2023-04-15 20:47:41 -03:00
LucasGGamerM
c1252638c6 Revert "fix: fix auto updater on nightly builds"
This reverts commit 09733f3343.
2023-04-15 18:54:02 -03:00
LucasGGamerM
5515b12fd9 chore: update the nightly builds badge in readme 2023-04-15 13:04:52 -03:00
LucasGGamerM
9fe7ebf3bf chore: update readme to link to nightly builds apk
Using the moshidon-nightly repo to provide nightly builds
2023-04-15 13:03:57 -03:00
LucasGGamerM
09733f3343 fix: fix auto updater on nightly builds
This fixes the fact that it always showed a new update, even after it updated
2023-04-15 12:58:43 -03:00
LucasGGamerM
249dd5c0e5 Revert "fix: maybe fixing the nightly updater issue"
This reverts commit 46398f7bad.
2023-04-15 12:48:57 -03:00
LucasGGamerM
181fa1383b fix: make compose button accent consistent with dark mode
This is due to consistency and better usage of colors
2023-04-15 12:47:09 -03:00
LucasGGamerM
ee1a4edbe1 fix: discrepant colors in account picker 2023-04-15 12:43:07 -03:00
LucasGGamerM
f3081f3f6c Merge branch 'master' of https://github.com/LucasGGamerM/moshidon 2023-04-15 10:46:43 -03:00
LucasGGamerM
6a12708905 fix: make disable marquee setting require a restart 2023-04-15 10:46:16 -03:00
LucasGGamerM
04a8e33385 fix: inconsistent marquee behavior on home timelines. Fixes #147 2023-04-15 10:46:16 -03:00
LucasGGamerM
d79c183685 feat: make yellow theme more yellow 2023-04-15 10:46:16 -03:00
LucasGGamerM
0c6efac46a build: re-enable releases resource shrinking 2023-04-15 10:46:16 -03:00
LucasGGamerM
6a5a506abf fix: make disable marquee setting require a restart 2023-04-14 22:11:47 -03:00
LucasGGamerM
746717a875 fix: inconsistent marquee behavior on home timelines. Fixes #147 2023-04-14 21:59:48 -03:00
LucasGGamerM
e55dd0eaca feat: make yellow theme more yellow 2023-04-14 21:45:36 -03:00
LucasGGamerM
6af22b1f0e refactor: re-enable releases resource shrinking 2023-04-14 19:17:13 -03:00
LucasGGamerM
7d840502d4 Merge branch 'master' of https://github.com/LucasGGamerM/moshidon 2023-04-14 14:28:22 -03:00
LucasGGamerM
665a0176b9 Merge remote-tracking branch 'megalodon_main/main'
# Conflicts:
#	mastodon/build.gradle
#	mastodon/src/main/res/layout/fragment_splash.xml
2023-04-14 14:27:42 -03:00
LucasGGamerM
ef4422828b chore: readd cache 2023-04-14 14:25:59 -03:00
LucasGGamerM
002fc0897c chore: remove cache on workflow builds
This is for maybe making it work again
2023-04-14 14:16:08 -03:00
LucasGGamerM
0a21c90efa chore: change to coretto java distribution on workflow 2023-04-14 14:06:19 -03:00
LucasGGamerM
3df62d2516 Revert "refactor: make nightly build debuggable "
This reverts commit ee18236ec8.
2023-04-14 13:35:49 -03:00
LucasGGamerM
ee18236ec8 refactor: make nightly build debuggable
This is a temporary thing, as for now there is a bug (on theme change crash) that I just cannot reproduce on local builds. Making the nightly build debuggable for now will help debug this problem.
2023-04-14 10:46:19 -03:00
sk
15fcb0e25d fix alt badge padding and margin 2023-04-13 23:17:46 +02:00
sk
2dae662333 fix username displacement in compose 2023-04-13 23:03:07 +02:00
sk
3ad46926f1 Merge remote-tracking branch 'upstream/master' 2023-04-13 21:46:45 +02:00
sk
2385d102ae fix header username displacement 2023-04-13 21:42:43 +02:00
Grishka
0a17ceb984 Merge branch 'l10n_master' 2023-04-12 19:20:42 +03:00
Grishka
4ef18f1f4a Add touch interaction for the SplashFragment art 2023-04-12 19:20:23 +03:00
Grishka
0de227ab9c Use fixed colors for SplashFragment
fixes #561
2023-04-12 18:47:02 +03:00
Eugen Rochko
19cb8703a6 New translations strings.xml (Kabyle) 2023-04-12 17:37:10 +02:00
Eugen Rochko
e18567dd82 New translations strings.xml (Filipino) 2023-04-12 17:37:06 +02:00
Eugen Rochko
bfb3bcdbfb New translations strings.xml (Portuguese, Brazilian) 2023-04-12 17:37:02 +02:00
Eugen Rochko
565cd14d88 New translations strings.xml (Galician) 2023-04-12 17:37:00 +02:00
Eugen Rochko
ebc37eac75 New translations strings.xml (Vietnamese) 2023-04-12 17:36:59 +02:00
Eugen Rochko
c3702db577 New translations strings.xml (Chinese Traditional) 2023-04-12 17:36:59 +02:00
Eugen Rochko
e15c4fa342 New translations strings.xml (Chinese Simplified) 2023-04-12 17:36:58 +02:00
Eugen Rochko
8330b9f1c5 New translations strings.xml (Turkish) 2023-04-12 17:36:57 +02:00
Eugen Rochko
f759150982 New translations strings.xml (Swedish) 2023-04-12 17:36:56 +02:00
Eugen Rochko
6af177b596 New translations strings.xml (Slovenian) 2023-04-12 17:36:55 +02:00
Eugen Rochko
657bb94975 New translations strings.xml (Russian) 2023-04-12 17:36:54 +02:00
Eugen Rochko
3c946212b1 New translations strings.xml (Polish) 2023-04-12 17:36:52 +02:00
Eugen Rochko
b4e80f7fca New translations strings.xml (Norwegian) 2023-04-12 17:36:51 +02:00
Eugen Rochko
c9efc2cb2b New translations strings.xml (Korean) 2023-04-12 17:36:50 +02:00
Eugen Rochko
0d62e33dc7 New translations strings.xml (Japanese) 2023-04-12 17:36:49 +02:00
Eugen Rochko
ac88b9e19c New translations strings.xml (Italian) 2023-04-12 17:36:48 +02:00
Eugen Rochko
871dfda79e New translations strings.xml (Hungarian) 2023-04-12 17:36:47 +02:00
Eugen Rochko
e0c2c208ae New translations strings.xml (Basque) 2023-04-12 17:36:44 +02:00
Eugen Rochko
22ac112bdb New translations strings.xml (German) 2023-04-12 17:36:43 +02:00
Eugen Rochko
afd0cca176 New translations strings.xml (Danish) 2023-04-12 17:36:42 +02:00
Eugen Rochko
c083c8bce5 New translations strings.xml (Arabic) 2023-04-12 17:36:41 +02:00
Eugen Rochko
63bde032b3 New translations strings.xml (French) 2023-04-12 17:36:40 +02:00
Eugen Rochko
49492c0788 New translations strings.xml (Belarusian) 2023-04-12 17:36:38 +02:00
Eugen Rochko
b439c64add New translations strings.xml (Greek) 2023-04-12 17:36:37 +02:00
Eugen Rochko
1868bfe8e3 New translations strings.xml (Thai) 2023-04-12 17:36:36 +02:00
Eugen Rochko
f240a3d996 New translations strings.xml (Indonesian) 2023-04-12 17:36:35 +02:00
Eugen Rochko
788e5bd12e New translations strings.xml (Icelandic) 2023-04-12 17:36:34 +02:00
Eugen Rochko
a55fed4502 New translations strings.xml (Ukrainian) 2023-04-12 17:36:33 +02:00
Eugen Rochko
a8fdaf1a47 New translations strings.xml (Dutch) 2023-04-12 17:36:32 +02:00
Eugen Rochko
4a758bd488 New translations strings.xml (Czech) 2023-04-12 17:36:31 +02:00
Eugen Rochko
2c9731ec2a New translations strings.xml (Spanish) 2023-04-12 17:36:30 +02:00
Grishka
eef33266fc Remove unused code and strings 2023-04-12 18:34:28 +03:00
Eugen Rochko
58d2c3e5a6 New translations strings.xml (Indonesian) 2023-04-11 17:28:22 +02:00
Eugen Rochko
9e6a355db0 New translations strings.xml (Slovenian) 2023-04-10 00:54:45 +02:00
Eugen Rochko
0d10e09fd6 New translations strings.xml (Slovenian) 2023-04-09 23:47:00 +02:00
Eugen Rochko
f85bb995ba New translations strings.xml (Greek) 2023-04-09 17:56:44 +02:00
Eugen Rochko
268e5639f6 New translations strings.xml (Greek) 2023-04-09 16:26:19 +02:00
Eugen Rochko
51809df8ca New translations strings.xml (Thai) 2023-04-09 07:25:51 +02:00
Eugen Rochko
94fb676b0c New translations strings.xml (Chinese Traditional) 2023-04-09 04:29:35 +02:00
Eugen Rochko
a47106594b New translations strings.xml (Chinese Traditional) 2023-04-09 03:10:02 +02:00
Grishka
d93d66f702 Prepare new release 2023-04-09 01:59:13 +03:00
Eugen Rochko
b2f9f7ae54 New translations strings.xml (Italian) 2023-04-09 00:51:05 +02:00
Grishka
de7b908c78 Merge branch 'l10n_master' 2023-04-09 01:50:55 +03:00
Eugen Rochko
75d3c2fdce New translations strings.xml (Italian) 2023-04-08 23:55:36 +02:00
Eugen Rochko
ea1b6c5835 New translations strings.xml (Greek) 2023-04-08 22:51:05 +02:00
Eugen Rochko
cb7887da41 New translations strings.xml (Greek) 2023-04-08 21:38:06 +02:00
Eugen Rochko
a80313ee6b New translations strings.xml (Thai) 2023-04-07 23:53:35 +02:00
Eugen Rochko
e1a821bc43 New translations strings.xml (Thai) 2023-04-07 22:56:50 +02:00
Grishka
924ea2d03a Fix #557 2023-04-07 22:58:04 +03:00
Grishka
55270fe654 Fix 2023-04-07 22:55:29 +03:00
Eugen Rochko
a125fab57b New translations strings.xml (Kabyle) 2023-04-07 21:48:05 +02:00
Eugen Rochko
395ee0aa99 New translations strings.xml (Scottish Gaelic) 2023-04-07 21:48:03 +02:00
Eugen Rochko
0f50fa6ba1 New translations strings.xml (Bosnian) 2023-04-07 21:48:01 +02:00
Eugen Rochko
adb7df3c71 New translations strings.xml (Filipino) 2023-04-07 21:48:00 +02:00
Eugen Rochko
5d7bcb629b New translations strings.xml (Burmese) 2023-04-07 21:47:59 +02:00
Eugen Rochko
a00f1417d2 New translations strings.xml (Hindi) 2023-04-07 21:47:59 +02:00
Eugen Rochko
8efd7e8ebf New translations strings.xml (Croatian) 2023-04-07 21:47:58 +02:00
Eugen Rochko
b016d277e0 New translations strings.xml (Bengali) 2023-04-07 21:47:57 +02:00
Eugen Rochko
fdb39617d1 New translations strings.xml (Persian) 2023-04-07 21:47:56 +02:00
Eugen Rochko
89f83fbf62 New translations strings.xml (Portuguese, Brazilian) 2023-04-07 21:47:55 +02:00
Eugen Rochko
ecee9e01a6 New translations strings.xml (Galician) 2023-04-07 21:47:54 +02:00
Eugen Rochko
20dc9bb8b9 New translations strings.xml (Vietnamese) 2023-04-07 21:47:53 +02:00
Eugen Rochko
2c47d0e9ed New translations strings.xml (Chinese Traditional) 2023-04-07 21:47:52 +02:00
Eugen Rochko
8e13d52e51 New translations strings.xml (Chinese Simplified) 2023-04-07 21:47:51 +02:00
Eugen Rochko
cc40198c9e New translations strings.xml (Turkish) 2023-04-07 21:47:50 +02:00
Eugen Rochko
290897ea41 New translations strings.xml (Swedish) 2023-04-07 21:47:49 +02:00
Eugen Rochko
b9e1c84304 New translations strings.xml (Slovenian) 2023-04-07 21:47:48 +02:00
Eugen Rochko
3c44c80e2e New translations strings.xml (Russian) 2023-04-07 21:47:47 +02:00
Eugen Rochko
dffa4e4594 New translations strings.xml (Portuguese) 2023-04-07 21:47:46 +02:00
Eugen Rochko
fa2d9fec58 New translations strings.xml (Polish) 2023-04-07 21:47:45 +02:00
Eugen Rochko
09c1a2cfa0 New translations strings.xml (Norwegian) 2023-04-07 21:47:44 +02:00
Eugen Rochko
d1f90eb231 New translations strings.xml (Korean) 2023-04-07 21:47:42 +02:00
Eugen Rochko
1f7d97134b New translations strings.xml (Japanese) 2023-04-07 21:47:42 +02:00
Eugen Rochko
79be91784d New translations strings.xml (Italian) 2023-04-07 21:47:41 +02:00
Eugen Rochko
de2654def3 New translations strings.xml (Hungarian) 2023-04-07 21:47:39 +02:00
Eugen Rochko
56343dacff New translations strings.xml (Hebrew) 2023-04-07 21:47:38 +02:00
Eugen Rochko
0e677f8ce7 New translations strings.xml (Basque) 2023-04-07 21:47:36 +02:00
Eugen Rochko
aa911896d6 New translations strings.xml (German) 2023-04-07 21:47:35 +02:00
Eugen Rochko
c62a8635b9 New translations strings.xml (Danish) 2023-04-07 21:47:34 +02:00
Eugen Rochko
4e900247c5 New translations strings.xml (Catalan) 2023-04-07 21:47:33 +02:00
Eugen Rochko
b3bd62bc6c New translations strings.xml (Arabic) 2023-04-07 21:47:32 +02:00
Eugen Rochko
8e5fd48ecd New translations strings.xml (French) 2023-04-07 21:47:31 +02:00
Eugen Rochko
b2bca9dd2c New translations strings.xml (Romanian) 2023-04-07 21:47:30 +02:00
Eugen Rochko
b8c0dc3181 New translations strings.xml (Belarusian) 2023-04-07 21:47:29 +02:00
Eugen Rochko
cccdc5292e New translations strings.xml (Greek) 2023-04-07 21:47:28 +02:00
Eugen Rochko
76d77a0e7a New translations strings.xml (Thai) 2023-04-07 21:47:27 +02:00
Eugen Rochko
e737f4bf9a New translations strings.xml (Indonesian) 2023-04-07 21:47:26 +02:00
Eugen Rochko
391db2f1c9 New translations strings.xml (Icelandic) 2023-04-07 21:47:25 +02:00
Eugen Rochko
359d61183c New translations strings.xml (Ukrainian) 2023-04-07 21:47:24 +02:00
Eugen Rochko
46fd05d88e New translations strings.xml (Dutch) 2023-04-07 21:47:23 +02:00
Eugen Rochko
cde22a0945 New translations strings.xml (Czech) 2023-04-07 21:47:22 +02:00
Eugen Rochko
111b7e25c5 New translations strings.xml (Spanish) 2023-04-07 21:47:21 +02:00
Grishka
4f8d8f0c8d Welcome fragment redesign again
# Conflicts:
#	mastodon/src/main/res/values/strings.xml
#	mastodon/src/main/res/values/styles.xml
2023-04-07 22:44:28 +03:00
Grishka
915b0603d0 Reblog -> boost 2023-04-07 22:42:16 +03:00
Eugen Rochko
075aab8074 New translations strings.xml (Greek) 2023-04-07 16:16:35 +02:00
Eugen Rochko
6ebe4c86af New translations strings.xml (Greek) 2023-04-07 15:16:19 +02:00
Eugen Rochko
0925c8c582 New translations strings.xml (Spanish) 2023-04-06 21:52:50 +02:00
Eugen Rochko
a683fdce62 New translations strings.xml (Greek) 2023-04-06 18:46:34 +02:00
Eugen Rochko
b958299446 New translations strings.xml (Greek) 2023-04-06 17:45:19 +02:00
Eugen Rochko
3f80be8377 New translations strings.xml (Greek) 2023-04-05 16:29:26 +02:00
Eugen Rochko
ced0accde5 New translations strings.xml (Belarusian) 2023-04-05 12:06:47 +02:00
Eugen Rochko
b454ff5ec7 New translations strings.xml (Belarusian) 2023-04-05 11:07:06 +02:00
Eugen Rochko
45af198f32 New translations strings.xml (Greek) 2023-04-05 02:04:08 +02:00
Eugen Rochko
ff374f8899 New translations strings.xml (Greek) 2023-04-05 00:46:17 +02:00
Eugen Rochko
faecb3bc4b New translations strings.xml (Greek) 2023-04-04 20:21:01 +02:00
Eugen Rochko
6b893fadef New translations short_description.txt (Greek) 2023-04-04 17:47:01 +02:00
Eugen Rochko
c328467a41 New translations strings.xml (Greek) 2023-04-04 17:47:00 +02:00
Eugen Rochko
182325470b New translations full_description.txt (Greek) 2023-04-04 17:46:59 +02:00
Eugen Rochko
f330ad71ac New translations full_description.txt (Greek) 2023-04-04 16:06:32 +02:00
Eugen Rochko
ba0c064f36 New translations full_description.txt (Chinese Traditional) 2023-04-03 16:47:01 +02:00
Eugen Rochko
8d7aaee5b9 New translations strings.xml (Dutch) 2023-04-01 15:16:39 +02:00
Eugen Rochko
68cba2de63 New translations strings.xml (Icelandic) 2023-03-29 00:29:42 +02:00
Eugen Rochko
5a914f9c0e New translations strings.xml (Thai) 2023-03-28 21:06:33 +02:00
Eugen Rochko
b0e6805a20 New translations strings.xml (Czech) 2023-03-28 16:34:35 +02:00
Eugen Rochko
21e7e44c01 New translations strings.xml (Czech) 2023-03-28 15:36:30 +02:00
Eugen Rochko
f7df4abdae New translations strings.xml (Spanish) 2023-03-26 17:05:29 +02:00
Eugen Rochko
7674ceefe9 New translations strings.xml (Ukrainian) 2023-03-25 20:42:18 +01:00
Eugen Rochko
4be575c534 New translations strings.xml (Ukrainian) 2023-03-25 19:25:16 +01:00
Eugen Rochko
dd0f0a7d5a New translations strings.xml (Indonesian) 2023-03-25 04:22:02 +01:00
Eugen Rochko
759b44c224 New translations strings.xml (Indonesian) 2023-03-25 03:16:02 +01:00
154 changed files with 3422 additions and 1119 deletions

View File

@@ -15,7 +15,7 @@ jobs:
uses: actions/setup-java@v3 uses: actions/setup-java@v3
with: with:
java-version: '17' java-version: '17'
distribution: 'temurin' distribution: 'corretto'
cache: gradle cache: gradle
- name: Get current date - name: Get current date

View File

@@ -0,0 +1,11 @@
name: Validate Gradle Wrapper
on: [pull_request, push]
jobs:
validation:
name: Validation
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: gradle/wrapper-validation-action@v1

View File

@@ -7,12 +7,12 @@
[![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)
[![Download nightly release](https://img.shields.io/badge/dynamic/json?color=282C37&label=Download%20Nightly%20APK&query=%24.tag_name&url=https%3A%2F%2Fapi.github.com%2Frepos%2FLucasGGamerM%2Fmoshidon%2Freleases%2Flatest&style=for-the-badge)](https://nightly.link/LucasGGamerM/moshidon/workflows/nightly-builds/master/moshidon-nightly.apk.zip) [![Download nightly release](https://img.shields.io/badge/dynamic/json?color=282C37&label=Download%20Nightly%20APK&query=%24.tag_name&url=https%3A%2F%2Fapi.github.com%2Frepos%2FLucasGGamerM%2Fmoshidon%2Freleases%2Flatest&style=for-the-badge)](https://github.com/LucasGGamerM/moshidon-nightly/releases/latest/download/moshidon-nightly.apk)
[![Translation status](https://translate.codeberg.org/widgets/moshidon/-/svg-badge.svg)](https://translate.codeberg.org/engage/moshidon/) [![Translation status](https://translate.codeberg.org/widgets/moshidon/-/svg-badge.svg)](https://translate.codeberg.org/engage/moshidon/)
&nbsp; &nbsp;
[![Nightly build](https://github.com/LucasGGamerM/moshidon/actions/workflows/nightly-builds.yml/badge.svg)](https://github.com/LucasGGamerM/moshidon/actions/workflows/android.yml) [![Nightly build](https://github.com/LucasGGamerM/moshidon/actions/workflows/nightly-builds.yml/badge.svg)](https://github.com/LucasGGamerM/moshidon/actions/workflows/nightly-builds.yml)
<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> <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; &nbsp;

View File

@@ -5,7 +5,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:7.3.1' classpath 'com.android.tools.build:gradle:8.0.0'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files
} }

View File

@@ -16,4 +16,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# https://developer.android.com/topic/libraries/support-library/androidx-rn # https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX # Automatically convert third-party libraries to use AndroidX
android.enableJetifier=false android.enableJetifier=false
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=true
android.nonFinalResIds=false

Binary file not shown.

View File

@@ -1,6 +1,7 @@
#Thu Jan 13 11:33:43 MSK 2022
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStorePath=wrapper/dists distributionSha256Sum=e111cb9948407e26351227dabce49822fb88c37ee72f1d1582a69c68af2e702f
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

288
gradlew vendored
View File

@@ -1,7 +1,7 @@
#!/usr/bin/env sh #!/bin/sh
# #
# Copyright 2015 the original author or authors. # Copyright © 2015-2021 the original authors.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@@ -17,67 +17,98 @@
# #
############################################################################## ##############################################################################
## #
## Gradle start up script for UN*X # Gradle start up script for POSIX generated by Gradle.
## #
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
############################################################################## ##############################################################################
# Attempt to set APP_HOME # Attempt to set APP_HOME
# Resolve links: $0 may be a link # Resolve links: $0 may be a link
PRG="$0" app_path=$0
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do # Need this for daisy-chained symlinks.
ls=`ls -ld "$PRG"` while
link=`expr "$ls" : '.*-> \(.*\)$'` APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
if expr "$link" : '/.*' > /dev/null; then [ -h "$app_path" ]
PRG="$link" do
else ls=$( ls -ld "$app_path" )
PRG=`dirname "$PRG"`"/$link" link=${ls#*' -> '}
fi case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle" # This is normally unused
APP_BASE_NAME=`basename "$0"` # shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum" MAX_FD=maximum
warn () { warn () {
echo "$*" echo "$*"
} } >&2
die () { die () {
echo echo
echo "$*" echo "$*"
echo echo
exit 1 exit 1
} } >&2
# OS specific support (must be 'true' or 'false'). # OS specific support (must be 'true' or 'false').
cygwin=false cygwin=false
msys=false msys=false
darwin=false darwin=false
nonstop=false nonstop=false
case "`uname`" in case "$( uname )" in #(
CYGWIN* ) CYGWIN* ) cygwin=true ;; #(
cygwin=true Darwin* ) darwin=true ;; #(
;; MSYS* | MINGW* ) msys=true ;; #(
Darwin* ) NONSTOP* ) nonstop=true ;;
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@@ -87,9 +118,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
if [ -n "$JAVA_HOME" ] ; then if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables # IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java" JAVACMD=$JAVA_HOME/jre/sh/java
else else
JAVACMD="$JAVA_HOME/bin/java" JAVACMD=$JAVA_HOME/bin/java
fi fi
if [ ! -x "$JAVACMD" ] ; then if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -98,7 +129,7 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation." location of your Java installation."
fi fi
else else
JAVACMD="java" JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the Please set the JAVA_HOME variable in your environment to match the
@@ -106,80 +137,109 @@ location of your Java installation."
fi fi
# Increase the maximum file descriptors if we can. # Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
MAX_FD_LIMIT=`ulimit -H -n` case $MAX_FD in #(
if [ $? -eq 0 ] ; then max*)
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
MAX_FD="$MAX_FD_LIMIT" # shellcheck disable=SC3045
fi MAX_FD=$( ulimit -H -n ) ||
ulimit -n $MAX_FD warn "Could not query maximum file descriptor limit"
if [ $? -ne 0 ] ; then esac
warn "Could not set maximum file descriptor limit: $MAX_FD" case $MAX_FD in #(
fi '' | soft) :;; #(
else *)
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
fi # shellcheck disable=SC3045
fi ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac esac
fi fi
# Escape application args # Collect all arguments for the java command, stacking in reverse order:
save () { # * args from the command line
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done # * the main class name
echo " " # * -classpath
} # * -D...appname settings
APP_ARGS=`save "$@"` # * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# Collect all arguments for the java command, following the shell quoting and substitution rules # For Cygwin or MSYS, switch paths to Windows format before running java
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@" exec "$JAVACMD" "$@"

15
gradlew.bat vendored
View File

@@ -14,7 +14,7 @@
@rem limitations under the License. @rem limitations under the License.
@rem @rem
@if "%DEBUG%" == "" @echo off @if "%DEBUG%"=="" @echo off
@rem ########################################################################## @rem ##########################################################################
@rem @rem
@rem Gradle startup script for Windows @rem Gradle startup script for Windows
@@ -25,7 +25,8 @@
if "%OS%"=="Windows_NT" setlocal if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0 set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=. if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% set APP_HOME=%DIRNAME%
@@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute if %ERRORLEVEL% equ 0 goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd if %ERRORLEVEL% equ 0 goto mainEnd
:fail :fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code! rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 set EXIT_CODE=%ERRORLEVEL%
exit /b 1 if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd :mainEnd
if "%OS%"=="Windows_NT" endlocal if "%OS%"=="Windows_NT" endlocal

View File

@@ -2,6 +2,12 @@ plugins {
id 'com.android.application' id 'com.android.application'
} }
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
android { android {
compileSdk 33 compileSdk 33
defaultConfig { defaultConfig {
@@ -13,8 +19,8 @@ android {
versionCode 99 versionCode 99
versionName "1.2.0+fork.99.moshinda" versionName "1.2.0+fork.99.moshinda"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 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" resourceConfigurations += ['ar-rSA', 'ar-rDZ', 'be-rBY', 'bn-rBD', 'bs-rBA', 'ca-rES', 'cs-rCZ', 'da-rDK', 'de-rDE', 'el-rGR', 'es-rES', 'eu-rES', 'fa-rIR', 'fi-rFI', 'fil-rPH', 'fr-rFR', 'ga-rIE', 'gd-rGB', 'gl-rES', 'hi-rIN', 'hr-rHR', 'hu-rHU', 'hy-rAM', 'ig-rNG', 'in-rID', 'is-rIS', 'it-rIT', 'iw-rIL', 'ja-rJP', 'kab', 'ko-rKR', 'my-rMM', 'nl-rNL', 'no-rNO', 'oc-rFR', 'pl-rPL', 'pt-rBR', 'pt-rPT', 'ro-rRO', 'ru-rRU', 'si-rLK', 'sl-rSI', 'sv-rSE', 'th-rTH', 'tr-rTR', 'uk-rUA', 'ur-rIN', 'vi-rVN', 'zh-rCN', 'zh-rTW']
} }
signingConfigs { signingConfigs {
nightly{ nightly{
@@ -42,8 +48,8 @@ android {
buildTypes { buildTypes {
release { release {
// minifyEnabled true minifyEnabled true
// shrinkResources true shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
debug{ debug{
@@ -88,14 +94,19 @@ android {
setRoot "src/github" setRoot "src/github"
} }
} }
lintOptions{ namespace 'org.joinmastodon.android'
checkReleaseBuilds false lint {
abortOnError false abortOnError false
checkReleaseBuilds false
}
buildFeatures {
buildConfig true
} }
} }
dependencies { dependencies {
api 'androidx.annotation:annotation:1.3.0' api 'androidx.annotation:annotation:1.6.0'
implementation 'com.squareup.okhttp3:okhttp:3.14.9' implementation 'com.squareup.okhttp3:okhttp:3.14.9'
implementation 'me.grishka.litex:recyclerview:1.2.1.1' implementation 'me.grishka.litex:recyclerview:1.2.1.1'
implementation 'me.grishka.litex:swiperefreshlayout:1.1.0.1' implementation 'me.grishka.litex:swiperefreshlayout:1.1.0.1'
@@ -104,7 +115,7 @@ dependencies {
implementation 'me.grishka.litex:viewpager:1.0.0' implementation 'me.grishka.litex:viewpager:1.0.0'
implementation 'me.grishka.litex:viewpager2:1.0.0' implementation 'me.grishka.litex:viewpager2:1.0.0'
implementation 'me.grishka.appkit:appkit:1.2.7' implementation 'me.grishka.appkit:appkit:1.2.7'
implementation 'com.google.code.gson:gson:2.8.9' implementation 'com.google.code.gson:gson:2.9.0'
implementation 'org.jsoup:jsoup:1.14.3' implementation 'org.jsoup:jsoup:1.14.3'
implementation 'com.squareup:otto:1.3.8' implementation 'com.squareup:otto:1.3.8'
implementation 'de.psdev:async-otto:1.0.3' implementation 'de.psdev:async-otto:1.0.3'

View File

@@ -42,6 +42,13 @@
-keepattributes LineNumberTable -keepattributes LineNumberTable
-keepattributes *
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken
#-keep class javax.** { *; }
-keep class org.joinmastodon.android.** { *; }
# Parceler library # Parceler library
-keep interface org.parceler.Parcel -keep interface org.parceler.Parcel
-keep @org.parceler.Parcel class * { *; } -keep @org.parceler.Parcel class * { *; }

View File

@@ -31,6 +31,7 @@
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/Theme.Mastodon.AutoLightDark" android:theme="@style/Theme.Mastodon.AutoLightDark"
android:windowSoftInputMode="adjustPan"
android:largeHeap="true"> android:largeHeap="true">
<activity android:name=".MainActivity" android:exported="true" android:configChanges="orientation|screenSize" android:windowSoftInputMode="adjustResize" android:launchMode="singleTask"> <activity android:name=".MainActivity" android:exported="true" android:configChanges="orientation|screenSize" android:windowSoftInputMode="adjustResize" android:launchMode="singleTask">

View File

@@ -54,6 +54,7 @@ public class GlobalUserPreferences{
public static boolean replyLineAboveHeader; public static boolean replyLineAboveHeader;
public static boolean swapBookmarkWithBoostAction; public static boolean swapBookmarkWithBoostAction;
public static boolean loadRemoteAccountFollowers; public static boolean loadRemoteAccountFollowers;
public static boolean mentionRebloggerAutomatically;
public static String publishButtonText; public static String publishButtonText;
public static ThemePreference theme; public static ThemePreference theme;
public static ColorPreference color; public static ColorPreference color;
@@ -122,6 +123,7 @@ public class GlobalUserPreferences{
confirmBeforeReblog=prefs.getBoolean("confirmBeforeReblog", false); confirmBeforeReblog=prefs.getBoolean("confirmBeforeReblog", false);
swapBookmarkWithBoostAction=prefs.getBoolean("swapBookmarkWithBoostAction", false); swapBookmarkWithBoostAction=prefs.getBoolean("swapBookmarkWithBoostAction", false);
loadRemoteAccountFollowers=prefs.getBoolean("loadRemoteAccountFollowers", true); loadRemoteAccountFollowers=prefs.getBoolean("loadRemoteAccountFollowers", true);
mentionRebloggerAutomatically=prefs.getBoolean("mentionRebloggerAutomatically", false);
publishButtonText=prefs.getString("publishButtonText", ""); publishButtonText=prefs.getString("publishButtonText", "");
theme=ThemePreference.values()[prefs.getInt("theme", 0)]; theme=ThemePreference.values()[prefs.getInt("theme", 0)];
recentLanguages=fromJson(prefs.getString("recentLanguages", "{}"), recentLanguagesType, new HashMap<>()); recentLanguages=fromJson(prefs.getString("recentLanguages", "{}"), recentLanguagesType, new HashMap<>());
@@ -181,6 +183,7 @@ public class GlobalUserPreferences{
.putBoolean("confirmBeforeReblog", confirmBeforeReblog) .putBoolean("confirmBeforeReblog", confirmBeforeReblog)
.putBoolean("swapBookmarkWithBoostAction", swapBookmarkWithBoostAction) .putBoolean("swapBookmarkWithBoostAction", swapBookmarkWithBoostAction)
.putBoolean("loadRemoteAccountFollowers", loadRemoteAccountFollowers) .putBoolean("loadRemoteAccountFollowers", loadRemoteAccountFollowers)
.putBoolean("mentionRebloggerAutomatically", mentionRebloggerAutomatically)
.putInt("theme", theme.ordinal()) .putInt("theme", theme.ordinal())
.putString("color", color.name()) .putString("color", color.name())
.putString("recentLanguages", gson.toJson(recentLanguages)) .putString("recentLanguages", gson.toJson(recentLanguages))

View File

@@ -5,8 +5,6 @@ import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import org.joinmastodon.android.R;
import me.grishka.appkit.api.ErrorResponse; import me.grishka.appkit.api.ErrorResponse;
public class MastodonErrorResponse extends ErrorResponse{ public class MastodonErrorResponse extends ErrorResponse{
@@ -22,7 +20,7 @@ public class MastodonErrorResponse extends ErrorResponse{
@Override @Override
public void bindErrorView(View view){ public void bindErrorView(View view){
TextView text=view.findViewById(R.id.error_text); TextView text=view.findViewById(me.grishka.appkit.R.id.error_text);
text.setText(error); text.setText(error);
} }

View File

@@ -731,6 +731,8 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
String ownID=AccountSessionManager.getInstance().getAccount(accountID).self.id; String ownID=AccountSessionManager.getInstance().getAccount(accountID).self.id;
if(!status.account.id.equals(ownID)) if(!status.account.id.equals(ownID))
mentions.add('@'+status.account.acct); mentions.add('@'+status.account.acct);
if(status.rebloggedBy != null && GlobalUserPreferences.mentionRebloggerAutomatically)
mentions.add('@'+status.rebloggedBy.acct);
for(Mention mention:status.mentions){ for(Mention mention:status.mentions){
if(mention.id.equals(ownID)) if(mention.id.equals(ownID))
continue; continue;
@@ -1602,7 +1604,8 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
if(att.isUploadingOrProcessing()) if(att.isUploadingOrProcessing())
att.cancelUpload(); att.cancelUpload();
attachments.remove(att); attachments.remove(att);
uploadNextQueuedAttachment(); if(!areThereAnyUploadingAttachments())
uploadNextQueuedAttachment();
attachmentsView.removeView(att.view); attachmentsView.removeView(att.view);
if(getMediaAttachmentsCount()==0) if(getMediaAttachmentsCount()==0)
attachmentsView.setVisibility(View.GONE); attachmentsView.setVisibility(View.GONE);

View File

@@ -31,7 +31,9 @@ import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.events.AllNotificationsSeenEvent; import org.joinmastodon.android.events.AllNotificationsSeenEvent;
import org.joinmastodon.android.events.NotificationReceivedEvent; import org.joinmastodon.android.events.NotificationReceivedEvent;
import org.joinmastodon.android.fragments.discover.DiscoverAccountsFragment;
import org.joinmastodon.android.fragments.discover.DiscoverFragment; import org.joinmastodon.android.fragments.discover.DiscoverFragment;
import org.joinmastodon.android.fragments.onboarding.OnboardingFollowSuggestionsFragment;
import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.model.Instance; import org.joinmastodon.android.model.Instance;
import org.joinmastodon.android.model.Notification; import org.joinmastodon.android.model.Notification;
@@ -50,6 +52,7 @@ import androidx.annotation.Nullable;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import me.grishka.appkit.FragmentStackActivity; import me.grishka.appkit.FragmentStackActivity;
import me.grishka.appkit.Nav;
import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.Callback;
import me.grishka.appkit.api.ErrorResponse; import me.grishka.appkit.api.ErrorResponse;
import me.grishka.appkit.fragments.AppKitFragment; import me.grishka.appkit.fragments.AppKitFragment;
@@ -116,7 +119,7 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
content.setOrientation(LinearLayout.VERTICAL); content.setOrientation(LinearLayout.VERTICAL);
FrameLayout fragmentContainer=new FrameLayout(getActivity()); FrameLayout fragmentContainer=new FrameLayout(getActivity());
fragmentContainer.setId(R.id.fragment_wrap); fragmentContainer.setId(me.grishka.appkit.R.id.fragment_wrap);
content.addView(fragmentContainer, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f)); content.addView(fragmentContainer, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f));
inflater.inflate(R.layout.tab_bar, content); inflater.inflate(R.layout.tab_bar, content);
@@ -140,10 +143,10 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
if(savedInstanceState==null){ if(savedInstanceState==null){
getChildFragmentManager().beginTransaction() getChildFragmentManager().beginTransaction()
.add(R.id.fragment_wrap, homeTabFragment) .add(me.grishka.appkit.R.id.fragment_wrap, homeTabFragment)
.add(R.id.fragment_wrap, searchFragment).hide(searchFragment) .add(me.grishka.appkit.R.id.fragment_wrap, searchFragment).hide(searchFragment)
.add(R.id.fragment_wrap, notificationsFragment).hide(notificationsFragment) .add(me.grishka.appkit.R.id.fragment_wrap, notificationsFragment).hide(notificationsFragment)
.add(R.id.fragment_wrap, profileFragment).hide(profileFragment) .add(me.grishka.appkit.R.id.fragment_wrap, profileFragment).hide(profileFragment)
.commit(); .commit();
@@ -304,6 +307,11 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
searchFragment.selectSearch(); searchFragment.selectSearch();
return true; return true;
} }
if(tab==R.id.tab_home){
Bundle args=new Bundle();
args.putString("account", accountID);
Nav.go(getActivity(), OnboardingFollowSuggestionsFragment.class, args);
}
return false; return false;
} }

View File

@@ -1,7 +1,6 @@
package org.joinmastodon.android.fragments; package org.joinmastodon.android.fragments;
import static org.joinmastodon.android.GlobalUserPreferences.reduceMotion; import static org.joinmastodon.android.GlobalUserPreferences.reduceMotion;
import static org.joinmastodon.android.GlobalUserPreferences.showNewPostsButton;
import android.animation.Animator; import android.animation.Animator;
import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter;
@@ -47,6 +46,8 @@ import org.joinmastodon.android.events.HashtagUpdatedEvent;
import org.joinmastodon.android.events.ListDeletedEvent; import org.joinmastodon.android.events.ListDeletedEvent;
import org.joinmastodon.android.events.ListUpdatedCreatedEvent; import org.joinmastodon.android.events.ListUpdatedCreatedEvent;
import org.joinmastodon.android.events.SelfUpdateStateChangedEvent; import org.joinmastodon.android.events.SelfUpdateStateChangedEvent;
import org.joinmastodon.android.fragments.settings.SettingsFragment;
import org.joinmastodon.android.fragments.settings.SettingsMainFragment;
import org.joinmastodon.android.model.Announcement; import org.joinmastodon.android.model.Announcement;
import org.joinmastodon.android.model.Hashtag; import org.joinmastodon.android.model.Hashtag;
import org.joinmastodon.android.model.HeaderPaginationList; import org.joinmastodon.android.model.HeaderPaginationList;
@@ -113,6 +114,10 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab
fragments = new Fragment[count]; fragments = new Fragment[count];
tabViews = new FrameLayout[count]; tabViews = new FrameLayout[count];
timelines = new TimelineDefinition[count]; timelines = new TimelineDefinition[count];
if(GlobalUserPreferences.disableMarquee){
setTitleMarqueeEnabled(false);
setSubtitleMarqueeEnabled(false);
}
} }
@Override @Override
@@ -458,7 +463,7 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab
getToolbar().post(() -> overflowPopup.show()); getToolbar().post(() -> overflowPopup.show());
return true; return true;
} else if (id == R.id.settings || id == R.id.settings_action) { } else if (id == R.id.settings || id == R.id.settings_action) {
Nav.go(getActivity(), SettingsFragment.class, args); Nav.go(getActivity(), SettingsMainFragment.class, args);
} else if (id == R.id.announcements || id == R.id.announcements_action) { } else if (id == R.id.announcements || id == R.id.announcements_action) {
Nav.goForResult(getActivity(), AnnouncementsFragment.class, args, ANNOUNCEMENTS_RESULT, this); Nav.goForResult(getActivity(), AnnouncementsFragment.class, args, ANNOUNCEMENTS_RESULT, this);
} else if (id == R.id.edit_timelines) { } else if (id == R.id.edit_timelines) {

View File

@@ -16,6 +16,7 @@ import org.joinmastodon.android.events.PollUpdatedEvent;
import org.joinmastodon.android.events.RemoveAccountPostsEvent; import org.joinmastodon.android.events.RemoveAccountPostsEvent;
import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.model.CacheablePaginatedResponse; import org.joinmastodon.android.model.CacheablePaginatedResponse;
import org.joinmastodon.android.model.Emoji;
import org.joinmastodon.android.model.Filter; import org.joinmastodon.android.model.Filter;
import org.joinmastodon.android.model.Notification; import org.joinmastodon.android.model.Notification;
import org.joinmastodon.android.model.PaginatedResponse; import org.joinmastodon.android.model.PaginatedResponse;
@@ -24,6 +25,7 @@ import org.joinmastodon.android.ui.displayitems.AccountCardStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.HeaderStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.HeaderStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem; import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem;
import org.joinmastodon.android.ui.text.HtmlParser;
import org.joinmastodon.android.ui.utils.DiscoverInfoBannerHelper; import org.joinmastodon.android.ui.utils.DiscoverInfoBannerHelper;
import org.joinmastodon.android.ui.utils.InsetStatusItemDecoration; import org.joinmastodon.android.ui.utils.InsetStatusItemDecoration;
import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.utils.UiUtils;
@@ -88,6 +90,13 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
protected List<StatusDisplayItem> buildDisplayItems(Notification n){ protected List<StatusDisplayItem> buildDisplayItems(Notification n){
Account reportTarget = n.report == null ? null : n.report.targetAccount == null ? null : Account reportTarget = n.report == null ? null : n.report.targetAccount == null ? null :
n.report.targetAccount; n.report.targetAccount;
Emoji emoji = new Emoji();
if(n.emojiUrl!=null){
emoji.shortcode=n.emoji.substring(1,n.emoji.length()-1);
emoji.url=n.emojiUrl;
emoji.staticUrl=n.emojiUrl;
emoji.visibleInPicker=false;
}
String extraText=switch(n.type){ String extraText=switch(n.type){
case FOLLOW -> getString(R.string.user_followed_you); case FOLLOW -> getString(R.string.user_followed_you);
case FOLLOW_REQUEST -> getString(R.string.user_sent_follow_request); case FOLLOW_REQUEST -> getString(R.string.user_sent_follow_request);
@@ -98,8 +107,9 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
case UPDATE -> getString(R.string.sk_post_edited); case UPDATE -> getString(R.string.sk_post_edited);
case SIGN_UP -> getString(R.string.sk_signed_up); case SIGN_UP -> getString(R.string.sk_signed_up);
case REPORT -> getString(R.string.sk_reported); case REPORT -> getString(R.string.sk_reported);
case EMOJI_REACTION -> getString(R.string.sk_reacted, n.emoji);
}; };
HeaderStatusDisplayItem titleItem=extraText!=null ? new HeaderStatusDisplayItem(n.id, n.account, n.createdAt, this, accountID, n.status, extraText, n, null) : null; HeaderStatusDisplayItem titleItem=extraText!=null ? new HeaderStatusDisplayItem(n.id, n.account, n.createdAt, this, accountID, n.status, n.emojiUrl!=null ? HtmlParser.parseCustomEmoji(extraText, Collections.singletonList(emoji)) : extraText, n, null) : null;
if(n.status!=null){ if(n.status!=null){
ArrayList<StatusDisplayItem> items=StatusDisplayItem.buildItems(this, n.status, accountID, n, knownAccounts, titleItem!=null, titleItem==null, n, false, Filter.FilterContext.NOTIFICATIONS); ArrayList<StatusDisplayItem> items=StatusDisplayItem.buildItems(this, n.status, accountID, n, knownAccounts, titleItem!=null, titleItem==null, n, false, Filter.FilterContext.NOTIFICATIONS);
if(titleItem!=null) if(titleItem!=null)

View File

@@ -402,7 +402,7 @@ public class ProfileAboutFragment extends Fragment implements WindowInsetsAwareF
public void onSelectedChanged(@Nullable RecyclerView.ViewHolder viewHolder, int actionState){ public void onSelectedChanged(@Nullable RecyclerView.ViewHolder viewHolder, int actionState){
super.onSelectedChanged(viewHolder, actionState); super.onSelectedChanged(viewHolder, actionState);
if(actionState==ItemTouchHelper.ACTION_STATE_DRAG){ if(actionState==ItemTouchHelper.ACTION_STATE_DRAG){
viewHolder.itemView.setTag(R.id.item_touch_helper_previous_elevation, viewHolder.itemView.getElevation()); // prevents the default behavior of changing elevation in onDraw() viewHolder.itemView.setTag(me.grishka.appkit.R.id.item_touch_helper_previous_elevation, viewHolder.itemView.getElevation()); // prevents the default behavior of changing elevation in onDraw()
viewHolder.itemView.animate().translationZ(V.dp(1)).setDuration(200).setInterpolator(CubicBezierInterpolator.DEFAULT).start(); viewHolder.itemView.animate().translationZ(V.dp(1)).setDuration(200).setInterpolator(CubicBezierInterpolator.DEFAULT).start();
draggedViewHolder=viewHolder; draggedViewHolder=viewHolder;
} }

View File

@@ -1512,7 +1512,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
public void onSelectedChanged(@Nullable RecyclerView.ViewHolder viewHolder, int actionState){ public void onSelectedChanged(@Nullable RecyclerView.ViewHolder viewHolder, int actionState){
super.onSelectedChanged(viewHolder, actionState); super.onSelectedChanged(viewHolder, actionState);
if(actionState==ItemTouchHelper.ACTION_STATE_DRAG){ if(actionState==ItemTouchHelper.ACTION_STATE_DRAG){
viewHolder.itemView.setTag(R.id.item_touch_helper_previous_elevation, viewHolder.itemView.getElevation()); // prevents the default behavior of changing elevation in onDraw() viewHolder.itemView.setTag(me.grishka.appkit.R.id.item_touch_helper_previous_elevation, viewHolder.itemView.getElevation()); // prevents the default behavior of changing elevation in onDraw()
viewHolder.itemView.animate().translationZ(V.dp(1)).setDuration(200).setInterpolator(CubicBezierInterpolator.DEFAULT).start(); viewHolder.itemView.animate().translationZ(V.dp(1)).setDuration(200).setInterpolator(CubicBezierInterpolator.DEFAULT).start();
draggedViewHolder=viewHolder; draggedViewHolder=viewHolder;
} }

View File

@@ -1,43 +1,47 @@
package org.joinmastodon.android.fragments; package org.joinmastodon.android.fragments;
import android.graphics.Canvas; import android.graphics.drawable.ColorDrawable;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.text.SpannableString;
import android.text.style.ReplacementSpan;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewTreeObserver; import android.view.ViewTreeObserver;
import android.view.WindowInsets; import android.view.WindowInsets;
import android.widget.LinearLayout; import android.widget.Button;
import android.widget.TextView;
import org.joinmastodon.android.MastodonApp;
import org.joinmastodon.android.R; import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.instance.GetInstance;
import org.joinmastodon.android.fragments.onboarding.InstanceCatalogSignupFragment; import org.joinmastodon.android.fragments.onboarding.InstanceCatalogSignupFragment;
import org.joinmastodon.android.fragments.onboarding.InstanceChooserLoginFragment; import org.joinmastodon.android.fragments.onboarding.InstanceChooserLoginFragment;
import org.joinmastodon.android.fragments.onboarding.InstanceRulesFragment;
import org.joinmastodon.android.model.Instance;
import org.joinmastodon.android.ui.InterpolatingMotionEffect;
import org.joinmastodon.android.ui.utils.UiUtils;
import org.joinmastodon.android.ui.views.SizeListenerFrameLayout; import org.joinmastodon.android.ui.views.SizeListenerFrameLayout;
import org.parceler.Parcels;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;
import me.grishka.appkit.Nav; import me.grishka.appkit.Nav;
import me.grishka.appkit.api.Callback;
import me.grishka.appkit.api.ErrorResponse;
import me.grishka.appkit.fragments.AppKitFragment; import me.grishka.appkit.fragments.AppKitFragment;
import me.grishka.appkit.utils.V; import me.grishka.appkit.utils.V;
import me.grishka.appkit.views.BottomSheet;
public class SplashFragment extends AppKitFragment{ public class SplashFragment extends AppKitFragment{
private static final String DEFAULT_SERVER="mastodon.social";
private SizeListenerFrameLayout contentView; private SizeListenerFrameLayout contentView;
private View artContainer, blueFill, greenFill; private View artContainer, blueFill, greenFill;
private ViewPager2 pager; private InterpolatingMotionEffect motionEffect;
private ViewGroup pagerDots;
private View artClouds, artPlaneElephant, artRightHill, artLeftHill, artCenterHill; private View artClouds, artPlaneElephant, artRightHill, artLeftHill, artCenterHill;
@Override @Override
public void onCreate(Bundle savedInstanceState){ public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
motionEffect=new InterpolatingMotionEffect(MastodonApp.context);
} }
@Nullable @Nullable
@@ -46,44 +50,26 @@ public class SplashFragment extends AppKitFragment{
contentView=(SizeListenerFrameLayout) inflater.inflate(R.layout.fragment_splash, container, false); contentView=(SizeListenerFrameLayout) inflater.inflate(R.layout.fragment_splash, container, false);
contentView.findViewById(R.id.btn_get_started).setOnClickListener(this::onButtonClick); contentView.findViewById(R.id.btn_get_started).setOnClickListener(this::onButtonClick);
contentView.findViewById(R.id.btn_log_in).setOnClickListener(this::onButtonClick); contentView.findViewById(R.id.btn_log_in).setOnClickListener(this::onButtonClick);
Button joinDefault=contentView.findViewById(R.id.btn_join_default_server);
joinDefault.setText(getString(R.string.join_default_server, DEFAULT_SERVER));
joinDefault.setOnClickListener(this::onJoinDefaultServerClick);
contentView.findViewById(R.id.btn_learn_more).setOnClickListener(this::onLearnMoreClick);
artClouds=contentView.findViewById(R.id.art_clouds); artClouds=contentView.findViewById(R.id.art_clouds);
artPlaneElephant=contentView.findViewById(R.id.art_plane_elephant); artPlaneElephant=contentView.findViewById(R.id.art_plane_elephant);
artRightHill=contentView.findViewById(R.id.art_right_hill); artRightHill=contentView.findViewById(R.id.art_right_hill);
artLeftHill=contentView.findViewById(R.id.art_left_hill); artLeftHill=contentView.findViewById(R.id.art_left_hill);
artCenterHill=contentView.findViewById(R.id.art_center_hill); artCenterHill=contentView.findViewById(R.id.art_center_hill);
pager=contentView.findViewById(R.id.pager);
pagerDots=contentView.findViewById(R.id.pager_dots);
pager.setAdapter(new PagerAdapter());
pager.setOffscreenPageLimit(3);
pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback(){
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels){
for(int i=0;i<pagerDots.getChildCount();i++){
float alpha;
if(i==position){
alpha=0.3f+0.7f*(1f-positionOffset);
}else if(i==position+1){
alpha=0.3f+0.7f*positionOffset;
}else{
alpha=0.3f;
}
pagerDots.getChildAt(i).setAlpha(alpha);
}
float parallaxProgress=(position+positionOffset)/2f;
artClouds.setTranslationX(V.dp(-27)*(position>=1 ? 1f : positionOffset));
artPlaneElephant.setTranslationX(V.dp(101.55f)*parallaxProgress);
artLeftHill.setTranslationX(V.dp(-88)*parallaxProgress);
artLeftHill.setTranslationY(V.dp(24)*parallaxProgress);
artRightHill.setTranslationX(V.dp(-88)*parallaxProgress);
artRightHill.setTranslationY(V.dp(-24)*parallaxProgress);
artCenterHill.setTranslationX(V.dp(-40)*parallaxProgress);
}
});
artContainer=contentView.findViewById(R.id.art_container); artContainer=contentView.findViewById(R.id.art_container);
blueFill=contentView.findViewById(R.id.blue_fill); blueFill=contentView.findViewById(R.id.blue_fill);
greenFill=contentView.findViewById(R.id.green_fill); greenFill=contentView.findViewById(R.id.green_fill);
motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artClouds, V.dp(-5), V.dp(5), V.dp(-5), V.dp(5)));
motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artRightHill, V.dp(-15), V.dp(25), V.dp(-10), V.dp(10)));
motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artLeftHill, V.dp(-25), V.dp(15), V.dp(-15), V.dp(15)));
motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artCenterHill, V.dp(-14), V.dp(14), V.dp(-5), V.dp(25)));
motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artPlaneElephant, V.dp(-20), V.dp(12), V.dp(-20), V.dp(12)));
artContainer.setOnTouchListener(motionEffect);
contentView.setSizeListener(new SizeListenerFrameLayout.OnSizeChangedListener(){ contentView.setSizeListener(new SizeListenerFrameLayout.OnSizeChangedListener(){
@Override @Override
@@ -109,6 +95,38 @@ public class SplashFragment extends AppKitFragment{
Nav.go(getActivity(), isSignup ? InstanceCatalogSignupFragment.class : InstanceChooserLoginFragment.class, extras); Nav.go(getActivity(), isSignup ? InstanceCatalogSignupFragment.class : InstanceChooserLoginFragment.class, extras);
} }
private void onJoinDefaultServerClick(View v){
new GetInstance()
.setCallback(new Callback<>(){
@Override
public void onSuccess(Instance result){
if(getActivity()==null)
return;
Bundle args=new Bundle();
args.putParcelable("instance", Parcels.wrap(result));
Nav.go(getActivity(), InstanceRulesFragment.class, args);
}
@Override
public void onError(ErrorResponse error){
if(getActivity()==null)
return;
error.showToast(getActivity());
}
})
.wrapProgress(getActivity(), R.string.loading_instance, true)
.execNoAuth(DEFAULT_SERVER);
}
private void onLearnMoreClick(View v){
View sheetView=getActivity().getLayoutInflater().inflate(R.layout.intro_bottom_sheet, null);
BottomSheet sheet=new BottomSheet(getActivity());
sheet.setContentView(sheetView);
sheet.setNavigationBarBackground(new ColorDrawable(UiUtils.alphaBlendColors(UiUtils.getThemeColor(getActivity(), R.attr.colorM3Surface),
UiUtils.getThemeColor(getActivity(), R.attr.colorM3Primary), 0.05f)), !UiUtils.isDarkTheme());
sheet.show();
}
private void updateArtSize(int w, int h){ private void updateArtSize(int w, int h){
float scale=w/(float)V.dp(360); float scale=w/(float)V.dp(360);
artContainer.setScaleX(scale); artContainer.setScaleX(scale);
@@ -139,60 +157,15 @@ public class SplashFragment extends AppKitFragment{
return true; return true;
} }
private class PagerAdapter extends RecyclerView.Adapter<PagerViewHolder>{ @Override
protected void onShown(){
@NonNull super.onShown();
@Override motionEffect.activate();
public PagerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
return new PagerViewHolder(viewType);
}
@Override
public void onBindViewHolder(@NonNull PagerViewHolder holder, int position){}
@Override
public int getItemCount(){
return 3;
}
@Override
public int getItemViewType(int position){
return position;
}
} }
private class PagerViewHolder extends RecyclerView.ViewHolder{ @Override
public PagerViewHolder(int page){ protected void onHidden(){
super(new LinearLayout(getActivity())); super.onHidden();
LinearLayout ll=(LinearLayout) itemView; motionEffect.deactivate();
ll.setOrientation(LinearLayout.VERTICAL);
int pad=V.dp(16);
ll.setPadding(pad, pad, pad, pad);
ll.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
TextView title=new TextView(getActivity());
title.setTextAppearance(R.style.m3_headline_medium);
title.setText(switch(page){
case 0 -> getString(R.string.welcome_page1_title);
case 1 -> getString(R.string.welcome_page2_title);
case 2 -> getString(R.string.welcome_page3_title);
default -> throw new IllegalStateException("Unexpected value: "+page);
});
title.setTextColor(0xFF17063B);
LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, V.dp(page==0 ? 46 : 36));
lp.bottomMargin=V.dp(page==0 ? 4 : 14);
ll.addView(title, lp);
TextView text=new TextView(getActivity());
text.setTextAppearance(R.style.m3_body_medium);
text.setText(switch(page){
case 0 -> R.string.welcome_page1_text;
case 1 -> R.string.welcome_page2_text;
case 2 -> R.string.welcome_page3_text;
default -> throw new IllegalStateException("Unexpected value: "+page);
});
text.setTextColor(0xFF17063B);
ll.addView(text, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
}
} }
} }

View File

@@ -79,7 +79,10 @@ public abstract class BaseAccountListFragment extends RecyclerFragment<BaseAccou
if(refreshing){ if(refreshing){
relationships.clear(); relationships.clear();
} }
loadRelationships(d); if(!d.isEmpty() && !d.get(0).account.reloadWhenClicked){
loadRelationships(d);
}
super.onDataLoaded(d, more); super.onDataLoaded(d, more);
} }
@@ -242,7 +245,12 @@ public abstract class BaseAccountListFragment extends RecyclerFragment<BaseAccou
public void bindRelationship(){ public void bindRelationship(){
Relationship rel=relationships.get(item.account.id); Relationship rel=relationships.get(item.account.id);
if(rel==null || AccountSessionManager.getInstance().isSelf(accountID, item.account)){ if(rel==null || AccountSessionManager.getInstance().isSelf(accountID, item.account)){
button.setVisibility(View.GONE); if(item.account.reloadWhenClicked){
button.setVisibility(View.VISIBLE);
button.setText(R.string.button_follow);
} else {
button.setVisibility(View.GONE);
}
}else{ }else{
button.setVisibility(View.VISIBLE); button.setVisibility(View.VISIBLE);
UiUtils.setRelationshipToActionButton(rel, button); UiUtils.setRelationshipToActionButton(rel, button);

View File

@@ -20,6 +20,8 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme
protected Account targetAccount; protected Account targetAccount;
protected Account remoteAccount;
public abstract HeaderPaginationRequest<Account> onCreateRequest(String maxID, int count); public abstract HeaderPaginationRequest<Account> onCreateRequest(String maxID, int count);
public abstract HeaderPaginationRequest<Account> onCreateRemoteRequest(String id, String maxID, int count); public abstract HeaderPaginationRequest<Account> onCreateRemoteRequest(String id, String maxID, int count);
@@ -27,13 +29,18 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme
@Override @Override
protected void doLoadData(int offset, int count){ protected void doLoadData(int offset, int count){
if (shouldLoadRemote()) { if (shouldLoadRemote()) {
if(remoteAccount == null){
UiUtils.lookupRemoteAccount(getContext(), targetAccount, accountID, null, account -> { UiUtils.lookupRemoteAccount(getContext(), targetAccount, accountID, null, account -> {
if(account != null){ remoteAccount = account;
loadRemoteFollower(offset, count, account); if(remoteAccount != null){
loadRemoteFollower(offset, count, remoteAccount);
} else { } else {
loadFollower(offset, count); loadFollower(offset, count);
} }
}); });
} else {
loadRemoteFollower(offset, count, remoteAccount);
}
} else { } else {
loadFollower(offset, count); loadFollower(offset, count);
} }
@@ -79,7 +86,11 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme
remoteAccount.acct = remoteAccount.username; remoteAccount.acct = remoteAccount.username;
} }
}); });
onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null); if(!result.isEmpty()){
onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null);
} else {
loadFollower(offset, count);
}
} }
@Override @Override

View File

@@ -223,11 +223,11 @@ public class DiscoverAccountsFragment extends BaseRecyclerFragment<DiscoverAccou
actionProgress=findViewById(R.id.action_progress); actionProgress=findViewById(R.id.action_progress);
actionWrap=findViewById(R.id.action_btn_wrap); actionWrap=findViewById(R.id.action_btn_wrap);
itemView.setOutlineProvider(OutlineProviders.roundedRect(6)); itemView.setOutlineProvider(OutlineProviders.roundedRect(12));
itemView.setClipToOutline(true); itemView.setClipToOutline(true);
avatar.setOutlineProvider(OutlineProviders.roundedRect(12)); avatar.setOutlineProvider(OutlineProviders.roundedRect(12));
avatar.setClipToOutline(true); avatar.setClipToOutline(true);
cover.setOutlineProvider(OutlineProviders.roundedRect(3)); cover.setOutlineProvider(OutlineProviders.roundedRect(12));
cover.setClipToOutline(true); cover.setClipToOutline(true);
actionButton.setOnClickListener(this::onActionButtonClick); actionButton.setOnClickListener(this::onActionButtonClick);
} }

View File

@@ -23,8 +23,7 @@ import org.joinmastodon.android.api.requests.accounts.UpdateAccountCredentials;
import org.joinmastodon.android.api.session.AccountActivationInfo; import org.joinmastodon.android.api.session.AccountActivationInfo;
import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.fragments.HomeFragment; import org.joinmastodon.android.fragments.settings.SettingsFragment;
import org.joinmastodon.android.fragments.SettingsFragment;
import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.ui.AccountSwitcherSheet; import org.joinmastodon.android.ui.AccountSwitcherSheet;
import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.utils.UiUtils;

View File

@@ -77,12 +77,13 @@ public class OnboardingFollowSuggestionsFragment extends RecyclerFragment<Parsed
public void onViewCreated(View view, Bundle savedInstanceState){ public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
buttonBar=view.findViewById(R.id.button_bar); buttonBar=view.findViewById(R.id.button_bar);
setStatusBarColor(UiUtils.getThemeColor(getActivity(), R.attr.colorM3Background)); setStatusBarColor(UiUtils.getThemeColor(getActivity(), R.attr.colorBackgroundLight));
view.setBackgroundColor(UiUtils.getThemeColor(getActivity(), R.attr.colorM3Background)); getToolbar().setBackgroundResource(UiUtils.getThemeColorRes(getToolbarContext(), R.attr.colorBackgroundLight));
list.addOnScrollListener(onScrollListener=new ElevationOnScrollListener((FragmentRootLinearLayout) view, buttonBar, getToolbar())); view.setBackgroundColor(UiUtils.getThemeColor(getActivity(), R.attr.colorWindowBackground));
// list.addOnScrollListener(onScrollListener=new ElevationOnScrollListener((FragmentRootLinearLayout) view, buttonBar, getToolbar()));
view.findViewById(R.id.btn_next).setOnClickListener(UiUtils.rateLimitedClickListener(this::onFollowAllClick)); view.findViewById(R.id.btn_next).setOnClickListener(UiUtils.rateLimitedClickListener(this::onFollowAllClick));
view.findViewById(R.id.btn_skip).setOnClickListener(UiUtils.rateLimitedClickListener(v->proceed())); // view.findViewById(R.id.btn_skip).setOnClickListener(UiUtils.rateLimitedClickListener(v->proceed()));
} }
@Override @Override
@@ -266,7 +267,7 @@ public class OnboardingFollowSuggestionsFragment extends RecyclerFragment<Parsed
private Relationship relationship; private Relationship relationship;
public SuggestionViewHolder(){ public SuggestionViewHolder(){
super(getActivity(), R.layout.item_user_row_m3, list); super(getActivity(), R.layout.item_user_row, list);
name=findViewById(R.id.name); name=findViewById(R.id.name);
username=findViewById(R.id.username); username=findViewById(R.id.username);
bio=findViewById(R.id.bio); bio=findViewById(R.id.bio);
@@ -296,7 +297,7 @@ public class OnboardingFollowSuggestionsFragment extends RecyclerFragment<Parsed
actionWrap.setVisibility(View.GONE); actionWrap.setVisibility(View.GONE);
}else{ }else{
actionWrap.setVisibility(View.VISIBLE); actionWrap.setVisibility(View.VISIBLE);
UiUtils.setRelationshipToActionButtonM3(relationship, actionButton); UiUtils.setRelationshipToActionButton(relationship, actionButton);
} }
} }

View File

@@ -0,0 +1,122 @@
package org.joinmastodon.android.fragments.settings;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.LruCache;
import android.widget.Toast;
import org.joinmastodon.android.BuildConfig;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.MainActivity;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.MastodonAPIController;
import org.joinmastodon.android.api.requests.oauth.RevokeOauthToken;
import org.joinmastodon.android.api.session.AccountActivationInfo;
import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.fragments.onboarding.AccountActivationFragment;
import org.joinmastodon.android.fragments.onboarding.InstanceRulesFragment;
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
import org.joinmastodon.android.ui.utils.UiUtils;
import org.joinmastodon.android.updater.GithubSelfUpdater;
import org.parceler.Parcels;
import java.util.ArrayList;
import me.grishka.appkit.Nav;
import me.grishka.appkit.api.Callback;
import me.grishka.appkit.api.ErrorResponse;
import me.grishka.appkit.imageloader.ImageCache;
public class AboutFragment extends SettingsBaseFragment{
private TextItem checkForUpdateItem, clearImageCacheItem;
private ImageCache imageCache;
@Override
public void addItems(ArrayList<Item> items) {
items.add(new HeaderItem(R.string.sk_settings_about));
items.add(new TextItem(R.string.mo_settings_contribute, ()->UiUtils.launchWebBrowser(getActivity(), "https://github.com/LucasGGamerM/moshidon"), R.drawable.ic_fluent_open_24_regular));
items.add(new TextItem(R.string.sk_settings_donate, ()->UiUtils.launchWebBrowser(getActivity(), "https://github.com/sponsors/LucasGGamerM"), R.drawable.ic_fluent_heart_24_regular));
if (GithubSelfUpdater.needSelfUpdating()) {
checkForUpdateItem = new TextItem(R.string.sk_check_for_update, GithubSelfUpdater.getInstance()::checkForUpdates);
items.add(checkForUpdateItem);
items.add(new SwitchItem(R.string.sk_updater_enable_pre_releases, 0, GlobalUserPreferences.enablePreReleases, i->{
GlobalUserPreferences.enablePreReleases=i.checked;
GlobalUserPreferences.save();
}));
}
LruCache<?, ?> cache = imageCache == null ? null : imageCache.getLruCache();
clearImageCacheItem = new TextItem(R.string.settings_clear_cache, UiUtils.formatFileSize(getContext(), cache != null ? cache.size() : 0, true), this::clearImageCache, 0);
items.add(clearImageCacheItem);
items.add(new TextItem(R.string.sk_clear_recent_languages, ()->UiUtils.showConfirmationAlert(getActivity(), R.string.sk_clear_recent_languages, R.string.sk_confirm_clear_recent_languages, R.string.clear, ()->{
GlobalUserPreferences.recentLanguages.remove(accountID);
GlobalUserPreferences.save();
})));
items.add(new TextItem(R.string.mo_clear_recent_emoji, ()-> {
GlobalUserPreferences.recentEmojis.clear();
GlobalUserPreferences.save();
}));
if(BuildConfig.DEBUG){
items.add(new RedHeaderItem("Debug options"));
items.add(new TextItem("Test E-Mail confirmation flow", ()->{
AccountSession sess=AccountSessionManager.getInstance().getAccount(accountID);
sess.activated=false;
sess.activationInfo=new AccountActivationInfo("test@email", System.currentTimeMillis());
Bundle args=new Bundle();
args.putString("account", accountID);
args.putBoolean("debug", true);
Nav.goClearingStack(getActivity(), AccountActivationFragment.class, args);
}));
items.add(new TextItem("Copy preferences", ()->{
StringBuilder prefBuilder = new StringBuilder();
GlobalUserPreferences.load();
GlobalUserPreferences.getPrefs().getAll().forEach((key, value) -> prefBuilder.append(key).append(": ").append(value).append('\n'));
UiUtils.copyText(view, prefBuilder.toString());
}));
items.add(new TextItem("Reset preferences", ()->{
GlobalUserPreferences.load();
GlobalUserPreferences.getPrefs().edit().clear().commit();
UiUtils.restartApp();
}, R.drawable.ic_fluent_warning_24_regular));
items.add(new TextItem("Open App Info", () ->
getContext().startActivity(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
.setData(Uri.fromParts("package", getContext().getPackageName(), null))),
R.drawable.ic_fluent_open_24_regular
)
);
items.add(new TextItem("Open developer settings",
()-> getContext().startActivity(new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS)),
R.drawable.ic_fluent_open_24_regular)
);
}
String version = getContext().getString(R.string.mo_settings_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE);
items.add(new FooterItem(version, () -> UiUtils.copyText(view, version)));
}
private void clearImageCache(){
MastodonAPIController.runInBackground(()->{
Activity activity=getActivity();
imageCache.clear();
Toast.makeText(activity, R.string.media_cache_cleared, Toast.LENGTH_SHORT).show();
});
if (list.findViewHolderForAdapterPosition(items.indexOf(clearImageCacheItem)) instanceof TextViewHolder tvh) {
clearImageCacheItem.secondaryText = UiUtils.formatFileSize(getContext(), 0, true);
tvh.rebind();
}
}
}

View File

@@ -0,0 +1,122 @@
package org.joinmastodon.android.fragments.settings;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.Toast;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.MainActivity;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.oauth.RevokeOauthToken;
import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.fragments.onboarding.InstanceRulesFragment;
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
import org.joinmastodon.android.ui.utils.UiUtils;
import org.parceler.Parcels;
import java.util.ArrayList;
import me.grishka.appkit.Nav;
import me.grishka.appkit.api.Callback;
import me.grishka.appkit.api.ErrorResponse;
import me.grishka.appkit.utils.V;
public class AccountFragment extends SettingsBaseFragment{
private SwitchItem glitchModeItem;
@Override
public void addItems(ArrayList<Item> items) {
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));
items.add(new TextItem(R.string.sk_settings_filters, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/filters"), R.drawable.ic_fluent_open_24_regular));
items.add(new TextItem(R.string.sk_settings_auth, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/auth/edit"), R.drawable.ic_fluent_open_24_regular));
items.add(new HeaderItem(getInstanceName()));
items.add(new TextItem(R.string.sk_settings_rules, ()->{
Bundle args=new Bundle();
args.putParcelable("instance", Parcels.wrap(getInstance()));
Nav.go(getActivity(), InstanceRulesFragment.class, args);
}, R.drawable.ic_fluent_task_list_ltr_24_regular));
items.add(new TextItem(R.string.sk_settings_about_instance , ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/about"), R.drawable.ic_fluent_info_24_regular));
items.add(new TextItem(R.string.settings_tos, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/terms"), R.drawable.ic_fluent_open_24_regular));
items.add(new TextItem(R.string.settings_privacy_policy, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/terms"), R.drawable.ic_fluent_open_24_regular));
items.add(new TextItem(R.string.log_out, this::confirmLogOut, R.drawable.ic_fluent_sign_out_24_regular));
if (!TextUtils.isEmpty(getInstance().version)) items.add(new SmallTextItem(getString(R.string.sk_settings_server_version, getInstance().version)));
items.add(new HeaderItem(R.string.sk_instance_features));
items.add(new SwitchItem(R.string.sk_settings_support_local_only, 0, GlobalUserPreferences.accountsWithLocalOnlySupport.contains(accountID), i->{
glitchModeItem.enabled = i.checked;
if (i.checked) {
GlobalUserPreferences.accountsWithLocalOnlySupport.add(accountID);
if (getInstance().pleroma == null) GlobalUserPreferences.accountsInGlitchMode.add(accountID);
} else {
GlobalUserPreferences.accountsWithLocalOnlySupport.remove(accountID);
GlobalUserPreferences.accountsInGlitchMode.remove(accountID);
}
glitchModeItem.checked = GlobalUserPreferences.accountsInGlitchMode.contains(accountID);
if (list.findViewHolderForAdapterPosition(items.indexOf(glitchModeItem)) instanceof SwitchViewHolder svh) svh.rebind();
GlobalUserPreferences.save();
}));
items.add(new SmallTextItem(getString(R.string.sk_settings_local_only_explanation)));
items.add(glitchModeItem = new SwitchItem(R.string.sk_settings_glitch_instance, 0, GlobalUserPreferences.accountsInGlitchMode.contains(accountID), i->{
if (i.checked) {
GlobalUserPreferences.accountsInGlitchMode.add(accountID);
} else {
GlobalUserPreferences.accountsInGlitchMode.remove(accountID);
}
GlobalUserPreferences.save();
}));
glitchModeItem.enabled = GlobalUserPreferences.accountsWithLocalOnlySupport.contains(accountID);
items.add(new SmallTextItem(getString(R.string.sk_settings_glitch_mode_explanation)));
boolean translationAvailable = getInstance().v2 != null && getInstance().v2.configuration.translation != null && getInstance().v2.configuration.translation.enabled;
items.add(new SmallTextItem(getString(translationAvailable ?
R.string.sk_settings_translation_availability_note_available :
R.string.sk_settings_translation_availability_note_unavailable, getInstance().title)));
}
private void confirmLogOut(){
new M3AlertDialogBuilder(getActivity())
.setTitle(R.string.log_out)
.setMessage(R.string.confirm_log_out)
.setPositiveButton(R.string.log_out, (dialog, which) -> logOut())
.setNegativeButton(R.string.cancel, null)
.show();
}
private void logOut(){
AccountSession session= AccountSessionManager.getInstance().getAccount(accountID);
new RevokeOauthToken(session.app.clientId, session.app.clientSecret, session.token.accessToken)
.setCallback(new Callback<>(){
@Override
public void onSuccess(Object result){
onLoggedOut();
}
@Override
public void onError(ErrorResponse error){
onLoggedOut();
}
})
.wrapProgress(getActivity(), R.string.loading, false)
.exec(accountID);
}
private void onLoggedOut(){
if (getActivity() == null) return;
AccountSessionManager.getInstance().removeAccount(accountID);
getActivity().finish();
Intent intent=new Intent(getActivity(), MainActivity.class);
startActivity(intent);
}
}

View File

@@ -0,0 +1,129 @@
package org.joinmastodon.android.fragments.settings;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.Toast;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.R;
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
import java.util.ArrayList;
import me.grishka.appkit.utils.V;
public class BehaviourFragment extends SettingsBaseFragment{
@Override
public void addItems(ArrayList<Item> items) {
items.add(new HeaderItem(R.string.settings_behavior));
items.add(new SwitchItem(R.string.settings_gif, R.drawable.ic_fluent_gif_24_regular, GlobalUserPreferences.playGifs, i->{
GlobalUserPreferences.playGifs=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.settings_custom_tabs, R.drawable.ic_fluent_link_24_regular, GlobalUserPreferences.useCustomTabs, i->{
GlobalUserPreferences.useCustomTabs=i.checked;
GlobalUserPreferences.save();
}));
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.mo_load_remote_followers, R.drawable.ic_fluent_people_24_regular, GlobalUserPreferences.loadRemoteAccountFollowers, i -> {
GlobalUserPreferences.loadRemoteAccountFollowers=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.sk_settings_show_interaction_counts, R.drawable.ic_fluent_number_row_24_regular, GlobalUserPreferences.showInteractionCounts, i->{
GlobalUserPreferences.showInteractionCounts=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.sk_settings_always_reveal_content_warnings, R.drawable.ic_fluent_chat_warning_24_regular, GlobalUserPreferences.alwaysExpandContentWarnings, i->{
GlobalUserPreferences.alwaysExpandContentWarnings=i.checked;
GlobalUserPreferences.save();
}));
// 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.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.mo_disable_double_tap_to_swipe_between_tabs, R.drawable.ic_fluent_double_tap_swipe_right_24_regular, GlobalUserPreferences.disableDoubleTapToSwipe, i->{
GlobalUserPreferences.disableDoubleTapToSwipe=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new SwitchItem(R.string.sk_settings_confirm_before_reblog, R.drawable.ic_fluent_checkmark_circle_24_regular, GlobalUserPreferences.confirmBeforeReblog, i->{
GlobalUserPreferences.confirmBeforeReblog=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.mo_swap_bookmark_with_reblog, R.drawable.ic_boost, GlobalUserPreferences.swapBookmarkWithBoostAction, i -> {
GlobalUserPreferences.swapBookmarkWithBoostAction=i.checked;
GlobalUserPreferences.save();
}));
items.add(new HeaderItem(R.string.mo_composer_behavior));
items.add(new ButtonItem(R.string.sk_settings_publish_button_text, R.drawable.ic_fluent_send_24_regular, b-> {
updatePublishText(b);
b.setOnClickListener(l -> {
if(!GlobalUserPreferences.relocatePublishButton) {
FrameLayout inputWrap = new FrameLayout(getContext());
EditText input = new EditText(getContext());
input.setHint(R.string.publish);
input.setText(GlobalUserPreferences.publishButtonText.trim());
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);
inputWrap.addView(input);
new M3AlertDialogBuilder(getContext()).setTitle(R.string.sk_settings_publish_button_text_title).setView(inputWrap)
.setPositiveButton(R.string.save, (d, which) -> {
GlobalUserPreferences.publishButtonText = input.getText().toString().trim();
GlobalUserPreferences.save();
updatePublishText(b);
})
.setNeutralButton(R.string.clear, (d, which) -> {
GlobalUserPreferences.publishButtonText = "";
GlobalUserPreferences.save();
updatePublishText(b);
})
.setNegativeButton(R.string.cancel, (d, which) -> {
})
.show();
} else {
Toast.makeText(getActivity(), R.string.mo_disable_relocate_publish_button_to_enable_customization,
Toast.LENGTH_LONG).show();
}
});
}));
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.mo_change_default_reply_visibility_to_unlisted, R.drawable.ic_fluent_lock_open_24_regular, GlobalUserPreferences.defaultToUnlistedReplies, i->{
GlobalUserPreferences.defaultToUnlistedReplies=i.checked;
GlobalUserPreferences.save();
}));
// TODO find a good icon for this setting
items.add(new SwitchItem(R.string.mo_mention_reblogger_automatically, R.drawable.ic_fluent_balloon_24_regular, GlobalUserPreferences.mentionRebloggerAutomatically, i -> {
GlobalUserPreferences.mentionRebloggerAutomatically=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.disableAltTextReminder=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();
}));
}
private void updatePublishText(Button btn) {
if (GlobalUserPreferences.publishButtonText.isBlank()) btn.setText(R.string.publish);
else btn.setText(GlobalUserPreferences.publishButtonText);
}
}

View File

@@ -0,0 +1,38 @@
package org.joinmastodon.android.fragments.settings;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.R;
import org.joinmastodon.android.model.PushNotification;
import org.joinmastodon.android.model.PushSubscription;
import java.util.ArrayList;
public class NotificationsFragment extends SettingsBaseFragment {
@Override
public void addItems(ArrayList<Item> items) {
items.add(notificationPolicyItem = new NotificationPolicyItem());
PushSubscription pushSubscription = getPushSubscription();
boolean switchEnabled = pushSubscription.policy != PushSubscription.Policy.NONE;
items.add(new SwitchItem(R.string.notify_favorites, R.drawable.ic_fluent_star_24_regular, pushSubscription.alerts.favourite, i -> onNotificationsChanged(PushNotification.Type.FAVORITE, i.checked), switchEnabled));
items.add(new SwitchItem(R.string.notify_follow, R.drawable.ic_fluent_person_add_24_regular, pushSubscription.alerts.follow, i -> onNotificationsChanged(PushNotification.Type.FOLLOW, i.checked), switchEnabled));
items.add(new SwitchItem(R.string.notify_reblog, R.drawable.ic_fluent_arrow_repeat_all_24_regular, pushSubscription.alerts.reblog, i -> onNotificationsChanged(PushNotification.Type.REBLOG, i.checked), switchEnabled));
items.add(new SwitchItem(R.string.notify_mention, R.drawable.ic_fluent_mention_24_regular, pushSubscription.alerts.mention, i -> onNotificationsChanged(PushNotification.Type.MENTION, i.checked), switchEnabled));
items.add(new SwitchItem(R.string.sk_notify_posts, R.drawable.ic_fluent_chat_24_regular, pushSubscription.alerts.status, i -> onNotificationsChanged(PushNotification.Type.STATUS, i.checked), switchEnabled));
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.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();
}));
}
}

View File

@@ -0,0 +1,84 @@
package org.joinmastodon.android.fragments.settings;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.os.Build;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.PopupMenu;
import androidx.recyclerview.widget.RecyclerView;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.MastodonApp;
import org.joinmastodon.android.R;
import org.joinmastodon.android.ui.utils.UiUtils;
import java.util.ArrayList;
public class SettingsAppearanceFragment extends SettingsBaseFragment {
@Override
public void addItems(ArrayList<Item> items) {
items.add(themeItem = new SettingsBaseFragment.ThemeItem());
items.add(new SettingsBaseFragment.ButtonItem(R.string.sk_settings_color_palette, R.drawable.ic_fluent_color_24_regular, b -> {
PopupMenu popupMenu = new PopupMenu(getActivity(), b, Gravity.CENTER_HORIZONTAL);
popupMenu.inflate(R.menu.color_palettes);
popupMenu.getMenu().findItem(R.id.m3_color).setVisible(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S);
popupMenu.setOnMenuItemClickListener(this::onColorPreferenceClick);
b.setOnTouchListener(popupMenu.getDragToOpenListener());
b.setOnClickListener(v -> popupMenu.show());
b.setText(switch (GlobalUserPreferences.color) {
case MATERIAL3 -> R.string.sk_color_palette_material3;
case PINK -> R.string.sk_color_palette_pink;
case PURPLE -> R.string.sk_color_palette_purple;
case GREEN -> R.string.sk_color_palette_green;
case BLUE -> R.string.sk_color_palette_blue;
case BROWN -> R.string.sk_color_palette_brown;
case RED -> R.string.sk_color_palette_red;
case YELLOW -> R.string.sk_color_palette_yellow;
case NORD -> R.string.mo_color_palette_nord;
});
}));
items.add(new SettingsBaseFragment.SwitchItem(R.string.theme_true_black, R.drawable.ic_fluent_dark_theme_24_regular, GlobalUserPreferences.trueBlackTheme, this::onTrueBlackThemeChanged));
items.add(new SettingsBaseFragment.SwitchItem(R.string.sk_disable_marquee, R.drawable.ic_fluent_text_more_24_regular, GlobalUserPreferences.disableMarquee, i -> {
GlobalUserPreferences.disableMarquee = i.checked;
GlobalUserPreferences.save();
needAppRestart = true;
}));
items.add(new SettingsBaseFragment.SwitchItem(R.string.sk_settings_uniform_icon_for_notifications, R.drawable.ic_ntf_logo, GlobalUserPreferences.uniformNotificationIcon, i -> {
GlobalUserPreferences.uniformNotificationIcon = i.checked;
GlobalUserPreferences.save();
}));
items.add(new SettingsBaseFragment.SwitchItem(R.string.sk_settings_reduce_motion, R.drawable.ic_fluent_star_emphasis_24_regular, GlobalUserPreferences.reduceMotion, i -> {
GlobalUserPreferences.reduceMotion = i.checked;
GlobalUserPreferences.save();
needAppRestart = true;
}));
}
protected boolean onColorPreferenceClick(MenuItem item){
GlobalUserPreferences.ColorPreference pref = null;
int id = item.getItemId();
if (id == R.id.m3_color) pref = GlobalUserPreferences.ColorPreference.MATERIAL3;
else if (id == R.id.pink_color) pref = GlobalUserPreferences.ColorPreference.PINK;
else if (id == R.id.purple_color) pref = GlobalUserPreferences.ColorPreference.PURPLE;
else if (id == R.id.green_color) pref = GlobalUserPreferences.ColorPreference.GREEN;
else if (id == R.id.blue_color) pref = GlobalUserPreferences.ColorPreference.BLUE;
else if (id == R.id.brown_color) pref = GlobalUserPreferences.ColorPreference.BROWN;
else if (id == R.id.red_color) pref = GlobalUserPreferences.ColorPreference.RED;
else if (id == R.id.yellow_color) pref = GlobalUserPreferences.ColorPreference.YELLOW;
else if (id == R.id.nord_color) pref = GlobalUserPreferences.ColorPreference.NORD;
if (pref == null) return false;
GlobalUserPreferences.color=pref;
GlobalUserPreferences.save();
restartActivityToApplyNewTheme();
return true;
}
}

View File

@@ -0,0 +1,863 @@
package org.joinmastodon.android.fragments.settings;
import android.animation.ObjectAnimator;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowInsets;
import android.view.WindowManager;
import android.view.animation.LinearInterpolator;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.ProgressBar;
import android.widget.RadioButton;
import android.widget.Switch;
import android.widget.TextView;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.joinmastodon.android.DomainManager;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.MastodonApp;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.PushSubscriptionManager;
import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.fragments.DomainDisplay;
import org.joinmastodon.android.fragments.MastodonToolbarFragment;
import org.joinmastodon.android.model.PushNotification;
import org.joinmastodon.android.model.PushSubscription;
import org.joinmastodon.android.ui.OutlineProviders;
import org.joinmastodon.android.ui.utils.UiUtils;
import org.joinmastodon.android.updater.GithubSelfUpdater;
import java.util.ArrayList;
import java.util.function.Consumer;
import me.grishka.appkit.utils.BindableViewHolder;
import me.grishka.appkit.utils.V;
import me.grishka.appkit.views.UsableRecyclerView;
public abstract class SettingsBaseFragment extends MastodonToolbarFragment implements DomainDisplay {
protected View view;
protected UsableRecyclerView list;
protected ImageView themeTransitionWindowView;
protected ThemeItem themeItem;
protected boolean needAppRestart;
protected SettingsBaseFragment.NotificationPolicyItem notificationPolicyItem;
protected PushSubscription pushSubscription;
protected ArrayList<Item> items=new ArrayList<>();
protected String accountID;
protected boolean needUpdateNotificationSettings;
public abstract void addItems(ArrayList<Item> items);
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N)
setRetainInstance(true);
setTitle(R.string.settings);
accountID=getArguments().getString("account");
AccountSession session = AccountSessionManager.getInstance().getAccount(accountID);
DomainManager.getInstance().setCurrentDomain(session.domain + "/settings");
addItems(items);
}
@Override
public View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
list=new UsableRecyclerView(getActivity());
list.setLayoutManager(new LinearLayoutManager(getActivity()));
list.setAdapter(new SettingsAdapter());
list.setBackgroundColor(UiUtils.getThemeColor(getActivity(), android.R.attr.colorBackground));
list.setPadding(0, V.dp(16), 0, V.dp(12));
list.setClipToPadding(false);
list.addItemDecoration(new RecyclerView.ItemDecoration(){
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state){
// Add 32dp gaps between sections
RecyclerView.ViewHolder holder=parent.getChildViewHolder(view);
if((holder instanceof HeaderViewHolder || holder instanceof FooterViewHolder) && holder.getAbsoluteAdapterPosition()>1)
outRect.top=V.dp(32);
}
});
return list;
}
@Override
public void onApplyWindowInsets(WindowInsets insets){
if(Build.VERSION.SDK_INT>=29 && insets.getTappableElementInsets().bottom==0){
list.setPadding(0, V.dp(16), 0, V.dp(12)+insets.getSystemWindowInsetBottom());
insets=insets.inset(0, 0, 0, insets.getSystemWindowInsetBottom());
}
super.onApplyWindowInsets(insets);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState);
this.view = view;
}
static abstract class Item{
public abstract int getViewType();
}
protected class HeaderItem extends Item{
private String text;
public HeaderItem(@StringRes int text){
this.text=getString(text);
}
public HeaderItem(String text){
this.text=text;
}
@Override
public int getViewType(){
return Type.HEADER.ordinal();
}
}
protected class SwitchItem extends Item{
private String text;
private int icon;
boolean checked;
private Consumer<SwitchItem> onChanged;
private boolean enabled=true;
public SwitchItem(@StringRes int text, @DrawableRes int icon, boolean checked, Consumer<SwitchItem> onChanged){
this.text=getString(text);
this.icon=icon;
this.checked=checked;
this.onChanged=onChanged;
}
public SwitchItem(@StringRes int text, @DrawableRes int icon, boolean checked, Consumer<SwitchItem> onChanged, boolean enabled){
this.text=getString(text);
this.icon=icon;
this.checked=checked;
this.onChanged=onChanged;
this.enabled=enabled;
}
@Override
public int getViewType(){
return Type.SWITCH.ordinal();
}
}
protected class UpdateItem extends SettingsBaseFragment.Item {
@Override
public int getViewType(){
return Type.UPDATER.ordinal();
}
}
protected static class ThemeItem extends SettingsBaseFragment.Item {
@Override
public int getViewType(){
return Type.THEME.ordinal();
}
}
protected static class NotificationPolicyItem extends SettingsBaseFragment.Item {
@Override
public int getViewType(){
return Type.NOTIFICATION_POLICY.ordinal();
}
}
protected class ButtonItem extends Item{
private int text;
private int icon;
private Consumer<Button> buttonConsumer;
public ButtonItem(@StringRes int text, @DrawableRes int icon, Consumer<Button> buttonConsumer) {
this.text = text;
this.icon = icon;
this.buttonConsumer = buttonConsumer;
}
@Override
public int getViewType(){
return Type.BUTTON.ordinal();
}
}
protected class SmallTextItem extends Item {
private String text;
public SmallTextItem(String text) {
this.text = text;
}
@Override
public int getViewType() {
return Type.SMALL_TEXT.ordinal();
}
}
protected class TextItem extends Item{
private String text;
private String secondaryText;
private Runnable onClick;
private boolean loading;
private int icon;
public TextItem(@StringRes int text, Runnable onClick) {
this(text, null, onClick, false, 0);
}
public TextItem(@StringRes int text, Runnable onClick, @DrawableRes int icon) {
this(text, null, onClick, false, icon);
}
public TextItem(@StringRes int text, String secondaryText, Runnable onClick, @DrawableRes int icon) {
this(text, secondaryText, onClick, false, icon);
}
public TextItem(@StringRes int text, String secondaryText, Runnable onClick, boolean loading, @DrawableRes int icon){
this.text=getString(text);
this.onClick=onClick;
this.loading=loading;
this.icon=icon;
this.secondaryText = secondaryText;
}
public TextItem(String text, Runnable onClick){
this.text=text;
this.onClick=onClick;
}
public TextItem(String text, Runnable onClick, @DrawableRes int icon){
this.text=text;
this.onClick=onClick;
this.icon=icon;
}
@Override
public int getViewType(){
return Type.TEXT.ordinal();
}
}
protected class SettingsCategoryItem extends Item{
private String text;
private String secondaryText;
private Runnable onClick;
private boolean loading;
private int icon;
public SettingsCategoryItem(@StringRes int text, Runnable onClick) {
this(text, null, onClick, false, 0);
}
public SettingsCategoryItem(@StringRes int text, Runnable onClick, @DrawableRes int icon) {
this(text, null, onClick, false, icon);
}
public SettingsCategoryItem(@StringRes int text, String secondaryText, Runnable onClick, @DrawableRes int icon) {
this(text, secondaryText, onClick, false, icon);
}
public SettingsCategoryItem(@StringRes int text, String secondaryText, Runnable onClick, boolean loading, @DrawableRes int icon){
this.text=getString(text);
this.onClick=onClick;
this.loading=loading;
this.icon=icon;
this.secondaryText = secondaryText;
}
public SettingsCategoryItem(String text, Runnable onClick){
this.text=text;
this.onClick=onClick;
}
public SettingsCategoryItem(String text, Runnable onClick, @DrawableRes int icon){
this.text=text;
this.onClick=onClick;
this.icon=icon;
}
@Override
public int getViewType(){
return Type.SETTINGS_CATEGORY.ordinal();
}
}
protected class FooterItem extends Item{
private String text;
private Runnable onClick;
public FooterItem(String text, Runnable onClick){
this.text=text;
this.onClick=onClick;
}
@Override
public int getViewType(){
return Type.FOOTER.ordinal();
}
}
public enum Type{
HEADER,
SWITCH,
THEME,
TEXT,
NOTIFICATION_POLICY,
FOOTER,
BUTTON,
SMALL_TEXT,
UPDATER,
SETTINGS_CATEGORY
}
private class SettingsAdapter extends RecyclerView.Adapter<BindableViewHolder<Item>>{
@NonNull
@Override
public BindableViewHolder<Item> onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
//noinspection unchecked
return (BindableViewHolder<Item>) switch(Type.values()[viewType]){
case HEADER -> new HeaderViewHolder();
case SWITCH -> new SwitchViewHolder();
case THEME -> new ThemeViewHolder();
case TEXT -> new TextViewHolder();
case NOTIFICATION_POLICY -> new NotificationPolicyViewHolder();
case FOOTER -> new FooterViewHolder();
case BUTTON -> new ButtonViewHolder();
case SMALL_TEXT -> new SmallTextViewHolder();
case UPDATER -> new UpdateViewHolder();
case SETTINGS_CATEGORY -> new SettingsCategoryViewHolder();
};
}
@Override
public void onBindViewHolder(@NonNull BindableViewHolder<Item> holder, int position){
holder.bind(items.get(position));
}
@Override
public int getItemCount(){
return items.size();
}
@Override
public int getItemViewType(int position){
return items.get(position).getViewType();
}
}
private class HeaderViewHolder extends BindableViewHolder<HeaderItem>{
private final TextView text;
public HeaderViewHolder(){
super(getActivity(), R.layout.item_settings_header, list);
text=(TextView) itemView;
}
@Override
public void onBind(HeaderItem item){
text.setText(item.text);
}
}
protected boolean onColorPreferenceClick(MenuItem item){
GlobalUserPreferences.ColorPreference pref = null;
int id = item.getItemId();
if (id == R.id.m3_color) pref = GlobalUserPreferences.ColorPreference.MATERIAL3;
else if (id == R.id.pink_color) pref = GlobalUserPreferences.ColorPreference.PINK;
else if (id == R.id.purple_color) pref = GlobalUserPreferences.ColorPreference.PURPLE;
else if (id == R.id.green_color) pref = GlobalUserPreferences.ColorPreference.GREEN;
else if (id == R.id.blue_color) pref = GlobalUserPreferences.ColorPreference.BLUE;
else if (id == R.id.brown_color) pref = GlobalUserPreferences.ColorPreference.BROWN;
else if (id == R.id.red_color) pref = GlobalUserPreferences.ColorPreference.RED;
else if (id == R.id.yellow_color) pref = GlobalUserPreferences.ColorPreference.YELLOW;
else if (id == R.id.nord_color) pref = GlobalUserPreferences.ColorPreference.NORD;
if (pref == null) return false;
GlobalUserPreferences.color=pref;
GlobalUserPreferences.save();
restartActivityToApplyNewTheme();
return true;
}
protected void onThemePreferenceClick(GlobalUserPreferences.ThemePreference theme){
GlobalUserPreferences.theme=theme;
GlobalUserPreferences.save();
restartActivityToApplyNewTheme();
}
protected void restartActivityToApplyNewTheme(){
// Calling activity.recreate() causes a black screen for like half a second.
// So, let's take a screenshot and overlay it on top to create the illusion of a smoother transition.
// As a bonus, we can fade it out to make it even smoother.
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){
View activityDecorView=getActivity().getWindow().getDecorView();
Bitmap bitmap=Bitmap.createBitmap(activityDecorView.getWidth(), activityDecorView.getHeight(), Bitmap.Config.ARGB_8888);
activityDecorView.draw(new Canvas(bitmap));
themeTransitionWindowView=new ImageView(MastodonApp.context);
themeTransitionWindowView.setImageBitmap(bitmap);
WindowManager.LayoutParams lp=new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_APPLICATION);
lp.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |
WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
lp.systemUiVisibility=View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
lp.systemUiVisibility|=(activityDecorView.getWindowSystemUiVisibility() & (View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR));
lp.width=lp.height=WindowManager.LayoutParams.MATCH_PARENT;
lp.token=getActivity().getWindow().getAttributes().token;
lp.windowAnimations=R.style.window_fade_out;
MastodonApp.context.getSystemService(WindowManager.class).addView(themeTransitionWindowView, lp);
}
getActivity().recreate();
}
@Override
public void onDestroy(){
super.onDestroy();
if(needUpdateNotificationSettings && PushSubscriptionManager.arePushNotificationsAvailable()){
AccountSessionManager.getInstance().getAccount(accountID).getPushSubscriptionManager().updatePushSettings(pushSubscription);
}
if(needAppRestart) UiUtils.restartApp();
}
protected void onTrueBlackThemeChanged(SettingsBaseFragment.SwitchItem item){
GlobalUserPreferences.trueBlackTheme=item.checked;
GlobalUserPreferences.save();
RecyclerView.ViewHolder themeHolder=list.findViewHolderForAdapterPosition(items.indexOf(themeItem));
if(themeHolder!=null){
((SettingsBaseFragment.ThemeViewHolder)themeHolder).bindSubitems();
}else{
list.getAdapter().notifyItemChanged(items.indexOf(themeItem));
}
if(UiUtils.isDarkTheme()){
restartActivityToApplyNewTheme();
}
}
private class NotificationPolicyViewHolder extends BindableViewHolder<NotificationPolicyItem>{
private final Button button;
private final PopupMenu popupMenu;
@SuppressLint("ClickableViewAccessibility")
public NotificationPolicyViewHolder(){
super(getActivity(), R.layout.item_settings_notification_policy, list);
button=findViewById(R.id.button);
popupMenu=new PopupMenu(getActivity(), button, Gravity.CENTER_HORIZONTAL);
popupMenu.inflate(R.menu.notification_policy);
popupMenu.setOnMenuItemClickListener(item->{
PushSubscription.Policy policy;
int id=item.getItemId();
if(id==R.id.notify_anyone)
policy=PushSubscription.Policy.ALL;
else if(id==R.id.notify_followed)
policy=PushSubscription.Policy.FOLLOWED;
else if(id==R.id.notify_follower)
policy=PushSubscription.Policy.FOLLOWER;
else if(id==R.id.notify_none)
policy=PushSubscription.Policy.NONE;
else
return false;
onNotificationsPolicyChanged(policy);
return true;
});
UiUtils.enablePopupMenuIcons(getActivity(), popupMenu);
button.setOnTouchListener(popupMenu.getDragToOpenListener());
button.setOnClickListener(v->popupMenu.show());
}
@Override
public void onBind(SettingsBaseFragment.NotificationPolicyItem item){
button.setText(switch(getPushSubscription().policy){
case ALL -> R.string.notify_anyone;
case FOLLOWED -> R.string.notify_followed;
case FOLLOWER -> R.string.notify_follower;
case NONE -> R.string.notify_none;
});
}
}
private void onNotificationsPolicyChanged(PushSubscription.Policy policy){
PushSubscription subscription=getPushSubscription();
PushSubscription.Policy prevPolicy=subscription.policy;
if(prevPolicy==policy)
return;
subscription.policy=policy;
int index=items.indexOf(notificationPolicyItem);
RecyclerView.ViewHolder policyHolder=list.findViewHolderForAdapterPosition(index);
if(policyHolder!=null){
((SettingsBaseFragment.NotificationPolicyViewHolder)policyHolder).rebind();
}else{
list.getAdapter().notifyItemChanged(index);
}
if((prevPolicy==PushSubscription.Policy.NONE)!=(policy==PushSubscription.Policy.NONE)){
boolean newState=policy!=PushSubscription.Policy.NONE;
for(PushNotification.Type value : PushNotification.Type.values()){
onNotificationsChanged(value, newState);
}
index++;
while(items.get(index) instanceof SettingsBaseFragment.SwitchItem si){
si.enabled=si.checked=newState;
RecyclerView.ViewHolder holder=list.findViewHolderForAdapterPosition(index);
if(holder!=null)
((BindableViewHolder<?>)holder).rebind();
else
list.getAdapter().notifyItemChanged(index);
index++;
}
}
needUpdateNotificationSettings=true;
}
protected void onNotificationsChanged(PushNotification.Type type, boolean enabled){
PushSubscription subscription=getPushSubscription();
switch(type){
case FAVORITE -> subscription.alerts.favourite=enabled;
case FOLLOW -> subscription.alerts.follow=enabled;
case REBLOG -> subscription.alerts.reblog=enabled;
case MENTION -> subscription.alerts.mention=enabled;
case POLL -> subscription.alerts.poll=enabled;
case STATUS -> subscription.alerts.status=enabled;
case UPDATE -> subscription.alerts.update=enabled;
}
needUpdateNotificationSettings=true;
}
protected PushSubscription getPushSubscription(){
if(pushSubscription!=null)
return pushSubscription;
AccountSession session=AccountSessionManager.getInstance().getAccount(accountID);
if(session.pushSubscription==null){
pushSubscription=new PushSubscription();
pushSubscription.alerts=PushSubscription.Alerts.ofAll();
}else{
pushSubscription=session.pushSubscription.clone();
}
return pushSubscription;
}
private class SwitchViewHolder extends BindableViewHolder<SwitchItem> implements UsableRecyclerView.DisableableClickable{
private final TextView text;
private final ImageView icon;
private final Switch checkbox;
public SwitchViewHolder(){
super(getActivity(), R.layout.item_settings_switch, list);
text=findViewById(R.id.text);
icon=findViewById(R.id.icon);
checkbox=findViewById(R.id.checkbox);
}
@Override
public void onBind(SwitchItem item){
text.setText(item.text);
if (item.icon == 0) {
icon.setVisibility(View.GONE);
} else {
icon.setVisibility(View.VISIBLE);
icon.setImageResource(item.icon);
}
checkbox.setChecked(item.checked && item.enabled);
checkbox.setEnabled(item.enabled);
}
@Override
public void onClick(){
item.checked=!item.checked;
checkbox.setChecked(item.checked);
item.onChanged.accept(item);
}
@Override
public boolean isEnabled(){
return item.enabled;
}
}
class ThemeViewHolder extends BindableViewHolder<ThemeItem>{
private ThemeViewHolder.SubitemHolder autoHolder, lightHolder, darkHolder;
public ThemeViewHolder(){
super(getActivity(), R.layout.item_settings_theme, list);
autoHolder=new ThemeViewHolder.SubitemHolder(findViewById(R.id.theme_auto));
lightHolder=new ThemeViewHolder.SubitemHolder(findViewById(R.id.theme_light));
darkHolder=new ThemeViewHolder.SubitemHolder(findViewById(R.id.theme_dark));
}
@Override
public void onBind(SettingsBaseFragment.ThemeItem item){
bindSubitems();
}
public void bindSubitems(){
autoHolder.bind(R.string.theme_auto, GlobalUserPreferences.trueBlackTheme ? R.drawable.theme_auto_trueblack : R.drawable.theme_auto, GlobalUserPreferences.theme==GlobalUserPreferences.ThemePreference.AUTO);
lightHolder.bind(R.string.theme_light, R.drawable.theme_light, GlobalUserPreferences.theme==GlobalUserPreferences.ThemePreference.LIGHT);
darkHolder.bind(R.string.theme_dark, GlobalUserPreferences.trueBlackTheme ? R.drawable.theme_dark_trueblack : R.drawable.theme_dark, GlobalUserPreferences.theme==GlobalUserPreferences.ThemePreference.DARK);
}
private void onSubitemClick(View v){
GlobalUserPreferences.ThemePreference pref;
if(v.getId()==R.id.theme_auto)
pref=GlobalUserPreferences.ThemePreference.AUTO;
else if(v.getId()==R.id.theme_light)
pref=GlobalUserPreferences.ThemePreference.LIGHT;
else if(v.getId()==R.id.theme_dark)
pref=GlobalUserPreferences.ThemePreference.DARK;
else
return;
onThemePreferenceClick(pref);
}
private class SubitemHolder{
public TextView text;
public ImageView icon;
public RadioButton checkbox;
public SubitemHolder(View view){
text=view.findViewById(R.id.text);
icon=view.findViewById(R.id.icon);
checkbox=view.findViewById(R.id.checkbox);
view.setOnClickListener(ThemeViewHolder.this::onSubitemClick);
icon.setClipToOutline(true);
icon.setOutlineProvider(OutlineProviders.roundedRect(4));
}
public void bind(int text, int icon, boolean checked){
this.text.setText(text);
this.icon.setImageResource(icon);
checkbox.setChecked(checked);
}
public void setChecked(boolean checked){
checkbox.setChecked(checked);
}
}
}
private class SettingsCategoryViewHolder extends BindableViewHolder<SettingsCategoryItem> implements UsableRecyclerView.DisableableClickable{
private final ImageView icon;
private final TextView text;
@SuppressLint("ClickableViewAccessibility")
public SettingsCategoryViewHolder(){
super(getActivity(), R.layout.item_settings_category, list);
text=findViewById(R.id.text);
icon=findViewById(R.id.icon);
}
@Override
public void onBind(SettingsCategoryItem item){
text.setText(item.text);
icon.setImageResource(item.icon);
}
@Override
public void onClick() {
item.onClick.run();
}
@Override
public boolean isEnabled(){
return true;
}
}
protected class ButtonViewHolder extends BindableViewHolder<ButtonItem>{
private final Button button;
private final ImageView icon;
private final TextView text;
@SuppressLint("ClickableViewAccessibility")
public ButtonViewHolder(){
super(getActivity(), R.layout.item_settings_button, list);
text=findViewById(R.id.text);
icon=findViewById(R.id.icon);
button=findViewById(R.id.button);
}
@Override
public void onBind(ButtonItem item){
text.setText(item.text);
icon.setImageResource(item.icon);
item.buttonConsumer.accept(button);
}
}
private class TextViewHolder extends BindableViewHolder<TextItem> implements UsableRecyclerView.Clickable{
private final TextView text, secondaryText;
private final ProgressBar progress;
private final ImageView icon;
public TextViewHolder(){
super(getActivity(), R.layout.item_settings_text, list);
text = itemView.findViewById(R.id.text);
secondaryText = itemView.findViewById(R.id.secondary_text);
progress = itemView.findViewById(R.id.progress);
icon = itemView.findViewById(R.id.icon);
}
@Override
public void onBind(TextItem item){
icon.setVisibility(item.icon != 0 ? View.VISIBLE : View.GONE);
secondaryText.setVisibility(item.secondaryText != null ? View.VISIBLE : View.GONE);
text.setText(item.text);
progress.animate().alpha(item.loading ? 1 : 0);
icon.setImageResource(item.icon);
secondaryText.setText(item.secondaryText);
}
@Override
public void onClick(){
item.onClick.run();
}
}
private class SmallTextViewHolder extends BindableViewHolder<SmallTextItem> {
private final TextView text;
public SmallTextViewHolder(){
super(getActivity(), R.layout.item_settings_text, list);
text = itemView.findViewById(R.id.text);
text.setTextColor(UiUtils.getThemeColor(getActivity(), android.R.attr.textColorSecondary));
text.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
text.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
text.setPaddingRelative(text.getPaddingStart(), 0, text.getPaddingEnd(), text.getPaddingBottom());
}
@Override
public void onBind(SmallTextItem item){
text.setText(item.text);
}
}
private class FooterViewHolder extends BindableViewHolder<FooterItem> implements UsableRecyclerView.Clickable{
private final TextView text;
public FooterViewHolder(){
super(getActivity(), R.layout.item_settings_footer, list);
text=(TextView) itemView;
}
@Override
public void onBind(FooterItem item){
text.setText(item.text);
}
@Override
public void onClick(){
item.onClick.run();
}
}
private class UpdateViewHolder extends BindableViewHolder<UpdateItem>{
private final TextView text, changelog;
private final Button button;
private final ImageButton cancelBtn;
private final ProgressBar progress;
private ObjectAnimator rotationAnimator;
private Runnable progressUpdater=this::updateProgress;
public UpdateViewHolder(){
super(getActivity(), R.layout.item_settings_update, list);
text=findViewById(R.id.text);
changelog=findViewById(R.id.changelog);
button=findViewById(R.id.button);
cancelBtn=findViewById(R.id.cancel_btn);
progress=findViewById(R.id.progress);
button.setOnClickListener(v->{
GithubSelfUpdater updater=GithubSelfUpdater.getInstance();
switch(updater.getState()){
case UPDATE_AVAILABLE -> updater.downloadUpdate();
case DOWNLOADED -> updater.installUpdate(getActivity());
}
});
cancelBtn.setOnClickListener(v->GithubSelfUpdater.getInstance().cancelDownload());
rotationAnimator=ObjectAnimator.ofFloat(progress, View.ROTATION, 0f, 360f);
rotationAnimator.setInterpolator(new LinearInterpolator());
rotationAnimator.setDuration(1500);
rotationAnimator.setRepeatCount(ObjectAnimator.INFINITE);
}
@Override
public void onBind(SettingsBaseFragment.UpdateItem item){
GithubSelfUpdater updater=GithubSelfUpdater.getInstance();
GithubSelfUpdater.UpdateState state=updater.getState();
if (state == GithubSelfUpdater.UpdateState.CHECKING) return;
GithubSelfUpdater.UpdateInfo info=updater.getUpdateInfo();
if(state!=GithubSelfUpdater.UpdateState.DOWNLOADED){
text.setText(getString(R.string.mo_update_available, info.version));
button.setText(getString(R.string.download_update, UiUtils.formatFileSize(getActivity(), info.size, false)));
}else{
text.setText(getString(R.string.mo_update_ready, info.version));
button.setText(R.string.install_update);
}
if(state==GithubSelfUpdater.UpdateState.DOWNLOADING){
rotationAnimator.start();
button.setVisibility(View.INVISIBLE);
cancelBtn.setVisibility(View.VISIBLE);
progress.setVisibility(View.VISIBLE);
updateProgress();
}else{
rotationAnimator.cancel();
button.setVisibility(View.VISIBLE);
cancelBtn.setVisibility(View.GONE);
progress.setVisibility(View.GONE);
progress.removeCallbacks(progressUpdater);
}
changelog.setText(info.changelog);
// changelog.setText(getString(R.string.sk_changelog, info.changelog));
}
private void updateProgress(){
GithubSelfUpdater updater=GithubSelfUpdater.getInstance();
if(updater.getState()!=GithubSelfUpdater.UpdateState.DOWNLOADING)
return;
int value=Math.round(progress.getMax()*updater.getDownloadProgress());
if(Build.VERSION.SDK_INT>=24)
progress.setProgress(value, true);
else
progress.setProgress(value);
progress.postDelayed(progressUpdater, 1000);
}
}
}

View File

@@ -1,4 +1,4 @@
package org.joinmastodon.android.fragments; package org.joinmastodon.android.fragments.settings;
import android.animation.ObjectAnimator; import android.animation.ObjectAnimator;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
@@ -7,8 +7,10 @@ import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Rect; import android.graphics.Rect;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.LruCache; import android.util.LruCache;
import android.util.TypedValue; import android.util.TypedValue;
@@ -50,6 +52,7 @@ import org.joinmastodon.android.api.session.AccountActivationInfo;
import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.events.SelfUpdateStateChangedEvent; import org.joinmastodon.android.events.SelfUpdateStateChangedEvent;
import org.joinmastodon.android.fragments.MastodonToolbarFragment;
import org.joinmastodon.android.fragments.onboarding.InstanceRulesFragment; import org.joinmastodon.android.fragments.onboarding.InstanceRulesFragment;
import org.joinmastodon.android.model.Instance; import org.joinmastodon.android.model.Instance;
import org.joinmastodon.android.fragments.onboarding.AccountActivationFragment; import org.joinmastodon.android.fragments.onboarding.AccountActivationFragment;
@@ -77,7 +80,8 @@ import me.grishka.appkit.utils.BindableViewHolder;
import me.grishka.appkit.utils.V; import me.grishka.appkit.utils.V;
import me.grishka.appkit.views.UsableRecyclerView; import me.grishka.appkit.views.UsableRecyclerView;
public class SettingsFragment extends MastodonToolbarFragment{ public class SettingsFragment extends MastodonToolbarFragment {
private View view;
private UsableRecyclerView list; private UsableRecyclerView list;
private ArrayList<Item> items=new ArrayList<>(); private ArrayList<Item> items=new ArrayList<>();
private ThemeItem themeItem; private ThemeItem themeItem;
@@ -109,7 +113,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
if(GithubSelfUpdater.needSelfUpdating()){ if(GithubSelfUpdater.needSelfUpdating()){
GithubSelfUpdater updater=GithubSelfUpdater.getInstance(); GithubSelfUpdater updater=GithubSelfUpdater.getInstance();
GithubSelfUpdater.UpdateState state=updater.getState(); GithubSelfUpdater.UpdateState state=updater.getState();
if(state!=GithubSelfUpdater.UpdateState.NO_UPDATE && state!=GithubSelfUpdater.UpdateState.CHECKING){ if(state!=GithubSelfUpdater.UpdateState.NO_UPDATE && state!=GithubSelfUpdater.UpdateState.CHECKING && updater.getUpdateInfo() != null){
items.add(new UpdateItem()); items.add(new UpdateItem());
} }
} }
@@ -140,6 +144,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
items.add(new SwitchItem(R.string.sk_disable_marquee, R.drawable.ic_fluent_text_more_24_regular, GlobalUserPreferences.disableMarquee, i->{ items.add(new SwitchItem(R.string.sk_disable_marquee, R.drawable.ic_fluent_text_more_24_regular, GlobalUserPreferences.disableMarquee, i->{
GlobalUserPreferences.disableMarquee=i.checked; GlobalUserPreferences.disableMarquee=i.checked;
GlobalUserPreferences.save(); GlobalUserPreferences.save();
needAppRestart=true;
})); }));
items.add(new SwitchItem(R.string.sk_settings_uniform_icon_for_notifications, R.drawable.ic_ntf_logo, GlobalUserPreferences.uniformNotificationIcon, i->{ items.add(new SwitchItem(R.string.sk_settings_uniform_icon_for_notifications, R.drawable.ic_ntf_logo, GlobalUserPreferences.uniformNotificationIcon, i->{
GlobalUserPreferences.uniformNotificationIcon=i.checked; GlobalUserPreferences.uniformNotificationIcon=i.checked;
@@ -161,6 +166,15 @@ public class SettingsFragment extends MastodonToolbarFragment{
GlobalUserPreferences.useCustomTabs=i.checked; GlobalUserPreferences.useCustomTabs=i.checked;
GlobalUserPreferences.save(); GlobalUserPreferences.save();
})); }));
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.mo_load_remote_followers, R.drawable.ic_fluent_people_24_regular, GlobalUserPreferences.loadRemoteAccountFollowers, i -> {
GlobalUserPreferences.loadRemoteAccountFollowers=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.sk_settings_show_interaction_counts, R.drawable.ic_fluent_number_row_24_regular, GlobalUserPreferences.showInteractionCounts, i->{ items.add(new SwitchItem(R.string.sk_settings_show_interaction_counts, R.drawable.ic_fluent_number_row_24_regular, GlobalUserPreferences.showInteractionCounts, i->{
GlobalUserPreferences.showInteractionCounts=i.checked; GlobalUserPreferences.showInteractionCounts=i.checked;
GlobalUserPreferences.save(); GlobalUserPreferences.save();
@@ -171,11 +185,6 @@ public class SettingsFragment extends MastodonToolbarFragment{
})); }));
// 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.sk_settings_show_differentiated_notification_icons, R.drawable.ic_ntf_logo, GlobalUserPreferences.showUniformPushNoticationIcons, this::onNotificationStyleChanged));
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->{ 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.disableSwipe=i.checked;
GlobalUserPreferences.save(); GlobalUserPreferences.save();
@@ -238,6 +247,11 @@ public class SettingsFragment extends MastodonToolbarFragment{
GlobalUserPreferences.defaultToUnlistedReplies=i.checked; GlobalUserPreferences.defaultToUnlistedReplies=i.checked;
GlobalUserPreferences.save(); GlobalUserPreferences.save();
})); }));
// TODO find a good icon for this setting
items.add(new SwitchItem(R.string.mo_mention_reblogger_automatically, R.drawable.ic_fluent_balloon_24_regular, GlobalUserPreferences.mentionRebloggerAutomatically, i -> {
GlobalUserPreferences.mentionRebloggerAutomatically=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->{ 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.disableAltTextReminder=i.checked; GlobalUserPreferences.disableAltTextReminder=i.checked;
GlobalUserPreferences.save(); GlobalUserPreferences.save();
@@ -302,11 +316,6 @@ public class SettingsFragment extends MastodonToolbarFragment{
GlobalUserPreferences.collapseLongPosts=i.checked; GlobalUserPreferences.collapseLongPosts=i.checked;
GlobalUserPreferences.save(); GlobalUserPreferences.save();
})); }));
items.add(new SwitchItem(R.string.sk_settings_hide_interaction, R.drawable.ic_fluent_eye_24_regular, GlobalUserPreferences.spectatorMode, i->{
GlobalUserPreferences.spectatorMode=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new SwitchItem(R.string.sk_settings_hide_fab, R.drawable.ic_fluent_edit_24_regular, GlobalUserPreferences.autoHideFab, i->{ items.add(new SwitchItem(R.string.sk_settings_hide_fab, R.drawable.ic_fluent_edit_24_regular, GlobalUserPreferences.autoHideFab, i->{
GlobalUserPreferences.autoHideFab=i.checked; GlobalUserPreferences.autoHideFab=i.checked;
GlobalUserPreferences.save(); GlobalUserPreferences.save();
@@ -327,6 +336,11 @@ public class SettingsFragment extends MastodonToolbarFragment{
needAppRestart=true; needAppRestart=true;
})); }));
compactReblogReplyLineItem.enabled=GlobalUserPreferences.replyLineAboveHeader; compactReblogReplyLineItem.enabled=GlobalUserPreferences.replyLineAboveHeader;
items.add(new SwitchItem(R.string.sk_settings_hide_interaction, R.drawable.ic_fluent_eye_24_regular, GlobalUserPreferences.spectatorMode, i->{
GlobalUserPreferences.spectatorMode=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
// items.add(new SwitchItem(R.string.sk_settings_translate_only_opened, R.drawable.ic_fluent_translate_24_regular, GlobalUserPreferences.translateButtonOpenedOnly, i->{ // items.add(new SwitchItem(R.string.sk_settings_translate_only_opened, R.drawable.ic_fluent_translate_24_regular, GlobalUserPreferences.translateButtonOpenedOnly, i->{
// GlobalUserPreferences.translateButtonOpenedOnly=i.checked; // GlobalUserPreferences.translateButtonOpenedOnly=i.checked;
// GlobalUserPreferences.save(); // GlobalUserPreferences.save();
@@ -445,11 +459,11 @@ public class SettingsFragment extends MastodonToolbarFragment{
GlobalUserPreferences.recentEmojis.clear(); GlobalUserPreferences.recentEmojis.clear();
GlobalUserPreferences.save(); GlobalUserPreferences.save();
})); }));
// items.add(new TextItem(R.string.log_out, this::confirmLogOut));
if(BuildConfig.DEBUG){ if(BuildConfig.DEBUG){
items.add(new RedHeaderItem("Debug options")); items.add(new RedHeaderItem("Debug options"));
items.add(new TextItem("Test e-mail confirmation flow", ()->{
items.add(new TextItem("Test E-Mail confirmation flow", ()->{
AccountSession sess=AccountSessionManager.getInstance().getAccount(accountID); AccountSession sess=AccountSessionManager.getInstance().getAccount(accountID);
sess.activated=false; sess.activated=false;
sess.activationInfo=new AccountActivationInfo("test@email", System.currentTimeMillis()); sess.activationInfo=new AccountActivationInfo("test@email", System.currentTimeMillis());
@@ -458,9 +472,35 @@ public class SettingsFragment extends MastodonToolbarFragment{
args.putBoolean("debug", true); args.putBoolean("debug", true);
Nav.goClearingStack(getActivity(), AccountActivationFragment.class, args); Nav.goClearingStack(getActivity(), AccountActivationFragment.class, args);
})); }));
items.add(new TextItem("Copy preferences", ()->{
StringBuilder prefBuilder = new StringBuilder();
GlobalUserPreferences.load();
GlobalUserPreferences.getPrefs().getAll().forEach((key, value) -> prefBuilder.append(key).append(": ").append(value).append('\n'));
UiUtils.copyText(view, prefBuilder.toString());
}));
items.add(new TextItem("Reset preferences", ()->{
GlobalUserPreferences.load();
GlobalUserPreferences.getPrefs().edit().clear().commit();
UiUtils.restartApp();
}, R.drawable.ic_fluent_warning_24_regular));
items.add(new TextItem("Open App Info", () ->
getContext().startActivity(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
.setData(Uri.fromParts("package", getContext().getPackageName(), null))),
R.drawable.ic_fluent_open_24_regular
)
);
items.add(new TextItem("Open developer settings",
()-> getContext().startActivity(new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS)),
R.drawable.ic_fluent_open_24_regular)
);
} }
items.add(new FooterItem(getString(R.string.mo_settings_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE))); String version = getContext().getString(R.string.mo_settings_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE);
items.add(new FooterItem(version, () -> UiUtils.copyText(view, version)));
} }
private void updatePublishText(Button btn) { private void updatePublishText(Button btn) {
@@ -519,6 +559,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
@Override @Override
public void onViewCreated(View view, Bundle savedInstanceState){ public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
this.view = view;
if(GithubSelfUpdater.needSelfUpdating()) if(GithubSelfUpdater.needSelfUpdating())
E.register(this); E.register(this);
} }
@@ -887,6 +928,12 @@ public class SettingsFragment extends MastodonToolbarFragment{
this.onClick=onClick; this.onClick=onClick;
} }
public TextItem(String text, Runnable onClick, @DrawableRes int icon){
this.text=text;
this.onClick=onClick;
this.icon=icon;
}
@Override @Override
public int getViewType(){ public int getViewType(){
return 4; return 4;
@@ -911,9 +958,11 @@ public class SettingsFragment extends MastodonToolbarFragment{
private class FooterItem extends Item{ private class FooterItem extends Item{
private String text; private String text;
private Runnable onClick;
public FooterItem(String text){ public FooterItem(String text, Runnable onClick){
this.text=text; this.text=text;
this.onClick=onClick;
} }
@Override @Override
@@ -1192,7 +1241,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
} }
} }
private class FooterViewHolder extends BindableViewHolder<FooterItem>{ private class FooterViewHolder extends BindableViewHolder<FooterItem> implements UsableRecyclerView.Clickable{
private final TextView text; private final TextView text;
public FooterViewHolder(){ public FooterViewHolder(){
super(getActivity(), R.layout.item_settings_footer, list); super(getActivity(), R.layout.item_settings_footer, list);
@@ -1203,6 +1252,11 @@ public class SettingsFragment extends MastodonToolbarFragment{
public void onBind(FooterItem item){ public void onBind(FooterItem item){
text.setText(item.text); text.setText(item.text);
} }
@Override
public void onClick(){
item.onClick.run();
}
} }
private class UpdateViewHolder extends BindableViewHolder<UpdateItem>{ private class UpdateViewHolder extends BindableViewHolder<UpdateItem>{

View File

@@ -0,0 +1,20 @@
package org.joinmastodon.android.fragments.settings;
import android.os.Bundle;
import org.joinmastodon.android.R;
import java.util.ArrayList;
import me.grishka.appkit.Nav;
public class SettingsMainFragment extends SettingsBaseFragment{
@Override
public void addItems(ArrayList<SettingsBaseFragment.Item> items) {
items.add(new SettingsBaseFragment.SettingsCategoryItem(R.string.settings_theme, () -> {
Bundle args = new Bundle();
args.putString("account", accountID);
Nav.go(getActivity(), SettingsAppearanceFragment.class, args);
}, R.drawable.ic_fluent_color_24_regular));
}
}

View File

@@ -0,0 +1,128 @@
package org.joinmastodon.android.fragments.settings;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.PopupMenu;
import android.widget.Toast;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.R;
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
import java.util.ArrayList;
import me.grishka.appkit.utils.V;
public class TimeLineFragment extends SettingsBaseFragment{
private SwitchItem showNewPostsButtonItem, compactReblogReplyLineItem;
@Override
public void addItems(ArrayList<Item> items) {
items.add(new SwitchItem(R.string.sk_settings_show_replies, R.drawable.ic_fluent_chat_multiple_24_regular, GlobalUserPreferences.showReplies, i->{
GlobalUserPreferences.showReplies=i.checked;
GlobalUserPreferences.save();
}));
if (getInstance().pleroma != null) {
items.add(new ButtonItem(R.string.sk_settings_reply_visibility, R.drawable.ic_fluent_chat_24_regular, b->{
PopupMenu popupMenu=new PopupMenu(getActivity(), b, Gravity.CENTER_HORIZONTAL);
popupMenu.inflate(R.menu.reply_visibility);
popupMenu.setOnMenuItemClickListener(item -> this.onReplyVisibilityChanged(item, b));
b.setOnTouchListener(popupMenu.getDragToOpenListener());
b.setOnClickListener(v->popupMenu.show());
b.setText(GlobalUserPreferences.replyVisibility == null ?
R.string.sk_settings_reply_visibility_all :
switch(GlobalUserPreferences.replyVisibility){
case "following" -> R.string.sk_settings_reply_visibility_following;
case "self" -> R.string.sk_settings_reply_visibility_self;
default -> R.string.sk_settings_reply_visibility_all;
});
}));
}
items.add(new SwitchItem(R.string.sk_settings_show_boosts, R.drawable.ic_fluent_arrow_repeat_all_24_regular, GlobalUserPreferences.showBoosts, i->{
GlobalUserPreferences.showBoosts=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.sk_settings_load_new_posts, R.drawable.ic_fluent_arrow_sync_24_regular, GlobalUserPreferences.loadNewPosts, i->{
GlobalUserPreferences.loadNewPosts=i.checked;
showNewPostsButtonItem.enabled = i.checked;
if (!i.checked) {
GlobalUserPreferences.showNewPostsButton = false;
showNewPostsButtonItem.checked = false;
}
if (list.findViewHolderForAdapterPosition(items.indexOf(showNewPostsButtonItem)) instanceof SwitchViewHolder svh) svh.rebind();
GlobalUserPreferences.save();
}));
items.add(showNewPostsButtonItem = new SwitchItem(R.string.sk_settings_show_new_posts_button, R.drawable.ic_fluent_arrow_up_24_regular, GlobalUserPreferences.showNewPostsButton, i->{
GlobalUserPreferences.showNewPostsButton=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.sk_settings_show_alt_indicator, R.drawable.ic_fluent_scan_text_24_regular, GlobalUserPreferences.showAltIndicator, i->{
GlobalUserPreferences.showAltIndicator=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new SwitchItem(R.string.sk_settings_show_no_alt_indicator, R.drawable.ic_fluent_important_24_regular, GlobalUserPreferences.showNoAltIndicator, i->{
GlobalUserPreferences.showNoAltIndicator=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new SwitchItem(R.string.sk_settings_collapse_long_posts, R.drawable.ic_fluent_chevron_down_24_regular, GlobalUserPreferences.collapseLongPosts, i->{
GlobalUserPreferences.collapseLongPosts=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.sk_settings_hide_fab, R.drawable.ic_fluent_edit_24_regular, GlobalUserPreferences.autoHideFab, i->{
GlobalUserPreferences.autoHideFab=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new SwitchItem(R.string.sk_reply_line_above_avatar, R.drawable.ic_fluent_arrow_reply_24_regular, GlobalUserPreferences.replyLineAboveHeader, i->{
GlobalUserPreferences.replyLineAboveHeader=i.checked;
GlobalUserPreferences.compactReblogReplyLine=i.checked;
compactReblogReplyLineItem.enabled=i.checked;
compactReblogReplyLineItem.checked= GlobalUserPreferences.replyLineAboveHeader;
if (list.findViewHolderForAdapterPosition(items.indexOf(compactReblogReplyLineItem)) instanceof SwitchViewHolder svh) svh.rebind();
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(compactReblogReplyLineItem=new SwitchItem(R.string.sk_compact_reblog_reply_line, R.drawable.ic_fluent_re_order_24_regular, GlobalUserPreferences.compactReblogReplyLine, i->{
GlobalUserPreferences.compactReblogReplyLine=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
compactReblogReplyLineItem.enabled=GlobalUserPreferences.replyLineAboveHeader;
items.add(new SwitchItem(R.string.sk_settings_hide_interaction, R.drawable.ic_fluent_eye_24_regular, GlobalUserPreferences.spectatorMode, i->{
GlobalUserPreferences.spectatorMode=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
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;
}));
}
private boolean onReplyVisibilityChanged(MenuItem item, Button btn){
String pref = null;
int id = item.getItemId();
if (id == R.id.reply_visibility_following) pref = "following";
else if (id == R.id.reply_visibility_self) pref = "self";
GlobalUserPreferences.replyVisibility=pref;
GlobalUserPreferences.save();
btn.setText(GlobalUserPreferences.replyVisibility == null ?
R.string.sk_settings_reply_visibility_all :
switch(GlobalUserPreferences.replyVisibility){
case "following" -> R.string.sk_settings_reply_visibility_following;
case "self" -> R.string.sk_settings_reply_visibility_self;
default -> R.string.sk_settings_reply_visibility_all;
});
return true;
}
}

View File

@@ -20,6 +20,8 @@ public class Notification extends BaseModel implements DisplayItemsParent{
public Account account; public Account account;
public Status status; public Status status;
public Report report; public Report report;
public String emoji;
public String emojiUrl;
@Override @Override
public void postprocess() throws ObjectValidationException{ public void postprocess() throws ObjectValidationException{
@@ -54,7 +56,9 @@ public class Notification extends BaseModel implements DisplayItemsParent{
@SerializedName("admin.sign_up") @SerializedName("admin.sign_up")
SIGN_UP, SIGN_UP,
@SerializedName("admin.report") @SerializedName("admin.report")
REPORT REPORT,
@SerializedName("pleroma:emoji_reaction")
EMOJI_REACTION
} }
@Parcel @Parcel

View File

@@ -3,6 +3,8 @@ package org.joinmastodon.android.model;
import static org.joinmastodon.android.api.MastodonAPIController.gson; import static org.joinmastodon.android.api.MastodonAPIController.gson;
import static org.joinmastodon.android.api.MastodonAPIController.gsonWithoutDeserializer; import static org.joinmastodon.android.api.MastodonAPIController.gsonWithoutDeserializer;
import androidx.annotation.Nullable;
import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer; import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
@@ -60,6 +62,8 @@ public class Status extends BaseModel implements DisplayItemsParent, Searchable{
public Card card; public Card card;
public String language; public String language;
public String text; public String text;
@Nullable
public Account rebloggedBy;
public boolean localOnly; public boolean localOnly;
public boolean favourited; public boolean favourited;

View File

@@ -1,17 +1,25 @@
package org.joinmastodon.android.ui; package org.joinmastodon.android.ui;
import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.hardware.Sensor; import android.hardware.Sensor;
import android.hardware.SensorEvent; import android.hardware.SensorEvent;
import android.hardware.SensorEventListener; import android.hardware.SensorEventListener;
import android.hardware.SensorManager; import android.hardware.SensorManager;
import android.view.MotionEvent;
import android.view.Surface; import android.view.Surface;
import android.view.View; import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.animation.PathInterpolator;
import java.util.ArrayList; import java.util.ArrayList;
public class InterpolatingMotionEffect implements SensorEventListener{ import androidx.dynamicanimation.animation.DynamicAnimation;
import androidx.dynamicanimation.animation.FloatValueHolder;
import androidx.dynamicanimation.animation.SpringAnimation;
import androidx.dynamicanimation.animation.SpringForce;
public class InterpolatingMotionEffect implements SensorEventListener, View.OnTouchListener{
private SensorManager sm; private SensorManager sm;
private WindowManager wm; private WindowManager wm;
@@ -20,6 +28,34 @@ public class InterpolatingMotionEffect implements SensorEventListener{
private Sensor accelerometer; private Sensor accelerometer;
private boolean accelerometerEnabled; private boolean accelerometerEnabled;
private ArrayList<ViewEffect> views=new ArrayList<>(); private ArrayList<ViewEffect> views=new ArrayList<>();
private float pitch, roll;
private float touchDownX, touchDownY, touchAddX, touchAddY, touchAddLastAnimX, touchAddLastAnimY;
private PathInterpolator touchInterpolator=new PathInterpolator(0.5f, 1f, 0.89f, 1f);
private SpringAnimation touchSpringX, touchSpringY;
private FloatValueHolder touchSpringXHolder=new FloatValueHolder(){
@Override
public float getValue(){
return touchAddX;
}
@Override
public void setValue(float value){
touchAddX=value;
updateEffects();
}
};
private FloatValueHolder touchSpringYHolder=new FloatValueHolder(){
@Override
public float getValue(){
return touchAddY;
}
@Override
public void setValue(float value){
touchAddY=value;
updateEffects();
}
};
public InterpolatingMotionEffect(Context context){ public InterpolatingMotionEffect(Context context){
sm=context.getSystemService(SensorManager.class); sm=context.getSystemService(SensorManager.class);
@@ -50,8 +86,8 @@ public class InterpolatingMotionEffect implements SensorEventListener{
float z=event.values[2]/SensorManager.GRAVITY_EARTH; float z=event.values[2]/SensorManager.GRAVITY_EARTH;
float pitch=(float) (Math.atan2(x, Math.sqrt(y*y+z*z))/Math.PI*2.0); pitch=(float) (Math.atan2(x, Math.sqrt(y*y+z*z))/Math.PI*2.0);
float roll=(float) (Math.atan2(y, Math.sqrt(x*x+z*z))/Math.PI*2.0); roll=(float) (Math.atan2(y, Math.sqrt(x*x+z*z))/Math.PI*2.0);
switch(rotation){ switch(rotation){
case Surface.ROTATION_0: case Surface.ROTATION_0:
@@ -88,9 +124,7 @@ public class InterpolatingMotionEffect implements SensorEventListener{
}else if(roll<-1f){ }else if(roll<-1f){
roll=-2f-roll; roll=-2f-roll;
} }
for(ViewEffect view:views){ updateEffects();
view.update(pitch, roll);
}
} }
@Override @Override
@@ -110,6 +144,62 @@ public class InterpolatingMotionEffect implements SensorEventListener{
views.clear(); views.clear();
} }
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent ev){
switch(ev.getAction()){
case MotionEvent.ACTION_DOWN -> {
if(touchSpringX!=null){
touchAddLastAnimX=touchAddX;
touchSpringX.cancel();
touchSpringX=null;
}else{
touchAddLastAnimX=0;
}
if(touchSpringY!=null){
touchAddLastAnimY=touchAddY;
touchSpringY.cancel();
touchSpringY=null;
}else{
touchAddLastAnimY=0;
}
touchDownX=ev.getX();
touchDownY=ev.getY();
}
case MotionEvent.ACTION_MOVE -> {
touchAddX=touchInterpolator.getInterpolation(Math.min(1f, Math.abs((ev.getX()-touchDownX)/(v.getWidth()/2f))));
touchAddY=touchInterpolator.getInterpolation(Math.min(1f, Math.abs((ev.getY()-touchDownY)/(v.getHeight()/2f))));
if(ev.getX()>touchDownX)
touchAddX=-touchAddX;
if(ev.getY()<touchDownY)
touchAddY=-touchAddY;
touchAddX+=touchAddLastAnimX;
touchAddY+=touchAddLastAnimY;
updateEffects();
}
case MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
touchSpringX=new SpringAnimation(touchSpringXHolder, 0f);
touchSpringX.setMinimumVisibleChange(0.01f);
touchSpringX.getSpring().setStiffness(SpringForce.STIFFNESS_LOW).setDampingRatio(0.85f);
touchSpringX.addEndListener((animation, canceled, value, velocity)->touchSpringX=null);
touchSpringX.start();
touchSpringY=new SpringAnimation(touchSpringYHolder, 0f);
touchSpringY.setMinimumVisibleChange(0.01f);
touchSpringY.getSpring().setStiffness(SpringForce.STIFFNESS_LOW).setDampingRatio(0.85f);
touchSpringY.addEndListener((animation, canceled, value, velocity)->touchSpringY=null);
touchSpringY.start();
updateEffects();
}
}
return true;
}
private void updateEffects(){
for(ViewEffect view:views){
view.update(Math.min(1f, Math.max(-1f, pitch+touchAddX)), Math.min(1f, Math.max(-1f, roll+touchAddY)));
}
}
public static class ViewEffect{ public static class ViewEffect{
private View view; private View view;
private float minX, maxX, minY, maxY; private float minX, maxX, minY, maxY;

View File

@@ -20,6 +20,7 @@ import org.joinmastodon.android.fragments.account_list.StatusFavoritesListFragme
import org.joinmastodon.android.fragments.account_list.StatusReblogsListFragment; import org.joinmastodon.android.fragments.account_list.StatusReblogsListFragment;
import org.joinmastodon.android.fragments.account_list.StatusRelatedAccountListFragment; import org.joinmastodon.android.fragments.account_list.StatusRelatedAccountListFragment;
import org.joinmastodon.android.model.Status; import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.model.StatusPrivacy;
import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.utils.UiUtils;
import org.parceler.Parcels; import org.parceler.Parcels;
@@ -72,7 +73,11 @@ public class ExtendedFooterStatusDisplayItem extends StatusDisplayItem{
public void onBind(ExtendedFooterStatusDisplayItem item){ public void onBind(ExtendedFooterStatusDisplayItem item){
Status s=item.status; Status s=item.status;
favorites.setText(context.getResources().getQuantityString(R.plurals.x_favorites, (int)(s.favouritesCount%1000), s.favouritesCount)); favorites.setText(context.getResources().getQuantityString(R.plurals.x_favorites, (int)(s.favouritesCount%1000), s.favouritesCount));
reblogs.setText(context.getResources().getQuantityString(R.plurals.x_reblogs, (int)(s.reblogsCount%1000), s.reblogsCount));
reblogs.setText(context.getResources().getQuantityString(R.plurals.x_reblogs, (int) (s.reblogsCount % 1000), s.reblogsCount));
if (s.visibility==StatusPrivacy.DIRECT)
reblogs.setVisibility(View.GONE);
if(s.editedAt!=null){ if(s.editedAt!=null){
editHistory.setVisibility(View.VISIBLE); editHistory.setVisibility(View.VISIBLE);
editHistory.setText(UiUtils.formatRelativeTimestampAsMinutesAgo(itemView.getContext(), s.editedAt)); editHistory.setText(UiUtils.formatRelativeTimestampAsMinutesAgo(itemView.getContext(), s.editedAt));

View File

@@ -86,13 +86,13 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
public final Status status; public final Status status;
private boolean hasVisibilityToggle; private boolean hasVisibilityToggle;
boolean needBottomPadding; boolean needBottomPadding;
private String extraText; private CharSequence extraText;
private Notification notification; private Notification notification;
private ScheduledStatus scheduledStatus; private ScheduledStatus scheduledStatus;
private Announcement announcement; private Announcement announcement;
private Consumer<String> consumeReadAnnouncement; private Consumer<String> consumeReadAnnouncement;
public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, String extraText, Notification notification, ScheduledStatus scheduledStatus){ public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, CharSequence extraText, Notification notification, ScheduledStatus scheduledStatus){
super(parentID, parentFragment); super(parentID, parentFragment);
user=scheduledStatus != null ? AccountSessionManager.getInstance().getAccount(accountID).self : user; user=scheduledStatus != null ? AccountSessionManager.getInstance().getAccount(accountID).self : user;
this.user=user; this.user=user;
@@ -117,6 +117,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
} }
} }
this.extraText=extraText; this.extraText=extraText;
emojiHelper.addText(extraText);
} }
public static HeaderStatusDisplayItem fromAnnouncement(Announcement a, Status fakeStatus, Account instanceUser, BaseStatusListFragment parentFragment, String accountID, Consumer<String> consumeReadID) { public static HeaderStatusDisplayItem fromAnnouncement(Announcement a, Status fakeStatus, Account instanceUser, BaseStatusListFragment parentFragment, String accountID, Consumer<String> consumeReadID) {

View File

@@ -1,6 +1,6 @@
package org.joinmastodon.android.ui.displayitems; package org.joinmastodon.android.ui.displayitems;
import static org.joinmastodon.android.ui.utils.MediaAttachmentViewController.altWrapPadding; import static org.joinmastodon.android.GlobalUserPreferences.*;
import android.animation.Animator; import android.animation.Animator;
import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter;
@@ -183,10 +183,11 @@ public class MediaGridStatusDisplayItem extends StatusDisplayItem{
altTextIndex=index; altTextIndex=index;
Attachment att=item.attachments.get(index); Attachment att=item.attachments.get(index);
boolean hasAltText = !TextUtils.isEmpty(att.description); boolean hasAltText = !TextUtils.isEmpty(att.description);
altTextButton.setVisibility(hasAltText && GlobalUserPreferences.showAltIndicator ? View.VISIBLE : View.GONE); if ((hasAltText && !showAltIndicator) || (!hasAltText && !showNoAltIndicator)) return;
noAltTextButton.setVisibility(!hasAltText && GlobalUserPreferences.showNoAltIndicator ? View.VISIBLE : View.GONE); altTextButton.setVisibility(hasAltText && showAltIndicator ? View.VISIBLE : View.GONE);
altText.setVisibility(hasAltText && GlobalUserPreferences.showAltIndicator ? View.VISIBLE : View.GONE); noAltTextButton.setVisibility(!hasAltText && showNoAltIndicator ? View.VISIBLE : View.GONE);
noAltText.setVisibility(!hasAltText && GlobalUserPreferences.showNoAltIndicator ? View.VISIBLE : View.GONE); altText.setVisibility(hasAltText && showAltIndicator ? View.VISIBLE : View.GONE);
noAltText.setVisibility(!hasAltText && showNoAltIndicator ? View.VISIBLE : View.GONE);
altText.setText(att.description); altText.setText(att.description);
altTextWrapper.setVisibility(View.VISIBLE); altTextWrapper.setVisibility(View.VISIBLE);
altTextWrapper.setBackgroundResource(hasAltText ? R.drawable.bg_image_alt_overlay : R.drawable.bg_image_no_alt_overlay); altTextWrapper.setBackgroundResource(hasAltText ? R.drawable.bg_image_alt_overlay : R.drawable.bg_image_no_alt_overlay);
@@ -202,15 +203,16 @@ public class MediaGridStatusDisplayItem extends StatusDisplayItem{
btnL-=loc[0]; btnL-=loc[0];
btnT-=loc[1]; btnT-=loc[1];
ViewGroup.MarginLayoutParams margins = (ViewGroup.MarginLayoutParams) altTextWrapper.getLayoutParams();
ArrayList<Animator> anims=new ArrayList<>(); ArrayList<Animator> anims=new ArrayList<>();
anims.add(ObjectAnimator.ofFloat(altTextButton, View.ALPHA, 1, 0)); anims.add(ObjectAnimator.ofFloat(altTextButton, View.ALPHA, 1, 0));
anims.add(ObjectAnimator.ofFloat(noAltTextButton, View.ALPHA, 1, 0)); anims.add(ObjectAnimator.ofFloat(noAltTextButton, View.ALPHA, 1, 0));
anims.add(ObjectAnimator.ofFloat(altTextScroller, View.ALPHA, 0, 1)); anims.add(ObjectAnimator.ofFloat(altTextScroller, View.ALPHA, 0, 1));
anims.add(ObjectAnimator.ofFloat(altTextClose, View.ALPHA, 0, 1)); anims.add(ObjectAnimator.ofFloat(altTextClose, View.ALPHA, 0, 1));
anims.add(ObjectAnimator.ofInt(altTextWrapper, "left", btnL+altWrapPadding[0], altTextWrapper.getLeft())); anims.add(ObjectAnimator.ofInt(altTextWrapper, "left", btnL+margins.leftMargin, altTextWrapper.getLeft()));
anims.add(ObjectAnimator.ofInt(altTextWrapper, "top", btnT+altWrapPadding[1], altTextWrapper.getTop())); anims.add(ObjectAnimator.ofInt(altTextWrapper, "top", btnT+margins.topMargin, altTextWrapper.getTop()));
anims.add(ObjectAnimator.ofInt(altTextWrapper, "right", btnL+v.getWidth()-altWrapPadding[2], altTextWrapper.getRight())); anims.add(ObjectAnimator.ofInt(altTextWrapper, "right", btnL+v.getWidth()-margins.rightMargin, altTextWrapper.getRight()));
anims.add(ObjectAnimator.ofInt(altTextWrapper, "bottom", btnT+v.getHeight()-altWrapPadding[3], altTextWrapper.getBottom())); anims.add(ObjectAnimator.ofInt(altTextWrapper, "bottom", btnT+v.getHeight()-margins.bottomMargin, altTextWrapper.getBottom()));
for(Animator a:anims) for(Animator a:anims)
a.setDuration(300); a.setDuration(300);
@@ -252,8 +254,7 @@ public class MediaGridStatusDisplayItem extends StatusDisplayItem{
boolean hasAltText = !TextUtils.isEmpty(item.attachments.get(i).description); boolean hasAltText = !TextUtils.isEmpty(item.attachments.get(i).description);
if(c.btnsWrap!=null if(c.btnsWrap!=null
&& c.btnsWrap!=btn && c.btnsWrap!=btn
&& ((hasAltText && GlobalUserPreferences.showAltIndicator) && ((hasAltText && showAltIndicator) || (!hasAltText && showNoAltIndicator))
|| (!hasAltText && GlobalUserPreferences.showNoAltIndicator))
) c.btnsWrap.setVisibility(View.VISIBLE); ) c.btnsWrap.setVisibility(View.VISIBLE);
i++; i++;
} }
@@ -265,15 +266,16 @@ public class MediaGridStatusDisplayItem extends StatusDisplayItem{
btnL-=loc[0]; btnL-=loc[0];
btnT-=loc[1]; btnT-=loc[1];
ViewGroup.MarginLayoutParams margins = (ViewGroup.MarginLayoutParams) altTextWrapper.getLayoutParams();
ArrayList<Animator> anims=new ArrayList<>(); ArrayList<Animator> anims=new ArrayList<>();
anims.add(ObjectAnimator.ofFloat(altTextButton, View.ALPHA, 1)); anims.add(ObjectAnimator.ofFloat(altTextButton, View.ALPHA, 1));
anims.add(ObjectAnimator.ofFloat(noAltTextButton, View.ALPHA, 1)); anims.add(ObjectAnimator.ofFloat(noAltTextButton, View.ALPHA, 1));
anims.add(ObjectAnimator.ofFloat(altTextScroller, View.ALPHA, 0)); anims.add(ObjectAnimator.ofFloat(altTextScroller, View.ALPHA, 0));
anims.add(ObjectAnimator.ofFloat(altTextClose, View.ALPHA, 0)); anims.add(ObjectAnimator.ofFloat(altTextClose, View.ALPHA, 0));
anims.add(ObjectAnimator.ofInt(altTextWrapper, "left", btnL+altWrapPadding[0])); anims.add(ObjectAnimator.ofInt(altTextWrapper, "left", btnL+margins.leftMargin));
anims.add(ObjectAnimator.ofInt(altTextWrapper, "top", btnT+altWrapPadding[1])); anims.add(ObjectAnimator.ofInt(altTextWrapper, "top", btnT+margins.topMargin));
anims.add(ObjectAnimator.ofInt(altTextWrapper, "right", btnL+btn.getWidth()-altWrapPadding[2])); anims.add(ObjectAnimator.ofInt(altTextWrapper, "right", btnL+btn.getWidth()-margins.rightMargin));
anims.add(ObjectAnimator.ofInt(altTextWrapper, "bottom", btnT+btn.getHeight()-altWrapPadding[3])); anims.add(ObjectAnimator.ofInt(altTextWrapper, "bottom", btnT+btn.getHeight()-margins.bottomMargin));
for(Animator a:anims) for(Animator a:anims)
a.setDuration(300); a.setDuration(300);

View File

@@ -107,7 +107,7 @@ public abstract class StatusDisplayItem{
.filter(f -> f.context.contains(filterContext)).collect(Collectors.toList()); .filter(f -> f.context.contains(filterContext)).collect(Collectors.toList());
StatusFilterPredicate filterPredicate = new StatusFilterPredicate(filters); StatusFilterPredicate filterPredicate = new StatusFilterPredicate(filters);
if(!statusForContent.filterRevealed){ if(statusForContent != null && !statusForContent.filterRevealed){
statusForContent.filterRevealed = filterPredicate.testWithWarning(status); statusForContent.filterRevealed = filterPredicate.testWithWarning(status);
} }
@@ -132,6 +132,7 @@ public abstract class StatusDisplayItem{
if(status.reblog!=null){ if(status.reblog!=null){
boolean isOwnPost = AccountSessionManager.getInstance().isSelf(fragment.getAccountID(), status.account); boolean isOwnPost = AccountSessionManager.getInstance().isSelf(fragment.getAccountID(), status.account);
statusForContent.rebloggedBy = status.account;
String fullText = fragment.getString(R.string.user_boosted, status.account.displayName); String fullText = fragment.getString(R.string.user_boosted, status.account.displayName);
String text = GlobalUserPreferences.compactReblogReplyLine && replyLine != null ? status.account.displayName : fullText; String text = GlobalUserPreferences.compactReblogReplyLine && replyLine != null ? status.account.displayName : fullText;
items.add(new ReblogOrReplyLineStatusDisplayItem(parentID, fragment, text, status.account.emojis, R.drawable.ic_fluent_arrow_repeat_all_20_filled, isOwnPost ? status.visibility : null, i->{ items.add(new ReblogOrReplyLineStatusDisplayItem(parentID, fragment, text, status.account.emojis, R.drawable.ic_fluent_arrow_repeat_all_20_filled, isOwnPost ? status.visibility : null, i->{

View File

@@ -1,10 +1,8 @@
package org.joinmastodon.android.ui.text; package org.joinmastodon.android.ui.text;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.text.TextPaint; import android.text.TextPaint;
import android.text.style.CharacterStyle; import android.text.style.CharacterStyle;
import android.util.Log;
import android.view.View; import android.view.View;
import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.utils.UiUtils;
@@ -49,14 +47,7 @@ public class LinkSpan extends CharacterStyle {
} }
public void onLongClick(View view) { public void onLongClick(View view) {
if (getType() == Type.URL) { UiUtils.copyText(view, getType() == Type.URL ? link : text);
Intent shareIntent = new Intent(Intent.ACTION_SEND)
.setType("text/plain")
.putExtra(Intent.EXTRA_TEXT, link);
view.getContext().startActivity(Intent.createChooser(shareIntent, null));
} else {
UiUtils.copyText(view, text);
}
} }
public String getLink(){ public String getLink(){

View File

@@ -29,6 +29,16 @@ public class CustomEmojiHelper{
} }
} }
public void addText(CharSequence text) {
if(!(text instanceof Spanned))
return;
CustomEmojiSpan[] spans=((Spanned) text).getSpans(0, text.length(), CustomEmojiSpan.class);
for(List<CustomEmojiSpan> group:Arrays.stream(spans).collect(Collectors.groupingBy(s->s.emoji)).values()){
this.spans.add(group);
requests.add(group.get(0).createImageLoaderRequest());
}
}
public int getImageCount(){ public int getImageCount(){
return requests.size(); return requests.size();
} }

View File

@@ -19,7 +19,6 @@ public class MediaAttachmentViewController{
public final MediaGridStatusDisplayItem.GridItemType type; public final MediaGridStatusDisplayItem.GridItemType type;
public final ImageView photo; public final ImageView photo;
public final View altButton, noAltButton, btnsWrap; public final View altButton, noAltButton, btnsWrap;
public static int[] altWrapPadding = null;
private BlurhashCrossfadeDrawable crossfadeDrawable=new BlurhashCrossfadeDrawable(); private BlurhashCrossfadeDrawable crossfadeDrawable=new BlurhashCrossfadeDrawable();
private final Context context; private final Context context;
private boolean didClear; private boolean didClear;
@@ -37,9 +36,6 @@ public class MediaAttachmentViewController{
btnsWrap=view.findViewById(R.id.alt_badges); btnsWrap=view.findViewById(R.id.alt_badges);
this.type=type; this.type=type;
this.context=context; this.context=context;
if (altWrapPadding == null) {
altWrapPadding = new int[] { btnsWrap.getPaddingLeft(), btnsWrap.getPaddingTop(), btnsWrap.getPaddingRight(), btnsWrap.getPaddingBottom() };
}
} }
public void bind(Attachment attachment, Status status){ public void bind(Attachment attachment, Status status){

View File

@@ -56,6 +56,7 @@ import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.MastodonApp;
import org.joinmastodon.android.R; import org.joinmastodon.android.R;
import org.joinmastodon.android.api.StatusInteractionController; import org.joinmastodon.android.api.StatusInteractionController;
import org.joinmastodon.android.api.requests.accounts.GetAccountByHandle;
import org.joinmastodon.android.api.requests.accounts.SetAccountBlocked; import org.joinmastodon.android.api.requests.accounts.SetAccountBlocked;
import org.joinmastodon.android.api.requests.accounts.SetAccountFollowed; import org.joinmastodon.android.api.requests.accounts.SetAccountFollowed;
import org.joinmastodon.android.api.requests.accounts.SetAccountMuted; import org.joinmastodon.android.api.requests.accounts.SetAccountMuted;
@@ -758,6 +759,33 @@ public class UiUtils {
} }
public static void performAccountAction(Activity activity, Account account, String accountID, Relationship relationship, Button button, Consumer<Boolean> progressCallback, Consumer<Relationship> resultCallback) { public static void performAccountAction(Activity activity, Account account, String accountID, Relationship relationship, Button button, Consumer<Boolean> progressCallback, Consumer<Relationship> resultCallback) {
if(relationship == null){
UiUtils.lookupAccount(button.getContext(), account, accountID, null, account1 -> {
if(account1 == null){
return;
}
progressCallback.accept(true);
new SetAccountFollowed(account1.id, true, true, false)
.setCallback(new Callback<>(){
@Override
public void onSuccess(Relationship result){
resultCallback.accept(result);
progressCallback.accept(false);
if(!result.following && !result.requested){
E.post(new RemoveAccountPostsEvent(accountID, account.id, true));
}
}
@Override
public void onError(ErrorResponse error){
error.showToast(activity);
progressCallback.accept(false);
}
})
.exec(accountID);
});
return;
}
if (relationship.blocking) { if (relationship.blocking) {
confirmToggleBlockUser(activity, accountID, account, true, resultCallback); confirmToggleBlockUser(activity, accountID, account, true, resultCallback);
}else if(relationship.muting){ }else if(relationship.muting){
@@ -1123,9 +1151,9 @@ public class UiUtils {
domain = matcher.group(1); domain = matcher.group(1);
} }
if(domain == null){ // if(domain == null){
return; // return;
} // }
Pattern patternForQuery = Pattern.compile("https?:\\/\\/[^\\/]+\\/@(\\w+)"); Pattern patternForQuery = Pattern.compile("https?:\\/\\/[^\\/]+\\/@(\\w+)");
Matcher matcherForQuery = patternForQuery.matcher(query.getQuery()); Matcher matcherForQuery = patternForQuery.matcher(query.getQuery());
@@ -1135,11 +1163,41 @@ public class UiUtils {
trimmedQuery = matcherForQuery.group(1); trimmedQuery = matcherForQuery.group(1);
} }
if(trimmedQuery == null){ // if(trimmedQuery == null){
return; // return;
// }
if(query instanceof Account){
domain = ((Account) query).getDomain();
trimmedQuery = ((Account) query).username;
} }
String finalDomain = domain; String finalDomain = domain;
if(query instanceof Account){
new GetAccountByHandle(((Account) query).acct)
.setCallback(new Callback<Account>() {
@Override
public void onSuccess(Account result) {
if(result != null){
resultConsumer.accept((T) result);
} else {
Toast.makeText(context, R.string.sk_resource_not_found, Toast.LENGTH_SHORT).show();
resultConsumer.accept(null);
}
}
@Override
public void onError(ErrorResponse error) {
error.showToast(context);
resultConsumer.accept(null);
}
})
.wrapProgress((Activity)context, R.string.loading, true,
d -> transformDialogForLookup(context, targetAccountID, null, d, finalDomain))
.execNoAuth(domain);
return;
}
new GetSearchResults(trimmedQuery, type, false).setCallback(new Callback<>() { new GetSearchResults(trimmedQuery, type, false).setCallback(new Callback<>() {
@Override @Override
public void onSuccess(SearchResults results) { public void onSuccess(SearchResults results) {
@@ -1154,6 +1212,7 @@ public class UiUtils {
@Override @Override
public void onError(ErrorResponse error) { public void onError(ErrorResponse error) {
error.showToast(context); error.showToast(context);
resultConsumer.accept(null);
} }
}) })
.wrapProgress((Activity)context, R.string.loading, true, .wrapProgress((Activity)context, R.string.loading, true,

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?colorM3OnSurface" android:alpha="0.12"/>
</selector>

View File

@@ -3,7 +3,13 @@
<item> <item>
<shape> <shape>
<solid android:color="?colorWindowBackground"/> <solid android:color="?colorWindowBackground"/>
<corners android:topLeftRadius="12dp" android:topRightRadius="12dp"/> <corners android:topLeftRadius="28dp" android:topRightRadius="28dp"/>
</shape>
</item>
<item>
<shape android:tint="?colorWindowBackground">
<solid android:color="#0D000000"/>
<corners android:topLeftRadius="28dp" android:topRightRadius="28dp"/>
</shape> </shape>
</item> </item>
</layer-list> </layer-list>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:gravity="center" android:width="36dp" android:height="4dp"> <item android:gravity="center" android:width="32dp" android:height="4dp">
<shape> <shape android:tint="?colorM3Outline">
<solid android:color="?android:textColorSecondary"/> <solid android:color="#66000000"/>
<corners android:radius="2dp"/> <corners android:radius="2dp"/>
</shape> </shape>
</item> </item>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple android:color="@color/m3_primary_overlay" xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<selector>
<item android:state_enabled="true">
<shape>
<stroke android:color="?colorM3Outline" android:width="1dp"/>
<corners android:radius="20dp"/>
</shape>
</item>
<item>
<shape>
<stroke android:color="@color/m3_on_surface_overlay" android:width="1dp"/>
<corners android:radius="20dp"/>
</shape>
</item>
</selector>
</item>
<item android:id="@android:id/mask">
<shape>
<solid android:color="#000"/>
<corners android:radius="20dp"/>
</shape>
</item>
</ripple>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple android:color="#1effffff" xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<selector>
<item android:state_enabled="true">
<shape>
<stroke android:color="?colorM3Outline" android:width="1dp"/>
<corners android:radius="20dp"/>
</shape>
</item>
<item>
<shape>
<stroke android:color="@color/m3_on_surface_overlay" android:width="1dp"/>
<corners android:radius="20dp"/>
</shape>
</item>
</selector>
</item>
<item android:id="@android:id/mask">
<shape>
<solid android:color="#000"/>
<corners android:radius="20dp"/>
</shape>
</item>
</ripple>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple android:color="#1effffff" xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/mask">
<shape>
<solid android:color="#000"/>
<corners android:radius="20dp"/>
</shape>
</item>
</ripple>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="?colorPollVoted"/> <solid android:color="?colorPollVoted"/>
<corners android:radius="4dp"/> <corners android:radius="12dp"/>
</shape> </shape>

View File

@@ -0,0 +1,27 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="134dp"
android:height="34dp"
android:viewportWidth="313"
android:viewportHeight="81">
<path
android:pathData="M72.95,18.45C71.82,9.95 64.5,3.24 55.85,1.95C54.38,1.73 48.85,0.93 36.02,0.93H35.92C23.09,0.93 20.34,1.73 18.87,1.95C10.44,3.22 2.76,9.23 0.88,17.84C-0,22.08 -0.1,26.78 0.07,31.09C0.31,37.27 0.36,43.43 0.91,49.6C1.29,53.69 1.95,57.74 2.9,61.73C4.68,69.11 11.86,75.25 18.9,77.75C26.43,80.35 34.53,80.79 42.29,79C43.14,78.79 43.98,78.56 44.82,78.29C46.71,77.68 48.92,77 50.55,75.81C50.57,75.8 50.59,75.77 50.6,75.75C50.61,75.72 50.62,75.7 50.62,75.66V69.7C50.62,69.7 50.62,69.65 50.6,69.62C50.6,69.6 50.57,69.58 50.55,69.56C50.53,69.55 50.5,69.54 50.48,69.53C50.45,69.53 50.43,69.53 50.41,69.53C45.43,70.73 40.33,71.34 35.23,71.33C26.43,71.33 24.06,67.09 23.39,65.34C22.85,63.82 22.5,62.22 22.36,60.61C22.36,60.59 22.36,60.57 22.37,60.54C22.37,60.52 22.39,60.49 22.42,60.48C22.44,60.47 22.46,60.46 22.49,60.44H22.57C27.46,61.64 32.48,62.25 37.51,62.25C38.72,62.25 39.92,62.25 41.14,62.21C46.19,62.06 51.52,61.81 56.51,60.82C56.63,60.8 56.76,60.77 56.87,60.75C64.72,59.21 72.19,54.42 72.95,42.27C72.97,41.79 73.04,37.25 73.04,36.76C73.04,35.07 73.58,24.79 72.96,18.48L72.95,18.45Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="36.62"
android:startY="0.93"
android:endX="36.62"
android:endY="80.07"
android:type="linear">
<item android:offset="0" android:color="#FF6364FF"/>
<item android:offset="1" android:color="#FF563ACC"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M14.81,23.2C14.81,20.72 16.77,18.72 19.2,18.72C21.62,18.72 23.58,20.73 23.58,23.2C23.58,25.67 21.62,27.68 19.2,27.68C16.77,27.68 14.81,25.67 14.81,23.2Z"
android:fillColor="#fff"/>
<path
android:pathData="M80.02,27.06V47.66H72.03V27.67C72.03,23.45 70.3,21.32 66.83,21.32C63,21.32 61.07,23.87 61.07,28.87V39.82H53.14V28.87C53.14,23.84 51.24,21.32 47.38,21.32C43.92,21.32 42.18,23.45 42.18,27.67V47.65H34.21V27.06C34.21,22.86 35.25,19.51 37.35,17.03C39.53,14.54 42.37,13.29 45.89,13.29C49.97,13.29 53.07,14.9 55.11,18.11L57.11,21.52L59.1,18.11C61.14,14.91 64.23,13.29 68.32,13.29C71.84,13.29 74.69,14.55 76.86,17.03C78.96,19.51 80.01,22.83 80.01,27.06H80.02ZM107.49,37.3C109.15,35.51 109.93,33.29 109.93,30.59C109.93,27.89 109.14,25.65 107.49,23.94C105.91,22.15 103.89,21.3 101.45,21.3C99.02,21.3 97.01,22.15 95.41,23.94C93.83,25.65 93.04,27.89 93.04,30.59C93.04,33.29 93.83,35.53 95.41,37.3C97,39 99.02,39.87 101.45,39.87C103.89,39.87 105.9,39.02 107.49,37.3ZM109.93,14.12H117.8V47.06H109.93V43.18C107.55,46.41 104.26,48 99.99,48C95.71,48 92.42,46.36 89.5,43C86.64,39.64 85.18,35.48 85.18,30.61C85.18,25.74 86.65,21.65 89.5,18.29C92.43,14.93 95.92,13.23 99.99,13.23C104.06,13.23 107.55,14.81 109.93,18.02V14.14V14.12ZM144.26,29.97C146.58,31.76 147.73,34.25 147.67,37.41C147.67,40.77 146.52,43.41 144.14,45.24C141.76,47.03 138.89,47.94 135.41,47.94C129.13,47.94 124.87,45.3 122.61,40.11L129.43,35.96C130.34,38.78 132.35,40.25 135.41,40.25C138.22,40.25 139.62,39.33 139.62,37.42C139.62,36.03 137.79,34.78 134.07,33.8C132.66,33.41 131.5,33.01 130.6,32.68C129.31,32.16 128.22,31.56 127.31,30.83C125.05,29.04 123.9,26.68 123.9,23.65C123.9,20.42 124.99,17.85 127.19,16C129.45,14.09 132.19,13.18 135.48,13.18C140.73,13.18 144.56,15.48 147.07,20.16L140.37,24.1C139.4,21.86 137.74,20.74 135.48,20.74C133.11,20.74 131.95,21.65 131.95,23.44C131.95,24.83 133.78,26.08 137.5,27.06C140.37,27.72 142.63,28.7 144.26,29.97H144.27H144.26ZM169.26,22.27H162.37V35.98C162.37,37.63 162.98,38.63 164.15,39.08C165,39.4 166.71,39.47 169.27,39.34V47.05C163.98,47.71 160.14,47.17 157.88,45.41C155.62,43.7 154.53,40.53 154.53,36V22.27H149.23V14.1H154.53V7.46L162.39,4.89V14.12H169.29V22.29H169.27L169.26,22.27ZM194.34,37.1C195.92,35.4 196.71,33.22 196.71,30.58C196.71,27.94 195.92,25.78 194.34,24.05C192.74,22.35 190.79,21.48 188.42,21.48C186.04,21.48 184.09,22.33 182.49,24.05C180.97,25.84 180.18,28 180.18,30.58C180.18,33.16 180.97,35.31 182.49,37.1C184.08,38.81 186.04,39.67 188.42,39.67C190.79,39.67 192.74,38.82 194.34,37.1ZM176.96,42.96C173.85,39.6 172.32,35.52 172.32,30.58C172.32,25.63 173.85,21.62 176.96,18.26C180.07,14.9 183.91,13.19 188.42,13.19C192.92,13.19 196.77,14.9 199.87,18.26C202.97,21.62 204.57,25.77 204.57,30.58C204.57,35.39 202.97,39.6 199.87,42.96C196.76,46.32 192.98,47.96 188.42,47.96C183.85,47.96 180.06,46.32 176.96,42.96ZM230.86,37.29C232.45,35.5 233.24,33.28 233.24,30.58C233.24,27.87 232.45,25.63 230.86,23.93C229.28,22.14 227.26,21.29 224.82,21.29C222.39,21.29 220.37,22.14 218.73,23.93C217.14,25.63 216.35,27.87 216.35,30.58C216.35,33.28 217.14,35.52 218.73,37.29C220.38,38.99 222.45,39.86 224.82,39.86C227.2,39.86 229.27,39 230.86,37.29ZM233.24,0.92H241.11V47.05H233.24V43.17C230.93,46.39 227.63,47.99 223.36,47.99C219.09,47.99 215.75,46.35 212.8,42.98C209.93,39.62 208.48,35.47 208.48,30.6C208.48,25.73 209.95,21.64 212.8,18.28C215.72,14.92 219.26,13.22 223.36,13.22C227.45,13.22 230.93,14.8 233.24,18.01V0.93V0.92ZM268.74,37.07C270.32,35.36 271.12,33.18 271.12,30.54C271.12,27.9 270.32,25.74 268.74,24.01C267.15,22.31 265.21,21.45 262.82,21.45C260.43,21.45 258.5,22.3 256.9,24.01C255.37,25.8 254.58,27.96 254.58,30.54C254.58,33.12 255.37,35.28 256.9,37.07C258.48,38.77 260.44,39.64 262.82,39.64C265.2,39.64 267.14,38.78 268.74,37.07ZM251.36,42.92C248.26,39.56 246.73,35.48 246.73,30.54C246.73,25.6 248.25,21.58 251.36,18.22C254.47,14.86 258.32,13.15 262.82,13.15C267.32,13.15 271.18,14.86 274.27,18.22C277.38,21.58 278.97,25.73 278.97,30.54C278.97,35.35 277.38,39.56 274.27,42.92C271.16,46.28 267.38,47.93 262.82,47.93C258.26,47.93 254.46,46.28 251.36,42.92ZM313,26.78V47.01H305.14V27.84C305.14,25.66 304.59,24.01 303.48,22.77C302.45,21.65 300.98,21.07 299.09,21.07C294.65,21.07 292.39,23.77 292.39,29.24V47.03H284.53V14.1H292.39V17.81C294.28,14.71 297.28,13.19 301.47,13.19C304.82,13.19 307.57,14.37 309.71,16.81C311.91,19.24 313,22.54 313,26.82"
android:fillColor="#fff"/>
</vector>

View File

@@ -27,7 +27,7 @@
android:gravity="center" android:gravity="center"
android:includeFontPadding="false" android:includeFontPadding="false"
android:paddingHorizontal="5dp" android:paddingHorizontal="5dp"
android:paddingVertical="1dp" android:paddingVertical="2dp"
android:background="@drawable/bg_image_alt_overlay" android:background="@drawable/bg_image_alt_overlay"
android:text="@string/sk_alt_button"/> android:text="@string/sk_alt_button"/>

View File

@@ -3,7 +3,6 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingTop="13dp"
android:paddingEnd="4dp" android:paddingEnd="4dp"
android:paddingStart="16dp"> android:paddingStart="16dp">
@@ -11,6 +10,7 @@
android:id="@+id/more" android:id="@+id/more"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
android:layout_marginTop="13dp"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:background="?android:actionBarItemBackground" android:background="?android:actionBarItemBackground"
@@ -23,6 +23,7 @@
android:id="@+id/delete_notification" android:id="@+id/delete_notification"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
android:layout_marginTop="13dp"
android:layout_toStartOf="@id/more" android:layout_toStartOf="@id/more"
android:visibility="gone" android:visibility="gone"
android:background="?android:actionBarItemBackground" android:background="?android:actionBarItemBackground"
@@ -36,6 +37,7 @@
android:id="@+id/visibility" android:id="@+id/visibility"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
android:layout_marginTop="13dp"
android:layout_toStartOf="@id/delete_notification" android:layout_toStartOf="@id/delete_notification"
android:background="?android:actionBarItemBackground" android:background="?android:actionBarItemBackground"
android:scaleType="center" android:scaleType="center"
@@ -46,6 +48,7 @@
android:id="@+id/collapse_btn" android:id="@+id/collapse_btn"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
android:layout_marginTop="13dp"
android:layout_toStartOf="@id/visibility" android:layout_toStartOf="@id/visibility"
android:background="?android:actionBarItemBackground" android:background="?android:actionBarItemBackground"
android:visibility="gone" android:visibility="gone"
@@ -70,6 +73,7 @@
android:id="@+id/unread_indicator" android:id="@+id/unread_indicator"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
android:layout_marginTop="13dp"
android:layout_toStartOf="@id/collapse_btn" android:layout_toStartOf="@id/collapse_btn"
android:visibility="gone" android:visibility="gone"
android:tint="?android:colorAccent" android:tint="?android:colorAccent"
@@ -83,18 +87,16 @@
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_marginEnd="12dp" android:layout_marginEnd="12dp"
android:layout_marginTop="3dp" /> android:layout_marginTop="16dp" />
<org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout <org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout
android:id="@+id/name_wrap" android:id="@+id/name_wrap"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:layout_marginTop="3dp"
android:paddingTop="3sp"
android:layout_toStartOf="@id/unread_indicator" android:layout_toStartOf="@id/unread_indicator"
android:layout_toEndOf="@id/avatar" android:layout_toEndOf="@id/avatar"
android:minHeight="24sp"> android:layout_above="@+id/username_wrap">
<TextView <TextView
android:id="@+id/name" android:id="@+id/name"
@@ -121,13 +123,15 @@
</org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout> </org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout>
<org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout <org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout
android:id="@id/username_wrap"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/name_wrap"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:layout_toStartOf="@id/unread_indicator" android:layout_toStartOf="@id/unread_indicator"
android:layout_toEndOf="@id/avatar" android:layout_toEndOf="@id/avatar"
android:layout_alignBottom="@id/avatar"
android:layoutDirection="locale" android:layoutDirection="locale"
android:paddingBottom="3sp"
android:orientation="horizontal"> android:orientation="horizontal">
<TextView <TextView

View File

@@ -73,7 +73,6 @@
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingRight="16dp" android:paddingRight="16dp"
android:paddingLeft="16dp"> android:paddingLeft="16dp">
@@ -81,6 +80,7 @@
android:id="@+id/self_avatar" android:id="@+id/self_avatar"
android:layout_width="46sp" android:layout_width="46sp"
android:layout_height="46sp" android:layout_height="46sp"
android:layout_marginTop="16dp"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_marginEnd="12dp" /> android:layout_marginEnd="12dp" />
@@ -90,8 +90,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toEndOf="@id/self_avatar" android:layout_toEndOf="@id/self_avatar"
android:paddingTop="3sp" android:layout_above="@+id/self_username"
android:minHeight="24sp"
android:ellipsize="end" android:ellipsize="end"
android:singleLine="true" android:singleLine="true"
android:textAppearance="@style/m3_title_medium" android:textAppearance="@style/m3_title_medium"
@@ -103,7 +102,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8sp" android:layout_marginStart="8sp"
android:layout_toEndOf="@id/self_name" android:layout_toEndOf="@id/self_name"
android:paddingTop="3sp" android:layout_above="@id/self_username"
android:ellipsize="end" android:ellipsize="end"
android:fontFamily="sans-serif" android:fontFamily="sans-serif"
android:singleLine="true" android:singleLine="true"
@@ -112,14 +111,15 @@
tools:text="@string/sk_local_only" /> tools:text="@string/sk_local_only" />
<TextView <TextView
android:id="@+id/self_username" android:id="@id/self_username"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/self_name"
android:layout_toEndOf="@id/self_avatar" android:layout_toEndOf="@id/self_avatar"
android:layout_alignBottom="@id/self_avatar"
android:ellipsize="end" android:ellipsize="end"
android:singleLine="true" android:singleLine="true"
android:textAppearance="@style/m3_title_small" android:textAppearance="@style/m3_title_small"
android:paddingBottom="3sp"
tools:text="\@Gargron" /> tools:text="\@Gargron" />
</RelativeLayout> </RelativeLayout>

View File

@@ -36,29 +36,30 @@
android:id="@+id/button_bar" android:id="@+id/button_bar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="end" android:background="?colorBackgroundLight"
android:background="@drawable/bg_onboarding_panel"> android:outlineProvider="bounds"
android:orientation="horizontal"
android:elevation="0dp">
<Button <Button
style="?primaryLargeButtonStyle"
android:id="@+id/btn_next" android:id="@+id/btn_next"
android:layout_width="wrap_content" android:minWidth="145dp"
android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_margin="16dp"
android:layout_marginTop="8dp" android:layout_weight="1"
android:layout_marginBottom="16dp" android:text="@string/follow_all" />
style="@style/Widget.Mastodon.M3.Button.Tonal" <!-- <Button-->
android:text="@string/follow_all"/> <!-- android:id="@+id/btn_skip"-->
<!-- android:layout_width="wrap_content"-->
<Button <!-- android:layout_height="wrap_content"-->
android:id="@+id/btn_skip" <!-- android:layout_marginStart="16dp"-->
android:layout_width="wrap_content" <!-- android:layout_marginEnd="16dp"-->
android:layout_height="wrap_content" <!-- android:layout_marginTop="8dp"-->
android:layout_marginStart="16dp" <!-- android:layout_marginBottom="16dp"-->
android:layout_marginEnd="16dp" <!-- style="@style/Widget.Mastodon.M3.Button.Filled"-->
android:layout_marginTop="8dp" <!-- android:text="@string/skip"/>-->
android:layout_marginBottom="16dp"
style="@style/Widget.Mastodon.M3.Button.Filled"
android:text="@string/skip"/>
</LinearLayout> </LinearLayout>

View File

@@ -5,7 +5,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
android:clipToPadding="false"> android:clipToPadding="false"
android:theme="@style/Theme.Mastodon.Dark.SplashFragment">
<View <View
android:id="@+id/blue_fill" android:id="@+id/blue_fill"
@@ -26,7 +27,8 @@
android:id="@+id/art_clouds" android:id="@+id/art_clouds"
android:layout_width="414dp" android:layout_width="414dp"
android:layout_height="541dp" android:layout_height="541dp"
android:layout_marginTop="91dp" android:layout_marginTop="37dp"
android:layout_marginLeft="-27dp"
android:layout_gravity="top|left" android:layout_gravity="top|left"
android:alpha="0.3" android:alpha="0.3"
android:importantForAccessibility="no" android:importantForAccessibility="no"
@@ -36,8 +38,8 @@
android:id="@+id/art_plane_elephant" android:id="@+id/art_plane_elephant"
android:layout_width="245.64dp" android:layout_width="245.64dp"
android:layout_height="72.65dp" android:layout_height="72.65dp"
android:layout_marginLeft="-101.55dp" android:layout_marginLeft="-50.775dp"
android:layout_marginTop="238.12dp" android:layout_marginTop="184.12dp"
android:layout_gravity="left|top" android:layout_gravity="left|top"
android:alpha="0.3" android:alpha="0.3"
android:importantForAccessibility="no" android:importantForAccessibility="no"
@@ -48,8 +50,8 @@
android:layout_width="150.84dp" android:layout_width="150.84dp"
android:layout_height="176.44dp" android:layout_height="176.44dp"
android:layout_gravity="top|left" android:layout_gravity="top|left"
android:layout_marginLeft="322dp" android:layout_marginLeft="278dp"
android:layout_marginTop="310dp" android:layout_marginTop="244dp"
android:importantForAccessibility="no" android:importantForAccessibility="no"
android:src="@drawable/splash_art_layer1"/> android:src="@drawable/splash_art_layer1"/>
@@ -58,7 +60,8 @@
android:layout_width="197.2dp" android:layout_width="197.2dp"
android:layout_height="153.61dp" android:layout_height="153.61dp"
android:layout_gravity="top|left" android:layout_gravity="top|left"
android:layout_marginTop="294dp" android:layout_marginTop="252dp"
android:layout_marginLeft="-44dp"
android:importantForAccessibility="no" android:importantForAccessibility="no"
android:src="@drawable/splash_art_layer2"/> android:src="@drawable/splash_art_layer2"/>
@@ -67,7 +70,8 @@
android:layout_width="400dp" android:layout_width="400dp"
android:layout_height="346dp" android:layout_height="346dp"
android:layout_gravity="top|left" android:layout_gravity="top|left"
android:layout_marginTop="294dp" android:layout_marginTop="240dp"
android:layout_marginLeft="-20dp"
android:importantForAccessibility="no" android:importantForAccessibility="no"
android:src="@drawable/splash_art_layer3"/> android:src="@drawable/splash_art_layer3"/>
@@ -86,61 +90,108 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:clipToPadding="false" android:clipToPadding="false"
android:orientation="vertical"> android:orientation="vertical">
<ImageView
android:layout_width="300dp"
android:layout_height="78dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="32dp"
android:importantForAccessibility="no"
android:src="@drawable/splash_logo"/>
<androidx.viewpager2.widget.ViewPager2 <Space
android:id="@+id/pager" android:layout_width="1px"
android:layout_width="match_parent" android:layout_height="0px"
android:layout_height="0dp"
android:layout_weight="1"/> android:layout_weight="1"/>
<LinearLayout
android:id="@+id/pager_dots"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="16dp"
android:orientation="horizontal">
<View
android:layout_width="8dp"
android:layout_height="8dp"/>
<!-- android:background="@drawable/white_circle"/>-->
<View
android:layout_width="8dp"
android:layout_height="8dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:alpha="0.3"/>
<!-- android:background="@drawable/white_circle"-->
<View
android:layout_width="8dp"
android:layout_height="8dp"
android:alpha="0.3"/>
<!-- android:background="@drawable/white_circle"-->
</LinearLayout>
<Button <Button
android:id="@+id/btn_log_in" android:id="@+id/btn_join_default_server"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="16dp" android:layout_marginLeft="16dp"
android:layout_marginRight="16dp" android:layout_marginRight="16dp"
style="@style/Widget.Mastodon.M3.Button.Text" style="@style/Widget.Mastodon.M3.Button.Filled"
android:textColor="#fff" tools:text="@string/join_default_server"/>
android:text="@string/already_have_account"/>
<Button <Button
android:id="@+id/btn_get_started" android:id="@+id/btn_get_started"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="16dp" android:layout_marginLeft="16dp"
android:layout_marginRight="16dp" android:layout_marginRight="16dp"
android:layout_marginBottom="16dp" android:layout_marginTop="8dp"
style="@style/Widget.Mastodon.M3.Button.Filled" android:textColor="#FFF"
android:text="@string/get_started"/> style="@style/Widget.Mastodon.M3.Button.Outlined"
android:background="@drawable/bg_button_m3_outlined_white"
android:text="@string/pick_server"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:background="#B2FFFFFF"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:textAllCaps="true"
android:textAppearance="@style/m3_label_large"
android:textColor="#B2FFFFFF"
android:layout_gravity="center_vertical"
android:text="@string/signup_or_login"/>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:background="#B2FFFFFF"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp">
<Button
android:id="@+id/btn_learn_more"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:textColor="#FFF"
style="@style/Widget.Mastodon.M3.Button.Text"
android:background="@drawable/bg_button_m3_text_white"
android:text="@string/learn_more"/>
<Button
android:id="@+id/btn_log_in"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:textColor="#FFF"
style="@style/Widget.Mastodon.M3.Button.Text"
android:background="@drawable/bg_button_m3_text_white"
android:text="@string/log_in"/>
</LinearLayout>
</LinearLayout> </LinearLayout>
</org.joinmastodon.android.ui.views.SizeListenerFrameLayout> </org.joinmastodon.android.ui.views.SizeListenerFrameLayout>

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_bottom_sheet"
android:padding="16dp">
<View
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_marginBottom="16dp"
android:background="@drawable/bg_bottom_sheet_handle"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/m3_headline_medium"
android:textColor="?colorM3OnSurface"
android:text="@string/welcome_to_mastodon"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textAppearance="@style/m3_body_large"
android:textColor="?colorM3OnSurface"
android:text="@string/welcome_paragraph1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:textAppearance="@style/m3_headline_medium"
android:textColor="?colorM3OnSurface"
android:text="@string/what_are_servers"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textAppearance="@style/m3_body_large"
android:textColor="?colorM3OnSurface"
android:text="@string/welcome_paragraph2"/>
</LinearLayout>
</ScrollView>

View File

@@ -0,0 +1,32 @@
<?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:gravity="center_vertical"
android:layoutDirection="locale">
<ImageView
android:id="@+id/icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="32dp"
android:importantForAccessibility="no"
android:tint="?android:textColorPrimary"
tools:src="@drawable/ic_fluent_color_24_regular"/>
<TextView
android:id="@+id/text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginEnd="8dp"
android:paddingVertical="8dp"
android:gravity="center_vertical"
android:textColor="?android:textColorPrimary"
android:textSize="16sp" />
</LinearLayout>

View File

@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/avatar"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="12dp"
android:importantForAccessibility="no"
tools:src="#0f0"/>
<FrameLayout
android:id="@+id/action_btn_wrap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_marginEnd="16dp"
android:layout_marginTop="18dp"
android:layout_marginStart="-8dp">
<org.joinmastodon.android.ui.views.ProgressBarButton
android:id="@+id/action_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
tools:text="@string/follow_back"/>
<ProgressBar
android:id="@+id/action_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"
style="?android:progressBarStyleSmall"
android:elevation="10dp"
android:outlineProvider="none"
android:visibility="gone"/>
</FrameLayout>
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="24dp"
android:layout_toEndOf="@id/avatar"
android:layout_toStartOf="@id/action_btn_wrap"
android:layout_alignParentTop="true"
android:layout_marginTop="14dp"
android:layout_marginEnd="16dp"
android:gravity="center_vertical"
android:singleLine="true"
android:ellipsize="end"
android:textAppearance="@style/m3_title_medium"
tools:text="User Name"/>
<TextView
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_toEndOf="@id/avatar"
android:layout_below="@id/name"
android:layout_toStartOf="@id/action_btn_wrap"
android:layout_marginEnd="16dp"
android:singleLine="true"
android:ellipsize="end"
android:gravity="center_vertical"
android:textAppearance="@style/m3_title_small"
tools:text="\@username@server.social"/>
<TextView
android:id="@+id/bio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/avatar"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="12dp"
android:textAppearance="@style/m3_body_medium"
tools:text="Description"/>
</RelativeLayout>

View File

@@ -26,7 +26,7 @@
android:gravity="center" android:gravity="center"
android:includeFontPadding="false" android:includeFontPadding="false"
android:paddingHorizontal="5dp" android:paddingHorizontal="5dp"
android:paddingVertical="1dp" android:paddingVertical="2dp"
android:text="@string/sk_alt_button"/> android:text="@string/sk_alt_button"/>
<ImageButton <ImageButton

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View File

@@ -10,13 +10,11 @@
<string name="ok">حسنًا</string> <string name="ok">حسنًا</string>
<string name="preparing_auth">جَارٍ الإعدَادُ لِلمُصادَقَة…</string> <string name="preparing_auth">جَارٍ الإعدَادُ لِلمُصادَقَة…</string>
<string name="finishing_auth">يُنهي المصادقة…</string> <string name="finishing_auth">يُنهي المصادقة…</string>
<string name="user_boosted">أعادَ %s تَدوينَها</string>
<string name="in_reply_to">ردًا على %s</string> <string name="in_reply_to">ردًا على %s</string>
<string name="notifications">الإشعارات</string> <string name="notifications">الإشعارات</string>
<string name="user_followed_you">بَدَأ بِمُتابَعَتِك</string> <string name="user_followed_you">بَدَأ بِمُتابَعَتِك</string>
<string name="user_sent_follow_request">أرسَلَ طَلَبًا لِمُتابَعَتِك</string> <string name="user_sent_follow_request">أرسَلَ طَلَبًا لِمُتابَعَتِك</string>
<string name="user_favorited">فَضَّلَ مَنشُورَك</string> <string name="user_favorited">فَضَّلَ مَنشُورَك</string>
<string name="notification_boosted">أعادَ تَدوينَ مَنشُورِك</string>
<string name="poll_ended">انتهى استطلاعُ الرأي</string> <string name="poll_ended">انتهى استطلاعُ الرأي</string>
<string name="time_seconds">%d ثا</string> <string name="time_seconds">%d ثا</string>
<string name="time_minutes">%d د</string> <string name="time_minutes">%d د</string>
@@ -222,7 +220,6 @@
<string name="report_sent_subtitle">في أثناء مراجعتنا للبلاغ، يمكنك اتخاذ إجراء ضد @%s.</string> <string name="report_sent_subtitle">في أثناء مراجعتنا للبلاغ، يمكنك اتخاذ إجراء ضد @%s.</string>
<string name="unfollow_user">ألغ متابعة %s</string> <string name="unfollow_user">ألغ متابعة %s</string>
<string name="unfollow">ألغ المتابعة</string> <string name="unfollow">ألغ المتابعة</string>
<string name="mute_user_explain">لن ترى منشوراتهم أو إعادة تدوينهم في التغذية الرئيسية. ولن يعلموا أنهم كتموا.</string>
<string name="block_user_explain">لن يتمكنوا من متابعتك أو رؤية منشوراتك، وسيكون بديهيًا لهم أنهم حجبوا.</string> <string name="block_user_explain">لن يتمكنوا من متابعتك أو رؤية منشوراتك، وسيكون بديهيًا لهم أنهم حجبوا.</string>
<string name="report_personal_title">لاترغب في مشاهدة هذا؟</string> <string name="report_personal_title">لاترغب في مشاهدة هذا؟</string>
<string name="report_personal_subtitle">عندما ترى ما لا يعجبك في ماستدون، يمكنك إزالة صاحبها من تجربتك كمستخدم.</string> <string name="report_personal_subtitle">عندما ترى ما لا يعجبك في ماستدون، يمكنك إزالة صاحبها من تجربتك كمستخدم.</string>
@@ -279,7 +276,6 @@
<string name="skip">تخطى</string> <string name="skip">تخطى</string>
<string name="notification_type_follow">متابعُون جُدُد</string> <string name="notification_type_follow">متابعُون جُدُد</string>
<string name="notification_type_favorite">المفضلة</string> <string name="notification_type_favorite">المفضلة</string>
<string name="notification_type_reblog">المعاد تدوينها</string>
<string name="notification_type_mention">الذِكر</string> <string name="notification_type_mention">الذِكر</string>
<string name="notification_type_poll">استطلاع رأي</string> <string name="notification_type_poll">استطلاع رأي</string>
<string name="choose_account">اختر حسابًا</string> <string name="choose_account">اختر حسابًا</string>
@@ -310,7 +306,6 @@
<string name="notify_none">لَا أحد</string> <string name="notify_none">لَا أحد</string>
<string name="notify_favorites">بِالإعْجاب بِمَنشوري</string> <string name="notify_favorites">بِالإعْجاب بِمَنشوري</string>
<string name="notify_follow">بمتابعتي</string> <string name="notify_follow">بمتابعتي</string>
<string name="notify_reblog">بإعادة تدوين مَنشوري</string>
<string name="notify_mention">بِالإشارَةِ إليّ</string> <string name="notify_mention">بِالإشارَةِ إليّ</string>
<string name="settings_boring">المنطِقَةُ المُملَّة</string> <string name="settings_boring">المنطِقَةُ المُملَّة</string>
<string name="settings_account">إعدادات الحساب</string> <string name="settings_account">إعدادات الحساب</string>
@@ -331,7 +326,6 @@
<string name="hide_content">اخف المحتوى</string> <string name="hide_content">اخف المحتوى</string>
<string name="new_post">منشور جديد</string> <string name="new_post">منشور جديد</string>
<string name="button_reply">ردّ</string> <string name="button_reply">ردّ</string>
<string name="button_reblog">أعد تدوين</string>
<string name="button_favorite">فضّل</string> <string name="button_favorite">فضّل</string>
<string name="button_share">شارك</string> <string name="button_share">شارك</string>
<string name="media_no_description">وسائط بدون وصف</string> <string name="media_no_description">وسائط بدون وصف</string>
@@ -346,8 +340,6 @@
<string name="unfollowed_user">ألغ متابعة %s</string> <string name="unfollowed_user">ألغ متابعة %s</string>
<string name="followed_user">أنت تتابع %s</string> <string name="followed_user">أنت تتابع %s</string>
<string name="open_in_browser">افتح في المتصفح</string> <string name="open_in_browser">افتح في المتصفح</string>
<string name="hide_boosts_from_user">اخف ما أعاد %s تدوينه</string>
<string name="show_boosts_from_user">أظهر ما أعاد %s تدوينه</string>
<string name="signup_reason">لماذا تريد الانضمام؟</string> <string name="signup_reason">لماذا تريد الانضمام؟</string>
<string name="signup_reason_note">هذا سوف يساعدنا في مراجعة تطبيقك.</string> <string name="signup_reason_note">هذا سوف يساعدنا في مراجعة تطبيقك.</string>
<string name="clear">امسح</string> <string name="clear">امسح</string>
@@ -401,17 +393,8 @@
<item quantity="many">%,d تفضيلًا</item> <item quantity="many">%,d تفضيلًا</item>
<item quantity="other">%,d تفضيل</item> <item quantity="other">%,d تفضيل</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="zero">لا إعادات تدوين</item>
<item quantity="one">إعاد تدوين واحدة</item>
<item quantity="two">إعادتا تدوين</item>
<item quantity="few">%,d إعادات تدوين</item>
<item quantity="many">%,d إعادة تدوين</item>
<item quantity="other">%,d إعادة تدوين</item>
</plurals>
<string name="timestamp_via_app">%1$s عبر %2$s</string> <string name="timestamp_via_app">%1$s عبر %2$s</string>
<string name="time_now">الآن</string> <string name="time_now">الآن</string>
<string name="post_info_reblogs">إعادات التدوين</string>
<string name="post_info_favorites">المفضلة</string> <string name="post_info_favorites">المفضلة</string>
<string name="edit_history">تاريخ التعديل</string> <string name="edit_history">تاريخ التعديل</string>
<string name="last_edit_at_x">آخر تعديل %s</string> <string name="last_edit_at_x">آخر تعديل %s</string>
@@ -478,12 +461,6 @@
<string name="login_title">مرحبا بك مجددًا</string> <string name="login_title">مرحبا بك مجددًا</string>
<string name="login_subtitle">قم بتسجيل الدخول باستخدام الخادم حيث قمتَ بإنشاء حسابك فيه.</string> <string name="login_subtitle">قم بتسجيل الدخول باستخدام الخادم حيث قمتَ بإنشاء حسابك فيه.</string>
<string name="server_url">رابط الخادم</string> <string name="server_url">رابط الخادم</string>
<string name="welcome_page1_title">ما هو ماستدون؟</string>
<string name="welcome_page1_text">تخيل أن لديك عنوان بريد إلكتروني ينتهي بـ @example.com.\n\n رغم ذلك يمكنك إرسال واستقبال رسائل البريد الإلكتروني من أي شخص، حتى إذا كان بريدهم الإلكتروني الخاص ينتهي بـ @gmail.com أو @icloud.com أو @example.com.</string>
<string name="welcome_page2_title">ماستدون هكذا.</string>
<string name="welcome_page2_text">قد يكون مُعرّفُك @gothgirl654@example.social ، ولكنه بإمكانك متابعة وإعادة تدوين ومحادثة @fallout5ever@example.online.</string>
<string name="welcome_page3_title">كيف يمكنني اختيار خادم؟</string>
<string name="welcome_page3_text">يختار الأشخاص المختلفون خوادم مختلفة لأي عدد من الأسباب. يعد art.example مكانًا رائعًا للفنانين ، بينما قد يكون glasgow.example اختيارًا جيدًا للاسكتلنديين. \n\n لا يمكنك أن تخطئ في أي من الخوادم التي نوصي بها ، لذلك بغض النظر عن أي واحد تختاره (أو إذا قمت بإدخال الخادم الخاص بك في شريط البحث) ، فلن يفوتك أي شيء في أي مكان.</string>
<string name="signup_random_server_explain">سوف نختار خادماً بناءً على لغتك إذا قمت بالمتابعة دون إجراء إختيار.</string> <string name="signup_random_server_explain">سوف نختار خادماً بناءً على لغتك إذا قمت بالمتابعة دون إجراء إختيار.</string>
<string name="server_filter_any_language">أي لغة</string> <string name="server_filter_any_language">أي لغة</string>
<string name="server_filter_instant_signup">تسجيل فوري</string> <string name="server_filter_instant_signup">تسجيل فوري</string>

View File

@@ -10,13 +10,11 @@
<string name="ok">Добра</string> <string name="ok">Добра</string>
<string name="preparing_auth">Падрыхтоўка да аўтэнтыфікацыі…</string> <string name="preparing_auth">Падрыхтоўка да аўтэнтыфікацыі…</string>
<string name="finishing_auth">Завяршэнне аўтэнтыфікацыі…</string> <string name="finishing_auth">Завяршэнне аўтэнтыфікацыі…</string>
<string name="user_boosted">%s пашырыў</string>
<string name="in_reply_to">У адказ %s</string> <string name="in_reply_to">У адказ %s</string>
<string name="notifications">Апавяшчэнні</string> <string name="notifications">Апавяшчэнні</string>
<string name="user_followed_you">падпісаўся(-лася) на вас</string> <string name="user_followed_you">падпісаўся(-лася) на вас</string>
<string name="user_sent_follow_request">адправіў запыт на падпіску</string> <string name="user_sent_follow_request">адправіў запыт на падпіску</string>
<string name="user_favorited">упадабаў(-ла) ваш допіс</string> <string name="user_favorited">упадабаў(-ла) ваш допіс</string>
<string name="notification_boosted">пашырыў(-ла) ваш допіс</string>
<string name="poll_ended">апытанне завершана</string> <string name="poll_ended">апытанне завершана</string>
<string name="time_seconds">%dсек</string> <string name="time_seconds">%dсек</string>
<string name="time_minutes">%dхв</string> <string name="time_minutes">%dхв</string>
@@ -194,7 +192,6 @@
<string name="report_sent_subtitle">Пакуль мы разглядаем яе, вы можаце прыняць меры супраць %s.</string> <string name="report_sent_subtitle">Пакуль мы разглядаем яе, вы можаце прыняць меры супраць %s.</string>
<string name="unfollow_user">Адпісацца ад %s</string> <string name="unfollow_user">Адпісацца ад %s</string>
<string name="unfollow">Адпісацца</string> <string name="unfollow">Адпісацца</string>
<string name="mute_user_explain">Вы не ўбачыце іх допісы або пашырэнні ў сваёй хатняй стужцы. Яны не даведаюцца, што вы іх ігнаруеце.</string>
<string name="block_user_explain">Яны больш не змогуць падпісвацца на вас або бачыць вашыя допісы, але змогуць бачыць, што яны былі заблакіраваны.</string> <string name="block_user_explain">Яны больш не змогуць падпісвацца на вас або бачыць вашыя допісы, але змогуць бачыць, што яны былі заблакіраваны.</string>
<string name="report_personal_title">Не хочаце бачыць гэта?</string> <string name="report_personal_title">Не хочаце бачыць гэта?</string>
<string name="report_personal_subtitle">Калі вы бачыце на Mastodon нешта, што вам не падабаецца, вы можаце выдаліць чалавека са свайго асяроддзя.</string> <string name="report_personal_subtitle">Калі вы бачыце на Mastodon нешта, што вам не падабаецца, вы можаце выдаліць чалавека са свайго асяроддзя.</string>
@@ -203,6 +200,7 @@
<string name="instance_catalog_subtitle">Выбірайце сервер у залежнасці ад вашых інтарэсаў, рэгіёна або выберыце сервер агульнага прызначэння. Вы па-ранейшаму можаце ўзаемадзейнічаць з усімі, незалежна ад сервера.</string> <string name="instance_catalog_subtitle">Выбірайце сервер у залежнасці ад вашых інтарэсаў, рэгіёна або выберыце сервер агульнага прызначэння. Вы па-ранейшаму можаце ўзаемадзейнічаць з усімі, незалежна ад сервера.</string>
<string name="search_communities">Назва сервера або URL</string> <string name="search_communities">Назва сервера або URL</string>
<string name="instance_rules_title">Правілы сервера</string> <string name="instance_rules_title">Правілы сервера</string>
<string name="instance_rules_subtitle">Працягваючы, вы згаджаецеся выконваць правілы, устаноўленыя мадэратарам %s.</string>
<string name="signup_title">Стварыць уліковы запіс</string> <string name="signup_title">Стварыць уліковы запіс</string>
<string name="edit_photo">рэдагаваць</string> <string name="edit_photo">рэдагаваць</string>
<string name="display_name">Імя</string> <string name="display_name">Імя</string>
@@ -226,6 +224,8 @@
<string name="category_tech">Тэхналогіі</string> <string name="category_tech">Тэхналогіі</string>
<string name="confirm_email_title">Праверце паштовую скрыню</string> <string name="confirm_email_title">Праверце паштовую скрыню</string>
<!-- %s is the email address --> <!-- %s is the email address -->
<string name="confirm_email_subtitle">Націсніце на спасылку, якую мы адправілі, каб спраўдзіць %s. Мы вас пачакаем тут.</string>
<string name="confirm_email_didnt_get">Не атрымалі спасылку?</string>
<string name="resend">Адправіць паўторна</string> <string name="resend">Адправіць паўторна</string>
<string name="open_email_app">Адкрыць праграму для пошты</string> <string name="open_email_app">Адкрыць праграму для пошты</string>
<string name="resent_email">Электронны ліст з пацвярджэннем адпраўлены</string> <string name="resent_email">Электронны ліст з пацвярджэннем адпраўлены</string>
@@ -248,7 +248,6 @@
<string name="skip">Прапусціць</string> <string name="skip">Прапусціць</string>
<string name="notification_type_follow">Новыя падпісчыкі</string> <string name="notification_type_follow">Новыя падпісчыкі</string>
<string name="notification_type_favorite">Абраныя</string> <string name="notification_type_favorite">Абраныя</string>
<string name="notification_type_reblog">Пашырэнні</string>
<string name="notification_type_mention">Згадванні</string> <string name="notification_type_mention">Згадванні</string>
<string name="notification_type_poll">Апытанні</string> <string name="notification_type_poll">Апытанні</string>
<string name="choose_account">Выберыце ўліковы запіс</string> <string name="choose_account">Выберыце ўліковы запіс</string>
@@ -277,7 +276,6 @@
<string name="notify_none">ніхто</string> <string name="notify_none">ніхто</string>
<string name="notify_favorites">Дадае мой допіс у абранае</string> <string name="notify_favorites">Дадае мой допіс у абранае</string>
<string name="notify_follow">Падпісаўся на мяне</string> <string name="notify_follow">Падпісаўся на мяне</string>
<string name="notify_reblog">Пашырае мой допіс</string>
<string name="notify_mention">Згадвае мяне</string> <string name="notify_mention">Згадвае мяне</string>
<string name="settings_boring">Нудная зона</string> <string name="settings_boring">Нудная зона</string>
<string name="settings_account">Налады ўліковага запісу</string> <string name="settings_account">Налады ўліковага запісу</string>
@@ -298,7 +296,6 @@
<string name="hide_content">Схаваць змест</string> <string name="hide_content">Схаваць змест</string>
<string name="new_post">Новы допіс</string> <string name="new_post">Новы допіс</string>
<string name="button_reply">Адказаць</string> <string name="button_reply">Адказаць</string>
<string name="button_reblog">Пашырыць</string>
<string name="button_favorite">Абранае</string> <string name="button_favorite">Абранае</string>
<string name="button_share">Абагуліць</string> <string name="button_share">Абагуліць</string>
<string name="media_no_description">Медыя без апісання</string> <string name="media_no_description">Медыя без апісання</string>
@@ -312,9 +309,9 @@
<string name="follow_user">Падпісацца на %s</string> <string name="follow_user">Падпісацца на %s</string>
<string name="unfollowed_user">Адпісацца ад %s</string> <string name="unfollowed_user">Адпісацца ад %s</string>
<string name="followed_user">Цяпер вы падпісаны на %s</string> <string name="followed_user">Цяпер вы падпісаны на %s</string>
<string name="following_user_requested">Запытана падпісацца на %s</string>
<string name="open_in_browser">Адкрыць у браўзеры</string> <string name="open_in_browser">Адкрыць у браўзеры</string>
<string name="hide_boosts_from_user">Схаваць пашырэнні ад %s</string> <string name="signup_reason">Чаму вы хочаце далучыцца?</string>
<string name="show_boosts_from_user">Паказаць пашырэнні ад %s</string>
<string name="signup_reason_note">Гэта дапаможа нам разгледзець вашу заяўку.</string> <string name="signup_reason_note">Гэта дапаможа нам разгледзець вашу заяўку.</string>
<string name="clear">Ачысціць</string> <string name="clear">Ачысціць</string>
<string name="profile_header">Відарыс шапкі</string> <string name="profile_header">Відарыс шапкі</string>
@@ -361,15 +358,8 @@
<item quantity="many">%,d абраных</item> <item quantity="many">%,d абраных</item>
<item quantity="other">%,d абраных</item> <item quantity="other">%,d абраных</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d рэпост</item>
<item quantity="few">%,d рэпосты</item>
<item quantity="many">%,d пашырэнняў</item>
<item quantity="other">%,d пашырэнняў</item>
</plurals>
<string name="timestamp_via_app">%1$s праз %2$s</string> <string name="timestamp_via_app">%1$s праз %2$s</string>
<string name="time_now">толькі што</string> <string name="time_now">толькі што</string>
<string name="post_info_reblogs">Пашырэнні</string>
<string name="post_info_favorites">Абраныя</string> <string name="post_info_favorites">Абраныя</string>
<string name="edit_history">Гісторыя рэдагавання</string> <string name="edit_history">Гісторыя рэдагавання</string>
<string name="last_edit_at_x">Апошняе рэдагаванне %s</string> <string name="last_edit_at_x">Апошняе рэдагаванне %s</string>
@@ -419,6 +409,8 @@
<!-- %s is file size --> <!-- %s is file size -->
<string name="download_update">Спампаваць (%s)</string> <string name="download_update">Спампаваць (%s)</string>
<string name="install_update">Усталяваць</string> <string name="install_update">Усталяваць</string>
<string name="privacy_policy_title">Ваша прыватнасць</string>
<string name="privacy_policy_subtitle">Нягледзячы на ​​тое, што праграма Mastodon не збірае даных, сервер, на якім вы рэгіструецеся, можа мець іншую палітыку.\n\nКалі вы адмовіцеся ад палітыкі %s, вы можаце вярнуцца і выбраць іншы сервер.</string>
<string name="i_agree">Я згодны</string> <string name="i_agree">Я згодны</string>
<string name="empty_list">Гэты ліст пусты</string> <string name="empty_list">Гэты ліст пусты</string>
<string name="instance_signup_closed">Гэты сервер не прымае новыя рэгістрацыі.</string> <string name="instance_signup_closed">Гэты сервер не прымае новыя рэгістрацыі.</string>
@@ -430,20 +422,35 @@
<string name="login_title">З вяртаннем</string> <string name="login_title">З вяртаннем</string>
<string name="login_subtitle">Увайдзіце з дапамогай сервера, на якім вы стварылі свой уліковы запіс.</string> <string name="login_subtitle">Увайдзіце з дапамогай сервера, на якім вы стварылі свой уліковы запіс.</string>
<string name="server_url">URL-адрас сервера</string> <string name="server_url">URL-адрас сервера</string>
<string name="welcome_page1_text">Уявіце, што ў вас ёсць адрас электроннай пошты, які заканчваецца на @example.com.\n\nВы па-ранейшаму можаце адпраўляць і атрымліваць электронныя лісты ад каго захочаце, нават калі іх электронная пошта заканчваецца на @gmail.com, @icloud.com або @example.com.</string> <string name="signup_random_server_explain">Мы абярэм сервер на аснове вашай мовы, калі вы працягнеце без выбару.</string>
<string name="welcome_page2_title">Mastodon такі.</string>
<string name="welcome_page2_text">Ваш ідэнтыфікатар можа быць @gothgirl654@example.social, але вы ўсё яшчэ можаце падпісвацца, пашыраць і перапісвацца з @fallout5ever@example.online.</string>
<string name="welcome_page3_title">Як выбраць сервер?</string>
<string name="welcome_page3_text">Розныя людзі выбіраюць розныя серверы па розных прычынах. art.example з\'яўляецца выдатным месцам для мастакоў, у той час як glasgow.example можа быць добрым выбарам для шатландцаў.\n\nВы не памыліцеся ні з адным з нашых рэкамендаваных сервераў, так што незалежна ад таго, які вы выбераце (або калі ўведзяце ваш уласны ў радку пошуку сервера), вы нідзе нічога не прапусціце.</string>
<string name="server_filter_any_language">Любая мова</string> <string name="server_filter_any_language">Любая мова</string>
<string name="server_filter_instant_signup">Імгненная рэгістрацыя</string>
<string name="server_filter_manual_review">Ручная праверка</string>
<string name="server_filter_any_signup_speed">Любая хуткасць рэгістрацыі</string>
<string name="server_filter_region_europe">Еўропа</string> <string name="server_filter_region_europe">Еўропа</string>
<string name="server_filter_region_north_america">Паўночная Амерыка</string> <string name="server_filter_region_north_america">Паўночная Амерыка</string>
<string name="server_filter_region_south_america">Паўднёвая Амерыка</string> <string name="server_filter_region_south_america">Паўднёвая Амерыка</string>
<string name="server_filter_region_africa">Афрыка</string> <string name="server_filter_region_africa">Афрыка</string>
<string name="server_filter_region_asia">Азія</string> <string name="server_filter_region_asia">Азія</string>
<string name="server_filter_region_oceania">Акіянія</string> <string name="server_filter_region_oceania">Акіянія</string>
<string name="not_accepting_new_members">Не прымае новых удзельнікаў</string>
<string name="category_special_interests">Асаблівыя інтарэсы</string>
<string name="signup_passwords_dont_match">Паролі не супадаюць</string>
<string name="pick_server_for_me">Падбяры для мяне</string>
<string name="profile_add_row">Дадаць радок</string>
<string name="profile_setup">Налады профілю</string>
<string name="profile_setup_subtitle">Вы можаце завяршыць гэта пазней на ўкладцы Профіль.</string>
<string name="profile_setup_explanation">Вы можаце дадаць да чатырох палёў профіля для ўсяго, што хочаце. Месцазнаходжанне, спасылкі, займеннікі - няма мяжы магчымасцям.</string>
<string name="popular_on_mastodon">Папулярна на Mastodon</string>
<string name="follow_all">Падпісацца на ўсіх</string>
<string name="server_rules_disagree">Не згодны</string>
<string name="privacy_policy_explanation">Мы нічога не збіраем і не апрацоўваем.</string>
<!-- %s is server domain --> <!-- %s is server domain -->
<string name="server_policy_disagree">Не згодны з %s</string>
<string name="profile_bio">Пра мяне</string>
<!-- Shown in a progress dialog when you tap "follow all" --> <!-- Shown in a progress dialog when you tap "follow all" -->
<string name="sending_follows">Падпісваемся…</string>
<!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. --> <!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. -->
<string name="signup_email_domain_blocked">%1$s не прымае рэгістрацыю ад %2$s. Паспрабуйце іншы &lt;a&gt;выберыце іншы сервер&lt;/a&gt;.</string>
<string name="signup_username_taken">Гэта імя карыстальніка занята.</string> <string name="signup_username_taken">Гэта імя карыстальніка занята.</string>
</resources> </resources>

View File

@@ -12,7 +12,6 @@
<string name="user_followed_you">আপনাকে ফলো করেছেন</string> <string name="user_followed_you">আপনাকে ফলো করেছেন</string>
<string name="user_sent_follow_request">ফলো করার জন্য অনুরোধ পাঠানো হয়েছে</string> <string name="user_sent_follow_request">ফলো করার জন্য অনুরোধ পাঠানো হয়েছে</string>
<string name="user_favorited">আপনার পোস্টটি পছন্দ করেছেন</string> <string name="user_favorited">আপনার পোস্টটি পছন্দ করেছেন</string>
<string name="notification_boosted">আপনার পোস্টের প্রচার করা হয়েছে</string>
<string name="poll_ended">ভোট শেষ</string> <string name="poll_ended">ভোট শেষ</string>
<string name="time_seconds">%d সে.</string> <string name="time_seconds">%d সে.</string>
<string name="time_minutes">%d মি.</string> <string name="time_minutes">%d মি.</string>

View File

@@ -123,7 +123,6 @@
<string name="report_sent_subtitle">Dok ovo razmatramo, možete poduzeti potrebno za %s.</string> <string name="report_sent_subtitle">Dok ovo razmatramo, možete poduzeti potrebno za %s.</string>
<string name="unfollow_user">Prestani pratiti %s</string> <string name="unfollow_user">Prestani pratiti %s</string>
<string name="unfollow">Prestani pratiti</string> <string name="unfollow">Prestani pratiti</string>
<string name="mute_user_explain">Nećete vidjeti objave i odgovore na vašem zidu. Osoba neče znati da ste je isključili.</string>
<string name="block_user_explain">Neće moći više pratiti vaše objave, ali mogu vidjeti ako su blokirani.</string> <string name="block_user_explain">Neće moći više pratiti vaše objave, ali mogu vidjeti ako su blokirani.</string>
<string name="report_personal_title">Ne želite ovo vidjeti?</string> <string name="report_personal_title">Ne želite ovo vidjeti?</string>
<string name="report_personal_subtitle">Kada vidite nešto nepoželjno na Mastodon-u, možete blokirati odredjeni profil.</string> <string name="report_personal_subtitle">Kada vidite nešto nepoželjno na Mastodon-u, možete blokirati odredjeni profil.</string>
@@ -193,7 +192,6 @@
<string name="notify_none">nikoga</string> <string name="notify_none">nikoga</string>
<string name="notify_favorites">Svidjanje objave</string> <string name="notify_favorites">Svidjanje objave</string>
<string name="notify_follow">Prati me</string> <string name="notify_follow">Prati me</string>
<string name="notify_reblog">Ponovio/la moju objavu</string>
<string name="notify_mention">Spominjanje</string> <string name="notify_mention">Spominjanje</string>
<string name="settings_boring">Zona dosade</string> <string name="settings_boring">Zona dosade</string>
<string name="settings_account">Postavke računa</string> <string name="settings_account">Postavke računa</string>
@@ -214,7 +212,6 @@
<string name="hide_content">Sakrij sadžaj</string> <string name="hide_content">Sakrij sadžaj</string>
<string name="new_post">Nova objava</string> <string name="new_post">Nova objava</string>
<string name="button_reply">Odgovori</string> <string name="button_reply">Odgovori</string>
<string name="button_reblog">Dupliraj</string>
<string name="button_favorite">Svidja mi se</string> <string name="button_favorite">Svidja mi se</string>
<string name="button_share">Dijeli</string> <string name="button_share">Dijeli</string>
<string name="media_no_description">Medija bez opisa</string> <string name="media_no_description">Medija bez opisa</string>

View File

@@ -10,13 +10,11 @@
<string name="ok">D\'acord</string> <string name="ok">D\'acord</string>
<string name="preparing_auth">Preparant l\'autenticació…</string> <string name="preparing_auth">Preparant l\'autenticació…</string>
<string name="finishing_auth">Finalitzant l\'autenticació…</string> <string name="finishing_auth">Finalitzant l\'autenticació…</string>
<string name="user_boosted">%s ha impulsat</string>
<string name="in_reply_to">En resposta a %s</string> <string name="in_reply_to">En resposta a %s</string>
<string name="notifications">Notificacions</string> <string name="notifications">Notificacions</string>
<string name="user_followed_you">t\'ha seguit</string> <string name="user_followed_you">t\'ha seguit</string>
<string name="user_sent_follow_request">ha sol·licitat seguir-te</string> <string name="user_sent_follow_request">ha sol·licitat seguir-te</string>
<string name="user_favorited">ha afavorit la teva publicació</string> <string name="user_favorited">ha afavorit la teva publicació</string>
<string name="notification_boosted">ha impulsat la teva publicació</string>
<string name="poll_ended">l\'enquesta ha finalitzat</string> <string name="poll_ended">l\'enquesta ha finalitzat</string>
<string name="time_seconds">%d s</string> <string name="time_seconds">%d s</string>
<string name="time_minutes">%d min</string> <string name="time_minutes">%d min</string>
@@ -166,7 +164,6 @@
<string name="report_sent_subtitle">Mentre ho revisem, pots prendre mesures contra %s.</string> <string name="report_sent_subtitle">Mentre ho revisem, pots prendre mesures contra %s.</string>
<string name="unfollow_user">Deixar de seguir %s</string> <string name="unfollow_user">Deixar de seguir %s</string>
<string name="unfollow">Deixar de seguir</string> <string name="unfollow">Deixar de seguir</string>
<string name="mute_user_explain">No veuràs les seves publicacions o impulsos a la teva línia de temps personal. No sabran que han estat silenciats.</string>
<string name="block_user_explain">Ja no podran seguir ni veure les teves publicacions, però poden veure si han estat bloquejats.</string> <string name="block_user_explain">Ja no podran seguir ni veure les teves publicacions, però poden veure si han estat bloquejats.</string>
<string name="report_personal_title">No vols veure això?</string> <string name="report_personal_title">No vols veure això?</string>
<string name="report_personal_subtitle">Quan veus alguna cosa que no t\'agrada a Mastodon, pots eliminar la persona de la vostra experiència.</string> <string name="report_personal_subtitle">Quan veus alguna cosa que no t\'agrada a Mastodon, pots eliminar la persona de la vostra experiència.</string>
@@ -221,7 +218,6 @@
<string name="skip">Omet</string> <string name="skip">Omet</string>
<string name="notification_type_follow">Seguidors nous</string> <string name="notification_type_follow">Seguidors nous</string>
<string name="notification_type_favorite">Favorits</string> <string name="notification_type_favorite">Favorits</string>
<string name="notification_type_reblog">Impulsos</string>
<string name="notification_type_mention">Mencions</string> <string name="notification_type_mention">Mencions</string>
<string name="notification_type_poll">Enquestes</string> <string name="notification_type_poll">Enquestes</string>
<string name="choose_account">Selecciona un compte</string> <string name="choose_account">Selecciona un compte</string>
@@ -248,7 +244,6 @@
<string name="notify_none">ningú</string> <string name="notify_none">ningú</string>
<string name="notify_favorites">Ha afavorit la meva publicació</string> <string name="notify_favorites">Ha afavorit la meva publicació</string>
<string name="notify_follow">Em segueix</string> <string name="notify_follow">Em segueix</string>
<string name="notify_reblog">Impulsa la meva publicació</string>
<string name="notify_mention">Em menciona</string> <string name="notify_mention">Em menciona</string>
<string name="settings_boring">La zona avorrida</string> <string name="settings_boring">La zona avorrida</string>
<string name="settings_account">Configuració del compte</string> <string name="settings_account">Configuració del compte</string>
@@ -269,7 +264,6 @@
<string name="hide_content">Amaga el contingut</string> <string name="hide_content">Amaga el contingut</string>
<string name="new_post">Nova publicació</string> <string name="new_post">Nova publicació</string>
<string name="button_reply">Respon</string> <string name="button_reply">Respon</string>
<string name="button_reblog">Impulsa</string>
<string name="button_favorite">Favorit</string> <string name="button_favorite">Favorit</string>
<string name="button_share">Comparteix</string> <string name="button_share">Comparteix</string>
<string name="media_no_description">Multimèdia sense descripció</string> <string name="media_no_description">Multimèdia sense descripció</string>
@@ -284,8 +278,6 @@
<string name="unfollowed_user">S\'ha deixat de seguir %s</string> <string name="unfollowed_user">S\'ha deixat de seguir %s</string>
<string name="followed_user">Ara estàs seguint %s</string> <string name="followed_user">Ara estàs seguint %s</string>
<string name="open_in_browser">Obre al navegador</string> <string name="open_in_browser">Obre al navegador</string>
<string name="hide_boosts_from_user">Amaga els impulsos de %s</string>
<string name="show_boosts_from_user">Mostra els impulsos de %s</string>
<string name="signup_reason_note">Això ens ajudarà a revisar la teva petició.</string> <string name="signup_reason_note">Això ens ajudarà a revisar la teva petició.</string>
<string name="clear">Esborra</string> <string name="clear">Esborra</string>
<string name="profile_header">Imatge de capçalera</string> <string name="profile_header">Imatge de capçalera</string>
@@ -326,13 +318,8 @@
<item quantity="one">%,d favorit</item> <item quantity="one">%,d favorit</item>
<item quantity="other">%,d favorits</item> <item quantity="other">%,d favorits</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d impuls</item>
<item quantity="other">%,d impulsos</item>
</plurals>
<string name="timestamp_via_app">%1$s través de %2$s</string> <string name="timestamp_via_app">%1$s través de %2$s</string>
<string name="time_now">ara</string> <string name="time_now">ara</string>
<string name="post_info_reblogs">Impulsos</string>
<string name="post_info_favorites">Favorits</string> <string name="post_info_favorites">Favorits</string>
<string name="edit_history">Editar lhistorial</string> <string name="edit_history">Editar lhistorial</string>
<string name="last_edit_at_x">Darrera edició: %s</string> <string name="last_edit_at_x">Darrera edició: %s</string>

View File

@@ -69,7 +69,7 @@
<string name="sk_translated_using">Traduït amb %s</string> <string name="sk_translated_using">Traduït amb %s</string>
<string name="sk_post_language">Llengua: %s</string> <string name="sk_post_language">Llengua: %s</string>
<string name="sk_available_languages">Llengües disponibles</string> <string name="sk_available_languages">Llengües disponibles</string>
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_confirm_clear_recent_languages">Segur que vols esborrar les llengües recents\?</string> <string name="sk_confirm_clear_recent_languages">Segur que vols esborrar les llengües recents\?</string>
<string name="sk_welcome_text">El tauró et saluda! Per a començar, introdueix el domini de la instància a continuació.</string> <string name="sk_welcome_text">El tauró et saluda! Per a començar, introdueix el domini de la instància a continuació.</string>
<string name="sk_tabs_disable_swipe">Desactiva el desplaçament entre pestanyes</string> <string name="sk_tabs_disable_swipe">Desactiva el desplaçament entre pestanyes</string>

View File

@@ -10,13 +10,11 @@
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="preparing_auth">Příprava na autentizaci…</string> <string name="preparing_auth">Příprava na autentizaci…</string>
<string name="finishing_auth">Dokončení autentizace…</string> <string name="finishing_auth">Dokončení autentizace…</string>
<string name="user_boosted">Uživatel %s boostnul</string>
<string name="in_reply_to">V odpovědi na %s</string> <string name="in_reply_to">V odpovědi na %s</string>
<string name="notifications">Upozornění</string> <string name="notifications">Upozornění</string>
<string name="user_followed_you">vás začal(a) sledovat</string> <string name="user_followed_you">vás začal(a) sledovat</string>
<string name="user_sent_follow_request">vám poslal(a) žádost o sledování</string> <string name="user_sent_follow_request">vám poslal(a) žádost o sledování</string>
<string name="user_favorited">si oblíbil(a) váš příspěvek</string> <string name="user_favorited">si oblíbil(a) váš příspěvek</string>
<string name="notification_boosted">boostnul(a) váš příspěvek</string>
<string name="poll_ended">anketa skončila</string> <string name="poll_ended">anketa skončila</string>
<string name="time_seconds">%d s</string> <string name="time_seconds">%d s</string>
<string name="time_minutes">%d m</string> <string name="time_minutes">%d m</string>
@@ -194,14 +192,22 @@
<string name="report_sent_subtitle">Zatímco to posuzujeme, můžete podniknout akce proti %s.</string> <string name="report_sent_subtitle">Zatímco to posuzujeme, můžete podniknout akce proti %s.</string>
<string name="unfollow_user">Přestat sledovat %s</string> <string name="unfollow_user">Přestat sledovat %s</string>
<string name="unfollow">Přestat sledovat</string> <string name="unfollow">Přestat sledovat</string>
<string name="mute_user_explain">Neuvidíte příspěvky nebo boosty tohoto uživatele ve svém domovském kanálu. Nebude vědět, že je skryt.</string>
<string name="block_user_explain">Tento uživatel vás již nebude moci sledovat ani vidět vaše příspěvky, ale může zjistit, že je blokován.</string> <string name="block_user_explain">Tento uživatel vás již nebude moci sledovat ani vidět vaše příspěvky, ale může zjistit, že je blokován.</string>
<string name="report_personal_title">Nechcete tohle vidět?</string> <string name="report_personal_title">Nechcete tohle vidět?</string>
<string name="report_personal_subtitle">Když uvidíte něco, co se vám nelíbí na Mastodonu, můžete odstranit tuto osobu ze svého zážitku.</string> <string name="report_personal_subtitle">Když uvidíte něco, co se vám nelíbí na Mastodonu, můžete odstranit tuto osobu ze svého zážitku.</string>
<string name="back">Zpět</string> <string name="back">Zpět</string>
<string name="instance_catalog_title">Mastodon tvoří uživatelé z různých serverů.</string> <string name="instance_catalog_title">Mastodon tvoří uživatelé z různých serverů.</string>
<string name="instance_catalog_subtitle">Vyberte si server podle na svých zájmů, regionu nebo obecného účelu. Stále se můžete spojit se všemi bez ohledu na server.</string> <string name="instance_catalog_subtitle">Vyberte si server podle na svých zájmů, regionu nebo obecného účelu. Stále se můžete spojit se všemi bez ohledu na server.</string>
<string name="search_communities">Název nebo URL serveru</string>
<string name="instance_rules_title">Pravidla serveru</string>
<string name="instance_rules_subtitle">Pokračováním souhlasíte s následujícími pravidly, která jsou nastavena a prosazována moderátory %s.</string>
<string name="signup_title">Vytvořit účet</string>
<string name="edit_photo">upravit</string> <string name="edit_photo">upravit</string>
<string name="display_name">Jméno</string>
<string name="username">Uživatelské jméno</string>
<string name="email">E-mail</string>
<string name="password">Heslo</string>
<string name="confirm_password">Potvrdit heslo</string>
<string name="password_note">Použijte velká písmena, speciální znaky a čísla, abyste zvýšili sílu hesla.</string> <string name="password_note">Použijte velká písmena, speciální znaky a čísla, abyste zvýšili sílu hesla.</string>
<string name="category_academia">Akademická sféra</string> <string name="category_academia">Akademická sféra</string>
<string name="category_activism">Aktivismus</string> <string name="category_activism">Aktivismus</string>
@@ -216,7 +222,10 @@
<string name="category_music">Hudba</string> <string name="category_music">Hudba</string>
<string name="category_regional">Regionální</string> <string name="category_regional">Regionální</string>
<string name="category_tech">Technologie</string> <string name="category_tech">Technologie</string>
<string name="confirm_email_title">Zkontrolujte si příchozí poštu</string>
<!-- %s is the email address --> <!-- %s is the email address -->
<string name="confirm_email_subtitle">Klepněte na odkaz, který jsme vám poslali, abyste ověřili %s. Budeme tu na vás čekat.</string>
<string name="confirm_email_didnt_get">Nedostali jste odkaz?</string>
<string name="resend">Poslat znovu</string> <string name="resend">Poslat znovu</string>
<string name="open_email_app">Otevřít e-mailovou aplikaci</string> <string name="open_email_app">Otevřít e-mailovou aplikaci</string>
<string name="resent_email">Potvrzující e-mail byl odeslán</string> <string name="resent_email">Potvrzující e-mail byl odeslán</string>
@@ -239,7 +248,6 @@
<string name="skip">Přeskočit</string> <string name="skip">Přeskočit</string>
<string name="notification_type_follow">Noví sledující</string> <string name="notification_type_follow">Noví sledující</string>
<string name="notification_type_favorite">Oblíbené</string> <string name="notification_type_favorite">Oblíbené</string>
<string name="notification_type_reblog">Boosty</string>
<string name="notification_type_mention">Zmínky</string> <string name="notification_type_mention">Zmínky</string>
<string name="notification_type_poll">Ankety</string> <string name="notification_type_poll">Ankety</string>
<string name="choose_account">Vybrat účet</string> <string name="choose_account">Vybrat účet</string>
@@ -268,7 +276,6 @@
<string name="notify_none">nikoho</string> <string name="notify_none">nikoho</string>
<string name="notify_favorites">Oblíbí si můj příspěvek</string> <string name="notify_favorites">Oblíbí si můj příspěvek</string>
<string name="notify_follow">Začne mě sledovat</string> <string name="notify_follow">Začne mě sledovat</string>
<string name="notify_reblog">Boostne můj příspěvek</string>
<string name="notify_mention">Zmíní mě</string> <string name="notify_mention">Zmíní mě</string>
<string name="settings_boring">Nudná část</string> <string name="settings_boring">Nudná část</string>
<string name="settings_account">Nastavení účtu</string> <string name="settings_account">Nastavení účtu</string>
@@ -289,7 +296,6 @@
<string name="hide_content">Skrýt obsah</string> <string name="hide_content">Skrýt obsah</string>
<string name="new_post">Nový příspěvek</string> <string name="new_post">Nový příspěvek</string>
<string name="button_reply">Odpovědět</string> <string name="button_reply">Odpovědět</string>
<string name="button_reblog">Boostnout</string>
<string name="button_favorite">Oblíbit</string> <string name="button_favorite">Oblíbit</string>
<string name="button_share">Sdílet</string> <string name="button_share">Sdílet</string>
<string name="media_no_description">Média bez popisu</string> <string name="media_no_description">Média bez popisu</string>
@@ -303,9 +309,9 @@
<string name="follow_user">Sledovat %s</string> <string name="follow_user">Sledovat %s</string>
<string name="unfollowed_user">Sledování %s bylo zrušeno</string> <string name="unfollowed_user">Sledování %s bylo zrušeno</string>
<string name="followed_user">Nyní sledujete %s</string> <string name="followed_user">Nyní sledujete %s</string>
<string name="following_user_requested">Požádáno o sledování %s</string>
<string name="open_in_browser">Otevřít v prohlížeči</string> <string name="open_in_browser">Otevřít v prohlížeči</string>
<string name="hide_boosts_from_user">Skrýt boosty od %s</string> <string name="signup_reason">Proč se chcete připojit?</string>
<string name="show_boosts_from_user">Zobrazit boosty od %s</string>
<string name="signup_reason_note">Toto nám pomůže posoudit vaši žádost.</string> <string name="signup_reason_note">Toto nám pomůže posoudit vaši žádost.</string>
<string name="clear">Vyčistit</string> <string name="clear">Vyčistit</string>
<string name="profile_header">Obrázek v záhlaví</string> <string name="profile_header">Obrázek v záhlaví</string>
@@ -352,15 +358,8 @@
<item quantity="many">%,d oblíbení</item> <item quantity="many">%,d oblíbení</item>
<item quantity="other">%,d oblíbení</item> <item quantity="other">%,d oblíbení</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d boostnul</item>
<item quantity="few">%,d boosty</item>
<item quantity="many">%,d boostů</item>
<item quantity="other">%,d boostů</item>
</plurals>
<string name="timestamp_via_app">%1$s přes %2$s</string> <string name="timestamp_via_app">%1$s přes %2$s</string>
<string name="time_now">teď</string> <string name="time_now">teď</string>
<string name="post_info_reblogs">Boosty</string>
<string name="post_info_favorites">Oblíbení</string> <string name="post_info_favorites">Oblíbení</string>
<string name="edit_history">Historie úprav</string> <string name="edit_history">Historie úprav</string>
<string name="last_edit_at_x">Poslední úprava %s</string> <string name="last_edit_at_x">Poslední úprava %s</string>
@@ -410,6 +409,8 @@
<!-- %s is file size --> <!-- %s is file size -->
<string name="download_update">Stáhnout (%s)</string> <string name="download_update">Stáhnout (%s)</string>
<string name="install_update">Instalovat</string> <string name="install_update">Instalovat</string>
<string name="privacy_policy_title">Vaše soukromí</string>
<string name="privacy_policy_subtitle">Přestože aplikace Mastodon neshromažďuje žádná data, server, který se přihlásíte, může mít jiné zásady.\n\nPokud nesouhlasíte se zásadami pro %s, můžete se vrátit a vybrat jiný server.</string>
<string name="i_agree">Souhlasím</string> <string name="i_agree">Souhlasím</string>
<string name="empty_list">Tento seznam je prázdný</string> <string name="empty_list">Tento seznam je prázdný</string>
<string name="instance_signup_closed">Tento server nepřijímá nové registrace.</string> <string name="instance_signup_closed">Tento server nepřijímá nové registrace.</string>
@@ -421,12 +422,35 @@
<string name="login_title">Vítejte zpět</string> <string name="login_title">Vítejte zpět</string>
<string name="login_subtitle">Přihlaste se pomocí serveru, kde jste vytvořili svůj účet.</string> <string name="login_subtitle">Přihlaste se pomocí serveru, kde jste vytvořili svůj účet.</string>
<string name="server_url">URL serveru</string> <string name="server_url">URL serveru</string>
<string name="welcome_page1_text">Představte si, že máte e-mailovou adresu, která končí @example.com.\n\nStále můžete od kohokoliv odesílat a přijímat e-maily, i když jejich e-mail končí na @gmail.com nebo @icloud.com nebo @example.com.</string> <string name="signup_random_server_explain">Pokud budete pokračovat bez výběru, vybereme server založený na vašem jazyce.</string>
<string name="welcome_page2_title">Takový je Mastodon.</string> <string name="server_filter_any_language">Libovolný jazyk</string>
<string name="welcome_page2_text">Vaše uživatelské jméno může být @gothgirl654@example.social, ale stále můžete sledovat, boostovat a chatovat s @fallout5ever@example.online.</string> <string name="server_filter_instant_signup">Okamžitá registrace</string>
<string name="welcome_page3_title">Jak si vybrat server?</string> <string name="server_filter_manual_review">Ruční kontrola</string>
<string name="welcome_page3_text">Různí lidé si vybírají různé servery z různých důvodů. Art.example je skvělým místem pro umělce, zatímco glasgow.example může být dobrou volbou pro Skoty.\n\nS žádným z našich doporučených serverů nemůžete udělat chybu, takže bez ohledu na to, který z nich si vyberete (nebo pokud zadáte svůj vlastní do vyhledávacího řádku serveru), nikde neprohloupíte.</string> <string name="server_filter_any_signup_speed">Jakákoliv rychlost registrace</string>
<string name="server_filter_region_europe">Evropa</string>
<string name="server_filter_region_north_america">Severní Amerika</string>
<string name="server_filter_region_south_america">Jižní Amerika</string>
<string name="server_filter_region_africa">Afrika</string>
<string name="server_filter_region_asia">Asie</string>
<string name="server_filter_region_oceania">Oceánie</string>
<string name="not_accepting_new_members">Nepřijímá nové členy</string>
<string name="category_special_interests">Speciální zájmy</string>
<string name="signup_passwords_dont_match">Hesla se neshodují</string>
<string name="pick_server_for_me">Vybrat pro mě</string>
<string name="profile_add_row">Přidat řádek</string>
<string name="profile_setup">Nastavení profilu</string>
<string name="profile_setup_subtitle">Toto můžete vždy dokončit později v záložce Profil.</string>
<string name="profile_setup_explanation">Můžete přidat až čtyři pole profilu pro cokoliv, co chcete. Umístění, odkazy, oslovení — limitem je obloha.</string>
<string name="popular_on_mastodon">Populární na Mastodonu</string>
<string name="follow_all">Sledovat všechny</string>
<string name="server_rules_disagree">Nesouhlasit</string>
<string name="privacy_policy_explanation">Zkráceně: nic nesbíráme a nezpracováváme.</string>
<!-- %s is server domain --> <!-- %s is server domain -->
<string name="server_policy_disagree">Nesouhlasit s %s</string>
<string name="profile_bio">O vás</string>
<!-- Shown in a progress dialog when you tap "follow all" --> <!-- Shown in a progress dialog when you tap "follow all" -->
<string name="sending_follows">Sledování uživatelů…</string>
<!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. --> <!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. -->
<string name="signup_email_domain_blocked">%1$s neumožňuje registraci od %2$s. Zkuste jiný nebo &lt;a&gt;vyberte jiný server&lt;/a&gt;.</string>
<string name="signup_username_taken">Toto uživatelské jméno je obsazené.</string>
</resources> </resources>

View File

@@ -40,7 +40,7 @@
<string name="sk_no_update_available">Dim diweddariad ar gael</string> <string name="sk_no_update_available">Dim diweddariad ar gael</string>
<string name="sk_check_for_update">Gwirio am ddiweddariad</string> <string name="sk_check_for_update">Gwirio am ddiweddariad</string>
<string name="sk_poll_allow_multiple">Caniatáu mwy nag un dewis</string> <string name="sk_poll_allow_multiple">Caniatáu mwy nag un dewis</string>
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_tabs_disable_swipe">Analluogi llusgo rhwng tabiau</string> <string name="sk_tabs_disable_swipe">Analluogi llusgo rhwng tabiau</string>
<string name="sk_settings_posting">Dewisiadau postio</string> <string name="sk_settings_posting">Dewisiadau postio</string>
<string name="sk_settings_rules">Rheolau</string> <string name="sk_settings_rules">Rheolau</string>

View File

@@ -10,13 +10,11 @@
<string name="ok">Ok</string> <string name="ok">Ok</string>
<string name="preparing_auth">Forbereder godkendelse…</string> <string name="preparing_auth">Forbereder godkendelse…</string>
<string name="finishing_auth">Afslutter godkendelse…</string> <string name="finishing_auth">Afslutter godkendelse…</string>
<string name="user_boosted">%s boostede</string>
<string name="in_reply_to">Som svar til %s</string> <string name="in_reply_to">Som svar til %s</string>
<string name="notifications">Meddelelser</string> <string name="notifications">Meddelelser</string>
<string name="user_followed_you">begyndte at følge dig</string> <string name="user_followed_you">begyndte at følge dig</string>
<string name="user_sent_follow_request">sendte dig en følgeanmodning</string> <string name="user_sent_follow_request">sendte dig en følgeanmodning</string>
<string name="user_favorited">favoritmarkerede dit indlæg</string> <string name="user_favorited">favoritmarkerede dit indlæg</string>
<string name="notification_boosted">boostede dit indlæg</string>
<string name="poll_ended">afstemning afsluttet</string> <string name="poll_ended">afstemning afsluttet</string>
<string name="time_seconds">%ds</string> <string name="time_seconds">%ds</string>
<string name="time_minutes">%d m</string> <string name="time_minutes">%d m</string>
@@ -166,7 +164,6 @@
<string name="report_sent_subtitle">Mens dette gennemgås, kan du selv bortfiltrere indlæg fra %s.</string> <string name="report_sent_subtitle">Mens dette gennemgås, kan du selv bortfiltrere indlæg fra %s.</string>
<string name="unfollow_user">Følg ikke længere %s</string> <string name="unfollow_user">Følg ikke længere %s</string>
<string name="unfollow">Følg ikke længere</string> <string name="unfollow">Følg ikke længere</string>
<string name="mute_user_explain">Du vil ikke se den pågældendes indlæg eller boosts i din tidslinje. Vedkommende vil ikke få besked om dæmpningen.</string>
<string name="block_user_explain">Vedkommende vil ikke længere kunne følge dig eller se dine indlæg, men vedkommende kan se blokeringen.</string> <string name="block_user_explain">Vedkommende vil ikke længere kunne følge dig eller se dine indlæg, men vedkommende kan se blokeringen.</string>
<string name="report_personal_title">Ønsker du ikke at se dette?</string> <string name="report_personal_title">Ønsker du ikke at se dette?</string>
<string name="report_personal_subtitle">Når du ser noget, du ikke kan lide på Mastodon, kan du fjerne personen fra din tidslinje.</string> <string name="report_personal_subtitle">Når du ser noget, du ikke kan lide på Mastodon, kan du fjerne personen fra din tidslinje.</string>
@@ -223,7 +220,6 @@
<string name="skip">Spring over</string> <string name="skip">Spring over</string>
<string name="notification_type_follow">Nye følgere</string> <string name="notification_type_follow">Nye følgere</string>
<string name="notification_type_favorite">Favoritmarkeringer</string> <string name="notification_type_favorite">Favoritmarkeringer</string>
<string name="notification_type_reblog">Boosts</string>
<string name="notification_type_mention">Omtaler</string> <string name="notification_type_mention">Omtaler</string>
<string name="notification_type_poll">Afstemninger</string> <string name="notification_type_poll">Afstemninger</string>
<string name="choose_account">Vælg konto</string> <string name="choose_account">Vælg konto</string>
@@ -250,7 +246,6 @@
<string name="notify_none">ingen</string> <string name="notify_none">ingen</string>
<string name="notify_favorites">Favoritmarkerede mit indlæg</string> <string name="notify_favorites">Favoritmarkerede mit indlæg</string>
<string name="notify_follow">Følger mig</string> <string name="notify_follow">Følger mig</string>
<string name="notify_reblog">Booster mit indlæg</string>
<string name="notify_mention">Nævner mig</string> <string name="notify_mention">Nævner mig</string>
<string name="settings_boring">Den kedelige zone</string> <string name="settings_boring">Den kedelige zone</string>
<string name="settings_account">Kontoindstillinger</string> <string name="settings_account">Kontoindstillinger</string>
@@ -271,7 +266,6 @@
<string name="hide_content">Skjul indhold</string> <string name="hide_content">Skjul indhold</string>
<string name="new_post">Nyt indlæg</string> <string name="new_post">Nyt indlæg</string>
<string name="button_reply">Svar</string> <string name="button_reply">Svar</string>
<string name="button_reblog">Boost</string>
<string name="button_favorite">Favorit</string> <string name="button_favorite">Favorit</string>
<string name="button_share">Del</string> <string name="button_share">Del</string>
<string name="media_no_description">Medier uden beskrivelse</string> <string name="media_no_description">Medier uden beskrivelse</string>
@@ -286,8 +280,6 @@
<string name="unfollowed_user">Følg ikke længere %s</string> <string name="unfollowed_user">Følg ikke længere %s</string>
<string name="followed_user">Du følger nu %s</string> <string name="followed_user">Du følger nu %s</string>
<string name="open_in_browser">Åbn i browser</string> <string name="open_in_browser">Åbn i browser</string>
<string name="hide_boosts_from_user">Skjul boosts fra %s</string>
<string name="show_boosts_from_user">Vis boosts fra %s</string>
<string name="signup_reason">Hvorfor ønsker du at tilmelde dig?</string> <string name="signup_reason">Hvorfor ønsker du at tilmelde dig?</string>
<string name="signup_reason_note">Dette hjælper os med at vurdere din ansøgning.</string> <string name="signup_reason_note">Dette hjælper os med at vurdere din ansøgning.</string>
<string name="clear">Ryd</string> <string name="clear">Ryd</string>
@@ -329,13 +321,8 @@
<item quantity="one">%,d favoritmarkering</item> <item quantity="one">%,d favoritmarkering</item>
<item quantity="other">%,d favoritmarkeringer</item> <item quantity="other">%,d favoritmarkeringer</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d boost</item>
<item quantity="other">%,d boosts</item>
</plurals>
<string name="timestamp_via_app">%1$s via %2$s</string> <string name="timestamp_via_app">%1$s via %2$s</string>
<string name="time_now">nu</string> <string name="time_now">nu</string>
<string name="post_info_reblogs">Boosts</string>
<string name="post_info_favorites">Favoritmarkeringer</string> <string name="post_info_favorites">Favoritmarkeringer</string>
<string name="edit_history">Rediger historik</string> <string name="edit_history">Rediger historik</string>
<string name="last_edit_at_x">Senest ændret: %s</string> <string name="last_edit_at_x">Senest ændret: %s</string>
@@ -393,12 +380,6 @@
<string name="login_title">Velkommen tilbage</string> <string name="login_title">Velkommen tilbage</string>
<string name="login_subtitle">Log ind med serveren hvor du oprettede din bruger.</string> <string name="login_subtitle">Log ind med serveren hvor du oprettede din bruger.</string>
<string name="server_url">Server-URL</string> <string name="server_url">Server-URL</string>
<string name="welcome_page1_title">Hvad er Mastodon?</string>
<string name="welcome_page1_text">Det svarer til at du har en e-mailadresse, der slutter med @eksempel.dk.\n\nAlligevel kan du stadig både sende og modtage e-mails fra alle, selv om deres e-mail ender på @gmail.com eller @icloud.com eller @eksempel.dk.</string>
<string name="welcome_page2_title">Mastodon er ligesådan.</string>
<string name="welcome_page2_text">Dit brugernavn kan være @goth654@eksempel.social, men du kan stadig følge, booste, og chatte med @denanden@eksempel.online.</string>
<string name="welcome_page3_title">Hvordan vælger jeg en server?</string>
<string name="welcome_page3_text">Forskellige mennesker vælger forskellige servere af mange forskellige grunde. art.example er et godt sted for kunstnere, mens glasgow.example kan være et godt pluk for skotter.\n\nDu kan ikke gå galt i byen med en af vores anbefalingsservere, så uanset hvilken du vælger (eller hvis du indtaster din egen i serversøgelinjen), vil du aldrig gå glip af noget nogen steder.</string>
<string name="signup_random_server_explain">Vi vælger en server baseret på dit sprog, hvis du fortsætter uden at foretage et valg.</string> <string name="signup_random_server_explain">Vi vælger en server baseret på dit sprog, hvis du fortsætter uden at foretage et valg.</string>
<string name="server_filter_any_language">Hvilket som helst sprog</string> <string name="server_filter_any_language">Hvilket som helst sprog</string>
<string name="server_filter_instant_signup">Øjeblikkelig tilmelding</string> <string name="server_filter_instant_signup">Øjeblikkelig tilmelding</string>

View File

@@ -10,13 +10,11 @@
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="preparing_auth">Authentifizierung wird vorbereitet </string> <string name="preparing_auth">Authentifizierung wird vorbereitet </string>
<string name="finishing_auth">Authentifizierung wird abgeschlossen …</string> <string name="finishing_auth">Authentifizierung wird abgeschlossen …</string>
<string name="user_boosted">%s hat diesen Beitrag geteilt</string>
<string name="in_reply_to">Als Antwort auf %s</string> <string name="in_reply_to">Als Antwort auf %s</string>
<string name="notifications">Benachrichtigungen</string> <string name="notifications">Benachrichtigungen</string>
<string name="user_followed_you">folgt dir jetzt</string> <string name="user_followed_you">folgt dir jetzt</string>
<string name="user_sent_follow_request">hat dir eine Follower-Anfrage gesendet</string> <string name="user_sent_follow_request">hat dir eine Follower-Anfrage gesendet</string>
<string name="user_favorited">favorisierte</string> <string name="user_favorited">favorisierte</string>
<string name="notification_boosted">teilte</string>
<string name="poll_ended">Abstimmung beendet</string> <string name="poll_ended">Abstimmung beendet</string>
<string name="time_seconds">vor %d Sekunden</string> <string name="time_seconds">vor %d Sekunden</string>
<string name="time_minutes">vor %d Minuten</string> <string name="time_minutes">vor %d Minuten</string>
@@ -166,7 +164,6 @@
<string name="report_sent_subtitle">Während wir den Vorfall überprüfen, kannst du gegen %s weitere Maßnahmen ergreifen.</string> <string name="report_sent_subtitle">Während wir den Vorfall überprüfen, kannst du gegen %s weitere Maßnahmen ergreifen.</string>
<string name="unfollow_user">%s entfolgen</string> <string name="unfollow_user">%s entfolgen</string>
<string name="unfollow">Entfolgen</string> <string name="unfollow">Entfolgen</string>
<string name="mute_user_explain">Du wirst die eigenen und geteilten Beiträge des Kontos nicht mehr sehen können. Dass du das Profil stummgeschaltet hast, erfährt die Person nicht.</string>
<string name="block_user_explain">Dir wird es nicht länger möglich sein, die Beiträge dieses Konto zu sehen. Das blockierte Profil wird nicht mehr in der Lage sein, deine Beiträge zu sehen oder dir zu folgen. Die Person hinter dem Konto wird mitbekommen, dass du ihr Konto gesperrt hast.</string> <string name="block_user_explain">Dir wird es nicht länger möglich sein, die Beiträge dieses Konto zu sehen. Das blockierte Profil wird nicht mehr in der Lage sein, deine Beiträge zu sehen oder dir zu folgen. Die Person hinter dem Konto wird mitbekommen, dass du ihr Konto gesperrt hast.</string>
<string name="report_personal_title">Möchtest du das nicht mehr sehen?</string> <string name="report_personal_title">Möchtest du das nicht mehr sehen?</string>
<string name="report_personal_subtitle">Wenn du etwas auf Mastodon siehst, das dir nicht gefällt, kannst du die Person aus deinem Umfeld entfernen.</string> <string name="report_personal_subtitle">Wenn du etwas auf Mastodon siehst, das dir nicht gefällt, kannst du die Person aus deinem Umfeld entfernen.</string>
@@ -223,7 +220,6 @@
<string name="skip">Überspringen</string> <string name="skip">Überspringen</string>
<string name="notification_type_follow">Neue Follower</string> <string name="notification_type_follow">Neue Follower</string>
<string name="notification_type_favorite">Favoriten</string> <string name="notification_type_favorite">Favoriten</string>
<string name="notification_type_reblog">Geteilte Beiträge</string>
<string name="notification_type_mention">Erwähnungen</string> <string name="notification_type_mention">Erwähnungen</string>
<string name="notification_type_poll">Umfragen</string> <string name="notification_type_poll">Umfragen</string>
<string name="choose_account">Konto auswählen</string> <string name="choose_account">Konto auswählen</string>
@@ -250,7 +246,6 @@
<string name="notify_none">niemand</string> <string name="notify_none">niemand</string>
<string name="notify_favorites">meinen Beitrag favorisiert</string> <string name="notify_favorites">meinen Beitrag favorisiert</string>
<string name="notify_follow">mir folgt</string> <string name="notify_follow">mir folgt</string>
<string name="notify_reblog">einen meiner Beiträge geteilt hat</string>
<string name="notify_mention">mich erwähnt</string> <string name="notify_mention">mich erwähnt</string>
<string name="settings_boring">Langweiliges</string> <string name="settings_boring">Langweiliges</string>
<string name="settings_account">Kontoeinstellungen</string> <string name="settings_account">Kontoeinstellungen</string>
@@ -271,7 +266,6 @@
<string name="hide_content">Inhalt ausblenden</string> <string name="hide_content">Inhalt ausblenden</string>
<string name="new_post">Neuer Beitrag</string> <string name="new_post">Neuer Beitrag</string>
<string name="button_reply">Antworten</string> <string name="button_reply">Antworten</string>
<string name="button_reblog">Teilen</string>
<string name="button_favorite">Favorisieren</string> <string name="button_favorite">Favorisieren</string>
<string name="button_share">Teilen</string> <string name="button_share">Teilen</string>
<string name="media_no_description">Medien ohne Beschreibung</string> <string name="media_no_description">Medien ohne Beschreibung</string>
@@ -287,8 +281,6 @@
<string name="followed_user">Du folgst nun %s</string> <string name="followed_user">Du folgst nun %s</string>
<string name="following_user_requested">Deine Follower-Anfrage an %s wurde gesendet</string> <string name="following_user_requested">Deine Follower-Anfrage an %s wurde gesendet</string>
<string name="open_in_browser">Im Browser öffnen</string> <string name="open_in_browser">Im Browser öffnen</string>
<string name="hide_boosts_from_user">geteilte Beiträge von %s ausblenden</string>
<string name="show_boosts_from_user">geteilte Beiträge von %s anzeigen</string>
<string name="signup_reason">Warum möchtest du beitreten?</string> <string name="signup_reason">Warum möchtest du beitreten?</string>
<string name="signup_reason_note">Das erleichtert uns die Prüfung deiner Anmeldung.</string> <string name="signup_reason_note">Das erleichtert uns die Prüfung deiner Anmeldung.</string>
<string name="clear">Leeren</string> <string name="clear">Leeren</string>
@@ -330,13 +322,8 @@
<item quantity="one">%,d × favorisiert</item> <item quantity="one">%,d × favorisiert</item>
<item quantity="other">%,d × favorisiert</item> <item quantity="other">%,d × favorisiert</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d × geteilt</item>
<item quantity="other">%,d × geteilt</item>
</plurals>
<string name="timestamp_via_app">%1$s via %2$s</string> <string name="timestamp_via_app">%1$s via %2$s</string>
<string name="time_now">jetzt</string> <string name="time_now">jetzt</string>
<string name="post_info_reblogs">Geteilte Beiträge</string>
<string name="post_info_favorites">Favoriten</string> <string name="post_info_favorites">Favoriten</string>
<string name="edit_history">Verlauf bearbeiten</string> <string name="edit_history">Verlauf bearbeiten</string>
<string name="last_edit_at_x">Zuletzt bearbeitet: %s</string> <string name="last_edit_at_x">Zuletzt bearbeitet: %s</string>
@@ -395,12 +382,6 @@
<string name="login_title">Willkommen zurück</string> <string name="login_title">Willkommen zurück</string>
<string name="login_subtitle">Melde dich mit dem Server an, auf dem du dein Konto erstellt hast.</string> <string name="login_subtitle">Melde dich mit dem Server an, auf dem du dein Konto erstellt hast.</string>
<string name="server_url">Serveradresse</string> <string name="server_url">Serveradresse</string>
<string name="welcome_page1_title">Was ist Mastodon?</string>
<string name="welcome_page1_text">Angenommen, du hast eine E-Mail-Adresse, die mit @example.com endet.\n\nDu kannst immer noch E-Mails von allen empfangen, auch wenn deren E-Mail-Adresse mit @gmail.com, @icloud.com oder @example.com endet.</string>
<string name="welcome_page2_title">Mastodon ist genau so.</string>
<string name="welcome_page2_text">Dein Nutzer*innenname könnte @GothGirl654@example.social sein, aber du kannst trotzdem @fallout5ever@example.online folgen, deren Beiträge teilen und dich mit der Person unterhalten.</string>
<string name="welcome_page3_title">Wie wähle ich einen Server aus?</string>
<string name="welcome_page3_text">Unterschiedliche Menschen wählen aus verschiedenen Gründen unterschiedliche Server. art.example ist ein toller Ort für Künstler*innen, während glasgow.example eine gute Wahl für Schott*innen sein könnte.\n\nWähle nach Möglichkeit einen kleinen Server aus, mit dessen Regeln du dich wohl fühlst und der dir vertrauenswürdig erscheint (über die Server-Suchleiste kannst du dich direkt mit dem Server deines Vertrauens verbinden).</string>
<string name="signup_random_server_explain">Wenn du ohne Auswahl fortfährst, wählen wir einen Server in deiner Sprache aus.</string> <string name="signup_random_server_explain">Wenn du ohne Auswahl fortfährst, wählen wir einen Server in deiner Sprache aus.</string>
<string name="server_filter_any_language">Alle Sprachen</string> <string name="server_filter_any_language">Alle Sprachen</string>
<string name="server_filter_instant_signup">Schnellregistrierung</string> <string name="server_filter_instant_signup">Schnellregistrierung</string>

View File

@@ -43,4 +43,6 @@
<string name="mo_share_open_url">In der App öffnen</string> <string name="mo_share_open_url">In der App öffnen</string>
<string name="mo_disable_double_tap_to_swipe_between_tabs">Deaktiviere doppeltes Tippen, um zwischen Tabs zu wechseln</string> <string name="mo_disable_double_tap_to_swipe_between_tabs">Deaktiviere doppeltes Tippen, um zwischen Tabs zu wechseln</string>
<string name="mo_swap_bookmark_with_reblog">Verwenden der Reblog-Aktion anstelle der Lesezeichen-Aktion bei Benachrichtigungen</string> <string name="mo_swap_bookmark_with_reblog">Verwenden der Reblog-Aktion anstelle der Lesezeichen-Aktion bei Benachrichtigungen</string>
<string name="mo_download_latest_nightly_release">Neueste Nightly Version herunterladen</string>
<string name="mo_load_remote_followers">Follower und Follower des Remote Profils laden</string>
</resources> </resources>

View File

@@ -50,7 +50,7 @@
<string name="sk_poll_allow_multiple">Mehrfachantworten erlauben</string> <string name="sk_poll_allow_multiple">Mehrfachantworten erlauben</string>
<string name="sk_translated_using">Übersetzt mit %s</string> <string name="sk_translated_using">Übersetzt mit %s</string>
<string name="sk_post_language">Sprache: %s</string> <string name="sk_post_language">Sprache: %s</string>
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_confirm_clear_recent_languages">Sicher, dass du die Liste der zuletzt verwendeten Sprachen leeren willst\?</string> <string name="sk_confirm_clear_recent_languages">Sicher, dass du die Liste der zuletzt verwendeten Sprachen leeren willst\?</string>
<string name="sk_translate_post">Übersetzen</string> <string name="sk_translate_post">Übersetzen</string>
<string name="sk_translate_show_original">Original anzeigen</string> <string name="sk_translate_show_original">Original anzeigen</string>
@@ -164,7 +164,7 @@
<string name="sk_alt_text_missing_title">Fehlende Bildbeschreibung</string> <string name="sk_alt_text_missing_title">Fehlende Bildbeschreibung</string>
<string name="sk_settings_disable_alt_text_reminder">Erinnerung zum Hinzufügen von Bildbeschreibungen ausschalten</string> <string name="sk_settings_disable_alt_text_reminder">Erinnerung zum Hinzufügen von Bildbeschreibungen ausschalten</string>
<string name="sk_alt_button">ALT</string> <string name="sk_alt_button">ALT</string>
<string name="sk_notify_update">Bearbeitet einen geteilten Beitrag</string> <string name="sk_notify_update">einen geteilten Beitrag bearbeitet</string>
<string name="sk_timelines">Timelines</string> <string name="sk_timelines">Timelines</string>
<string name="sk_timeline">Timeline</string> <string name="sk_timeline">Timeline</string>
<string name="sk_hashtag">Hashtag</string> <string name="sk_hashtag">Hashtag</string>
@@ -271,4 +271,5 @@
<string name="sk_show_thread">Thread öffnen</string> <string name="sk_show_thread">Thread öffnen</string>
<string name="sk_compact_reblog_reply_line">Kompakte Geteilt/Geantwortet-Zeile</string> <string name="sk_compact_reblog_reply_line">Kompakte Geteilt/Geantwortet-Zeile</string>
<string name="sk_reply_line_above_avatar">“Als Antwort auf”-Zeile über Profilbild</string> <string name="sk_reply_line_above_avatar">“Als Antwort auf”-Zeile über Profilbild</string>
<string name="sk_settings_confirm_before_reblog">Vor dem Teilen bestätigen</string>
</resources> </resources>

View File

@@ -1,11 +1,448 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="get_started">Δημιουργία λογαριασμού</string>
<string name="already_have_account">Έχω ήδη λογαριασμό</string>
<string name="log_in">Σύνδεση</string>
<string name="next">Επόμενο</string>
<string name="loading_instance">Ανάκτηση πληροφοριών διακομιστή…</string>
<string name="error">Σφάλμα</string>
<string name="not_a_mastodon_instance">%s δεν φαίνεται να είναι διακομιστής Mastodon.</string>
<string name="ok">ΟΚ</string>
<string name="preparing_auth">Προετοιμασία για έλεγχο ταυτότητας…</string>
<string name="finishing_auth">Ολοκλήρωση ταυτοποίησης…</string>
<string name="user_boosted">%s ενισχύθηκε</string>
<string name="in_reply_to">Σε απάντηση στο %s</string>
<string name="notifications">Ειδοποιήσεις</string>
<string name="user_followed_you">σε ακολουθεί</string>
<string name="user_sent_follow_request">σου έστειλε ένα αίτημα ακολούθησης</string>
<string name="user_favorited">σημείωσε ως αγαπημένη την ανάρτησή σου</string>
<string name="notification_boosted">ενίσχυσε την ανάρτησή σου</string>
<string name="poll_ended">η δημοσκόπηση έληξε</string>
<string name="time_seconds">%dδλ</string>
<string name="time_minutes">%dλ</string>
<string name="time_hours">%dω</string>
<string name="time_days">%dημ</string>
<string name="share_toot_title">Κοινοποίηση</string>
<string name="settings">Ρυθμίσεις</string>
<string name="publish">Δημοσίευση</string>
<string name="discard_draft">Απόρριψη προχείρου;</string>
<string name="discard">Απόρριψη</string>
<string name="cancel">Άκυρο</string>
<plurals name="followers">
<item quantity="one">ακόλουθος</item>
<item quantity="other">ακόλουθοι</item>
</plurals>
<plurals name="following">
<item quantity="one">ακολουθεί</item>
<item quantity="other">ακολουθούν</item>
</plurals>
<plurals name="posts">
<item quantity="one">ανάρτηση</item>
<item quantity="other">αναρτήσεις</item>
</plurals>
<string name="posts">Αναρτήσεις</string>
<string name="posts_and_replies">Αναρτήσεις και Απαντήσεις</string>
<string name="media">Πολυμέσα</string>
<string name="profile_about">Σχετικά</string>
<string name="button_follow">Ακολούθησε</string>
<string name="button_following">Ακολουθείς</string>
<string name="edit_profile">Επεξεργασία Προφίλ</string>
<string name="mention_user">Ανάφερε τον @%s</string>
<string name="share_user">Κοινοποίηση %s</string>
<string name="mute_user">Σίγαση %s</string>
<string name="unmute_user">Κατάργηση σίγασης %s</string>
<string name="block_user">Αποκλεισμός %s</string>
<string name="unblock_user">Άρση αποκλεισμού %s</string>
<string name="report_user">Αναφορά %s</string>
<string name="block_domain">Αποκλεισμός %s</string>
<string name="unblock_domain">Άρση αποκλεισμού %s</string>
<plurals name="x_posts">
<item quantity="one">%,d ανάρτηση</item>
<item quantity="other">%,d αναρτήσεις</item>
</plurals>
<string name="profile_joined">Έγινε μέλος</string>
<string name="done">Εγινε</string>
<string name="loading">Φόρτωση…</string>
<string name="field_label">Περιγραφή</string>
<string name="field_content">Περιεχόμενο</string>
<string name="saving">Αποθήκευση…</string>
<string name="post_from_user">Ανάρτηση από %s</string>
<string name="poll_option_hint">Επιλογή %d</string>
<plurals name="x_minutes">
<item quantity="one">%d λεπτό</item>
<item quantity="other">%d λεπτά</item>
</plurals>
<plurals name="x_hours">
<item quantity="one">%d ώρα</item>
<item quantity="other">%d ώρες</item>
</plurals>
<plurals name="x_days">
<item quantity="one">%d ημέρα</item>
<item quantity="other">%d ημέρες</item>
</plurals>
<string name="compose_poll_duration">Διάρκεια: %s</string>
<plurals name="x_seconds_left">
<item quantity="one">Απομένει %d δευτερόλεπτο</item>
<item quantity="other">Απομένουν %d δευτερόλεπτα</item>
</plurals>
<plurals name="x_minutes_left">
<item quantity="one">Απομένει %d λεπτό</item>
<item quantity="other">Απομένουν %d λεπτά</item>
</plurals>
<plurals name="x_hours_left">
<item quantity="one">απομένει %d ώρα</item>
<item quantity="other">απομένουν %d ώρες</item>
</plurals>
<plurals name="x_days_left">
<item quantity="one">Απομένει %d ημέρα</item>
<item quantity="other">απομένουν %d ημέρες</item>
</plurals>
<plurals name="x_voters">
<item quantity="one">%,d ψηφοφόρος</item>
<item quantity="other">%,d ψηφοφόροι</item>
</plurals>
<string name="poll_closed">Κλειστό</string>
<string name="confirm_mute_title">Σίγαση Λογαριασμού</string>
<string name="confirm_mute">Επιβεβαίωσε για σίγαση %s</string>
<string name="do_mute">Σίγαση</string>
<string name="confirm_unmute_title">Κατάργηση Σίγασης Λογαριασμού</string>
<string name="confirm_unmute">Επιβεβαίωσε για κατάργηση σίγασης %s</string>
<string name="do_unmute">Κατάργηση σίγασης</string>
<string name="confirm_block_title">Αποκλεισμός Λογαριασμού</string>
<string name="confirm_block_domain_title">Αποκλεισμός Τομέα</string>
<string name="confirm_block">Επιβεβαίωση αποκλεισμού %s</string>
<string name="do_block">Αποκλεισμός</string>
<string name="confirm_unblock_title">Άρση Αποκλεισμού Λογαριασμού</string>
<string name="confirm_unblock_domain_title">Άρση αποκλεισμού Τομέα</string>
<string name="confirm_unblock">Επιβεβαίωση άρσης αποκλεισμού %s</string>
<string name="do_unblock">Άρση αποκλεισμού</string>
<string name="button_muted">Σε Σίγαση</string>
<string name="button_blocked">Αποκλείστηκε</string>
<string name="action_vote">Ψήφισε</string>
<string name="tap_to_reveal">Πάτα για εμφάνιση</string>
<string name="delete">Διαγραφή</string>
<string name="confirm_delete_title">Διαγραφή ανάρτησης</string>
<string name="confirm_delete">Είσαι βέβαιοος ότι θες να διαγράψεις την ανάρτηση;</string>
<string name="deleting">Διαγραφή…</string>
<string name="notification_channel_audio_player">Αναπαραγωγή ήχου</string>
<string name="play">Αναπαραγωγή</string>
<string name="pause">Παύση</string>
<string name="log_out">Αποσύνδεση</string>
<string name="add_account">Προσθήκη λογαριασμού</string>
<string name="search_hint">Αναζήτηση</string>
<string name="hashtags">Ετικέτες</string>
<string name="news">Ειδήσεις</string>
<string name="for_you">Για σένα</string>
<string name="all_notifications">Όλα</string>
<string name="mentions">Επισημάνσεις</string>
<plurals name="x_people_talking">
<item quantity="one">%d άτομο μιλάει</item>
<item quantity="other">%d άτομα μιλάνε</item>
</plurals>
<plurals name="discussed_x_times">
<item quantity="one">Συζητήθηκε %d φορά</item>
<item quantity="other">Συζητήθηκε %d φορές</item>
</plurals>
<string name="report_title">Αναφορά %s</string>
<string name="report_choose_reason">Τι πάει λάθος με αυτή την ανάρτηση;</string>
<string name="report_choose_reason_account">Τι πάει λάθος με τον/την %s;</string>
<string name="report_choose_reason_subtitle">Διάλεξε τη καλύτερη αντιστοίχηση</string>
<string name="report_reason_personal">Δεν μου αρέσει</string>
<string name="report_reason_personal_subtitle">Δεν είναι κάτι που θα ηθέλες να δεις</string>
<string name="report_reason_spam">Είναι σπαμ</string>
<string name="report_reason_spam_subtitle">Κακόβουλοι σύνδεσμοι, πλαστή αλληλεπίδραση ή επαναλαμβανόμενες απαντήσεις</string>
<string name="report_reason_violation">Παραβαίνει τους κανόνες του διακομιστή</string>
<string name="report_reason_violation_subtitle">Γνωρίζεις ότι παραβιάζει συγκεκριμένους κανόνες</string>
<string name="report_reason_other">Είναι κάτι άλλο</string>
<string name="report_reason_other_subtitle">Το ζήτημα δεν ταιριάζει σε άλλες κατηγορίες</string>
<string name="report_choose_rule">Ποιοι κανόνες παραβιάζονται;</string>
<string name="report_choose_rule_subtitle">Επίλεξε όλα όσα ισχύουν</string>
<string name="report_choose_posts">Υπάρχουν αναρτήσεις που τεκμηριώνουν αυτή την αναφορά;</string>
<string name="report_choose_posts_subtitle">Επίλεξε όλα όσα ισχύουν</string>
<string name="report_comment_title">Υπάρχει κάτι άλλο που πρέπει να γνωρίζουμε;</string>
<string name="report_comment_hint">Επιπλέον σχόλια</string>
<string name="sending_report">Αποστολή αναφοράς…</string>
<string name="report_sent_title">Σε ευχαριστούμε για την αναφορά, θα το διερευνήσουμε.</string>
<string name="report_sent_subtitle">Ενώ το εξετάζουμε αυτό, μπορείς να δράσεις εναντίον του %s.</string>
<string name="unfollow_user">Κατάργηση ακολούθησης του %s</string>
<string name="unfollow">Άρση ακολούθησης</string>
<string name="mute_user_explain">Δεν θα βλέπεις τις αναρτήσεις ή τις ενισχύσεις τους στην αρχική σελίδα σου. Δεν θα ξέρουν ότι βρίσκονται σε σίγαση.</string>
<string name="block_user_explain">Δεν θα μπορούν πλέον να σε ακολουθούν ή να βλέπουν τις αναρτήσεις σου, αλλά μπορούν να δουν αν έχουν αποκλειστεί.</string>
<string name="report_personal_title">Δε θες να το βλέπεις αυτό;</string>
<string name="report_personal_subtitle">Όταν βλέπεις κάτι που δεν σου αρέσει στο Mastodon, μπορείς να αφαιρέσεις το άτομο από την εμπειρία σου.</string>
<string name="back">Πίσω</string>
<string name="instance_catalog_title">Το Mastodon αποτελείται από χρήστες σε διαφορετικούς διακομιστές.</string>
<string name="instance_catalog_subtitle">Διάλεξε ένα διακομιστή με βάση τα ενδιαφέροντά σου, την περιοχή ή έναν γενικού σκοπού. Μπορείς ακόμα να συνδεθείς με όλους, ανεξάρτητα από το διακομιστή.</string>
<string name="search_communities">Όνομα διακομιστή ή διεύθυνση URL</string>
<string name="instance_rules_title">Κανόνες Διακομιστή</string>
<string name="instance_rules_subtitle">Συνεχίζοντας, συμφωνείτε να ακολουθήσετε υπό τους ακόλουθους κανόνες που έχουν οριστεί και επιβάλλονται από τους %s συντονιστές.</string>
<string name="signup_title">Δημιουργία Λογαριασμού</string>
<string name="edit_photo">επεξεργασία</string>
<string name="display_name">Όνομα</string>
<string name="username">Όνομα χρήστη</string>
<string name="email">Email</string>
<string name="password">Κωδικός πρόσβασης</string>
<string name="confirm_password">Επιβεβαίωση κωδικού πρόσβασης</string>
<string name="password_note">Να συμπεριλάβεις κεφαλαία γράμματα, ειδικούς χαρακτήρες και αριθμούς για να αυξήσεις την ισχύ του κωδικού πρόσβασης.</string>
<string name="category_academia">Ακαδημία</string>
<string name="category_activism">Ακτιβισμός</string>
<string name="category_all">Όλα</string>
<string name="category_art">Τέχνη</string>
<string name="category_food">Φαγητό</string>
<string name="category_furry">Γούνινη</string>
<string name="category_games">Παιχνίδια</string>
<string name="category_general">Γενικά</string>
<string name="category_journalism">Δημοσιογραφία</string>
<string name="category_lgbt">LGBT</string>
<string name="category_music">Μουσική</string>
<string name="category_regional">Τοπικό</string>
<string name="category_tech">Τεχνολογία</string>
<string name="confirm_email_title">Έλεγξε Τα Εισερχόμενα Σου</string>
<!-- %s is the email address --> <!-- %s is the email address -->
<string name="confirm_email_subtitle">Πάτησε το σύνδεσμο που σου στείλαμε για να επαληθεύσεις το %s. Θα σε περιμένουμε εδώ.</string>
<string name="confirm_email_didnt_get">Έλαβες τον σύνδεσμο;</string>
<string name="resend">Επαναποστολή</string>
<string name="open_email_app">Άνοιγμα εφαρμογής email</string>
<string name="resent_email">Το email επιβεβαίωσης εστάλη</string>
<string name="compose_hint">Πληκτρολόγησε ή επικολλησε τι υπάρχει στο μυαλό σου</string>
<string name="content_warning">Προειδοποίηση περιεχομένου</string>
<string name="add_image_description">Προσθήκη περιγραφής εικόνας…</string>
<string name="retry_upload">Επανάληψη μεταμόρφωσης</string>
<string name="edit_image">Επεξεργασία εικόνας</string>
<string name="save">Αποθήκευση</string>
<string name="add_alt_text">Προσθήκη εναλλακτικού κειμένου</string>
<string name="alt_text_subtitle">Το εναλλακτικό κείμενο περιγράφει τις φωτογραφίες σου για άτομα με χαμηλή ή καθόλου όραση. Προσπάθησε να συμπεριλάβεις μόνο όσες λεπτομέρειες χρειάζεται για να γίνει κατανοητό το περιεχόμενο.</string>
<string name="alt_text_hint">π.χ. Ένας σκύλος που κοιτάζει γύρω του ύποπτα με μισόκλειστα μάτια στην κάμερα.</string>
<string name="visibility_public">Δημόσιο</string>
<string name="visibility_followers_only">Μόνο ακόλουθοι</string>
<string name="visibility_private">Μόνο άτομα που επισημαίνω</string>
<string name="search_all">Όλα</string>
<string name="search_people">Άτομα</string>
<string name="recent_searches">Πρόσφατες αναζητήσεις</string>
<string name="step_x_of_n">Βήμα %1$d από %2$d</string>
<string name="skip">Παράλειψη</string>
<string name="notification_type_follow">Νέοι ακόλουθοι</string>
<string name="notification_type_favorite">Αγαπημένα</string>
<string name="notification_type_reblog">Ενισχύσεις</string>
<string name="notification_type_mention">Επισημάνσεις</string>
<string name="notification_type_poll">Δημοσκοπήσεις</string>
<string name="choose_account">Επιλογή λογαριασμού</string>
<string name="err_not_logged_in">Παρακαλώ συνδέσου πρώτα στο Mastodon</string>
<plurals name="cant_add_more_than_x_attachments">
<item quantity="one">Δεν μπορείς να προσθέσεις περισσότερα από %d συνημμένο πολυμέσων</item>
<item quantity="other">Δεν μπορείς να προσθέσεις περισσότερα από %d συνημμένα πολυμέσων</item>
</plurals>
<string name="media_attachment_unsupported_type">Το αρχείο %s είναι μη υποστηριζόμενου τύπου</string>
<string name="media_attachment_too_big">Το αρχείο %1$s υπερβαίνει το όριο μεγέθους των %2$s MB</string>
<string name="settings_theme">Οπτική εμφάνιση</string>
<string name="theme_auto">Αυτόματο</string>
<string name="theme_light">Φωτεινό</string>
<string name="theme_dark">Σκοτεινό</string>
<string name="theme_true_black">Λειτουργία απόλυτου μαύρου</string>
<string name="settings_behavior">Συμπεριφορά</string>
<string name="settings_gif">Αναπαραγωγή κινούμενων άβαταρ και εμότζι</string>
<string name="settings_custom_tabs">Χρήση περιηγητή εντός εφαρμογής</string>
<string name="settings_notifications">Ειδοποιήσεις</string>
<string name="notify_me_when">Να ειδοποιούμαι όταν</string>
<string name="notify_anyone">οποιοσδήποτε</string>
<string name="notify_follower">ακόλουθος</string>
<string name="notify_followed">κάποιος που ακολουθώ</string>
<string name="notify_none">κανείς</string>
<string name="notify_favorites">Προσθέτει στα αγαπημένα την ανάρτησή μου</string>
<string name="notify_follow">Με ακολουθεί</string>
<string name="notify_reblog">Ενισχύει την ανάρτησή μου</string>
<string name="notify_mention">Με επισημαίνει</string>
<string name="settings_boring">Η βαρετή ζώνη</string>
<string name="settings_account">Ρυθμίσεις λογαριασμού</string>
<string name="settings_contribute">Συνείσφερε στο Mastodon</string>
<string name="settings_tos">Όροι χρήσης</string>
<string name="settings_privacy_policy">Πολιτική απορρήτου</string>
<string name="settings_spicy">Η πικάντικη ζώνη</string>
<string name="settings_clear_cache">Εκκαθάριση προσωρινής μνήμης πολυμέσων</string>
<string name="settings_app_version">Mastodon για Android έκδοση %1$s (%2$d)</string>
<string name="media_cache_cleared">Η προσωρινή μνήμη πολυμέσων καθαρίστηκε</string>
<string name="confirm_log_out">Είσαι βέβαιος ότι θες να αποσυνδεθείς;</string>
<string name="sensitive_content">Ευαίσθητο περιεχόμενο</string>
<string name="sensitive_content_explain">Ο συντάκτης σηματοδότησε αυτό το αρχείο πολυμέσων ως ευαίσθητο. Πάτησε για να το αποκαλύψεις.</string>
<string name="media_hidden">Πάτα για εμφάνιση</string>
<string name="avatar_description">Μετάβαση στο προφίλ του %s</string>
<string name="more_options">Περισσότερες επιλογές</string>
<string name="reveal_content">Αποκάλυψη περιεχομένου</string>
<string name="hide_content">Απόκρυψη περιεχομένου</string>
<string name="new_post">Νέα ανάρτηση</string>
<string name="button_reply">Απάντηση</string>
<string name="button_reblog">Ενίσχυση</string>
<string name="button_favorite">Αγαπημένο</string>
<string name="button_share">Κοινοποίηση</string>
<string name="media_no_description">Πολυμέσα χωρίς περιγραφή</string>
<string name="add_media">Προσθήκη πολυμέσων</string>
<string name="add_poll">Προσθήκη δημοσκόπησης</string>
<string name="emoji">Emoji</string>
<string name="post_visibility">Ορατότητα ανάρτησης</string>
<string name="home_timeline">Αρχική</string>
<string name="my_profile">Το προφίλ μου</string>
<string name="media_viewer">Αναπαραγωγέας πολυμέσων</string>
<string name="follow_user">Ακολούθησε %s</string>
<string name="unfollowed_user">Κατάργηση ακολούθησης του %s</string>
<string name="followed_user">Ακολουθείς τον/την %s</string>
<string name="following_user_requested">Έγινε αίτημα ακολούθησης το %s</string>
<string name="open_in_browser">Άνοιξε στον περιηγητή</string>
<string name="hide_boosts_from_user">Απόκρυψη ενισχύσεων από @%s</string>
<string name="show_boosts_from_user">Εμφάνιση ενισχύσεων από @%s</string>
<string name="signup_reason">Γιατί θέλεις να συμμετάσχεις;</string>
<string name="signup_reason_note">Αυτό θα μας βοηθήσει να εξετάσουμε την αίτησή σου.</string>
<string name="clear">Εκκαθάριση</string>
<string name="profile_header">Εικόνα κεφαλίδας</string>
<string name="profile_picture">Εικόνα προφίλ</string>
<string name="reorder">Αναδιάταξη</string>
<string name="download">Λήψη</string>
<string name="permission_required">Απαιτούνται δικαιώματα</string>
<string name="storage_permission_to_download">Η εφαρμογή χρειάζεται πρόσβαση στον αποθηκευτικό σου χώρο για να αποθηκεύσεις αυτό το αρχείο.</string>
<string name="open_settings">Άνοιγμα ρυθμίσεων</string>
<string name="error_saving_file">Σφάλμα αποθήκευσης αρχείου</string>
<string name="file_saved">Το αρχείο αποθηκεύτηκε</string>
<string name="downloading">Λήψη…</string>
<string name="no_app_to_handle_action">Δεν υπάρχει εφαρμογή για να χειριστεί αυτήν την ενέργεια</string>
<string name="local_timeline">Κοινότητα</string>
<string name="trending_posts_info_banner">Αυτές είναι οι αναρτήσεις που κερδίζουν την προσοχή στη δική σου γωνιά του Mastodon.</string>
<string name="trending_hashtags_info_banner">Αυτές είναι οι ετικέτες που κερδίζουν την προσοχή στη δική σου γωνιά του Mastodon.</string>
<string name="trending_links_info_banner">Αυτές είναι οι ειδήσεις που μοιράζονται περισσότερο στη δική σου γωνιά στο Mastodon.</string>
<string name="local_timeline_info_banner">Αυτές είναι οι πιο πρόσφατες αναρτήσεις από τα άτομα που χρησιμοποιούν τον ίδιο διακομιστή Mastodon με εσένα.</string>
<string name="dismiss">Παράβλεψη</string>
<string name="see_new_posts">Δες νέες αναρτήσεις</string>
<string name="load_missing_posts">Φόρτωση αναρτήσεων που λείπουν</string>
<string name="follow_back">Ακολούθησε Και Συ</string>
<string name="button_follow_pending">Εκκρεμεί</string>
<string name="follows_you">Σε ακολουθεί</string>
<string name="manually_approves_followers">Χειροκίνητη έγκριση ακολούθων</string>
<string name="current_account">Τρέχων λογαριασμός</string>
<string name="log_out_account">Αποσύνδεση %s</string>
<!-- translators: %,d is a valid placeholder, it formats the number with locale-dependent grouping separators --> <!-- translators: %,d is a valid placeholder, it formats the number with locale-dependent grouping separators -->
<plurals name="x_followers">
<item quantity="one">%,d ακόλουθος</item>
<item quantity="other">%,d ακόλουθοι</item>
</plurals>
<plurals name="x_following">
<item quantity="one">%,d ακολουθεί</item>
<item quantity="other">%,d ακολουθούν</item>
</plurals>
<plurals name="x_favorites">
<item quantity="one">%,d αγαπημένο</item>
<item quantity="other">%,d αγαπημένα</item>
</plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d ενίσχυση</item>
<item quantity="other">%,d ενισχύσεις</item>
</plurals>
<string name="timestamp_via_app">%1$s μέσω %2$s</string>
<string name="time_now">τώρα</string>
<string name="post_info_reblogs">Ενισχύσεις</string>
<string name="post_info_favorites">Αγαπημένα</string>
<string name="edit_history">Επεξεργασία ιστορικού</string>
<string name="last_edit_at_x">Τελευταία επεξεργασία %s</string>
<string name="time_just_now">μόλις τώρα</string>
<plurals name="x_seconds_ago">
<item quantity="one">%d δευτερόλεπτο πριν</item>
<item quantity="other">%d δευτερόλεπτα πριν</item>
</plurals>
<plurals name="x_minutes_ago">
<item quantity="one">%d λεπτό πριν</item>
<item quantity="other">%d λεπτά πριν</item>
</plurals>
<string name="edited_timestamp">επεξεργάστηκε στις %s</string>
<string name="edit_original_post">Αρχική ανάρτηση</string>
<string name="edit_text_edited">Το κείμενο επεξεργάστηκε</string>
<string name="edit_spoiler_added">Προστέθηκε προειδοποίηση περιεχομένου</string>
<string name="edit_spoiler_edited">Επεξεργάστηκε η προειδοποίηση περιεχομένου</string>
<string name="edit_spoiler_removed">Η προειδοποίηση περιεχομένου αφαιρέθηκε</string>
<string name="edit_poll_added">Προστέθηκε δημοσκόπηση</string>
<string name="edit_poll_edited">Η δημοσκόπηση επεξεργάστηκε</string>
<string name="edit_poll_removed">Η δημοσκόπηση αφαιρέθηκε</string>
<string name="edit_media_added">Προστέθηκε πολυμέσο</string>
<string name="edit_media_removed">Το πολυμέσο αφαιρέθηκε</string>
<string name="edit_media_reordered">Τα πολυμέσο ανακατατάχθηκε</string>
<string name="edit_marked_sensitive">Επισημάνθηκε ως ευαίσθητο</string>
<string name="edit_marked_not_sensitive">Επισημάνθηκε ως μη ευαίσθητο</string>
<string name="edit_multiple_changed">Η ανάρτηση επεξεργάστηκε</string>
<string name="edit">Επεξεργασία</string>
<string name="discard_changes">Απόρριψη αλλαγών;</string>
<string name="upload_failed">Αποτυχία μεταμόρφωσης</string>
<string name="file_size_bytes">%d bytes</string>
<string name="file_size_kb">%.2f KB</string>
<string name="file_size_mb">%.2f MB</string>
<string name="file_size_gb">%.2f GB</string>
<string name="file_upload_progress">%1$s από %2$s</string>
<string name="file_upload_time_remaining">%s απομένουν</string>
<string name="upload_error_connection_lost">Η συσκευή σου έχασε τη σύνδεση με το διαδίκτυο</string>
<string name="upload_processing">Επεξεργασία…</string>
<!-- %s is version like 1.2.3 --> <!-- %s is version like 1.2.3 -->
<string name="update_available">Το Mastodon για Android %s είναι έτοιμο για λήψη.</string>
<!-- %s is version like 1.2.3 --> <!-- %s is version like 1.2.3 -->
<string name="update_ready">Το Mastodon για Android %s ελήφθη και είναι έτοιμο για εγκατάσταση.</string>
<!-- %s is file size --> <!-- %s is file size -->
<string name="download_update">Λήψη (%s)</string>
<string name="install_update">Εγκατάσταση</string>
<string name="privacy_policy_title">Το Απόρρητό σου</string>
<string name="privacy_policy_subtitle">Αν και η εφαρμογή Mastodon δεν συλλέγει δεδομένα, ο διακομιστής που εγγράφεσαι μπορεί να έχει διαφορετική πολιτική.\n\nΕάν διαφωνείς με την πολιτική του %s, μπορείς να επιστρέψεις και να επιλέξεις διαφορετικό διακομιστή.</string>
<string name="i_agree">Συμφωνώ</string>
<string name="empty_list">Αυτή η λίστα είναι κενή</string>
<string name="instance_signup_closed">Αυτός ο διακομιστής δεν δέχεται νέες εγγραφές.</string>
<string name="text_copied">Αντιγράφηκε στο πρόχειρο</string>
<string name="add_bookmark">Σελιδοδείκτης</string>
<string name="remove_bookmark">Αφαίρεση σελιδοδείκτη</string>
<string name="bookmarks">Σελιδοδείκτες</string>
<string name="your_favorites">Τα Αγαπημένα σας</string>
<string name="login_title">Καλώς Ήρθες Ξανά</string>
<string name="login_subtitle">Συνδέσου με τον διακομιστή όπου δημιούργησες τον λογαριασμό σου.</string>
<string name="server_url">URL διακομιστή</string>
<string name="signup_random_server_explain">Θα διαλέξουμε ένα διακομιστή με βάση τη γλώσσα σας αν συνεχίσεις χωρίς να κάνεις μια επιλογή.</string>
<string name="server_filter_any_language">Οποιαδήποτε Γλώσσα</string>
<string name="server_filter_instant_signup">Άμεση Εγγραφή</string>
<string name="server_filter_manual_review">Χειροκίνητη Αξιολόγηση</string>
<string name="server_filter_any_signup_speed">Οποιαδήποτε Ταχύτητα Εγγραφής</string>
<string name="server_filter_region_europe">Ευρώπη</string>
<string name="server_filter_region_north_america">Βόρεια Αμερική</string>
<string name="server_filter_region_south_america">Νότια Αμερική</string>
<string name="server_filter_region_africa">Αφρική</string>
<string name="server_filter_region_asia">Ασία</string>
<string name="server_filter_region_oceania">Oceania</string>
<string name="not_accepting_new_members">Δεν δέχεται νέα μέλη</string>
<string name="category_special_interests">Ειδικά Ενδιαφέροντα</string>
<string name="signup_passwords_dont_match">Οι κωδικοί πρόσβασης δεν ταιριάζουν</string>
<string name="pick_server_for_me">Διάλεξε για μένα</string>
<string name="profile_add_row">Προσθήκη γραμμής</string>
<string name="profile_setup">Ρύθμιση προφίλ</string>
<string name="profile_setup_subtitle">Μπορείς πάντα να το ολοκληρώσεις αργότερα στην καρτέλα Προφίλ.</string>
<string name="profile_setup_explanation">Μπορείς να προσθέσεις έως και τέσσερα πεδία προφίλ για οτιδήποτε θες. Τοποθεσία, συνδέσμους, αντωνυμίες - δεν υπάρχουν όρια.</string>
<string name="popular_on_mastodon">Δημοφιλή στο Mastodon</string>
<string name="follow_all">Ακολούθησε όλους</string>
<string name="server_rules_disagree">Διαφωνώ</string>
<string name="privacy_policy_explanation">Σύνοψη: Δεν συλλέγουμε ή επεξεργαζόμαστε τίποτα.</string>
<!-- %s is server domain --> <!-- %s is server domain -->
<string name="server_policy_disagree">Διαφωνώ με %s</string>
<string name="profile_bio">Βιογραφικό</string>
<!-- Shown in a progress dialog when you tap "follow all" --> <!-- Shown in a progress dialog when you tap "follow all" -->
<string name="sending_follows">Ακολούθηση χρηστών…</string>
<!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. --> <!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. -->
<string name="signup_email_domain_blocked">Ο %1$s δεν επιτρέπει εγγραφές από %2$s. Δοκιμάστε μια διαφορετική ή &lt;a&gt;επιλέξτε έναν διαφορετικό διακομιστή&lt;/a&gt;.</string>
<string name="signup_username_taken">Αυτό το όνομα χρήστη χρησιμοποιείται.</string>
<string name="spoiler_show">Εμφάνιση ούτως ή άλλως</string>
<string name="spoiler_hide">Απόκρυψη ξανά</string>
<string name="poll_multiple_choice">Επίλεξε ένα ή περισσότερα</string>
<string name="save_changes">Αποθήκευση αλλαγών</string>
<string name="profile_featured">Προτεινόμενα</string>
<string name="profile_timeline">Ροή</string>
<string name="view_all">Εμφάνιση όλων</string>
<string name="profile_endorsed_accounts">Λογαριασμοί</string>
<string name="verified_link">Επαληθευμένος σύνδεσμος</string>
<string name="show">Εμφάνιση</string>
<string name="hide">Απόκρυψη</string>
<string name="join_default_server">Συμμετοχή %s</string>
<string name="pick_server">Επίλεξε το δικό μου διακομιστή</string>
<string name="signup_or_login">ή</string>
<string name="learn_more">Μάθε περισσότερα</string>
<string name="welcome_to_mastodon">Καλώς ήρθες στο Mastodon</string>
<string name="welcome_paragraph1">Το Mastodon είναι ένα αποκεντρωμένο κοινωνικό δίκτυο, που σημαίνει ότι καμία εταιρεία δεν το ελέγχει. Αποτελείται από πολλούς ανεξάρτητους διακομιστές, όλοι συνδεδεμένοι μαζί.</string>
<string name="what_are_servers">Τι είναι οι διακομιστές;</string>
<string name="welcome_paragraph2"><![CDATA[Κάθε λογαριασμός Mastodon φιλοξενείται σε ένα διακομιστή - ο καθένας με τις δικές του αξίες, κανόνες, & διαχειριστές. Ανεξάρτητα από το ποιον μπορεί να επιλέξεις, μπορείς να ακολουθήσεις και να αλληλεπιδράσεις με άτομα από οποιονδήποτε διακομιστή.]]></string>
</resources> </resources>

View File

@@ -10,13 +10,11 @@
<string name="ok">Aceptar</string> <string name="ok">Aceptar</string>
<string name="preparing_auth">Preparando para autenticación…</string> <string name="preparing_auth">Preparando para autenticación…</string>
<string name="finishing_auth">Finalizando autenticación…</string> <string name="finishing_auth">Finalizando autenticación…</string>
<string name="user_boosted">%s reblogueó</string>
<string name="in_reply_to">En respuesta a %s</string> <string name="in_reply_to">En respuesta a %s</string>
<string name="notifications">Notificaciones</string> <string name="notifications">Notificaciones</string>
<string name="user_followed_you">ha empezado a seguirte</string> <string name="user_followed_you">ha empezado a seguirte</string>
<string name="user_sent_follow_request">te envió una solicitud de seguimiento</string> <string name="user_sent_follow_request">te envió una solicitud de seguimiento</string>
<string name="user_favorited">marcó como favorita</string> <string name="user_favorited">marcó como favorita</string>
<string name="notification_boosted">reblogueó</string>
<string name="poll_ended">encuesta finalizada</string> <string name="poll_ended">encuesta finalizada</string>
<string name="time_seconds">%ds</string> <string name="time_seconds">%ds</string>
<string name="time_minutes">%dm</string> <string name="time_minutes">%dm</string>
@@ -166,12 +164,11 @@
<string name="report_sent_subtitle">Mientras revisamos esto, puedes tomar medidas contra %s.</string> <string name="report_sent_subtitle">Mientras revisamos esto, puedes tomar medidas contra %s.</string>
<string name="unfollow_user">Dejar de seguir a %s</string> <string name="unfollow_user">Dejar de seguir a %s</string>
<string name="unfollow">Dejar de seguir</string> <string name="unfollow">Dejar de seguir</string>
<string name="mute_user_explain">No verás sus publicaciones o reblogueos en tu línea temporal. No sabrán que han sido silenciados.</string>
<string name="block_user_explain">Ya no podrán seguir o ver tus mensajes, pero pueden ver si han sido bloqueados.</string> <string name="block_user_explain">Ya no podrán seguir o ver tus mensajes, pero pueden ver si han sido bloqueados.</string>
<string name="report_personal_title">¿No quieres ver esto?</string> <string name="report_personal_title">¿No quieres ver esto?</string>
<string name="report_personal_subtitle">Cuando vea en Mastodon algo que no le agrada, puede sacar a la persona de su experiencia.</string> <string name="report_personal_subtitle">Cuando vea en Mastodon algo que no le agrada, puede sacar a la persona de su experiencia.</string>
<string name="back">Atrás</string> <string name="back">Atrás</string>
<string name="instance_catalog_title">Mastodon está hecho por usuarios den diferentes servidores.</string> <string name="instance_catalog_title">Mastodon está hecho por usuarios de diferentes servidores.</string>
<string name="instance_catalog_subtitle">Selecciona un servidor basado en tus intereses, región o un propósito general. Aun así puedes conectarte con todo el mundo, sin importar el servidor.</string> <string name="instance_catalog_subtitle">Selecciona un servidor basado en tus intereses, región o un propósito general. Aun así puedes conectarte con todo el mundo, sin importar el servidor.</string>
<string name="search_communities">Nombre del servidor o URL</string> <string name="search_communities">Nombre del servidor o URL</string>
<string name="instance_rules_title">Reglas del servidor</string> <string name="instance_rules_title">Reglas del servidor</string>
@@ -223,7 +220,6 @@
<string name="skip">Saltar</string> <string name="skip">Saltar</string>
<string name="notification_type_follow">Nuevos seguidores</string> <string name="notification_type_follow">Nuevos seguidores</string>
<string name="notification_type_favorite">Favoritos</string> <string name="notification_type_favorite">Favoritos</string>
<string name="notification_type_reblog">Reblogueos</string>
<string name="notification_type_mention">Menciones</string> <string name="notification_type_mention">Menciones</string>
<string name="notification_type_poll">Encuestas</string> <string name="notification_type_poll">Encuestas</string>
<string name="choose_account">Elegir cuenta</string> <string name="choose_account">Elegir cuenta</string>
@@ -250,7 +246,6 @@
<string name="notify_none">nadie</string> <string name="notify_none">nadie</string>
<string name="notify_favorites">Marca mi post como favorito</string> <string name="notify_favorites">Marca mi post como favorito</string>
<string name="notify_follow">Me sigue</string> <string name="notify_follow">Me sigue</string>
<string name="notify_reblog">Impulsa mi post</string>
<string name="notify_mention">Me menciona</string> <string name="notify_mention">Me menciona</string>
<string name="settings_boring">La zona aburrida</string> <string name="settings_boring">La zona aburrida</string>
<string name="settings_account">Ajustes de la cuenta</string> <string name="settings_account">Ajustes de la cuenta</string>
@@ -271,7 +266,6 @@
<string name="hide_content">Ocultar contenido</string> <string name="hide_content">Ocultar contenido</string>
<string name="new_post">Nuevo post</string> <string name="new_post">Nuevo post</string>
<string name="button_reply">Responder</string> <string name="button_reply">Responder</string>
<string name="button_reblog">Impulsar</string>
<string name="button_favorite">Favorito</string> <string name="button_favorite">Favorito</string>
<string name="button_share">Compartir</string> <string name="button_share">Compartir</string>
<string name="media_no_description">Medios sin descripción</string> <string name="media_no_description">Medios sin descripción</string>
@@ -285,9 +279,8 @@
<string name="follow_user">Seguir a %s</string> <string name="follow_user">Seguir a %s</string>
<string name="unfollowed_user">No sigues a %s</string> <string name="unfollowed_user">No sigues a %s</string>
<string name="followed_user">Ahora estás siguiendo a %s</string> <string name="followed_user">Ahora estás siguiendo a %s</string>
<string name="following_user_requested">%s solicitó seguirte</string>
<string name="open_in_browser">Abrir en el navegador</string> <string name="open_in_browser">Abrir en el navegador</string>
<string name="hide_boosts_from_user">Ocultar reblogueos de %s</string>
<string name="show_boosts_from_user">Mostrar reblogueos de %s</string>
<string name="signup_reason">¿Por qué quieres unirte?</string> <string name="signup_reason">¿Por qué quieres unirte?</string>
<string name="signup_reason_note">Esto nos ayudará a revisar su solicitud.</string> <string name="signup_reason_note">Esto nos ayudará a revisar su solicitud.</string>
<string name="clear">Borrar</string> <string name="clear">Borrar</string>
@@ -329,13 +322,8 @@
<item quantity="one">%,d favorito</item> <item quantity="one">%,d favorito</item>
<item quantity="other">%,d favoritos</item> <item quantity="other">%,d favoritos</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d reblogueo</item>
<item quantity="other">%,d reblogueos</item>
</plurals>
<string name="timestamp_via_app">%1$s a través de %2$s</string> <string name="timestamp_via_app">%1$s a través de %2$s</string>
<string name="time_now">ahora</string> <string name="time_now">ahora</string>
<string name="post_info_reblogs">Reblogueos</string>
<string name="post_info_favorites">Favoritos</string> <string name="post_info_favorites">Favoritos</string>
<string name="edit_history">Editar historial</string> <string name="edit_history">Editar historial</string>
<string name="last_edit_at_x">Última edición: %s</string> <string name="last_edit_at_x">Última edición: %s</string>
@@ -394,12 +382,6 @@
<string name="login_title">Qué bueno verle de nuevo</string> <string name="login_title">Qué bueno verle de nuevo</string>
<string name="login_subtitle">Inicie sesión con el servidor donde creó su cuenta.</string> <string name="login_subtitle">Inicie sesión con el servidor donde creó su cuenta.</string>
<string name="server_url">URL del servidor</string> <string name="server_url">URL del servidor</string>
<string name="welcome_page1_title">¿Qué es Mastodon?</string>
<string name="welcome_page1_text">Imagina que tienes una dirección de correo electrónico que termina con @ejemplo.com.\n\nPuedes enviar y recibir correos electrónicos de cualquier persona, incluso si su correo electrónico termina en @gmail.com o @icloud.com o @ejemplo.com.</string>
<string name="welcome_page2_title">Mastodon es parecido.</string>
<string name="welcome_page2_text">Tu cuenta puede ser @gothgirl654@example.social, pero puedes seguir, rebloguear, y chatear con @fallout5ever@example.online.</string>
<string name="welcome_page3_title">¿Cómo elijo un servidor?</string>
<string name="welcome_page3_text">Diferentes personas eligen diferentes servidores por diferentes motivos. Por ejemplo, art.example es un buen lugar para artistas, mientras que madrid.example puede ser una buena elección para los madrileños.\n\nNo te equivocarás con ninguno de nuestros servidores recomendados, por lo que independientemente del que escojas (o si introduces tu propio servidor en la barra de búsqueda), no te perderás ni una en ningún lugar.</string>
<string name="signup_random_server_explain">Seleccionaremos un servidor basado en tu idioma si continúas sin hacer una selección.</string> <string name="signup_random_server_explain">Seleccionaremos un servidor basado en tu idioma si continúas sin hacer una selección.</string>
<string name="server_filter_any_language">Cualquier idioma</string> <string name="server_filter_any_language">Cualquier idioma</string>
<string name="server_filter_instant_signup">Registro instantáneo</string> <string name="server_filter_instant_signup">Registro instantáneo</string>

View File

@@ -38,5 +38,6 @@
<string name="mo_share_open_url">Abrir en la aplicación</string> <string name="mo_share_open_url">Abrir en la aplicación</string>
<string name="mo_disable_double_tap_to_swipe_between_tabs">Desactivar el doble toque para cambiar de pestaña</string> <string name="mo_disable_double_tap_to_swipe_between_tabs">Desactivar el doble toque para cambiar de pestaña</string>
<string name="mo_swap_bookmark_with_reblog">Usa la acción de rebloguear en vez de la de marcador en las notificaciones</string> <string name="mo_swap_bookmark_with_reblog">Usa la acción de rebloguear en vez de la de marcador en las notificaciones</string>
<string name="mo_download_latest_nightly_release">Descargar la última versión oscura</string> <string name="mo_download_latest_nightly_release">Descargar la última versión beta</string>
<string name="mo_load_remote_followers">Cargar remotamente seguidores y seguidos del perfil</string>
</resources> </resources>

View File

@@ -53,7 +53,7 @@
<string name="sk_translated_using">Traducido mediante %s</string> <string name="sk_translated_using">Traducido mediante %s</string>
<string name="sk_post_language">Idioma: %s</string> <string name="sk_post_language">Idioma: %s</string>
<string name="sk_available_languages">Idiomas disponibles</string> <string name="sk_available_languages">Idiomas disponibles</string>
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_confirm_clear_recent_languages">¿Seguro que quieres borrar los idiomas usados recientemente\?</string> <string name="sk_confirm_clear_recent_languages">¿Seguro que quieres borrar los idiomas usados recientemente\?</string>
<string name="sk_clear_recent_languages">Borrar idiomas usados recientemente</string> <string name="sk_clear_recent_languages">Borrar idiomas usados recientemente</string>
<string name="sk_welcome_text">¡El tiburón te saluda! Para empezar, introduce a continuación el nombre del dominio de tu instancia.</string> <string name="sk_welcome_text">¡El tiburón te saluda! Para empezar, introduce a continuación el nombre del dominio de tu instancia.</string>
@@ -272,4 +272,5 @@
<string name="sk_reply_line_above_avatar">\"En respuesta a\" línea sobre el avatar</string> <string name="sk_reply_line_above_avatar">\"En respuesta a\" línea sobre el avatar</string>
<string name="sk_show_thread">Mostrar hilo</string> <string name="sk_show_thread">Mostrar hilo</string>
<string name="sk_compact_reblog_reply_line">Línea compacta de reblog/respuesta</string> <string name="sk_compact_reblog_reply_line">Línea compacta de reblog/respuesta</string>
<string name="sk_settings_confirm_before_reblog">Confirmar antes de volver a publicar</string>
</resources> </resources>

View File

@@ -10,13 +10,11 @@
<string name="ok">Ados</string> <string name="ok">Ados</string>
<string name="preparing_auth">Autentifikaziorako prestatzen…</string> <string name="preparing_auth">Autentifikaziorako prestatzen…</string>
<string name="finishing_auth">Autentikazioa bukatzen…</string> <string name="finishing_auth">Autentikazioa bukatzen…</string>
<string name="user_boosted">%s(e)k bultzatu du</string>
<string name="in_reply_to">%s-(r)i erantzunez</string> <string name="in_reply_to">%s-(r)i erantzunez</string>
<string name="notifications">Jakinarazpenak</string> <string name="notifications">Jakinarazpenak</string>
<string name="user_followed_you">jarraitu zaitu</string> <string name="user_followed_you">jarraitu zaitu</string>
<string name="user_sent_follow_request">jarraitzeko eskaera bidali dizu</string> <string name="user_sent_follow_request">jarraitzeko eskaera bidali dizu</string>
<string name="user_favorited">zure bidalketa gogoko du</string> <string name="user_favorited">zure bidalketa gogoko du</string>
<string name="notification_boosted">zure bidalketa bultzatu du</string>
<string name="poll_ended">inkesta amaitu da</string> <string name="poll_ended">inkesta amaitu da</string>
<string name="time_seconds">%ds</string> <string name="time_seconds">%ds</string>
<string name="time_minutes">%dm</string> <string name="time_minutes">%dm</string>
@@ -166,7 +164,6 @@
<string name="report_sent_subtitle">Hau berrikusten dugun bitartean, %s erabiltzailearen aurkako neurriak hartu ditzakezu.</string> <string name="report_sent_subtitle">Hau berrikusten dugun bitartean, %s erabiltzailearen aurkako neurriak hartu ditzakezu.</string>
<string name="unfollow_user">%s jarraitzeari utzi</string> <string name="unfollow_user">%s jarraitzeari utzi</string>
<string name="unfollow">Utzi jarraitzeari</string> <string name="unfollow">Utzi jarraitzeari</string>
<string name="mute_user_explain">Ez dituzu bere bidalketa eta birbidalketak zure hasierako jarioan ikusiko. Ez dute jakingo isilarazi dituztenik.</string>
<string name="block_user_explain">Ezin izango dituzte zure bidalketak jarraitu edo ikusi, baina blokeatuta dauden ikusi ahal izango dute.</string> <string name="block_user_explain">Ezin izango dituzte zure bidalketak jarraitu edo ikusi, baina blokeatuta dauden ikusi ahal izango dute.</string>
<string name="report_personal_title">Ez duzu hau ikusi nahi?</string> <string name="report_personal_title">Ez duzu hau ikusi nahi?</string>
<string name="report_personal_subtitle">Mastodonen gustuko ez duzun zerbait ikusten duzunean, zure esperientziatik atera dezakezu pertsona hori.</string> <string name="report_personal_subtitle">Mastodonen gustuko ez duzun zerbait ikusten duzunean, zure esperientziatik atera dezakezu pertsona hori.</string>
@@ -220,7 +217,6 @@
<string name="skip">Saltatu</string> <string name="skip">Saltatu</string>
<string name="notification_type_follow">Jarraitzaile berriak</string> <string name="notification_type_follow">Jarraitzaile berriak</string>
<string name="notification_type_favorite">Gogokoak</string> <string name="notification_type_favorite">Gogokoak</string>
<string name="notification_type_reblog">Bultzadak</string>
<string name="notification_type_mention">Aipamenak</string> <string name="notification_type_mention">Aipamenak</string>
<string name="notification_type_poll">Inkestak</string> <string name="notification_type_poll">Inkestak</string>
<string name="choose_account">Aukeratu kontua</string> <string name="choose_account">Aukeratu kontua</string>
@@ -247,7 +243,6 @@
<string name="notify_none">inor ez</string> <string name="notify_none">inor ez</string>
<string name="notify_favorites">Nire bidalketa gogoko egitean</string> <string name="notify_favorites">Nire bidalketa gogoko egitean</string>
<string name="notify_follow">Jarraitzen nau</string> <string name="notify_follow">Jarraitzen nau</string>
<string name="notify_reblog">Nire bidalketa bultzatu du</string>
<string name="notify_mention">Aipatu nau</string> <string name="notify_mention">Aipatu nau</string>
<string name="settings_boring">Eremu aspergarria</string> <string name="settings_boring">Eremu aspergarria</string>
<string name="settings_account">Kontuaren ezarpenak</string> <string name="settings_account">Kontuaren ezarpenak</string>
@@ -268,7 +263,6 @@
<string name="hide_content">Ezkutatu edukia</string> <string name="hide_content">Ezkutatu edukia</string>
<string name="new_post">Bidalketa berria</string> <string name="new_post">Bidalketa berria</string>
<string name="button_reply">Erantzun</string> <string name="button_reply">Erantzun</string>
<string name="button_reblog">Bultzada</string>
<string name="button_favorite">Gogokoa</string> <string name="button_favorite">Gogokoa</string>
<string name="button_share">Partekatu</string> <string name="button_share">Partekatu</string>
<string name="media_no_description">Deskribapenik gabeko multimedia</string> <string name="media_no_description">Deskribapenik gabeko multimedia</string>
@@ -283,8 +277,6 @@
<string name="unfollowed_user">Utzi %s jarraitzeari</string> <string name="unfollowed_user">Utzi %s jarraitzeari</string>
<string name="followed_user">%s jarraitzen ari zara</string> <string name="followed_user">%s jarraitzen ari zara</string>
<string name="open_in_browser">Ireki nabigatzailean</string> <string name="open_in_browser">Ireki nabigatzailean</string>
<string name="hide_boosts_from_user">Ezkutatu %s(r)en bultzadak</string>
<string name="show_boosts_from_user">Erakutsi %s(r)en bultzadak</string>
<string name="signup_reason">Zergatik elkartu nahi duzu?</string> <string name="signup_reason">Zergatik elkartu nahi duzu?</string>
<string name="signup_reason_note">Honek zure eskaera berrikustean lagunduko digu.</string> <string name="signup_reason_note">Honek zure eskaera berrikustean lagunduko digu.</string>
<string name="clear">Garbitu</string> <string name="clear">Garbitu</string>
@@ -326,13 +318,8 @@
<item quantity="one">Gogoko bat</item> <item quantity="one">Gogoko bat</item>
<item quantity="other">%,d gogoko</item> <item quantity="other">%,d gogoko</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">Bultzada %,d</item>
<item quantity="other">%,d bultzada</item>
</plurals>
<string name="timestamp_via_app">%1$s %2$s -en bidez</string> <string name="timestamp_via_app">%1$s %2$s -en bidez</string>
<string name="time_now">orain</string> <string name="time_now">orain</string>
<string name="post_info_reblogs">Bultzadak</string>
<string name="post_info_favorites">Gogokoak</string> <string name="post_info_favorites">Gogokoak</string>
<string name="edit_history">Editatu historia</string> <string name="edit_history">Editatu historia</string>
<string name="last_edit_at_x">Azken edizioa %s</string> <string name="last_edit_at_x">Azken edizioa %s</string>
@@ -390,12 +377,6 @@
<string name="login_title">Ongi etorri berriro ere</string> <string name="login_title">Ongi etorri berriro ere</string>
<string name="login_subtitle">Hasi saioa kontua sortu zenuen zerbitzariarekin.</string> <string name="login_subtitle">Hasi saioa kontua sortu zenuen zerbitzariarekin.</string>
<string name="server_url">Zerbitzariaren URLa</string> <string name="server_url">Zerbitzariaren URLa</string>
<string name="welcome_page1_title">Zer da Mastodon?</string>
<string name="welcome_page1_text">Imajinatu zure helbide elektronikoa adibidea.eus-en amaitzen dela. \n\n Oraindik edonoren mezu elektronikoak bidali eta jaso ditzakezu, baita posta elektronikoa @gmail.com edo @icloud.com edo @adibidea.eus helbideetan amaitzen bada ere.</string>
<string name="welcome_page2_title">Mastodon antzekoa da.</string>
<string name="welcome_page2_text">Zure kontua \"@pertsona1@mastodon.eus\" izan liteke, baina oraindik ere jarraitu, bultzatu edo txateatu dezakezu \"@pertsona2@mastodon.social\" edo bestelako edozein kontu.</string>
<string name="welcome_page3_title">Nola aukeratzen dut zerbitzari bat?</string>
<string name="welcome_page3_text">Hainbat pertsonak zerbitzari bat baino gehiago aukeratzen dituzte arrazoi ezberdinengatik. Adibidez, art.example leku ona da artistentzat eta mastodon.eus, berriz, euskaldunentzat. Gure gomendioetako zerbitzariekin, ez duzu hanka sartuko eta edozein dela ere zure aukera, beste zerbitzarietako kideekin harremana izan dezakezu (bilaketa-barran bilatuz).</string>
<string name="server_filter_any_language">Edozein hizkuntza</string> <string name="server_filter_any_language">Edozein hizkuntza</string>
<string name="server_filter_instant_signup">Berehalako erregistroa</string> <string name="server_filter_instant_signup">Berehalako erregistroa</string>
<string name="server_filter_region_europe">Europa</string> <string name="server_filter_region_europe">Europa</string>

View File

@@ -35,7 +35,7 @@
<string name="sk_settings_contribute">Lagundu Megalodon</string> <string name="sk_settings_contribute">Lagundu Megalodon</string>
<string name="sk_translated_using">%s-ekin itzulia</string> <string name="sk_translated_using">%s-ekin itzulia</string>
<string name="sk_post_language">Hizkuntza: %s</string> <string name="sk_post_language">Hizkuntza: %s</string>
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_bookmark_as">Beste kontu baten laster-marka</string> <string name="sk_bookmark_as">Beste kontu baten laster-marka</string>
<string name="sk_bookmarked_as">%s bezala laster-markara eramana</string> <string name="sk_bookmarked_as">%s bezala laster-markara eramana</string>
<string name="sk_already_bookmarked">Dagoeneko laster-marka da</string> <string name="sk_already_bookmarked">Dagoeneko laster-marka da</string>
@@ -261,4 +261,14 @@
<string name="sk_follow_as">Jarraitu beste kontu batetik</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_followed_as">%s-(d/t)ik jarraitua</string>
<string name="sk_settings_hide_fab">Automatikoki ezkutatu Idatzi botoia</string> <string name="sk_settings_hide_fab">Automatikoki ezkutatu Idatzi botoia</string>
<string name="sk_in_reply">Erantzunez</string>
<string name="sk_settings_reply_visibility">Erantzunaren ikusgarritasuna</string>
<string name="sk_settings_reply_visibility_all">Erantzun guztiak</string>
<string name="sk_settings_reply_visibility_following">Jarraitzen ditudanei eginiko erantzunak</string>
<string name="sk_reply_line_above_avatar">\"Honi erantzunez\" abatarraren gaineko lerroa</string>
<string name="sk_show_thread">Erakutsi haria</string>
<string name="sk_compact_reblog_reply_line">Bultzada/erantzun lerro trinkoa</string>
<string name="sk_quoting_user">%s aipatzen</string>
<string name="sk_settings_reply_visibility_self">Niri eginiko erantzunak</string>
<string name="sk_notification_action_replied">%s-(r)i erantzun</string>
</resources> </resources>

View File

@@ -14,7 +14,6 @@
<string name="user_followed_you">شما را دنبال می‌کند</string> <string name="user_followed_you">شما را دنبال می‌کند</string>
<string name="user_sent_follow_request">یک درخواست دنبال کردن برای شما ارسال کرد</string> <string name="user_sent_follow_request">یک درخواست دنبال کردن برای شما ارسال کرد</string>
<string name="user_favorited"> فرسته‌تان را پسندید</string> <string name="user_favorited"> فرسته‌تان را پسندید</string>
<string name="notification_boosted">مطلب شما را به‌اشتراک گذاشت</string>
<string name="poll_ended">نظرسنجی به پایان رسید</string> <string name="poll_ended">نظرسنجی به پایان رسید</string>
<string name="time_seconds">%dثانیه</string> <string name="time_seconds">%dثانیه</string>
<string name="time_minutes">%dدقیقه</string> <string name="time_minutes">%dدقیقه</string>

View File

@@ -10,13 +10,11 @@
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="preparing_auth">Paghahanda para sa pagpapatunay…</string> <string name="preparing_auth">Paghahanda para sa pagpapatunay…</string>
<string name="finishing_auth">Natapos na ang pagpapatunay…</string> <string name="finishing_auth">Natapos na ang pagpapatunay…</string>
<string name="user_boosted">%s reblogged</string>
<string name="in_reply_to">Bilang tugon kay %s</string> <string name="in_reply_to">Bilang tugon kay %s</string>
<string name="notifications">Mga abiso</string> <string name="notifications">Mga abiso</string>
<string name="user_followed_you">sinundan ka</string> <string name="user_followed_you">sinundan ka</string>
<string name="user_sent_follow_request">may nagpadala sa iyo ng follow request</string> <string name="user_sent_follow_request">may nagpadala sa iyo ng follow request</string>
<string name="user_favorited">paborito ang iyong post</string> <string name="user_favorited">paborito ang iyong post</string>
<string name="notification_boosted">na reblogged ang iyong post</string>
<string name="poll_ended">natapos na ang poll</string> <string name="poll_ended">natapos na ang poll</string>
<string name="time_seconds">%ds</string> <string name="time_seconds">%ds</string>
<string name="time_minutes">%dm</string> <string name="time_minutes">%dm</string>
@@ -166,7 +164,6 @@
<string name="report_sent_subtitle">Habang sinusuri namin ito, maaari kang gumawa ng aksyon laban sa %s.</string> <string name="report_sent_subtitle">Habang sinusuri namin ito, maaari kang gumawa ng aksyon laban sa %s.</string>
<string name="unfollow_user">I-Unfollow %s</string> <string name="unfollow_user">I-Unfollow %s</string>
<string name="unfollow">I-unfollow</string> <string name="unfollow">I-unfollow</string>
<string name="mute_user_explain">Hindi mo makikita ang kanilang mga post o reblogs sa iyong home feed. Hindi nila malalaman na sila ay na-mute.</string>
<string name="block_user_explain">Hindi na nila magagawang sundin o makita ang iyong mga post, ngunit maaari nilang makita kung na-block sila.</string> <string name="block_user_explain">Hindi na nila magagawang sundin o makita ang iyong mga post, ngunit maaari nilang makita kung na-block sila.</string>
<string name="report_personal_title">Ayaw mong makita ito?</string> <string name="report_personal_title">Ayaw mong makita ito?</string>
<string name="report_personal_subtitle">Kapag nakakita ka ng mga bagay na hindi mo gusto sa Mastodon, maaari mong alisin ang tao mula sa iyong karanasan.</string> <string name="report_personal_subtitle">Kapag nakakita ka ng mga bagay na hindi mo gusto sa Mastodon, maaari mong alisin ang tao mula sa iyong karanasan.</string>
@@ -211,7 +208,6 @@
<string name="skip">Laktawan</string> <string name="skip">Laktawan</string>
<string name="notification_type_follow">Mga Bagong Follower</string> <string name="notification_type_follow">Mga Bagong Follower</string>
<string name="notification_type_favorite">Mga Paborito</string> <string name="notification_type_favorite">Mga Paborito</string>
<string name="notification_type_reblog">Mga Reblog</string>
<string name="notification_type_mention">Mga binangit</string> <string name="notification_type_mention">Mga binangit</string>
<string name="notification_type_poll">Mga botohan</string> <string name="notification_type_poll">Mga botohan</string>
<string name="choose_account">Pumili ng account</string> <string name="choose_account">Pumili ng account</string>
@@ -238,7 +234,6 @@
<string name="notify_none">walang simuman</string> <string name="notify_none">walang simuman</string>
<string name="notify_favorites">Paborito Ang aking post</string> <string name="notify_favorites">Paborito Ang aking post</string>
<string name="notify_follow">Sumusunod sa akin</string> <string name="notify_follow">Sumusunod sa akin</string>
<string name="notify_reblog">Reblogs ang aking post</string>
<string name="notify_mention">Banggitin ako</string> <string name="notify_mention">Banggitin ako</string>
<string name="settings_boring">Ang nakababagot na zone</string> <string name="settings_boring">Ang nakababagot na zone</string>
<string name="settings_account">Mga setting ng Account</string> <string name="settings_account">Mga setting ng Account</string>
@@ -259,7 +254,6 @@
<string name="hide_content">Itago ang nilalaman</string> <string name="hide_content">Itago ang nilalaman</string>
<string name="new_post">Bagong post</string> <string name="new_post">Bagong post</string>
<string name="button_reply">Tumugon</string> <string name="button_reply">Tumugon</string>
<string name="button_reblog">Reblog</string>
<string name="button_favorite">Paborito</string> <string name="button_favorite">Paborito</string>
<string name="button_share">Ibahagi</string> <string name="button_share">Ibahagi</string>
<string name="media_no_description">Media nang walang paglalarawan</string> <string name="media_no_description">Media nang walang paglalarawan</string>
@@ -274,8 +268,6 @@
<string name="unfollowed_user">I-Unfollow %s</string> <string name="unfollowed_user">I-Unfollow %s</string>
<string name="followed_user">Sinusundan mo ngayon ang %s</string> <string name="followed_user">Sinusundan mo ngayon ang %s</string>
<string name="open_in_browser">Buksan sa browser</string> <string name="open_in_browser">Buksan sa browser</string>
<string name="hide_boosts_from_user">Itago ang mga reblog mula sa %s</string>
<string name="show_boosts_from_user">Ipakita ang mga reblog mula sa %s</string>
<string name="signup_reason_note">Makakatulong ito sa amin na suriin ang iyong aplikasyon.</string> <string name="signup_reason_note">Makakatulong ito sa amin na suriin ang iyong aplikasyon.</string>
<string name="clear">I-Clear</string> <string name="clear">I-Clear</string>
<string name="profile_header">Imahe ng Header</string> <string name="profile_header">Imahe ng Header</string>
@@ -316,13 +308,8 @@
<item quantity="one">%, d Paborito</item> <item quantity="one">%, d Paborito</item>
<item quantity="other">%, d paborito</item> <item quantity="other">%, d paborito</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">%, d reblog</item>
<item quantity="other">%, d reblog</item>
</plurals>
<string name="timestamp_via_app">%1$s sa pamamagitan ng %2$s</string> <string name="timestamp_via_app">%1$s sa pamamagitan ng %2$s</string>
<string name="time_now">ngayon</string> <string name="time_now">ngayon</string>
<string name="post_info_reblogs">Mga Reblog</string>
<string name="post_info_favorites">Mga Paborito</string> <string name="post_info_favorites">Mga Paborito</string>
<string name="edit_history">I-Edit ang kasaysayan</string> <string name="edit_history">I-Edit ang kasaysayan</string>
<string name="last_edit_at_x">Huling edit %s</string> <string name="last_edit_at_x">Huling edit %s</string>
@@ -379,11 +366,6 @@
<string name="login_title">Maligayang pagbalik,</string> <string name="login_title">Maligayang pagbalik,</string>
<string name="login_subtitle">Mag-Log in gamit ang server kung saan mo nilikha ang iyong account.</string> <string name="login_subtitle">Mag-Log in gamit ang server kung saan mo nilikha ang iyong account.</string>
<string name="server_url">Ang URL ng server</string> <string name="server_url">Ang URL ng server</string>
<string name="welcome_page1_text">Isipin na mayroon kang isang email address na nagtatapos sa @example. com. \n \nMaaari ka pa ring magpadala at tumanggap ng mga email mula sa sinuman, kahit na ang kanilang email ay nagtatapos sa @gmail.com o @icloud.com o @example.com.</string>
<string name="welcome_page2_title">Mastodon ay tulad na.</string>
<string name="welcome_page2_text">Ang iyong hawakan ay maaaring @gothgirl654@example.social, ngunit maaari mo pa ring sundin, reblog, at makipag-chat sa @fallout5ever@example.online.</string>
<string name="welcome_page3_title">Paano ako pumili ng server?</string>
<string name="welcome_page3_text">Ang iba \'t ibang mga tao ay pumili ng iba\' t ibang mga server para sa anumang bilang ng mga kadahilanan. sining.ang halimbawa ay isang magandang lugar para sa mga artista, habang ang glasgow.halimbawa ay maaaring maging isang mahusay na pick para sa Scots.\n \nhindi ka maaaring magkamali sa alinman sa aming mga inirekumendang server, kaya anuman ang pipiliin mo (o kung ipinasok mo ang iyong sarili sa search bar ng server), hindi ka makaligtaan ng isang matalo kahit saan.</string>
<!-- %s is server domain --> <!-- %s is server domain -->
<!-- Shown in a progress dialog when you tap "follow all" --> <!-- Shown in a progress dialog when you tap "follow all" -->
<!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. --> <!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. -->

View File

@@ -10,13 +10,11 @@
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="preparing_auth">Préparation à lauthentification…</string> <string name="preparing_auth">Préparation à lauthentification…</string>
<string name="finishing_auth">Fin de lauthentification…</string> <string name="finishing_auth">Fin de lauthentification…</string>
<string name="user_boosted">%s a partagé</string>
<string name="in_reply_to">En réponse à %s</string> <string name="in_reply_to">En réponse à %s</string>
<string name="notifications">Notifications</string> <string name="notifications">Notifications</string>
<string name="user_followed_you">sest abonné à vous</string> <string name="user_followed_you">sest abonné à vous</string>
<string name="user_sent_follow_request">vous a envoyé une demande de suivi</string> <string name="user_sent_follow_request">vous a envoyé une demande de suivi</string>
<string name="user_favorited">a ajouté votre message à ses favoris</string> <string name="user_favorited">a ajouté votre message à ses favoris</string>
<string name="notification_boosted">a partagé votre message</string>
<string name="poll_ended">sondage terminé</string> <string name="poll_ended">sondage terminé</string>
<string name="time_seconds">%d s</string> <string name="time_seconds">%d s</string>
<string name="time_minutes">%d m</string> <string name="time_minutes">%d m</string>
@@ -166,7 +164,6 @@
<string name="report_sent_subtitle">Pendant que nous étudions votre requête, vous pouvez prendre des mesures contre %s.</string> <string name="report_sent_subtitle">Pendant que nous étudions votre requête, vous pouvez prendre des mesures contre %s.</string>
<string name="unfollow_user">Ne plus suivre %s</string> <string name="unfollow_user">Ne plus suivre %s</string>
<string name="unfollow">Ne plus suivre</string> <string name="unfollow">Ne plus suivre</string>
<string name="mute_user_explain">Vous ne verrez pas leurs messages ou leurs partages dans votre flux personnel. Ils ne sauront pas quils ont été mis en sourdine.</string>
<string name="block_user_explain">Ils ne seront plus en mesure de suivre ou de voir vos messages, mais ils peuvent voir sils ont été bloqués.</string> <string name="block_user_explain">Ils ne seront plus en mesure de suivre ou de voir vos messages, mais ils peuvent voir sils ont été bloqués.</string>
<string name="report_personal_title">Vous ne voulez pas voir cela ?</string> <string name="report_personal_title">Vous ne voulez pas voir cela ?</string>
<string name="report_personal_subtitle">Quand vous voyez quelque chose que vous naimez pas sur Mastodon, vous pouvez retirer la personne de votre expérience.</string> <string name="report_personal_subtitle">Quand vous voyez quelque chose que vous naimez pas sur Mastodon, vous pouvez retirer la personne de votre expérience.</string>
@@ -223,7 +220,6 @@
<string name="skip">Passer</string> <string name="skip">Passer</string>
<string name="notification_type_follow">Nouveaux⋅elles abonné⋅e⋅s</string> <string name="notification_type_follow">Nouveaux⋅elles abonné⋅e⋅s</string>
<string name="notification_type_favorite">Favoris</string> <string name="notification_type_favorite">Favoris</string>
<string name="notification_type_reblog">Partages</string>
<string name="notification_type_mention">Mentions</string> <string name="notification_type_mention">Mentions</string>
<string name="notification_type_poll">Sondages</string> <string name="notification_type_poll">Sondages</string>
<string name="choose_account">Choisir un compte</string> <string name="choose_account">Choisir un compte</string>
@@ -250,7 +246,6 @@
<string name="notify_none">personne</string> <string name="notify_none">personne</string>
<string name="notify_favorites">Ajoute un de mes messages à ses favoris</string> <string name="notify_favorites">Ajoute un de mes messages à ses favoris</string>
<string name="notify_follow">Me suit</string> <string name="notify_follow">Me suit</string>
<string name="notify_reblog">Partage mon message</string>
<string name="notify_mention">Me mentionne</string> <string name="notify_mention">Me mentionne</string>
<string name="settings_boring">Zone ennuyeuse</string> <string name="settings_boring">Zone ennuyeuse</string>
<string name="settings_account">Paramètres du compte</string> <string name="settings_account">Paramètres du compte</string>
@@ -271,7 +266,6 @@
<string name="hide_content">Masquer le contenu</string> <string name="hide_content">Masquer le contenu</string>
<string name="new_post">Nouveau message</string> <string name="new_post">Nouveau message</string>
<string name="button_reply">Répondre</string> <string name="button_reply">Répondre</string>
<string name="button_reblog">Partager</string>
<string name="button_favorite">Ajouter aux favoris</string> <string name="button_favorite">Ajouter aux favoris</string>
<string name="button_share">Partager</string> <string name="button_share">Partager</string>
<string name="media_no_description">Média sans description</string> <string name="media_no_description">Média sans description</string>
@@ -286,8 +280,6 @@
<string name="unfollowed_user">Vous ne suivez plus %s</string> <string name="unfollowed_user">Vous ne suivez plus %s</string>
<string name="followed_user">Vous suivez maintenant %s</string> <string name="followed_user">Vous suivez maintenant %s</string>
<string name="open_in_browser">Ouvrir dans le navigateur</string> <string name="open_in_browser">Ouvrir dans le navigateur</string>
<string name="hide_boosts_from_user">Masquer les partages de %s</string>
<string name="show_boosts_from_user">Afficher les partages de %s</string>
<string name="signup_reason">Pourquoi voulez-vous vous inscrire ?</string> <string name="signup_reason">Pourquoi voulez-vous vous inscrire ?</string>
<string name="signup_reason_note">Cela nous aidera à examiner votre demande.</string> <string name="signup_reason_note">Cela nous aidera à examiner votre demande.</string>
<string name="clear">Effacer</string> <string name="clear">Effacer</string>
@@ -329,13 +321,8 @@
<item quantity="one">%,d favori</item> <item quantity="one">%,d favori</item>
<item quantity="other">%,d favoris</item> <item quantity="other">%,d favoris</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d partage</item>
<item quantity="other">%,d partages</item>
</plurals>
<string name="timestamp_via_app">%1$s via %2$s</string> <string name="timestamp_via_app">%1$s via %2$s</string>
<string name="time_now">à linstant</string> <string name="time_now">à linstant</string>
<string name="post_info_reblogs">Partages</string>
<string name="post_info_favorites">Favoris</string> <string name="post_info_favorites">Favoris</string>
<string name="edit_history">Historique des modifications</string> <string name="edit_history">Historique des modifications</string>
<string name="last_edit_at_x">Dernière modification %s</string> <string name="last_edit_at_x">Dernière modification %s</string>
@@ -394,12 +381,6 @@
<string name="login_title">Content de vous revoir</string> <string name="login_title">Content de vous revoir</string>
<string name="login_subtitle">Connectez-vous avec le serveur sur lequel vous avez créé votre compte.</string> <string name="login_subtitle">Connectez-vous avec le serveur sur lequel vous avez créé votre compte.</string>
<string name="server_url">URL du serveur</string> <string name="server_url">URL du serveur</string>
<string name="welcome_page1_title">Quest-ce que Mastodon?</string>
<string name="welcome_page1_text">Imaginez que vous ayez une adresse e-mail qui se termine par @example.com.\n\nVous pouvez toujours envoyer et recevoir des e-mails de n\'importe qui, même si leur e-mail se termine par @gmail.com ou @icloud.com ou @example.com.</string>
<string name="welcome_page2_title">Mastodon est comme ça.</string>
<string name="welcome_page2_text">Votre identifiant devrait être @gothgirl654@example.social, mais vous pouvez toujours suivre, rebloguer et discuter avec @fallout5ever@example.online.</string>
<string name="welcome_page3_title">Comment choisir un serveur?</string>
<string name="welcome_page3_text">Différentes personnes choisissent différents serveurs pour un certain nombre de raisons. art.example est un lieu idéal pour les artistes, tandis que glasgow.example pourrait être un bon choix pour les Écossais.\n\nVous ne pouvez pas vous tromper avec l\'un de nos serveurs recommandés et ainsi, quel que soit celui que vous choisissez (ou si vous entrez le vôtre dans la barre de recherche du serveur), vous ne manquerez jamais une info quelque part.</string>
<string name="signup_random_server_explain">Nous choisirons un serveur basé sur votre langue si vous continuez sans faire de sélection.</string> <string name="signup_random_server_explain">Nous choisirons un serveur basé sur votre langue si vous continuez sans faire de sélection.</string>
<string name="server_filter_any_language">N\'importe quelle langue</string> <string name="server_filter_any_language">N\'importe quelle langue</string>
<string name="server_filter_instant_signup">Inscription instantanée</string> <string name="server_filter_instant_signup">Inscription instantanée</string>

View File

@@ -53,7 +53,7 @@
<string name="sk_translated_using">Traduit en utilisant %s</string> <string name="sk_translated_using">Traduit en utilisant %s</string>
<string name="sk_post_language">Langue : %s</string> <string name="sk_post_language">Langue : %s</string>
<string name="sk_available_languages">Langues disponibles</string> <string name="sk_available_languages">Langues disponibles</string>
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_confirm_clear_recent_languages">Êtes-vous sûr de vouloir effacer vos langues récemment utilisées \?</string> <string name="sk_confirm_clear_recent_languages">Êtes-vous sûr de vouloir effacer vos langues récemment utilisées \?</string>
<string name="sk_clear_recent_languages">Effacer les langues récemment utilisées</string> <string name="sk_clear_recent_languages">Effacer les langues récemment utilisées</string>
<string name="sk_example_domain">exemple.social</string> <string name="sk_example_domain">exemple.social</string>
@@ -273,4 +273,5 @@
<string name="sk_show_thread">Afficher le fil</string> <string name="sk_show_thread">Afficher le fil</string>
<string name="sk_compact_reblog_reply_line">Ligne de repost/réponse compacte</string> <string name="sk_compact_reblog_reply_line">Ligne de repost/réponse compacte</string>
<string name="sk_reply_line_above_avatar">Ligne \"En réponse à\" au-dessus de l\'avatar</string> <string name="sk_reply_line_above_avatar">Ligne \"En réponse à\" au-dessus de l\'avatar</string>
<string name="sk_settings_confirm_before_reblog">Confirmer avant de reposter</string>
</resources> </resources>

View File

@@ -6,13 +6,11 @@
<string name="ok">Ceart ma-thà</string> <string name="ok">Ceart ma-thà</string>
<string name="preparing_auth">Ag ullachadh an dearbhaidh…</string> <string name="preparing_auth">Ag ullachadh an dearbhaidh…</string>
<string name="finishing_auth">A crìochnachadh an dearbhaidh…</string> <string name="finishing_auth">A crìochnachadh an dearbhaidh…</string>
<string name="user_boosted">Ga bhrosnachadh le %s</string>
<string name="in_reply_to">A freagairt dha %s</string> <string name="in_reply_to">A freagairt dha %s</string>
<string name="notifications">Brathan</string> <string name="notifications">Brathan</string>
<string name="user_followed_you"> s iad gad leantainn a-nis</string> <string name="user_followed_you"> s iad gad leantainn a-nis</string>
<string name="user_sent_follow_request"> s iad air iarrtas leantainn a chur thugad</string> <string name="user_sent_follow_request"> s iad air iarrtas leantainn a chur thugad</string>
<string name="user_favorited"> s iad air am post agad a chur ris na h-annsachdan aca</string> <string name="user_favorited"> s iad air am post agad a chur ris na h-annsachdan aca</string>
<string name="notification_boosted"> s iad air am post agad a bhrosnachadh</string>
<string name="poll_ended">Thàinig cunntas-bheachd gu crìoch</string> <string name="poll_ended">Thàinig cunntas-bheachd gu crìoch</string>
<string name="time_seconds">%dd</string> <string name="time_seconds">%dd</string>
<string name="time_minutes">%dm</string> <string name="time_minutes">%dm</string>
@@ -190,7 +188,6 @@
<string name="report_sent_subtitle">Fhad s a bhios sinn a toirt sùil air, seo nas urrainn dhut dèanamh an aghaidh %s.</string> <string name="report_sent_subtitle">Fhad s a bhios sinn a toirt sùil air, seo nas urrainn dhut dèanamh an aghaidh %s.</string>
<string name="unfollow_user">Na lean %s tuilleadh</string> <string name="unfollow_user">Na lean %s tuilleadh</string>
<string name="unfollow">Na lean tuilleadh</string> <string name="unfollow">Na lean tuilleadh</string>
<string name="mute_user_explain">Chan fhaic thu na postaichean aca is dè a bhrosnaich iad air inbhir na dachaigh agad tuilleadh. Cha bhi fios aca gun do mhùch thu iad.</string>
<string name="block_user_explain">Chan urrainn dhaibh gad leantainn is chan fhaic iad na postaichean agad tuilleadh ach chì iad gun deach am bacadh.</string> <string name="block_user_explain">Chan urrainn dhaibh gad leantainn is chan fhaic iad na postaichean agad tuilleadh ach chì iad gun deach am bacadh.</string>
<string name="report_personal_title">Nach eil thu airson seo fhaicinn?</string> <string name="report_personal_title">Nach eil thu airson seo fhaicinn?</string>
<string name="report_personal_subtitle">Nuair a chì thu rudeigin nach toigh leat air Mastodon, s urrainn dhut an neach a chumail fad air falbh uat.</string> <string name="report_personal_subtitle">Nuair a chì thu rudeigin nach toigh leat air Mastodon, s urrainn dhut an neach a chumail fad air falbh uat.</string>
@@ -235,7 +232,6 @@
<string name="skip">Leum thairis air</string> <string name="skip">Leum thairis air</string>
<string name="notification_type_follow">Luchd-leantainn ùr</string> <string name="notification_type_follow">Luchd-leantainn ùr</string>
<string name="notification_type_favorite">Annsachdan</string> <string name="notification_type_favorite">Annsachdan</string>
<string name="notification_type_reblog">Brosnachaidhean</string>
<string name="notification_type_mention">Iomraidhean</string> <string name="notification_type_mention">Iomraidhean</string>
<string name="notification_type_poll">Cunntasan-bheachd</string> <string name="notification_type_poll">Cunntasan-bheachd</string>
<string name="choose_account">Tagh cunntas</string> <string name="choose_account">Tagh cunntas</string>
@@ -264,7 +260,6 @@
<string name="notify_none">nach bi duine sam bith</string> <string name="notify_none">nach bi duine sam bith</string>
<string name="notify_favorites">air post uam a chur ris na h-annsachdan</string> <string name="notify_favorites">air post uam a chur ris na h-annsachdan</string>
<string name="notify_follow">air mo leantainn</string> <string name="notify_follow">air mo leantainn</string>
<string name="notify_reblog">air post uam a bhrosnachadh</string>
<string name="notify_mention">air iomradh a thoirt orm</string> <string name="notify_mention">air iomradh a thoirt orm</string>
<string name="settings_boring">An earrann ràsanach</string> <string name="settings_boring">An earrann ràsanach</string>
<string name="settings_account">Roghainnean a chunntais</string> <string name="settings_account">Roghainnean a chunntais</string>
@@ -285,7 +280,6 @@
<string name="hide_content">Falaich an t-susbaint</string> <string name="hide_content">Falaich an t-susbaint</string>
<string name="new_post">Post ùr</string> <string name="new_post">Post ùr</string>
<string name="button_reply">Freagair</string> <string name="button_reply">Freagair</string>
<string name="button_reblog">Brosnaich</string>
<string name="button_favorite">Cuir ris na h-annsachdan</string> <string name="button_favorite">Cuir ris na h-annsachdan</string>
<string name="button_share">Co-roinn</string> <string name="button_share">Co-roinn</string>
<string name="media_no_description">Meadhan gun tuairisgeul</string> <string name="media_no_description">Meadhan gun tuairisgeul</string>
@@ -300,8 +294,6 @@
<string name="unfollowed_user">Chan eil thu a leantainn %s tuilleadh</string> <string name="unfollowed_user">Chan eil thu a leantainn %s tuilleadh</string>
<string name="followed_user">Tha thu a leantainn %s a-nis</string> <string name="followed_user">Tha thu a leantainn %s a-nis</string>
<string name="open_in_browser">Fosgail sa bhrabhsair</string> <string name="open_in_browser">Fosgail sa bhrabhsair</string>
<string name="hide_boosts_from_user">Falaich na brosnachaidhean o %s</string>
<string name="show_boosts_from_user">Seall na brosnachaidhean o %s</string>
<string name="signup_reason_note">Bidh e nas fhasa dhuinn lèirmheas a dhèanamh air d iarrtas.</string> <string name="signup_reason_note">Bidh e nas fhasa dhuinn lèirmheas a dhèanamh air d iarrtas.</string>
<string name="clear">Falamhaich</string> <string name="clear">Falamhaich</string>
<string name="profile_header">Dealbh a bhanna-chinn</string> <string name="profile_header">Dealbh a bhanna-chinn</string>
@@ -348,15 +340,8 @@
<item quantity="few">%,d annsachdan</item> <item quantity="few">%,d annsachdan</item>
<item quantity="other">%,d annsachd</item> <item quantity="other">%,d annsachd</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d bhrosnachadh</item>
<item quantity="two">%,d bhrosnachadh</item>
<item quantity="few">%,d brosnachaidhean</item>
<item quantity="other">%,d brosnachadh</item>
</plurals>
<string name="timestamp_via_app">%1$s slighe %2$s</string> <string name="timestamp_via_app">%1$s slighe %2$s</string>
<string name="time_now">an-dràsta</string> <string name="time_now">an-dràsta</string>
<string name="post_info_reblogs">Brosnachaidhean</string>
<string name="post_info_favorites">Annsachdan</string> <string name="post_info_favorites">Annsachdan</string>
<string name="edit_history">Eachdraidh nan deasachaidhean</string> <string name="edit_history">Eachdraidh nan deasachaidhean</string>
<string name="last_edit_at_x">An deasachadh mu dheireadh %s</string> <string name="last_edit_at_x">An deasachadh mu dheireadh %s</string>

View File

@@ -10,13 +10,11 @@
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="preparing_auth">Preparándose para a autenticación…</string> <string name="preparing_auth">Preparándose para a autenticación…</string>
<string name="finishing_auth">Rematando coa autenticación…</string> <string name="finishing_auth">Rematando coa autenticación…</string>
<string name="user_boosted">%s promoveu</string>
<string name="in_reply_to">Como resposta a %s</string> <string name="in_reply_to">Como resposta a %s</string>
<string name="notifications">Notificacións</string> <string name="notifications">Notificacións</string>
<string name="user_followed_you">séguete</string> <string name="user_followed_you">séguete</string>
<string name="user_sent_follow_request">enviouche unha solicitude de seguimento</string> <string name="user_sent_follow_request">enviouche unha solicitude de seguimento</string>
<string name="user_favorited">marcou a túa publicación como favorita</string> <string name="user_favorited">marcou a túa publicación como favorita</string>
<string name="notification_boosted">compartiu a túa publicación</string>
<string name="poll_ended">rematou a enquisa</string> <string name="poll_ended">rematou a enquisa</string>
<string name="time_seconds">%ds</string> <string name="time_seconds">%ds</string>
<string name="time_minutes">%dm</string> <string name="time_minutes">%dm</string>
@@ -166,7 +164,6 @@
<string name="report_sent_subtitle">Mestras revisamos, podes tomar accións contra %s.</string> <string name="report_sent_subtitle">Mestras revisamos, podes tomar accións contra %s.</string>
<string name="unfollow_user">Deixar de seguir a %s</string> <string name="unfollow_user">Deixar de seguir a %s</string>
<string name="unfollow">Deixar de seguir</string> <string name="unfollow">Deixar de seguir</string>
<string name="mute_user_explain">Non verás as súas publicacións ou repeticións na túa cronoloxía. Non saberá que foi acalada.</string>
<string name="block_user_explain">Non poderá seguirte nin ver o que publicas, pero pode ver se foi bloqueada.</string> <string name="block_user_explain">Non poderá seguirte nin ver o que publicas, pero pode ver se foi bloqueada.</string>
<string name="report_personal_title">Non queres ver esto?</string> <string name="report_personal_title">Non queres ver esto?</string>
<string name="report_personal_subtitle">Cando ves en Mastodon algo que non che gusta podes retirar a esa persoa da túa experiencia como usuaria.</string> <string name="report_personal_subtitle">Cando ves en Mastodon algo que non che gusta podes retirar a esa persoa da túa experiencia como usuaria.</string>
@@ -223,7 +220,6 @@
<string name="skip">Omitir</string> <string name="skip">Omitir</string>
<string name="notification_type_follow">Novas seguidoras</string> <string name="notification_type_follow">Novas seguidoras</string>
<string name="notification_type_favorite">Favoritas</string> <string name="notification_type_favorite">Favoritas</string>
<string name="notification_type_reblog">Promocións</string>
<string name="notification_type_mention">Mencións</string> <string name="notification_type_mention">Mencións</string>
<string name="notification_type_poll">Enquisas</string> <string name="notification_type_poll">Enquisas</string>
<string name="choose_account">Elixir conta</string> <string name="choose_account">Elixir conta</string>
@@ -250,7 +246,6 @@
<string name="notify_none">ninguén</string> <string name="notify_none">ninguén</string>
<string name="notify_favorites">Favorece unha publicación miña</string> <string name="notify_favorites">Favorece unha publicación miña</string>
<string name="notify_follow">Me segue</string> <string name="notify_follow">Me segue</string>
<string name="notify_reblog">Promove a miña publicación</string>
<string name="notify_mention">Me menciona</string> <string name="notify_mention">Me menciona</string>
<string name="settings_boring">A zona aburrida</string> <string name="settings_boring">A zona aburrida</string>
<string name="settings_account">Axustes da conta</string> <string name="settings_account">Axustes da conta</string>
@@ -271,7 +266,6 @@
<string name="hide_content">Agochar contido</string> <string name="hide_content">Agochar contido</string>
<string name="new_post">Nova publicación</string> <string name="new_post">Nova publicación</string>
<string name="button_reply">Responder</string> <string name="button_reply">Responder</string>
<string name="button_reblog">Promover</string>
<string name="button_favorite">Favorecer</string> <string name="button_favorite">Favorecer</string>
<string name="button_share">Compartir</string> <string name="button_share">Compartir</string>
<string name="media_no_description">Multimedia sen descrición</string> <string name="media_no_description">Multimedia sen descrición</string>
@@ -287,8 +281,6 @@
<string name="followed_user">Estás a seguir a %s</string> <string name="followed_user">Estás a seguir a %s</string>
<string name="following_user_requested">Solicitaches seguir a %s</string> <string name="following_user_requested">Solicitaches seguir a %s</string>
<string name="open_in_browser">Abrir nun navegador</string> <string name="open_in_browser">Abrir nun navegador</string>
<string name="hide_boosts_from_user">Agochar promocións de @%s</string>
<string name="show_boosts_from_user">Mostrar promocións de %s</string>
<string name="signup_reason">Por qué queres unirte?</string> <string name="signup_reason">Por qué queres unirte?</string>
<string name="signup_reason_note">Esto axudaranos a revisar a tua solicitude.</string> <string name="signup_reason_note">Esto axudaranos a revisar a tua solicitude.</string>
<string name="clear">Limpar</string> <string name="clear">Limpar</string>
@@ -330,13 +322,8 @@
<item quantity="one">%,d favorita</item> <item quantity="one">%,d favorita</item>
<item quantity="other">%,d favoritas</item> <item quantity="other">%,d favoritas</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d promoción</item>
<item quantity="other">%,d promocións</item>
</plurals>
<string name="timestamp_via_app">%1$s vía %2$s</string> <string name="timestamp_via_app">%1$s vía %2$s</string>
<string name="time_now">agora</string> <string name="time_now">agora</string>
<string name="post_info_reblogs">Promocións</string>
<string name="post_info_favorites">Favoritas</string> <string name="post_info_favorites">Favoritas</string>
<string name="edit_history">Editar historial</string> <string name="edit_history">Editar historial</string>
<string name="last_edit_at_x">Última edición %s</string> <string name="last_edit_at_x">Última edición %s</string>
@@ -395,12 +382,6 @@
<string name="login_title">Benvida outra vez</string> <string name="login_title">Benvida outra vez</string>
<string name="login_subtitle">Accede co servidor onde creaches a conta.</string> <string name="login_subtitle">Accede co servidor onde creaches a conta.</string>
<string name="server_url">URL do servidor</string> <string name="server_url">URL do servidor</string>
<string name="welcome_page1_title">Qué é Mastodon?</string>
<string name="welcome_page1_text">Imaxina que tes un enderezo de email que remata con @exemplo.com.\n\nPodes recibir e enviar mensaxes con calquera persoa, incluso se o seu email remata en @gmail.com ou @icloud.com ou @exemplo.com.</string>
<string name="welcome_page2_title">Mastodon é o mesmo.</string>
<string name="welcome_page2_text">O teu identificador pode ser @rula654@exemplo.social, pero podes seguir, promover e conversar con @gz4libre@exemplo.online.</string>
<string name="welcome_page3_title">Como elexir un servidor?</string>
<string name="welcome_page3_text">Pode haber moitas razóns para elexir un servidor. art.exemplo é un bo lugar para artistas, mentras glasgow.exemplo podería ser axeitado para persoas escocesas.\n\nNon terás problemas con calquera dos servidores recomendados, así que independentemente do que elixas (ou se escribes o teu propio na caixa de busca) non botarás nada en falta.</string>
<string name="signup_random_server_explain">Elixiremos un servidor no teu idioma se segues sen seleccionar nada.</string> <string name="signup_random_server_explain">Elixiremos un servidor no teu idioma se segues sen seleccionar nada.</string>
<string name="server_filter_any_language">Calquer idioma</string> <string name="server_filter_any_language">Calquer idioma</string>
<string name="server_filter_instant_signup">Rexistro Instantáneo</string> <string name="server_filter_instant_signup">Rexistro Instantáneo</string>

View File

@@ -44,7 +44,7 @@
<string name="sk_disable_marquee">Desactivar desprazamento do texto na barra de título</string> <string name="sk_disable_marquee">Desactivar desprazamento do texto na barra de título</string>
<string name="sk_welcome_title">¡Benvida!</string> <string name="sk_welcome_title">¡Benvida!</string>
<string name="sk_settings_contribute">Contribúe a Megalodon</string> <string name="sk_settings_contribute">Contribúe a Megalodon</string>
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_example_domain">exemplo.social</string> <string name="sk_example_domain">exemplo.social</string>
<string name="sk_available_languages">Idiomas dispoñíbeis</string> <string name="sk_available_languages">Idiomas dispoñíbeis</string>
<string name="sk_settings_profile">Configurar perfil</string> <string name="sk_settings_profile">Configurar perfil</string>

View File

@@ -8,7 +8,6 @@
<string name="user_followed_you">आपके साथ जुड़ा</string> <string name="user_followed_you">आपके साथ जुड़ा</string>
<string name="user_sent_follow_request">आपको एक अनुसरण अनुरोध भेजा है</string> <string name="user_sent_follow_request">आपको एक अनुसरण अनुरोध भेजा है</string>
<string name="user_favorited">आपकी पोस्ट को पसंद किया</string> <string name="user_favorited">आपकी पोस्ट को पसंद किया</string>
<string name="notification_boosted">आपका पोस्ट को पुनः प्रसारित किया</string>
<string name="poll_ended">मतदान समाप्त</string> <string name="poll_ended">मतदान समाप्त</string>
<string name="poll_closed">बंद</string> <string name="poll_closed">बंद</string>
<string name="confirm_mute_title">म्यूट किए गए खाते</string> <string name="confirm_mute_title">म्यूट किए गए खाते</string>

View File

@@ -173,7 +173,6 @@
<string name="report_sent_subtitle">Dok mi ovo pregledavamo, možete poduzeti mjere protiv %s.</string> <string name="report_sent_subtitle">Dok mi ovo pregledavamo, možete poduzeti mjere protiv %s.</string>
<string name="unfollow_user">Prestani pratiti %s</string> <string name="unfollow_user">Prestani pratiti %s</string>
<string name="unfollow">Prestani pratiti</string> <string name="unfollow">Prestani pratiti</string>
<string name="mute_user_explain">Nećeš vidjeti njihove postove ili reblogove u svom feedu na početnoj stranici. Neće znati da su utišani.</string>
<string name="block_user_explain">Više te neće moći pratiti ili vidjeti tvoje objave, ali mogu vidjeti jesu li blokirani.</string> <string name="block_user_explain">Više te neće moći pratiti ili vidjeti tvoje objave, ali mogu vidjeti jesu li blokirani.</string>
<string name="report_personal_title">Ne želiš vidjeti ovo?</string> <string name="report_personal_title">Ne želiš vidjeti ovo?</string>
<string name="report_personal_subtitle">Kada vidiš nešto što ti se ne sviđa na Mastodonu, možeš ukloniti osobu iz svog iskustva.</string> <string name="report_personal_subtitle">Kada vidiš nešto što ti se ne sviđa na Mastodonu, možeš ukloniti osobu iz svog iskustva.</string>
@@ -243,7 +242,6 @@
<string name="notify_none">nitko</string> <string name="notify_none">nitko</string>
<string name="notify_favorites">Favorizira moj post</string> <string name="notify_favorites">Favorizira moj post</string>
<string name="notify_follow">Prati me</string> <string name="notify_follow">Prati me</string>
<string name="notify_reblog">Rebloga moju objavu</string>
<string name="notify_mention">Spominje me</string> <string name="notify_mention">Spominje me</string>
<string name="settings_boring">Dosadna zona</string> <string name="settings_boring">Dosadna zona</string>
<string name="settings_account">Postavke računa</string> <string name="settings_account">Postavke računa</string>
@@ -264,7 +262,6 @@
<string name="hide_content">Sakrij sadržaj</string> <string name="hide_content">Sakrij sadržaj</string>
<string name="new_post">Nova objava</string> <string name="new_post">Nova objava</string>
<string name="button_reply">Odgovori</string> <string name="button_reply">Odgovori</string>
<string name="button_reblog">Reblog</string>
<string name="button_favorite">Favorit</string> <string name="button_favorite">Favorit</string>
<string name="button_share">Podijeli</string> <string name="button_share">Podijeli</string>
<string name="media_no_description">Medij bez opisa</string> <string name="media_no_description">Medij bez opisa</string>

View File

@@ -10,13 +10,11 @@
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="preparing_auth">Felkészülés a hitelesítésre…</string> <string name="preparing_auth">Felkészülés a hitelesítésre…</string>
<string name="finishing_auth">Hitelesítés befejezése…</string> <string name="finishing_auth">Hitelesítés befejezése…</string>
<string name="user_boosted">%s megtolta</string>
<string name="in_reply_to">Válaszolva %s számára</string> <string name="in_reply_to">Válaszolva %s számára</string>
<string name="notifications">Értesítések</string> <string name="notifications">Értesítések</string>
<string name="user_followed_you">bekövetett</string> <string name="user_followed_you">bekövetett</string>
<string name="user_sent_follow_request">követési kérelmet küldött neked</string> <string name="user_sent_follow_request">követési kérelmet küldött neked</string>
<string name="user_favorited">kedvencnek jelölte a bejegyzésedet</string> <string name="user_favorited">kedvencnek jelölte a bejegyzésedet</string>
<string name="notification_boosted">megtolta a bejegyzésedet</string>
<string name="poll_ended">a szavazás véget ért</string> <string name="poll_ended">a szavazás véget ért</string>
<string name="time_seconds">%dmp</string> <string name="time_seconds">%dmp</string>
<string name="time_minutes">%dp</string> <string name="time_minutes">%dp</string>
@@ -166,7 +164,6 @@
<string name="report_sent_subtitle">Míg átnézzük, a következőket teheted %s ellen.</string> <string name="report_sent_subtitle">Míg átnézzük, a következőket teheted %s ellen.</string>
<string name="unfollow_user">%s követésének megszüntetése</string> <string name="unfollow_user">%s követésének megszüntetése</string>
<string name="unfollow">Követés megszüntetése</string> <string name="unfollow">Követés megszüntetése</string>
<string name="mute_user_explain">Nem fogod látni a bejegyzéseiket vagy a megtolásaikat a kezdőlapon. Nem fogják tudni, hogy elnémították őket.</string>
<string name="block_user_explain">Többé nem fogják tudni követni vagy látni a bejegyzéseidet, de láthatják, ha letiltották őket.</string> <string name="block_user_explain">Többé nem fogják tudni követni vagy látni a bejegyzéseidet, de láthatják, ha letiltották őket.</string>
<string name="report_personal_title">Nem akarod ezt látni?</string> <string name="report_personal_title">Nem akarod ezt látni?</string>
<string name="report_personal_subtitle">Ha olyasmit látsz a Mastodonon, ami nem tetszik, eltávolíthatod az illetőt a felhasználói élményedből.</string> <string name="report_personal_subtitle">Ha olyasmit látsz a Mastodonon, ami nem tetszik, eltávolíthatod az illetőt a felhasználói élményedből.</string>
@@ -223,7 +220,6 @@
<string name="skip">Átugrás</string> <string name="skip">Átugrás</string>
<string name="notification_type_follow">Új követők</string> <string name="notification_type_follow">Új követők</string>
<string name="notification_type_favorite">Kedvencek</string> <string name="notification_type_favorite">Kedvencek</string>
<string name="notification_type_reblog">Megtolások</string>
<string name="notification_type_mention">Említések</string> <string name="notification_type_mention">Említések</string>
<string name="notification_type_poll">Szavazások</string> <string name="notification_type_poll">Szavazások</string>
<string name="choose_account">Fiók kiválasztása</string> <string name="choose_account">Fiók kiválasztása</string>
@@ -250,7 +246,6 @@
<string name="notify_none">senki</string> <string name="notify_none">senki</string>
<string name="notify_favorites">Aki a kedvencének jelölte a posztom</string> <string name="notify_favorites">Aki a kedvencének jelölte a posztom</string>
<string name="notify_follow">Aki követ engem</string> <string name="notify_follow">Aki követ engem</string>
<string name="notify_reblog">Megtolta a bejegyzésed</string>
<string name="notify_mention">Megemlített</string> <string name="notify_mention">Megemlített</string>
<string name="settings_boring">Az unalmas zóna</string> <string name="settings_boring">Az unalmas zóna</string>
<string name="settings_account">Fiókbeállítások</string> <string name="settings_account">Fiókbeállítások</string>
@@ -271,7 +266,6 @@
<string name="hide_content">Tartalom elrejtése</string> <string name="hide_content">Tartalom elrejtése</string>
<string name="new_post">Új bejegyzés</string> <string name="new_post">Új bejegyzés</string>
<string name="button_reply">Válasz</string> <string name="button_reply">Válasz</string>
<string name="button_reblog">Megtolás</string>
<string name="button_favorite">Kedvenc</string> <string name="button_favorite">Kedvenc</string>
<string name="button_share">Megosztás</string> <string name="button_share">Megosztás</string>
<string name="media_no_description">Média leírás nélkül</string> <string name="media_no_description">Média leírás nélkül</string>
@@ -286,8 +280,6 @@
<string name="unfollowed_user">%s követését visszavontad</string> <string name="unfollowed_user">%s követését visszavontad</string>
<string name="followed_user">Most már követed %s</string> <string name="followed_user">Most már követed %s</string>
<string name="open_in_browser">Megnyitás böngészőben</string> <string name="open_in_browser">Megnyitás böngészőben</string>
<string name="hide_boosts_from_user">%s megtolásainak elrejtése</string>
<string name="show_boosts_from_user">%s megtolásainak mutatása</string>
<string name="signup_reason">Miért szeretnél csatlakozni?</string> <string name="signup_reason">Miért szeretnél csatlakozni?</string>
<string name="signup_reason_note">Ez segít nekünk átnézni a jelentkezésedet.</string> <string name="signup_reason_note">Ez segít nekünk átnézni a jelentkezésedet.</string>
<string name="clear">Törlés</string> <string name="clear">Törlés</string>
@@ -329,13 +321,8 @@
<item quantity="one">%,d kedvenc</item> <item quantity="one">%,d kedvenc</item>
<item quantity="other">%,d kedvenc</item> <item quantity="other">%,d kedvenc</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d megtolás</item>
<item quantity="other">%,d megtolás</item>
</plurals>
<string name="timestamp_via_app">%1$s %2$s használatával</string> <string name="timestamp_via_app">%1$s %2$s használatával</string>
<string name="time_now">most</string> <string name="time_now">most</string>
<string name="post_info_reblogs">Megtolások</string>
<string name="post_info_favorites">Kedvencek</string> <string name="post_info_favorites">Kedvencek</string>
<string name="edit_history">Szerkesztési előzmények</string> <string name="edit_history">Szerkesztési előzmények</string>
<string name="last_edit_at_x">Utoljára szerkesztve: %s</string> <string name="last_edit_at_x">Utoljára szerkesztve: %s</string>
@@ -394,12 +381,6 @@
<string name="login_title">Üdv újra</string> <string name="login_title">Üdv újra</string>
<string name="login_subtitle">Azon a kiszolgálón jelentkezz be, ahol a fiókodat létrehoztad.</string> <string name="login_subtitle">Azon a kiszolgálón jelentkezz be, ahol a fiókodat létrehoztad.</string>
<string name="server_url">Kiszolgáló URL</string> <string name="server_url">Kiszolgáló URL</string>
<string name="welcome_page1_title">Mi a Mastodon?</string>
<string name="welcome_page1_text">Képzeld el, hogy az emailcímed @example.com-ra végződik.\n\nEttől még küldhtesz és fogadhatsz emailt bárkitől, akkor is, ha a címük @gmail.com-ra, @icloud.com-ra vagy @example.com-ra végződik.</string>
<string name="welcome_page2_title">Ilyen a Mastodon.</string>
<string name="welcome_page2_text">Lehet, hogy az azonosítód @gothgirl654@example.social, de ettől még követheted, megtolhatod és csetelhetsz @fallout5ever@example.online-nal.</string>
<string name="welcome_page3_title">Hogyan választok kiszolgálót?</string>
<string name="welcome_page3_text">Az emberek különböző okok miatt választanak más és más kiszolgálót. Az art.example egy jó hely lehet a művészek számára, miközben a glasgow.example a skótoknak lehet megfelelő.\n\nAz általunk javasolt kiszolgálókkal nem lehet probléma, de teljesen mindegy, hogy melyiket választod (vagy ha saját kiszolgálót használsz a keresőmezőben), nem maradsz le semmiről egy kiszolgálón sem.</string>
<string name="signup_random_server_explain">Választunk egy kiszolgálót a saját nyelvedhez, ha választás nélkül folytatod.</string> <string name="signup_random_server_explain">Választunk egy kiszolgálót a saját nyelvedhez, ha választás nélkül folytatod.</string>
<string name="server_filter_any_language">Bármely Nyelv</string> <string name="server_filter_any_language">Bármely Nyelv</string>
<string name="server_filter_instant_signup">Azonnali Regisztráció</string> <string name="server_filter_instant_signup">Azonnali Regisztráció</string>

View File

@@ -39,7 +39,7 @@
<string name="sk_settings_show_federated_timeline">Összevont idővonal megjelenítése</string> <string name="sk_settings_show_federated_timeline">Összevont idővonal megjelenítése</string>
<string name="sk_confirm_clear_recent_languages">Biztos, hogy törölni szeretné a nemrég használt nyelveket\?</string> <string name="sk_confirm_clear_recent_languages">Biztos, hogy törölni szeretné a nemrég használt nyelveket\?</string>
<string name="sk_available_languages">Elérhető nyelvek</string> <string name="sk_available_languages">Elérhető nyelvek</string>
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_settings_translate_only_opened">Csak a megnyitott hozzászólások lefordítása</string> <string name="sk_settings_translate_only_opened">Csak a megnyitott hozzászólások lefordítása</string>
<string name="sk_already_reblogged">Már reblogoltam</string> <string name="sk_already_reblogged">Már reblogoltam</string>
<string name="sk_reblogged_as">Átlogolva mint %s</string> <string name="sk_reblogged_as">Átlogolva mint %s</string>

View File

@@ -8,15 +8,14 @@
<string name="error">Kesalahan</string> <string name="error">Kesalahan</string>
<string name="not_a_mastodon_instance">%s sepertinya bukan server Mastodon.</string> <string name="not_a_mastodon_instance">%s sepertinya bukan server Mastodon.</string>
<string name="ok">Oke</string> <string name="ok">Oke</string>
<string name="preparing_auth">Menyiapkan untuk otentikasi…</string> <string name="preparing_auth">Menyiapkan untuk autentikasi…</string>
<string name="finishing_auth">Menyelesaikan otentikasi…</string> <string name="finishing_auth">Menyelesaikan autentikasi…</string>
<string name="user_boosted">%s membagikan</string>
<string name="in_reply_to">Membalas ke %s</string> <string name="in_reply_to">Membalas ke %s</string>
<string name="notifications">Notifikasi</string> <string name="notifications">Notifikasi</string>
<string name="user_followed_you">mengikuti Anda</string> <string name="user_followed_you">mengikuti Anda</string>
<string name="user_sent_follow_request">mengirim Anda permintaan pengikut</string> <string name="user_sent_follow_request">mengirim Anda permintaan pengikut</string>
<string name="user_favorited">memfavorit kiriman Anda</string> <string name="user_favorited">memfavorit kiriman Anda</string>
<string name="notification_boosted">membagikan kiriman Anda</string> <string name="notification_boosted">mem-boost kiriman Anda</string>
<string name="poll_ended">pemungutan suara berakhir</string> <string name="poll_ended">pemungutan suara berakhir</string>
<string name="time_seconds">%dd</string> <string name="time_seconds">%dd</string>
<string name="time_minutes">%dm</string> <string name="time_minutes">%dm</string>
@@ -152,14 +151,22 @@
<string name="report_sent_subtitle">Saat kami sedang meninjau ini, Anda dapat mengambil tindakan terhadap %s.</string> <string name="report_sent_subtitle">Saat kami sedang meninjau ini, Anda dapat mengambil tindakan terhadap %s.</string>
<string name="unfollow_user">Berhenti mengikuti %s</string> <string name="unfollow_user">Berhenti mengikuti %s</string>
<string name="unfollow">Berhenti mengikuti</string> <string name="unfollow">Berhenti mengikuti</string>
<string name="mute_user_explain">Anda tidak akan melihat kiriman atau pembagian mereka dalam umpan beranda Anda. Mereka tidak akan tahu bahwa mereka telah dibisukan.</string>
<string name="block_user_explain">Mereka tidak akan dapat mengikuti atau melihat kiriman Anda lagi, tetapi mereka dapat melihat jika mereka telah diblokir.</string> <string name="block_user_explain">Mereka tidak akan dapat mengikuti atau melihat kiriman Anda lagi, tetapi mereka dapat melihat jika mereka telah diblokir.</string>
<string name="report_personal_title">Tidak ingin melihat ini?</string> <string name="report_personal_title">Tidak ingin melihat ini?</string>
<string name="report_personal_subtitle">Ketika Anda melihat sesuatu yang Anda tidak suka di Mastodon, Anda dapat menghapus orang dari pengalaman Anda.</string> <string name="report_personal_subtitle">Ketika Anda melihat sesuatu yang Anda tidak suka di Mastodon, Anda dapat menghapus orang dari pengalaman Anda.</string>
<string name="back">Kembali</string> <string name="back">Kembali</string>
<string name="instance_catalog_title">Mastodon dibuat oleh pengguna di server yang berbeda-beda.</string> <string name="instance_catalog_title">Mastodon dibuat oleh pengguna di server yang berbeda-beda.</string>
<string name="instance_catalog_subtitle">Pilih sebuah server berdasarkan minat atau wilayah Anda, atau yang umum. Anda masih dapat berkomunikasi dengan semua orang, tanpa memedulikan server yang Anda berada.</string> <string name="instance_catalog_subtitle">Pilih sebuah server berdasarkan minat atau wilayah Anda, atau yang umum. Anda masih dapat berkomunikasi dengan semua orang, tanpa memedulikan server yang Anda berada.</string>
<string name="search_communities">Nama server atau URL</string>
<string name="instance_rules_title">Aturan Server</string>
<string name="instance_rules_subtitle">Dengan melanjutkan, Anda setuju mengikuti peraturan berikut yang ditetapkan oleh moderator %s.</string>
<string name="signup_title">Buat Akun</string>
<string name="edit_photo">sunting</string> <string name="edit_photo">sunting</string>
<string name="display_name">Nama</string>
<string name="username">Nama pengguna</string>
<string name="email">Surel</string>
<string name="password">Kata sandi</string>
<string name="confirm_password">Konfirmasi kata sandi</string>
<string name="password_note">Tambahkan huruf besar, karakter spesial, dan nomor untuk meningkatkan kekuatan kata sandi Anda.</string> <string name="password_note">Tambahkan huruf besar, karakter spesial, dan nomor untuk meningkatkan kekuatan kata sandi Anda.</string>
<string name="category_academia">Akademisi</string> <string name="category_academia">Akademisi</string>
<string name="category_activism">Aktivisme</string> <string name="category_activism">Aktivisme</string>
@@ -174,7 +181,10 @@
<string name="category_music">Musik</string> <string name="category_music">Musik</string>
<string name="category_regional">Regional</string> <string name="category_regional">Regional</string>
<string name="category_tech">Teknologi</string> <string name="category_tech">Teknologi</string>
<string name="confirm_email_title">Periksa Kotak Masuk Anda</string>
<!-- %s is the email address --> <!-- %s is the email address -->
<string name="confirm_email_subtitle">Ketuk tautan yang kami kirim kepada Anda untuk memverifikasi %s. Kami akan tunggu di sini.</string>
<string name="confirm_email_didnt_get">Tidak mendapatkan tautan?</string>
<string name="resend">Kirim ulang</string> <string name="resend">Kirim ulang</string>
<string name="open_email_app">Buka aplikasi surel</string> <string name="open_email_app">Buka aplikasi surel</string>
<string name="resent_email">Surel konfirmasi terkirim</string> <string name="resent_email">Surel konfirmasi terkirim</string>
@@ -197,7 +207,6 @@
<string name="skip">Lewati</string> <string name="skip">Lewati</string>
<string name="notification_type_follow">Pengikut baru</string> <string name="notification_type_follow">Pengikut baru</string>
<string name="notification_type_favorite">Favorit</string> <string name="notification_type_favorite">Favorit</string>
<string name="notification_type_reblog">Pembagian</string>
<string name="notification_type_mention">Sebutan</string> <string name="notification_type_mention">Sebutan</string>
<string name="notification_type_poll">Pemungutan suara</string> <string name="notification_type_poll">Pemungutan suara</string>
<string name="choose_account">Pilih akun</string> <string name="choose_account">Pilih akun</string>
@@ -223,7 +232,6 @@
<string name="notify_none">tidak ada</string> <string name="notify_none">tidak ada</string>
<string name="notify_favorites">Memfavorit kiriman saya</string> <string name="notify_favorites">Memfavorit kiriman saya</string>
<string name="notify_follow">Mengikuti saya</string> <string name="notify_follow">Mengikuti saya</string>
<string name="notify_reblog">Membagikan kiriman saya</string>
<string name="notify_mention">Menyebut saya</string> <string name="notify_mention">Menyebut saya</string>
<string name="settings_boring">Zona membosankan</string> <string name="settings_boring">Zona membosankan</string>
<string name="settings_account">Pengaturan akun</string> <string name="settings_account">Pengaturan akun</string>
@@ -244,7 +252,6 @@
<string name="hide_content">Sembunyikan konten</string> <string name="hide_content">Sembunyikan konten</string>
<string name="new_post">Kiriman baru</string> <string name="new_post">Kiriman baru</string>
<string name="button_reply">Balas</string> <string name="button_reply">Balas</string>
<string name="button_reblog">Bagikan ke pengikut</string>
<string name="button_favorite">Favorit</string> <string name="button_favorite">Favorit</string>
<string name="button_share">Bagikan</string> <string name="button_share">Bagikan</string>
<string name="media_no_description">Media tanpa deskripsi</string> <string name="media_no_description">Media tanpa deskripsi</string>
@@ -258,9 +265,9 @@
<string name="follow_user">Ikuti %s</string> <string name="follow_user">Ikuti %s</string>
<string name="unfollowed_user">Berhenti mengikuti %s</string> <string name="unfollowed_user">Berhenti mengikuti %s</string>
<string name="followed_user">Anda sekarang mengikuti %s</string> <string name="followed_user">Anda sekarang mengikuti %s</string>
<string name="following_user_requested">Diminta untuk mengikuti %s</string>
<string name="open_in_browser">Buka di peramban</string> <string name="open_in_browser">Buka di peramban</string>
<string name="hide_boosts_from_user">Sembunyikan pembagian dari %s</string> <string name="signup_reason">Mengapa Anda ingin bergabung?</string>
<string name="show_boosts_from_user">Tampilkan pembagian dari %s</string>
<string name="signup_reason_note">Ini akan membantu kami meninjau aplikasi Anda.</string> <string name="signup_reason_note">Ini akan membantu kami meninjau aplikasi Anda.</string>
<string name="clear">Hapus</string> <string name="clear">Hapus</string>
<string name="profile_header">Gambar tajuk</string> <string name="profile_header">Gambar tajuk</string>
@@ -298,12 +305,8 @@
<plurals name="x_favorites"> <plurals name="x_favorites">
<item quantity="other">%,d favorit</item> <item quantity="other">%,d favorit</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="other">%,d pembagian</item>
</plurals>
<string name="timestamp_via_app">%1$s melalui %2$s</string> <string name="timestamp_via_app">%1$s melalui %2$s</string>
<string name="time_now">sekarang</string> <string name="time_now">sekarang</string>
<string name="post_info_reblogs">Pembagian</string>
<string name="post_info_favorites">Favorit</string> <string name="post_info_favorites">Favorit</string>
<string name="edit_history">Riwayat penyuntingan</string> <string name="edit_history">Riwayat penyuntingan</string>
<string name="last_edit_at_x">Terakhir disunting %s</string> <string name="last_edit_at_x">Terakhir disunting %s</string>
@@ -347,6 +350,8 @@
<!-- %s is file size --> <!-- %s is file size -->
<string name="download_update">Unduh (%s)</string> <string name="download_update">Unduh (%s)</string>
<string name="install_update">Pasang</string> <string name="install_update">Pasang</string>
<string name="privacy_policy_title">Privasi Anda</string>
<string name="privacy_policy_subtitle">Walaupun aplikasi Mastodon tidak mengumpulkan data apa pun, server yang Anda daftarkan di sana dapat memiliki kebijakan yang berbeda.\n\nJika Anda tidak setuju dengan kebijakan %s, Anda dapat kembali dan pilih server yang lain.</string>
<string name="i_agree">Saya Setuju</string> <string name="i_agree">Saya Setuju</string>
<string name="empty_list">Daftar ini kosong</string> <string name="empty_list">Daftar ini kosong</string>
<string name="instance_signup_closed">Server ini tidak menerima pendaftaran baru.</string> <string name="instance_signup_closed">Server ini tidak menerima pendaftaran baru.</string>
@@ -358,12 +363,45 @@
<string name="login_title">Selamat Datang Kembali</string> <string name="login_title">Selamat Datang Kembali</string>
<string name="login_subtitle">Masuk dengan server di mana Anda buat akun Anda.</string> <string name="login_subtitle">Masuk dengan server di mana Anda buat akun Anda.</string>
<string name="server_url">URL Server</string> <string name="server_url">URL Server</string>
<string name="welcome_page1_text">Bayangkan Anda memikiki alamat surel yang berakhiran @contoh.com.\n\nAnda masih bisa mengirim dan menerima surel dari siapa pun, bahkan jika alamat surel mereka berakhiran @gmail.com atau @icloud.com atau @contoh.com.</string> <string name="signup_random_server_explain">Kami akan memilih sebuah server berdasarkan bahasa Anda jika Anda melanjutkan tanpa memilih.</string>
<string name="welcome_page2_title">Mastodon seperti itu.</string> <string name="server_filter_any_language">Bahasa Apa Pun</string>
<string name="welcome_page2_text">Alamat akun Anda bisa seperti @gadisgothic654@contoh.social, tetapi Anda masih dapat mengikuti, membagikan, dan mengobrol dengan @fallout5selamanya@contoh.online.</string> <string name="server_filter_instant_signup">Pendaftaran Instan</string>
<string name="welcome_page3_title">Bagaimana saya memilih server?</string> <string name="server_filter_manual_review">Pemeriksaan Manual</string>
<string name="welcome_page3_text">Kebanyakan orang memilih server berbeda karena berbagai alasan. seni.contoh adalah tempat yang cocok bagi artis, sedangkan glasgow.example mungkin pilihan yang baik untuk para Scots.\n\nAnda tidak bisa salah dengan server yang kami rekomendasikan, jadi server apa yang Anda pilih (atau jika Anda memasukkan Anda sendiri di bilah pencarian server), Anda tidak akan melewatkan apa pun di mana pun.</string> <string name="server_filter_any_signup_speed">Kecepatan Pendaftaran Apa Pun</string>
<string name="server_filter_region_europe">Eropa</string>
<string name="server_filter_region_north_america">Amerika Utara</string>
<string name="server_filter_region_south_america">Amerika Selatan</string>
<string name="server_filter_region_africa">Afrika</string>
<string name="server_filter_region_asia">Asia</string>
<string name="server_filter_region_oceania">Oseania</string>
<string name="not_accepting_new_members">Tidak menerima anggota baru</string>
<string name="category_special_interests">Minat Khusus</string>
<string name="signup_passwords_dont_match">Kata sandi tidak cocok</string>
<string name="pick_server_for_me">Pilih untuk saya</string>
<string name="profile_add_row">Tambahkan baris</string>
<string name="profile_setup">Pengaturan profil</string>
<string name="profile_setup_subtitle">Anda dapat selalu menyelesaikan ini nanti di tab Profil.</string>
<string name="profile_setup_explanation">Anda dapat menambahkan hingga empat kolom baris untuk apa saja yang Anda inginkan. Lokasi, tautan, kata ganti — langit adalah batasnya.</string>
<string name="popular_on_mastodon">Populer di Mastodon</string>
<string name="follow_all">Ikuti semua</string>
<string name="server_rules_disagree">Tolak</string>
<string name="privacy_policy_explanation">Kesimpulan: Kami tidak mengumpulkan atau memproses apa pun.</string>
<!-- %s is server domain --> <!-- %s is server domain -->
<string name="server_policy_disagree">Tidak setuju dengan %s</string>
<string name="profile_bio">Deskripsi</string>
<!-- Shown in a progress dialog when you tap "follow all" --> <!-- Shown in a progress dialog when you tap "follow all" -->
<string name="sending_follows">Mengikuti pengguna…</string>
<!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. --> <!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. -->
<string name="signup_email_domain_blocked">%1$s tidak memperbolehkan pendaftaran dari %2$s. Coba yang lain atau &lt;a&gt;pilih server lain&lt;/a&gt;.</string>
<string name="signup_username_taken">Nama pengguna ini sudah diambil.</string>
<string name="save_changes">Simpan perubahan</string>
<string name="profile_timeline">Linimasa</string>
<string name="view_all">Lihat semua</string>
<string name="profile_endorsed_accounts">Akun</string>
<string name="verified_link">Pranala terverifikasi</string>
<string name="show">Tampilkan</string>
<string name="hide">Sembunyikan</string>
<string name="join_default_server">Gabung %s</string>
<string name="learn_more">Pelajari lebih lanjut</string>
<string name="welcome_to_mastodon">Selamat datang di Mastodon</string>
</resources> </resources>

View File

@@ -53,7 +53,7 @@
<string name="sk_confirm_clear_recent_languages">Apakah Anda yakin ingin menghapus bahasa terkini yang Anda gunakan\?</string> <string name="sk_confirm_clear_recent_languages">Apakah Anda yakin ingin menghapus bahasa terkini yang Anda gunakan\?</string>
<string name="sk_color_palette_material3">Sistem</string> <string name="sk_color_palette_material3">Sistem</string>
<string name="sk_available_languages">Bahasa yang tersedia</string> <string name="sk_available_languages">Bahasa yang tersedia</string>
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_translate_post">Terjemahkan</string> <string name="sk_translate_post">Terjemahkan</string>
<string name="sk_translate_show_original">Tampilkan yang asli</string> <string name="sk_translate_show_original">Tampilkan yang asli</string>
<string name="sk_post_language">Bahasa: %s</string> <string name="sk_post_language">Bahasa: %s</string>
@@ -273,4 +273,5 @@
<string name="sk_reply_line_above_avatar">Baris “Membalas ke” di atas avatar</string> <string name="sk_reply_line_above_avatar">Baris “Membalas ke” di atas avatar</string>
<string name="sk_show_thread">Tampilkan utasan</string> <string name="sk_show_thread">Tampilkan utasan</string>
<string name="sk_compact_reblog_reply_line">Baris berbagi/balasan</string> <string name="sk_compact_reblog_reply_line">Baris berbagi/balasan</string>
<string name="sk_settings_confirm_before_reblog">Konfirmasi sebelum membagikan ulang</string>
</resources> </resources>

View File

@@ -10,13 +10,11 @@
<string name="ok">Í lagi</string> <string name="ok">Í lagi</string>
<string name="preparing_auth">Undirbý auðkenningu…</string> <string name="preparing_auth">Undirbý auðkenningu…</string>
<string name="finishing_auth">Lýk auðkenningu…</string> <string name="finishing_auth">Lýk auðkenningu…</string>
<string name="user_boosted">%s endurbirti</string>
<string name="in_reply_to">Sem svar til %s</string> <string name="in_reply_to">Sem svar til %s</string>
<string name="notifications">Tilkynningar</string> <string name="notifications">Tilkynningar</string>
<string name="user_followed_you">fylgdi þér</string> <string name="user_followed_you">fylgdi þér</string>
<string name="user_sent_follow_request">sendi þér beiðni um að fylgjast með þér</string> <string name="user_sent_follow_request">sendi þér beiðni um að fylgjast með þér</string>
<string name="user_favorited">setti færslu frá þér í eftirlæti</string> <string name="user_favorited">setti færslu frá þér í eftirlæti</string>
<string name="notification_boosted">endurbirti færsluna þína</string>
<string name="poll_ended">könnun er lokið</string> <string name="poll_ended">könnun er lokið</string>
<string name="time_seconds">%ds</string> <string name="time_seconds">%ds</string>
<string name="time_minutes">%dm</string> <string name="time_minutes">%dm</string>
@@ -166,8 +164,6 @@
<string name="report_sent_subtitle">Á meðan við yfirförum þetta, geturðu tekið til aðgerða gegn %s.</string> <string name="report_sent_subtitle">Á meðan við yfirförum þetta, geturðu tekið til aðgerða gegn %s.</string>
<string name="unfollow_user">Hætta að fylgjast með %s</string> <string name="unfollow_user">Hætta að fylgjast með %s</string>
<string name="unfollow">Hætta að fylgjast með</string> <string name="unfollow">Hætta að fylgjast með</string>
<string name="mute_user_explain">Þú munt ekki sjá færslur eða endurbirtingar frá viðkomandi á streyminu þínu.
Viðkomandi aðilar munu ekki vita að þaggað hefur verið niður í þeim.</string>
<string name="block_user_explain">Viðkomandi mun ekki lengur geta fylgst með eða séð færslurnar þínar, en munu sjá ef viðkomandi hefur verið útilokaður.</string> <string name="block_user_explain">Viðkomandi mun ekki lengur geta fylgst með eða séð færslurnar þínar, en munu sjá ef viðkomandi hefur verið útilokaður.</string>
<string name="report_personal_title">Langar þig ekki til að sjá þetta?</string> <string name="report_personal_title">Langar þig ekki til að sjá þetta?</string>
<string name="report_personal_subtitle">Þegar þú sér eitthvað á Mastodon sem þér líkar ekki, þá geturðu fjarlægt viðkomandi eintakling úr umhverfinu þínu.</string> <string name="report_personal_subtitle">Þegar þú sér eitthvað á Mastodon sem þér líkar ekki, þá geturðu fjarlægt viðkomandi eintakling úr umhverfinu þínu.</string>
@@ -224,7 +220,6 @@ Viðkomandi aðilar munu ekki vita að þaggað hefur verið niður í þeim.</s
<string name="skip">Sleppa</string> <string name="skip">Sleppa</string>
<string name="notification_type_follow">Nýir fylgjendur</string> <string name="notification_type_follow">Nýir fylgjendur</string>
<string name="notification_type_favorite">Eftirlæti</string> <string name="notification_type_favorite">Eftirlæti</string>
<string name="notification_type_reblog">Endurbirtingar</string>
<string name="notification_type_mention">Minnst á</string> <string name="notification_type_mention">Minnst á</string>
<string name="notification_type_poll">Kannanir</string> <string name="notification_type_poll">Kannanir</string>
<string name="choose_account">Veldu aðgang</string> <string name="choose_account">Veldu aðgang</string>
@@ -251,7 +246,6 @@ Viðkomandi aðilar munu ekki vita að þaggað hefur verið niður í þeim.</s
<string name="notify_none">enginn</string> <string name="notify_none">enginn</string>
<string name="notify_favorites">Setur færsluna mína í eftirlæti</string> <string name="notify_favorites">Setur færsluna mína í eftirlæti</string>
<string name="notify_follow">Fylgist með mér</string> <string name="notify_follow">Fylgist með mér</string>
<string name="notify_reblog">Endurbirtir færsluna mína</string>
<string name="notify_mention">Minnist á mig</string> <string name="notify_mention">Minnist á mig</string>
<string name="settings_boring">Óhressa svæðið</string> <string name="settings_boring">Óhressa svæðið</string>
<string name="settings_account">Stillingar aðgangs</string> <string name="settings_account">Stillingar aðgangs</string>
@@ -272,7 +266,6 @@ Viðkomandi aðilar munu ekki vita að þaggað hefur verið niður í þeim.</s
<string name="hide_content">Fela efni</string> <string name="hide_content">Fela efni</string>
<string name="new_post">Ný færsla</string> <string name="new_post">Ný færsla</string>
<string name="button_reply">Svara</string> <string name="button_reply">Svara</string>
<string name="button_reblog">Endurbirta</string>
<string name="button_favorite">Eftirlæti</string> <string name="button_favorite">Eftirlæti</string>
<string name="button_share">Deila</string> <string name="button_share">Deila</string>
<string name="media_no_description">Myndefni án lýsingar</string> <string name="media_no_description">Myndefni án lýsingar</string>
@@ -286,9 +279,8 @@ Viðkomandi aðilar munu ekki vita að þaggað hefur verið niður í þeim.</s
<string name="follow_user">Fylgjast með %s</string> <string name="follow_user">Fylgjast með %s</string>
<string name="unfollowed_user">Hætti að fylgjast með %s</string> <string name="unfollowed_user">Hætti að fylgjast með %s</string>
<string name="followed_user">Þú fylgist núna með %s</string> <string name="followed_user">Þú fylgist núna með %s</string>
<string name="following_user_requested">Bað um að fylgjast með %s</string>
<string name="open_in_browser">Opna í vafra</string> <string name="open_in_browser">Opna í vafra</string>
<string name="hide_boosts_from_user">Fela endurbirtingar frá %s</string>
<string name="show_boosts_from_user">Sýna endurbirtingar frá %s</string>
<string name="signup_reason">Hvers vegna vilt þú taka þátt?</string> <string name="signup_reason">Hvers vegna vilt þú taka þátt?</string>
<string name="signup_reason_note">Þetta mun hjálpa okkur við að yfirfara umsóknina þína.</string> <string name="signup_reason_note">Þetta mun hjálpa okkur við að yfirfara umsóknina þína.</string>
<string name="clear">Hreinsa</string> <string name="clear">Hreinsa</string>
@@ -330,13 +322,8 @@ Viðkomandi aðilar munu ekki vita að þaggað hefur verið niður í þeim.</s
<item quantity="one">%,d eftirlæti</item> <item quantity="one">%,d eftirlæti</item>
<item quantity="other">%,d eftirlæti</item> <item quantity="other">%,d eftirlæti</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d Eendurbirting</item>
<item quantity="other">%,d endurbirtingar</item>
</plurals>
<string name="timestamp_via_app">%1$s með %2$s</string> <string name="timestamp_via_app">%1$s með %2$s</string>
<string name="time_now">núna</string> <string name="time_now">núna</string>
<string name="post_info_reblogs">Endurbirtingar</string>
<string name="post_info_favorites">Eftirlæti</string> <string name="post_info_favorites">Eftirlæti</string>
<string name="edit_history">Breytingaferill</string> <string name="edit_history">Breytingaferill</string>
<string name="last_edit_at_x">Síðasta breyting %s</string> <string name="last_edit_at_x">Síðasta breyting %s</string>
@@ -395,12 +382,6 @@ Viðkomandi aðilar munu ekki vita að þaggað hefur verið niður í þeim.</s
<string name="login_title">Velkomin aftur</string> <string name="login_title">Velkomin aftur</string>
<string name="login_subtitle">Skráðu þig inn á netþjóninn þar sem þú útbjóst notandaaðganginn þinn.</string> <string name="login_subtitle">Skráðu þig inn á netþjóninn þar sem þú útbjóst notandaaðganginn þinn.</string>
<string name="server_url">Vefslóð netþjóns</string> <string name="server_url">Vefslóð netþjóns</string>
<string name="welcome_page1_title">Hvað er Mastodon?</string>
<string name="welcome_page1_text">Ímyndaðu þér að þú sért með tölvupóstfang sem endar á @lén.is.\n\nÞú getur alltaf tekið við og sent tölvupóst til allra, jafnvel þótt tölvupóstfangið þeirra endi á @gmail.com, @icloud.com eða @lén.is.</string>
<string name="welcome_page2_title">Mastodon er eins og þetta.</string>
<string name="welcome_page2_text">Auðkennið þitt gæti verið @gothgirl654@example.social, en þú getur samt fylgst með, endurbirt og spjallað við @fallout5ever@example.online.</string>
<string name="welcome_page3_title">Hvernig vel ég netþjón?</string>
<string name="welcome_page3_text">Mismunandi fólk velur sér mismunandi netþjóna af ýmsum ólíkum ástæðum. Netþjónninn art.example er frábær staður fyrir listafólk, á meðan glasgow.example gæti verið góður kostur fyrir suma skota.\n\nÞú getur eiginlega ekki lent á röngum stað á neinum að þeim netþjónum sem við mælum með, þannig að hvern þeirra sem þú velur (eða ef þú setur inn þinn eigin netþjón í leitarreitinn), þá ættirðu ekki að missa af neinu neinsstaðar.</string>
<string name="signup_random_server_explain">Við munum velja netþjón út frá tungumálinu þínu, ef þú heldur áfram án þess að velja neitt.</string> <string name="signup_random_server_explain">Við munum velja netþjón út frá tungumálinu þínu, ef þú heldur áfram án þess að velja neitt.</string>
<string name="server_filter_any_language">Hvaða tungumál sem er</string> <string name="server_filter_any_language">Hvaða tungumál sem er</string>
<string name="server_filter_instant_signup">Nýskráning á stundinni</string> <string name="server_filter_instant_signup">Nýskráning á stundinni</string>

View File

@@ -166,7 +166,7 @@
<string name="report_sent_subtitle">Mentre controlliamo, puoi fare questo contro %s.</string> <string name="report_sent_subtitle">Mentre controlliamo, puoi fare questo contro %s.</string>
<string name="unfollow_user">Smetti di seguire %s</string> <string name="unfollow_user">Smetti di seguire %s</string>
<string name="unfollow">Smetti di seguire</string> <string name="unfollow">Smetti di seguire</string>
<string name="mute_user_explain">Non vedrai i loro post o i reblog nel tuo feed. Non sapranno di essere stati silenziati.</string> <string name="mute_user_explain">Non vedrai i loro post o le condivisioni nel tuo feed. Non sapranno di essere stati silenziati.</string>
<string name="block_user_explain">Non saranno più in grado di seguire o vedere i tuoi post, ma possono vedere se sono stati bloccati.</string> <string name="block_user_explain">Non saranno più in grado di seguire o vedere i tuoi post, ma possono vedere se sono stati bloccati.</string>
<string name="report_personal_title">Non vuoi vedere questo?</string> <string name="report_personal_title">Non vuoi vedere questo?</string>
<string name="report_personal_subtitle">Quando vedi qualcosa che non ti piace su Mastodon, puoi rimuovere la persona dalla tua esperienza.</string> <string name="report_personal_subtitle">Quando vedi qualcosa che non ti piace su Mastodon, puoi rimuovere la persona dalla tua esperienza.</string>
@@ -250,7 +250,6 @@
<string name="notify_none">nessuno</string> <string name="notify_none">nessuno</string>
<string name="notify_favorites">Apprezza i miei post</string> <string name="notify_favorites">Apprezza i miei post</string>
<string name="notify_follow">Mi segue</string> <string name="notify_follow">Mi segue</string>
<string name="notify_reblog">Condivide i miei post</string>
<string name="notify_mention">Mi menziona</string> <string name="notify_mention">Mi menziona</string>
<string name="settings_boring">La zona noiosa</string> <string name="settings_boring">La zona noiosa</string>
<string name="settings_account">Impostazioni dell\'account</string> <string name="settings_account">Impostazioni dell\'account</string>
@@ -271,7 +270,7 @@
<string name="hide_content">Nascondi il contenuto</string> <string name="hide_content">Nascondi il contenuto</string>
<string name="new_post">Nuovo post</string> <string name="new_post">Nuovo post</string>
<string name="button_reply">Rispondi</string> <string name="button_reply">Rispondi</string>
<string name="button_reblog">Condivisione</string> <string name="button_reblog">Condividi</string>
<string name="button_favorite">Preferito</string> <string name="button_favorite">Preferito</string>
<string name="button_share">Condividi</string> <string name="button_share">Condividi</string>
<string name="media_no_description">Media senza descrizione</string> <string name="media_no_description">Media senza descrizione</string>
@@ -287,8 +286,8 @@
<string name="followed_user">Hai cominciato a seguire %s</string> <string name="followed_user">Hai cominciato a seguire %s</string>
<string name="following_user_requested">Richiesto di seguire %s</string> <string name="following_user_requested">Richiesto di seguire %s</string>
<string name="open_in_browser">Apri nel browser</string> <string name="open_in_browser">Apri nel browser</string>
<string name="hide_boosts_from_user">Nascondi le condivisioni di %s</string> <string name="hide_boosts_from_user">Nascondi condivisioni da %s</string>
<string name="show_boosts_from_user">Mostra le condivisioni di %s</string> <string name="show_boosts_from_user">Mostra condivisioni da %s</string>
<string name="signup_reason">Perché vuoi unirti?</string> <string name="signup_reason">Perché vuoi unirti?</string>
<string name="signup_reason_note">Questo ci aiuterà ad esaminare la tua richiesta.</string> <string name="signup_reason_note">Questo ci aiuterà ad esaminare la tua richiesta.</string>
<string name="clear">Cancella</string> <string name="clear">Cancella</string>
@@ -395,12 +394,6 @@
<string name="login_title">Bentornato/a</string> <string name="login_title">Bentornato/a</string>
<string name="login_subtitle">Accedi con il server in cui hai creato il tuo account.</string> <string name="login_subtitle">Accedi con il server in cui hai creato il tuo account.</string>
<string name="server_url">URL del server</string> <string name="server_url">URL del server</string>
<string name="welcome_page1_title">Che cos\'è Mastodon?</string>
<string name="welcome_page1_text">Immaginate di avere un indirizzo email che termina con @example.com.\n\nPotete ancora inviare e ricevere email da chiunque, anche se la loro email termina in @gmail.com o @icloud.com o @example.com.</string>
<string name="welcome_page2_title">Mastodon è così.</string>
<string name="welcome_page2_text">Il tuo pseudonimo potrebbe essere @gothgirl654@example.social, ma puoi ancora seguire, condividere e chattare con @fallout5ever@example.online.</string>
<string name="welcome_page3_title">Come scegliere un server?</string>
<string name="welcome_page3_text">Diverse persone scelgono server diversi per vari motivi. art.example è un server ottimo per gli artisti, mentre glasgow.example è una buona scelta per i Scozzesi. \n\nNon si può sbagliare con nessuno dei nostri server consigliati, e qualsiasi server scegli (o se cerchi un altro che conosci tu usando la barra di ricerca dei server) non perderai mai un colpo.</string>
<string name="signup_random_server_explain">Sceglieremo un server in base alla tua lingua se continui senza effettuare una selezione.</string> <string name="signup_random_server_explain">Sceglieremo un server in base alla tua lingua se continui senza effettuare una selezione.</string>
<string name="server_filter_any_language">Qualsiasi lingua</string> <string name="server_filter_any_language">Qualsiasi lingua</string>
<string name="server_filter_instant_signup">Iscrizione immediata</string> <string name="server_filter_instant_signup">Iscrizione immediata</string>
@@ -432,4 +425,21 @@
<!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. --> <!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. -->
<string name="signup_email_domain_blocked">%1$s non consente iscrizioni da %2$s. Provane uno diverso o &lt;a&gt;scegli un altro server&lt;/a&gt;.</string> <string name="signup_email_domain_blocked">%1$s non consente iscrizioni da %2$s. Provane uno diverso o &lt;a&gt;scegli un altro server&lt;/a&gt;.</string>
<string name="signup_username_taken">Questo nome utente è già in uso.</string> <string name="signup_username_taken">Questo nome utente è già in uso.</string>
<string name="spoiler_show">Mostra comunque</string>
<string name="spoiler_hide">Ri-nascondere</string>
<string name="poll_multiple_choice">Scegli una o più risposte</string>
<string name="save_changes">Salva le modifiche</string>
<string name="profile_featured">In primo piano</string>
<string name="profile_timeline">Timeline</string>
<string name="view_all">Vedi tutto</string>
<string name="profile_endorsed_accounts">Account</string>
<string name="verified_link">Collegamento verificato</string>
<string name="show">Mostra</string>
<string name="hide">Nascondi</string>
<string name="join_default_server">Unisciti a %s</string>
<string name="pick_server">Scegli il mio server</string>
<string name="signup_or_login">o</string>
<string name="learn_more">Scopri di più</string>
<string name="welcome_to_mastodon">Benvenuto/a su Mastodon</string>
<string name="what_are_servers">Cosa sono i server?</string>
</resources> </resources>

View File

@@ -51,7 +51,7 @@
<string name="sk_translate_show_original">Mostra originale</string> <string name="sk_translate_show_original">Mostra originale</string>
<string name="sk_translated_using">Tradotto con %s</string> <string name="sk_translated_using">Tradotto con %s</string>
<string name="sk_post_language">Lingua: %s</string> <string name="sk_post_language">Lingua: %s</string>
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_confirm_clear_recent_languages">Sei sicuro di voler cancellare le lingue usate di recente\?</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 le 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_welcome_title">Benvenuto!</string>

View File

@@ -6,13 +6,11 @@
<string name="ok">אוקיי</string> <string name="ok">אוקיי</string>
<string name="preparing_auth">מתכונן לאימות…</string> <string name="preparing_auth">מתכונן לאימות…</string>
<string name="finishing_auth">מסיים אימות…</string> <string name="finishing_auth">מסיים אימות…</string>
<string name="user_boosted">%s עשה ריבלוג</string>
<string name="in_reply_to">בתגובה ל־%s</string> <string name="in_reply_to">בתגובה ל־%s</string>
<string name="notifications">עדכונים</string> <string name="notifications">עדכונים</string>
<string name="user_followed_you">עקבו אחריכם</string> <string name="user_followed_you">עקבו אחריכם</string>
<string name="user_sent_follow_request">שלחו בקשה לעכוב אחריכם</string> <string name="user_sent_follow_request">שלחו בקשה לעכוב אחריכם</string>
<string name="user_favorited">אהבו את הרשומה שלכם</string> <string name="user_favorited">אהבו את הרשומה שלכם</string>
<string name="notification_boosted">עשו ריבלוג לרשומה שלכם</string>
<string name="poll_ended">הסקר נסגר</string> <string name="poll_ended">הסקר נסגר</string>
<string name="time_seconds">%dשנ׳</string> <string name="time_seconds">%dשנ׳</string>
<string name="time_minutes">%dדק׳</string> <string name="time_minutes">%dדק׳</string>

View File

@@ -10,13 +10,11 @@
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="preparing_auth">認証を開始中…</string> <string name="preparing_auth">認証を開始中…</string>
<string name="finishing_auth">認証を完了中…</string> <string name="finishing_auth">認証を完了中…</string>
<string name="user_boosted">%sがブースト</string>
<string name="in_reply_to">%s へ返信</string> <string name="in_reply_to">%s へ返信</string>
<string name="notifications">通知</string> <string name="notifications">通知</string>
<string name="user_followed_you">がフォロー</string> <string name="user_followed_you">がフォロー</string>
<string name="user_sent_follow_request">フォローリクエストを送信しました</string> <string name="user_sent_follow_request">フォローリクエストを送信しました</string>
<string name="user_favorited">がお気に入り登録</string> <string name="user_favorited">がお気に入り登録</string>
<string name="notification_boosted">がブースト</string>
<string name="poll_ended">アンケートが終了しました</string> <string name="poll_ended">アンケートが終了しました</string>
<string name="time_seconds">%d秒前</string> <string name="time_seconds">%d秒前</string>
<string name="time_minutes">%d分前</string> <string name="time_minutes">%d分前</string>
@@ -152,7 +150,6 @@
<string name="report_sent_subtitle">私たちが確認している間でも、あなたは%sさんに対して対応することができます。</string> <string name="report_sent_subtitle">私たちが確認している間でも、あなたは%sさんに対して対応することができます。</string>
<string name="unfollow_user">フォロー解除%s</string> <string name="unfollow_user">フォロー解除%s</string>
<string name="unfollow">フォロー解除</string> <string name="unfollow">フォロー解除</string>
<string name="mute_user_explain">ホームに投稿やブーストは表示されなくなりますが、相手にミュートしたことは伝わりません。</string>
<string name="block_user_explain">相手はあなたの投稿を見ることやフォローすることは出来ません。相手はブロックされていることはわかります。</string> <string name="block_user_explain">相手はあなたの投稿を見ることやフォローすることは出来ません。相手はブロックされていることはわかります。</string>
<string name="report_personal_title">見えないようにしたいですか?</string> <string name="report_personal_title">見えないようにしたいですか?</string>
<string name="report_personal_subtitle">Mastodonで気に入らないものを見ると、その人をあなたの体験から取り除くことができます。</string> <string name="report_personal_subtitle">Mastodonで気に入らないものを見ると、その人をあなたの体験から取り除くことができます。</string>
@@ -209,7 +206,6 @@
<string name="skip">スキップ</string> <string name="skip">スキップ</string>
<string name="notification_type_follow">新しいフォロワー</string> <string name="notification_type_follow">新しいフォロワー</string>
<string name="notification_type_favorite">お気に入り</string> <string name="notification_type_favorite">お気に入り</string>
<string name="notification_type_reblog">ブースト</string>
<string name="notification_type_mention">メンション</string> <string name="notification_type_mention">メンション</string>
<string name="notification_type_poll">投票</string> <string name="notification_type_poll">投票</string>
<string name="choose_account">アカウントを選択</string> <string name="choose_account">アカウントを選択</string>
@@ -235,7 +231,6 @@
<string name="notify_none">なし</string> <string name="notify_none">なし</string>
<string name="notify_favorites">お気に入り登録された</string> <string name="notify_favorites">お気に入り登録された</string>
<string name="notify_follow">フォローされた</string> <string name="notify_follow">フォローされた</string>
<string name="notify_reblog">ブーストされた</string>
<string name="notify_mention">メンションされた</string> <string name="notify_mention">メンションされた</string>
<string name="settings_boring">アプリについて</string> <string name="settings_boring">アプリについて</string>
<string name="settings_account">アカウント設定</string> <string name="settings_account">アカウント設定</string>
@@ -256,7 +251,6 @@
<string name="hide_content">内容を非表示</string> <string name="hide_content">内容を非表示</string>
<string name="new_post">新しい投稿</string> <string name="new_post">新しい投稿</string>
<string name="button_reply">返信</string> <string name="button_reply">返信</string>
<string name="button_reblog">ブースト</string>
<string name="button_favorite">お気に入り</string> <string name="button_favorite">お気に入り</string>
<string name="button_share">共有</string> <string name="button_share">共有</string>
<string name="media_no_description">説明のないメディア</string> <string name="media_no_description">説明のないメディア</string>
@@ -271,8 +265,6 @@
<string name="unfollowed_user">フォロー解除%s</string> <string name="unfollowed_user">フォロー解除%s</string>
<string name="followed_user">%sさんをフォローしました</string> <string name="followed_user">%sさんをフォローしました</string>
<string name="open_in_browser">ブラウザで開く</string> <string name="open_in_browser">ブラウザで開く</string>
<string name="hide_boosts_from_user">%sさんのブーストを非表示</string>
<string name="show_boosts_from_user">%sさんのブーストを表示</string>
<string name="signup_reason">参加したい理由を入力してください</string> <string name="signup_reason">参加したい理由を入力してください</string>
<string name="signup_reason_note">申請を承認する際に役立つメッセージを添えてください.</string> <string name="signup_reason_note">申請を承認する際に役立つメッセージを添えてください.</string>
<string name="clear">クリア</string> <string name="clear">クリア</string>
@@ -311,12 +303,8 @@
<plurals name="x_favorites"> <plurals name="x_favorites">
<item quantity="other">%,d お気に入り</item> <item quantity="other">%,d お気に入り</item>
</plurals> </plurals>
<plurals name="x_reblogs">
<item quantity="other">%,d ブースト</item>
</plurals>
<string name="timestamp_via_app">%1$sに%2$s経由</string> <string name="timestamp_via_app">%1$sに%2$s経由</string>
<string name="time_now"></string> <string name="time_now"></string>
<string name="post_info_reblogs">ブースト</string>
<string name="post_info_favorites">お気に入り</string> <string name="post_info_favorites">お気に入り</string>
<string name="edit_history">編集履歴</string> <string name="edit_history">編集履歴</string>
<string name="last_edit_at_x">最終更新日%s</string> <string name="last_edit_at_x">最終更新日%s</string>
@@ -373,12 +361,6 @@
<string name="login_title">アカウントでログイン</string> <string name="login_title">アカウントでログイン</string>
<string name="login_subtitle">アカウントのあるサーバーのURLを入力してください。</string> <string name="login_subtitle">アカウントのあるサーバーのURLを入力してください。</string>
<string name="server_url">サーバーのURL</string> <string name="server_url">サーバーのURL</string>
<string name="welcome_page1_title">Mastodonとは</string>
<string name="welcome_page1_text">Mastodonのしくみは電子メールとよく似ています。\n\n電子メールは ○○@example.com のようなメールアドレスを持っていれば、 □□@gmail.com や △△@icloud.com はもちろん、同じプロバイダの ◇◇@example.com など、どんな相手にもメールを送れます。</string>
<string name="welcome_page2_title">サーバーからサーバーへ</string>
<string name="welcome_page2_text">電子メールと同様に、@gothgirl654@example.social というMastodonアカウントがあれば、ほかのサーバーの @fallout5ever@example.online をフォローして投稿をブーストしたり、メンションを送ることができます。</string>
<string name="welcome_page3_title">サーバーをさがしてみよう</string>
<string name="welcome_page3_text">サーバーの選びかたは十人十色です。アーティスト同士が集まるサーバーもあれば、とある鉄道の沿線住民が集うサーバーもあります。\n\nアカウント作成に進むと、検索バーとおすすめのサーバーが表示されます。参加したいサーバーが決まっていない場合は、おすすめから選んでみましょう。どのサーバーを選んでも、どこの誰とでもつながれます。</string>
<string name="signup_random_server_explain">利用中の言語に基づいてサーバーを自動選択することもできます。</string> <string name="signup_random_server_explain">利用中の言語に基づいてサーバーを自動選択することもできます。</string>
<string name="server_filter_any_language">すべての言語</string> <string name="server_filter_any_language">すべての言語</string>
<string name="server_filter_instant_signup">開放</string> <string name="server_filter_instant_signup">開放</string>

Some files were not shown because too many files have changed in this diff Show More