Compare commits
189 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ed8128fb72 | ||
|
|
b71e57a07e | ||
|
|
51405b2bae | ||
|
|
3bb4f80dc6 | ||
|
|
daac3c5b52 | ||
|
|
47f449000a | ||
|
|
65d1491df3 | ||
|
|
14b9d91645 | ||
|
|
9367eca556 | ||
|
|
2dee95b688 | ||
|
|
303c729a27 | ||
|
|
657761f432 | ||
|
|
60ac581838 | ||
|
|
55e704ca15 | ||
|
|
57dcab65f1 | ||
|
|
753dec4445 | ||
|
|
d0e6646cca | ||
|
|
59b5bbb60e | ||
|
|
3c19b5754b | ||
|
|
8cddeef1fe | ||
|
|
53b3943f10 | ||
|
|
f63c71dd8f | ||
|
|
2274ac642d | ||
|
|
e56cecd267 | ||
|
|
590f6ac797 | ||
|
|
24f8a1014c | ||
|
|
a9f2f49876 | ||
|
|
4602b77d43 | ||
|
|
65b6022a1e | ||
|
|
3fa77ad412 | ||
|
|
6b0a17ef2c | ||
|
|
e5a72b9699 | ||
|
|
50e32862be | ||
|
|
d58d07fd01 | ||
|
|
7fabb924b9 | ||
|
|
02d9f743c1 | ||
|
|
8af8214d4c | ||
|
|
70abeddcc6 | ||
|
|
c023f46172 | ||
|
|
142c6be4eb | ||
|
|
da3cb055c6 | ||
|
|
1fa2fbd9ba | ||
|
|
c79e85eda5 | ||
|
|
ea2474e5f8 | ||
|
|
c0b2e3a9fc | ||
|
|
82c6d99bb5 | ||
|
|
1412432d32 | ||
|
|
8e314146f2 | ||
|
|
9695a5a4de | ||
|
|
31d4ab18e2 | ||
|
|
005c07875d | ||
|
|
eb167bd217 | ||
|
|
fc86407eac | ||
|
|
1ec97650b0 | ||
|
|
dffbdfccc2 | ||
|
|
111b499b04 | ||
|
|
b71bbddf35 | ||
|
|
d4cb5f82e1 | ||
|
|
ab66dcaafb | ||
|
|
5e7bf73851 | ||
|
|
066b131d95 | ||
|
|
1caa17305e | ||
|
|
04f5f89cca | ||
|
|
1ee55a643e | ||
|
|
1fa726178f | ||
|
|
32f240188c | ||
|
|
a6af059671 | ||
|
|
007881f358 | ||
|
|
485f2821f2 | ||
|
|
2dcc622def | ||
|
|
1bbfe4507e | ||
|
|
6d43dfd255 | ||
|
|
c4f3b9f54d | ||
|
|
0064e4d6f4 | ||
|
|
fe1e6d0c46 | ||
|
|
40bb3777d4 | ||
|
|
162343bee8 | ||
|
|
733c18f6e2 | ||
|
|
10663b0a6f | ||
|
|
e8dca89de6 | ||
|
|
2923cf452f | ||
|
|
56b388700a | ||
|
|
0ec9632606 | ||
|
|
680e729541 | ||
|
|
f8ba72c242 | ||
|
|
fcfad690de | ||
|
|
1734501144 | ||
|
|
0904b82f4d | ||
|
|
8058a1fa56 | ||
|
|
1eafdc9ed1 | ||
|
|
65077dc7cc | ||
|
|
2764de76a5 | ||
|
|
4545c7ae0b | ||
|
|
1d458168e9 | ||
|
|
7c6fbe45fd | ||
|
|
4b408612fc | ||
|
|
f017ab078f | ||
|
|
6cb4292feb | ||
|
|
f509f1009f | ||
|
|
3d795a3474 | ||
|
|
b4fce77971 | ||
|
|
9f01164d18 | ||
|
|
85fd234f15 | ||
|
|
630e925c4c | ||
|
|
9063049d73 | ||
|
|
3d81084ef2 | ||
|
|
002efcf02f | ||
|
|
315955243a | ||
|
|
a191b38592 | ||
|
|
1b1eeb76e1 | ||
|
|
c6740f8a7e | ||
|
|
4b475b3680 | ||
|
|
3027a18c69 | ||
|
|
862cf42827 | ||
|
|
b795f2a3f5 | ||
|
|
429c543fd3 | ||
|
|
0eeeb7a4c8 | ||
|
|
09872ab1a9 | ||
|
|
9b02b8aa6a | ||
|
|
d1807b886b | ||
|
|
b5b4c1a760 | ||
|
|
e692caac0c | ||
|
|
d93cdec7a5 | ||
|
|
a487eeb235 | ||
|
|
4b0c13c64d | ||
|
|
1f65236c11 | ||
|
|
ca4a6f83fb | ||
|
|
5eb5a42465 | ||
|
|
17474d63f7 | ||
|
|
5c5e0feb75 | ||
|
|
b76783dc75 | ||
|
|
2f4568f59e | ||
|
|
4862ad8584 | ||
|
|
5caeb951b7 | ||
|
|
6fae00811e | ||
|
|
6e132ab8fb | ||
|
|
95b5020e06 | ||
|
|
a4cd77b1df | ||
|
|
345a051fdd | ||
|
|
840eea1980 | ||
|
|
abb6d4bcc4 | ||
|
|
b4329442b9 | ||
|
|
293f3766c6 | ||
|
|
f6bd184a90 | ||
|
|
d9e89e58a0 | ||
|
|
38d9483f06 | ||
|
|
525c8fa8d6 | ||
|
|
c9f54fb6cf | ||
|
|
6d2b391ba6 | ||
|
|
6785885ebb | ||
|
|
f399f33a41 | ||
|
|
9017cb42da | ||
|
|
c274864419 | ||
|
|
5c06b75a4d | ||
|
|
37f10f4db9 | ||
|
|
77c2e8d6ac | ||
|
|
54476fabdc | ||
|
|
43ae3aa090 | ||
|
|
fb050c5c20 | ||
|
|
90fd49dbf7 | ||
|
|
2331710263 | ||
|
|
287ddc388d | ||
|
|
ac8cbcdf39 | ||
|
|
a294ad43d3 | ||
|
|
07fe859e35 | ||
|
|
ad825d6803 | ||
|
|
94c864c8ac | ||
|
|
2e1f08a096 | ||
|
|
9276214433 | ||
|
|
957f3a2afd | ||
|
|
b57df8e175 | ||
|
|
94b6189f36 | ||
|
|
f267f68245 | ||
|
|
5fff86a0c2 | ||
|
|
c6ff84ce10 | ||
|
|
34ebd35fc0 | ||
|
|
19d0af01fd | ||
|
|
3928eee1df | ||
|
|
3a9be88ce6 | ||
|
|
ced762e420 | ||
|
|
25a3135de8 | ||
|
|
886ae789f4 | ||
|
|
4566edcc4e | ||
|
|
782ccf2633 | ||
|
|
91ed70f8ba | ||
|
|
3715a400c3 | ||
|
|
801dc9c842 | ||
|
|
7f62470b9e | ||
|
|
beb11bfb70 |
@@ -8,7 +8,7 @@ Learn more about this app in the [blog post](https://blog.joinmastodon.org/2022/
|
||||
|
||||
## Building
|
||||
|
||||
As this app is using Java 15 features, you need JDK 15 or newer to build it. Other than that, everything is pretty standard. You can either import the project into Android Studio and build it from there, or run the following command in the project directory:
|
||||
As this app is using Java 17 features, you need JDK 17 or newer to build it. Other than that, everything is pretty standard. You can either import the project into Android Studio and build it from there, or run the following command in the project directory:
|
||||
|
||||
```
|
||||
./gradlew assembleRelease
|
||||
|
||||
@@ -5,7 +5,7 @@ buildscript {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath "com.android.tools.build:gradle:7.0.4"
|
||||
classpath "com.android.tools.build:gradle:7.1.3"
|
||||
classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1"
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
|
||||
5
crowdin.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
files:
|
||||
- source: /mastodon/src/main/res/values/strings.xml
|
||||
translation: /mastodon/src/main/res/values-%android_code%/strings.xml
|
||||
- source: /fastlane/metadata/android/en-US/*.txt
|
||||
translation: /fastlane/metadata/android/%locale%/%original_file_name%
|
||||
16
fastlane/metadata/android/bs-BA/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon je največa decentralizovana socijalna mreža na internetu. Umjesto jednog websajta, ovo je netvork od nekoliko miliona korisnika na zasebnim platformama / zajednicama koje komuniciraju medjusobno i prenose podatke. Bez obzira čime se bavite, uvijek možete naći osobe sa slićnim interesima na Mastodonu!
|
||||
|
||||
Učlani se i napravi svoj profil. Potraži i prati osobe koje te zanimaju i gledaj njihove objave bez reklama. Izrazi svoja osjećanja odadtno koristeći smajlije, slike, GIF-ove, videa ili audio snimke. Limit je 500 znakova. Komentiraj ili prenesi objave na svoj profil od bilo koga ako vam se dopada sadrzaj. Potraži nove osobe ili popularne haštagove da obogatiš svoj netvork.
|
||||
|
||||
Mastodon je gradjen sa ciljem za bolju sigurnost i privatnost. Odluči da li objavljuješ nešto javno, samo prijateljima, samo osobama koje spomeneš ili cijelom svijetu. Napomene o osjetljivom sadrzaju vas obavjestavaju i pitaju za odobrenje ako zelite da ih vidite. Svaka platforma / zajednica ima svoja zasebna pravila koristenja i moderatore koji cuvaju platformu sigurnom,. Uz to imate opcije za blokadu bilo koga ili bilo cega sto vam se ne svidja.
|
||||
|
||||
Vise opcija:
|
||||
|
||||
Tamna pozadina: Citajte objave u svijetloj, tamnoj ili crnoj varijanti
|
||||
Ankete: Pitajte pratioce za njihova misljenja i ocijene glasanjem
|
||||
Izvidi: Hastagovi i korisnici su vam samo jedan klik udaljeni
|
||||
Obavijesti: Primajte obavijesti o novim pratiocima, komentarima ili re-objavama
|
||||
Dijeljenje: Objavljujte na Mastodonu sa bilo koje kompatibilne aplikacije
|
||||
Ljepota: Nasa maskota je slon i vidjet cete ga s vremena na vrijeme
|
||||
|
||||
Mastodon je registrovan kao neprofitabilan i dalje finansiranje razvijanja direkntno zavisi od donacija. Nema reklamnog sadrzaja, nema monetizacije. Sve je besplatno i tako treba i da ostane.
|
||||
1
fastlane/metadata/android/bs-BA/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralizovana socijalna mreža
|
||||
1
fastlane/metadata/android/bs-BA/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/ca-ES/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon és la xarxa social descentralitzada més gran d'Internet. En lloc d'un únic lloc web, és una xarxa de milions d'usuaris en comunitats independents que poden interactuar entre ells sense problemes. No importa quines siguin la teva afició, pots conèixer gent apassionada que publica sobre ella a Mastodon!
|
||||
|
||||
Uneix-te a una comunitat i crea el teu perfil. Troba i segueix gent fascinant i llegeix les seves publicacions en una línia de temps cronològica sense anuncis. Expressa't amb emojis, imatges, GIF, vídeos i àudio personalitzats en publicacions de 500 caràcters. Respon als fils i impulsa les publicacions de qualsevol persona per compartir coses fantàstiques. Troba nous comptes per seguir i etiquetes en tendència per ampliar la teva xarxa.
|
||||
|
||||
Mastodon està construït amb un enfocament en la privadesa i la seguretat. Decideix si les teves publicacions es comparteixen amb els teus seguidors, només amb les persones que esmentes o amb tot el món. Els advertiments de contingut et permeten amagar publicacions que continguin material sensible o amagar-les fins que estiguis llest per consultar-les. Cada comunitat té les seves pròpies directrius i moderadors per mantenir els seus membres segurs, i les eines de bloqueig i informació robustes ajuden a prevenir l'abús.
|
||||
|
||||
Més funcionalitats:
|
||||
|
||||
• Mode fosc: Llegir entrades en mode clar, fosc o veritablement negre
|
||||
• Enquestes: Pregunta als teus seguidors la seva opinió i compta els vots
|
||||
• Explora: Etiquetes en tendència i comptes són a un sol toc
|
||||
• Notificacions: Rep notificacions sobre nous seguidors, respostes i impulsos
|
||||
• Compartir: Publica directament a Mastodon des de qualsevol full compartit de qualsevol aplicació
|
||||
• Tendresa: La nostra mascota és un elefant adorable i veuràs que apareix de tant en tant
|
||||
|
||||
Mastodon és una organització sense ànim de lucre registrada i el desenvolupament se sosté directament amb les teves donacions. No hi ha publicitat, cap monetització i cap capital de risc, i planegem mantenir-ho així.
|
||||
1
fastlane/metadata/android/ca-ES/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Xarxa social descentralitzada
|
||||
1
fastlane/metadata/android/ca-ES/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/de-DE/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon ist das größte dezentralisierte soziale Netzwerk im Internet. Statt einer einzigen Website ist es ein Netzwerk von Millionen von Benutzer*innen in unabhängigen Gemeinschaften, die alle miteinander interagieren können. Egal was dich interessiert, auf Mastodon kannst du interessierte Leute treffen, die darüber schreiben!
|
||||
|
||||
Trete einer Gemeinschaft bei und erstelle dein Profil. Finde und verfolge faszinierende Leute und lese ihre Beiträge in einer werbefreien, chronologischen Zeitachse. Drücke dich mit benutzerdefinierten Emojis, Bilderns, GIFs, Videos und Audio in 500-Zeichen Beiträgen aus. Antworte auf Threads und teile Beiträge von anderen um großartige Sachen zu verbreiten. Finde neue Accounts zum Folgen und angesagte Hashtags, um dein Netzwerk zu erweitern.
|
||||
|
||||
Mastodon wurde mit einem Schwerpunkt auf Privatsphäre und Sicherheit gebaut. Entscheide, ob du deine Beiträge mit deinen Followern, nur mit den Menschen, die du erwähnst, oder mit der ganzen Welt teilen möchtest. Mit Inhaltswarnungen kannst du Beiträge mit sensiblem oder triggerndem Inhalt ausblenden, bis du bereit bist, dich damit auseinanderzusetzen. Jede Gemeinschaft hat ihre eigenen Regeln und Moderator*innen, um die Sicherheit ihrer Mitglieder zu gewährleisten, sowie robuste Sperr- und Meldewerkzeuge um Missbrauch vorzubeugen.
|
||||
|
||||
Weitere Funktionen:
|
||||
|
||||
• Dunkler Modus: Beiträge im hellen, dunklen oder schwarzen Modus lesen
|
||||
• Umfragen: Frage deine Follower nach ihrer Meinung und zähle die Stimmen
|
||||
• Entdecken: Trending Hashtags und Accounts sind nur einen Fingertipp entfernt
|
||||
• Benachrichtigungen: Erhalte Benachrichtigungen über neue Follower, Antworten und geteilte Beiträge
|
||||
• Teilen: Veröffentliche auf Mastodon aus jeder beliebigen anderen App
|
||||
• Niedlichkeit: Unser Maskottchen ist ein entzückender Elefant und du wirst ihn von Zeit zu Zeit auftauchen sehen
|
||||
|
||||
Mastodon ist eine eingetragene gemeinnützige Organisation und die Entwicklung wird direkt durch deine Spenden unterstützt. Es gibt keine Werbung, keine Monetisierung und kein Venture-Capital, und wir planen es so zu erhalten.
|
||||
1
fastlane/metadata/android/de-DE/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Dezentrales soziales Netzwerk
|
||||
1
fastlane/metadata/android/de-DE/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/el-GR/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/el-GR/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/el-GR/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/en-US/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
BIN
fastlane/metadata/android/en-US/images/featureGraphic.png
Normal file
|
After Width: | Height: | Size: 377 KiB |
BIN
fastlane/metadata/android/en-US/images/icon.png
Normal file
|
After Width: | Height: | Size: 213 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
Normal file
|
After Width: | Height: | Size: 844 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/5.png
Normal file
|
After Width: | Height: | Size: 776 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/6.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/7.png
Normal file
|
After Width: | Height: | Size: 790 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/8.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
1
fastlane/metadata/android/en-US/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/en-US/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/es-ES/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon es la red social descentralizada más grande de internet. En lugar de ser una sola web, es una red de millones de usuarios en comunidades independientes que pueden interactuar entre ellas de forma transparente. No importa qué es lo que hagas, podrás encontrar gente apasionada escribiendo sobre ello en Mastodon!
|
||||
|
||||
Únete a una comunidad y crea tu perfil. Encuentra y sigue a gente fascinante y lee sus publicaciones sin anuncios y de forma cronológica. Exprésate con emoticonos personalizados, imágenes, GIFs, vídeos y audio en publicaciónes de 500 caracteres. Responde a hilos e impulsa publicaciones de cualquiera para compartir contenido genial. Encuentra nuevas cuentas para seguir y los hashtags de actualidad para expandir tu red.
|
||||
|
||||
Mastodon está construída con un enfoque en la privacidad y la seguridad. Decide si tus publicaciones se comparten con tus seguidores, solo a la gente que menciones, o a todo el mundo. Las advertencias de contenido te permiten esconder publicaciones con contenido sensible o limitarlas de tu visión hasta que estés listo para interactuar con ellas. Cada comunidad tiene sus propias reglas y moderadores para mantener a salvo a sus miembros, además de herramientas robustas para bloquear y reportar contenido para prevenir el abuso.
|
||||
|
||||
Más características:
|
||||
|
||||
• Modo oscuro: Lee las publicaciones en modo claro, oscuro o negro real
|
||||
• Encuestas: Pide opinión a tus seguidores y cuenta los votos
|
||||
• Explora: Hashtags y cuentas en tendencia a un solo toque
|
||||
• Notificaciones: Recibe notificaciones sobre nuevos seguidores, respuestas e impulsos
|
||||
• Compartir: Publica directamente a Mastodon desde cualquier hoja de acción en cualquier aplicación
|
||||
• Preciosidad: Nuestra mascota es un elefante adorable, y verás que aparece de vez en cuando
|
||||
|
||||
Mastodon es una organización sin ánimo de lucro registrada y su desarrollo se financia directamente con tus donaciones. No hay publicidad, ni monetización, ni capital de riesgo, y tenemos previsto mantenerlo así.
|
||||
1
fastlane/metadata/android/es-ES/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Red social descentralizada
|
||||
1
fastlane/metadata/android/es-ES/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/eu-ES/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon Interneteko sare sozial deszentralizatu handiena da. Webgune bakar bat izan ordez, beren artean elkarreragin dezaketen komunitate independenteetako milioika erabiltzailek osatutako sarea da. Zure interesak direnak direla ere, jende interesgarria aurkituko duzu Mastodonen!
|
||||
|
||||
Batu komunitate batera eta sortu zure profila. Bilatu eta jarraitu jende zoragarria eta irakurri beren bidalketak, publizitaterik gabeko denbora-lerro kronologikoan. Adierazi nahi duzuna 500 karaktereko bidalketetan emoji pertsonalizatuak, irudiak, GIFak, bideoak eta audioak erabiliz. Erantzun edozeinen hariak eta eman bultzada bidalketei edukiak partekatzeko. Bilatu jarraitzeko kontu berriak eta traolen joerak zure sarea zabaltzeko.
|
||||
|
||||
Mastodon pribatutasunean eta segurtasunean arreta jarriz eraikia dago. Erabaki zure bidalketak norekin partekatu: zure jarraitzaileekin, aipatzen dituzunekin edo mundu osoarekin. Edukiaren abisuek aukera ematen dute eduki sentibera edo zuregan eragina izan dezaketen bidalketak zuk erabaki arte ezkutatzeko. Komunitate bakoitzak bere gidalerro eta moderatzaileak ditu, bertako kideak seguru mantentzeko. Baita blokeatzeko eta salatzeko tresna sendoak ere abusuak galarazteko.
|
||||
|
||||
Ezaugarri gehiago:
|
||||
|
||||
• Modu iluna: Irakurri bidalketak modu argi, ilun edo benetako beltzean
|
||||
• Inkestak: Galdetu jarraitzaileei beren iritzia eta zenbatu botoak
|
||||
• Esploratu: Traolen joerak eta kontuak erraz aurkitu
|
||||
• Jakinarazpenak: Jarraitzaile berrien, erantzunen edo bultzaden berri jaso
|
||||
• Partekatzea: Argitaratu zuzenean Mastodonen edozein aplikaziotako partekatze-orritik
|
||||
• Edertasuna: Gure maskota elefante maitagarri bat da eta tarteka agertuko zaizu
|
||||
|
||||
Mastodon erregistratutako irabazi asmorik gabeko elkartea da eta zure dohaintzen bidez babesten da garapena. Ez dago iragarkirik, irabazi asmorik eta inbertsio kapitalik, eta horrela jarraitzeko asmoa dugu.
|
||||
1
fastlane/metadata/android/eu-ES/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Sare sozial deszentralizatua
|
||||
1
fastlane/metadata/android/eu-ES/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/fr-FR/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/fr-FR/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/fr-FR/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/gl-ES/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon é a rede social descentralizada máis grande de internet. Non é unha soa web, é unha rede de millóns de persoas en comunidades independentes que poden interactuar entre elas, sen problema. Sexan cales fosen os teus intereses, podes atopar persoas comentando ese tema en Mastodon!
|
||||
|
||||
Únete a unha comunidade e crea un perfil. Atopa e segue a persoas interesantes e lé o que publican, nunha cronoloxía limpa de publicidade e ordenada. Exprésate usando emojis personalizados, imaxes, GIFs, vídeos e audio con publicacións de 500 caracteres. Responde aos fíos e promove publicacións doutras persoas que creas relevantes. Atopa novas contas e segue os cancelos en voga para facer medrar a túa rede.
|
||||
|
||||
Mastodon está creado pensando na privacidade e seguridade. Decide con quen compartes as túas publicacións, só coas seguidoras ou persoas que mencionas, ou con todo o mundo. Os avisos sobre o contido permiten agochar contido sensible ou material que podería crear ansiedade ata que estás preparada para velo. Cada comunidade ten as súas normas e a moderación coida da seguridade das persoas da instancia, con ferramentas para denunciar e bloquear e así evitar abusos.
|
||||
|
||||
Máis características:
|
||||
|
||||
• Modo Escuro: ler publicacións en modo claro, escuro ou negro total
|
||||
• Enquisas: pregúntalle ás seguidoras a súa opinión e recolle os votos
|
||||
• Explorar: Cancelos e contas en voga fácilmente accesibles
|
||||
• Notificacións: recibe notificacións sobre seguimentos, respostas e promocións
|
||||
• Compartir: publica directamente en Mastodon desde o menú de calquera app
|
||||
• Fermosiña: A nosa mascota é un elefante moi feitiño, que verás a miúdo por aquí
|
||||
|
||||
Mastodon é unha organización rexistrada sen ánimo de lucro cuxo desenvolvemento está financiado por doazóns. Non hai publicidade, nen monetización, sen inversións de capital risco, e pretendemos seguir así.
|
||||
1
fastlane/metadata/android/gl-ES/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Rede social descentralizada
|
||||
1
fastlane/metadata/android/gl-ES/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/he-IL/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/he-IL/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/he-IL/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/hr-HR/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/hr-HR/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/hr-HR/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/it-IT/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon è il più grande social network decentralizzato su Internet. Invece di un singolo sito web, è una rete di milioni di utenti in comunità indipendenti che possono interagire tra loro, senza soluzione di continuità. Non importa cosa ti piaccia, puoi incontrare persone appassionate pubblicando a riguardo su Mastodon!
|
||||
|
||||
Unisciti a una comunità e crea il tuo profilo. Trova e segui persone affascinanti e leggi i loro messaggi in una timeline cronologica senza pubblicità. Esprimiti con emoji personalizzate, immagini, GIF, filmati e audio in 500 caratteri. Rispondi a thread e post condivisi da chiunque per condividere grandi cose. Trova nuovi account da seguire e hashtags in tendenza per espandere la tua rete.
|
||||
|
||||
Mastodon è costruito con attenzione sulla privacy e sulla sicurezza. Decidi se i tuoi post saranno visibili solo ai tuoi seguaci, alle persone che menzioni o al mondo intero. Gli avvertimenti sul contenuto ti permettono di nascondere i post contenenti materiale sensibile o provocatorio fino a quando non sarai pronto a interagire con loro. Ogni comunità ha le proprie linee guida e moderatori per mantenere i propri membri sicuri. Robusti strumenti di blocco e segnalazione aiutano a prevenire gli abusi.
|
||||
|
||||
Altre caratteristiche:
|
||||
|
||||
• Modalità Scura: Leggi i post in modo chiaro, scuro o in nero
|
||||
• Sondaggi: Chiedi ai seguaci il loro parere e conteggia i voti
|
||||
• Esplora: hashtags di tendenza e account sono a portata di tocco
|
||||
• Notifiche: Ricevi una notifica su nuovi seguaci, risposte e condivisioni
|
||||
• Condivisione: Pubblica direttamente su Mastodon da qualsiasi foglio di condivisione in qualsiasi app
|
||||
• Bellezza: La nostra mascotte è un elefante adorabile, e lo vedrete apparire di tanto in tanto
|
||||
|
||||
Mastodon è una no-profit registrata e lo sviluppo è supportato direttamente dalle vostre donazioni. Non c'è pubblicità, monetizzazione e capitale di rischio, e abbiamo intenzione di mantenerlo in quel modo.
|
||||
1
fastlane/metadata/android/it-IT/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Social network decentralizzato
|
||||
1
fastlane/metadata/android/it-IT/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/ja-JP/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/ja-JP/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/ja-JP/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/ko-KR/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/ko-KR/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/ko-KR/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/oc-FR/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/oc-FR/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/oc-FR/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/pl-PL/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon to największa zdecentralizowana sieć społecznościowa w Internecie. Zamiast jednej strony internetowej, jest to sieć milionów użytkowników w niezależnych społecznościach, które mogą ze sobą wchodzić w interakcje. Niezależnie od swoich zainteresowań, momżesz poznać interesujących ludzi piszących o nich na Mastodonie!
|
||||
|
||||
Dołącz do społeczności i utwórz swój profil. Poznaj i obserwuj fascynujących ludzi i czytaj ich wpisy w chronologicznym osi czasu. Wyrażaj siebie za pomocą niestandardowych emoji, obrazów, GIFów, filmów i audio w 500-znakowych wpisach. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
Więcej funkcji:
|
||||
|
||||
• Tryb ciemny: Czytaj wpisy w jasnym, ciemnym lub czarnym trybie
|
||||
• Ankiety: Poproś obserwujących o ich opinię i poznaj ich głosy
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Powiadomienia: Otrzymuj powiadomienia o nowych obserwacjach, odpowiedziach i udostępnieniach
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/pl-PL/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Zdecentralizowana sieć społecznościowa
|
||||
1
fastlane/metadata/android/pl-PL/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/pt-BR/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/pt-BR/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/pt-BR/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/pt-PT/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/pt-PT/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/pt-PT/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/ru-RU/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/ru-RU/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Распределённая социальная сеть
|
||||
1
fastlane/metadata/android/ru-RU/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/sv-SE/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/sv-SE/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/sv-SE/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/tr-TR/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/tr-TR/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/tr-TR/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/uk-UA/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/uk-UA/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/uk-UA/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/vi-VN/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon là mạng xã hội liên hợp lớn nhất trên internet. Thay vì một trang web duy nhất, nó là một mạng lưới hàng triệu người dùng trong các cộng đồng độc lập, tất cả đều có thể tương tác với nhau một cách liền mạch. Bất kể bạn thích gì, bạn đều có thể gặp gỡ những người đăng tút về nó trên Mastodon!
|
||||
|
||||
Tham gia một cộng đồng và tạo trang hồ sơ của bạn. Tìm, theo dõi những người thú vị và đọc tút của họ theo trình tự thời gian, không có quảng cáo. Thể hiện bản thân bằng emoji, hình ảnh, GIF, video và âm thanh trong tút tối đa 500 ký tự. Trả lời tút và đăng lại tút từ bất kỳ ai để chia sẻ những điều tuyệt vời. Tìm những người dùng mới để theo dõi và các hashtag xu hướng để mở rộng mạng lưới của bạn.
|
||||
|
||||
Mastodon được xây dựng tập trung vào sự riêng tư và an toàn. Quyết định xem tút của bạn được chia sẻ với những người theo dõi, chỉ những người bạn nhắc đến hay cả thế giới. Nội dung ẩn cho phép bạn ẩn các tút chứa nội dung nhạy cảm hoặc chơi chữ cho đến khi bạn sẵn sàng tương tác với chúng. Mỗi cộng đồng có các nguyên tắc riêng và kiểm duyệt viên riêng để giữ an toàn cho các thành viên, song song với các công cụ chặn và báo cáo mạnh mẽ giúp ngăn chặn hành vi bậy.
|
||||
|
||||
Tính năng khác:
|
||||
|
||||
• Chế độ Tối: Đọc tút ở chế độ sáng, tối hoặc đen
|
||||
• Bình chọn: Hỏi cộng đồng về ý kiến của họ và đếm lượt bình chọn
|
||||
• Khám phá: Xem hashtag xu hướng và tài khoản chỉ bằng một nhấn
|
||||
• Thông báo: Nhận thông báo về người theo dõi, lượt trả lời và đăng lại mới
|
||||
• Chia sẻ: Đăng trực tiếp lên Mastodon từ bất kỳ ứng dụng nào
|
||||
• Đáng yêu: Linh vật của chúng tôi là một chú voi ma mút và bạn sẽ thấy anh ấy thỉnh thoảng xuất hiện
|
||||
|
||||
Mastodon là một tổ chức phi lợi nhuận đã đăng ký và được hỗ trợ trực tiếp bởi các khoản đóng góp của bạn. Không có quảng cáo, không kiếm tiền và không có vốn đầu tư mạo hiểm và chúng tôi dự định sẽ giữ nguyên như vậy.
|
||||
1
fastlane/metadata/android/vi-VN/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mạng xã hội liên hợp
|
||||
1
fastlane/metadata/android/vi-VN/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/zh-CN/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/zh-CN/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/zh-CN/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
16
fastlane/metadata/android/zh-TW/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mastodon is the largest decentralized social network on the internet. Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
More features:
|
||||
|
||||
• Dark Mode: Read posts in light, dark, or true black mode
|
||||
• Polls: Ask followers for their opinion and tally the votes
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
1
fastlane/metadata/android/zh-TW/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Decentralized social network
|
||||
1
fastlane/metadata/android/zh-TW/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Mastodon
|
||||
@@ -5,13 +5,12 @@ plugins {
|
||||
|
||||
android {
|
||||
compileSdk 31
|
||||
buildToolsVersion "33.0.0-rc1"
|
||||
defaultConfig {
|
||||
applicationId "org.joinmastodon.android"
|
||||
minSdk 23
|
||||
targetSdk 31
|
||||
versionCode 27
|
||||
versionName "1.0"
|
||||
versionCode 30
|
||||
versionName "1.0.1"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
@@ -36,8 +35,8 @@ android {
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_15
|
||||
targetCompatibility JavaVersion.VERSION_15
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
targetCompatibility JavaVersion.VERSION_17
|
||||
coreLibraryDesugaringEnabled true
|
||||
}
|
||||
sourceSets{
|
||||
@@ -59,7 +58,7 @@ dependencies {
|
||||
implementation 'me.grishka.litex:dynamicanimation:1.1.0-alpha03'
|
||||
implementation 'me.grishka.litex:viewpager:1.0.0'
|
||||
implementation 'me.grishka.litex:viewpager2:1.0.0'
|
||||
implementation 'me.grishka.appkit:appkit:1.2'
|
||||
implementation 'me.grishka.appkit:appkit:1.2.2'
|
||||
implementation 'com.google.code.gson:gson:2.8.9'
|
||||
implementation 'org.jsoup:jsoup:1.14.3'
|
||||
implementation 'com.squareup:otto:1.3.8'
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
|
||||
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
|
||||
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@ public class PushNotificationReceiver extends BroadcastReceiver{
|
||||
.setContentText(pn.body)
|
||||
.setStyle(new Notification.BigTextStyle().bigText(pn.body))
|
||||
.setSmallIcon(R.drawable.ic_ntf_logo)
|
||||
.setContentIntent(PendingIntent.getActivity(context, accountID.hashCode() & 0xFFFF, contentIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_CANCEL_CURRENT))
|
||||
.setContentIntent(PendingIntent.getActivity(context, accountID.hashCode() & 0xFFFF, contentIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT))
|
||||
.setWhen(notification==null ? System.currentTimeMillis() : notification.createdAt.toEpochMilli())
|
||||
.setShowWhen(true)
|
||||
.setCategory(Notification.CATEGORY_SOCIAL)
|
||||
|
||||
@@ -195,6 +195,9 @@ public class CacheController{
|
||||
db.delete(table, null, null);
|
||||
ContentValues values=new ContentValues(3);
|
||||
for(Notification n:notifications){
|
||||
if(n.type==null){
|
||||
continue;
|
||||
}
|
||||
values.put("id", n.id);
|
||||
values.put("json", MastodonAPIController.gson.toJson(n));
|
||||
values.put("type", n.type.ordinal());
|
||||
|
||||
@@ -96,10 +96,12 @@ public class PushSubscriptionManager{
|
||||
|
||||
public static void tryRegisterFCM(){
|
||||
deviceToken=getPrefs().getString("deviceToken", null);
|
||||
if(!TextUtils.isEmpty(deviceToken)){
|
||||
registerAllAccountsForPush();
|
||||
int tokenVersion=getPrefs().getInt("version", 0);
|
||||
if(!TextUtils.isEmpty(deviceToken) && tokenVersion==BuildConfig.VERSION_CODE){
|
||||
registerAllAccountsForPush(false);
|
||||
return;
|
||||
}
|
||||
Log.i(TAG, "tryRegisterFCM: no token found or app was updated. Trying to get push token...");
|
||||
Intent intent = new Intent("com.google.iid.TOKEN_REQUEST");
|
||||
intent.setPackage(GSF_PACKAGE);
|
||||
intent.putExtra(EXTRA_APPLICATION_PENDING_INTENT,
|
||||
@@ -354,9 +356,9 @@ public class PushSubscriptionManager{
|
||||
return info.toByteArray();
|
||||
}
|
||||
|
||||
private static void registerAllAccountsForPush(){
|
||||
private static void registerAllAccountsForPush(boolean forceReRegister){
|
||||
for(AccountSession session:AccountSessionManager.getInstance().getLoggedInAccounts()){
|
||||
if(session.pushSubscription==null)
|
||||
if(session.pushSubscription==null || forceReRegister)
|
||||
session.getPushSubscriptionManager().registerAccountForPush();
|
||||
else if(session.needUpdatePushSettings)
|
||||
session.getPushSubscriptionManager().updatePushSettings(session.pushSubscription);
|
||||
@@ -371,9 +373,9 @@ public class PushSubscriptionManager{
|
||||
deviceToken=intent.getStringExtra("registration_id");
|
||||
if(deviceToken.startsWith(KID_VALUE))
|
||||
deviceToken=deviceToken.substring(KID_VALUE.length()+1);
|
||||
getPrefs().edit().putString("deviceToken", deviceToken).apply();
|
||||
getPrefs().edit().putString("deviceToken", deviceToken).putInt("version", BuildConfig.VERSION_CODE).apply();
|
||||
Log.i(TAG, "Successfully registered for FCM");
|
||||
registerAllAccountsForPush();
|
||||
registerAllAccountsForPush(true);
|
||||
}else{
|
||||
Log.e(TAG, "FCM registration intent did not contain registration_id: "+intent);
|
||||
Bundle extras=intent.getExtras();
|
||||
|
||||
@@ -51,6 +51,8 @@ public class AccountTimelineFragment extends StatusListFragment{
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(List<Status> result){
|
||||
if(getActivity()==null)
|
||||
return;
|
||||
onDataLoaded(result, !result.isEmpty());
|
||||
}
|
||||
})
|
||||
|
||||
@@ -150,9 +150,12 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
UsableRecyclerView list=(UsableRecyclerView) this.list;
|
||||
for(int i=0; i<list.getChildCount(); i++){
|
||||
RecyclerView.ViewHolder holder=list.getChildViewHolder(list.getChildAt(i));
|
||||
if(holder instanceof ImageLoaderViewHolder){
|
||||
for(int j=0; j<list.getImageCountForItem(holder.getAbsoluteAdapterPosition()); j++){
|
||||
((ImageLoaderViewHolder) holder).clearImage(j);
|
||||
if(holder instanceof ImageLoaderViewHolder ivh){
|
||||
int pos=holder.getAbsoluteAdapterPosition();
|
||||
if(pos<0)
|
||||
continue;
|
||||
for(int j=0;j<list.getImageCountForItem(pos);j++){
|
||||
ivh.clearImage(j);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -169,18 +172,18 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
public void openPhotoViewer(String parentID, Status _status, int attachmentIndex){
|
||||
final Status status=_status.reblog!=null ? _status.reblog : _status;
|
||||
currentPhotoViewer=new PhotoViewer(getActivity(), status.mediaAttachments, attachmentIndex, new PhotoViewer.Listener(){
|
||||
private ImageStatusDisplayItem.Holder transitioningHolder;
|
||||
private ImageStatusDisplayItem.Holder<?> transitioningHolder;
|
||||
|
||||
@Override
|
||||
public void setPhotoViewVisibility(int index, boolean visible){
|
||||
ImageStatusDisplayItem.Holder holder=findPhotoViewHolder(index);
|
||||
ImageStatusDisplayItem.Holder<?> holder=findPhotoViewHolder(index);
|
||||
if(holder!=null)
|
||||
holder.photo.setAlpha(visible ? 1f : 0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startPhotoViewTransition(int index, @NonNull Rect outRect, @NonNull int[] outCornerRadius){
|
||||
ImageStatusDisplayItem.Holder holder=findPhotoViewHolder(index);
|
||||
ImageStatusDisplayItem.Holder<?> holder=findPhotoViewHolder(index);
|
||||
if(holder!=null){
|
||||
transitioningHolder=holder;
|
||||
View view=transitioningHolder.photo;
|
||||
@@ -223,7 +226,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
|
||||
@Override
|
||||
public Drawable getPhotoViewCurrentDrawable(int index){
|
||||
ImageStatusDisplayItem.Holder holder=findPhotoViewHolder(index);
|
||||
ImageStatusDisplayItem.Holder<?> holder=findPhotoViewHolder(index);
|
||||
if(holder!=null)
|
||||
return holder.photo.getDrawable();
|
||||
return null;
|
||||
@@ -234,14 +237,19 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
currentPhotoViewer=null;
|
||||
}
|
||||
|
||||
private ImageStatusDisplayItem.Holder findPhotoViewHolder(int index){
|
||||
@Override
|
||||
public void onRequestPermissions(String[] permissions){
|
||||
requestPermissions(permissions, PhotoViewer.PERMISSION_REQUEST);
|
||||
}
|
||||
|
||||
private ImageStatusDisplayItem.Holder<?> findPhotoViewHolder(int index){
|
||||
int offset=0;
|
||||
for(StatusDisplayItem item:displayItems){
|
||||
if(item.parentID.equals(parentID)){
|
||||
if(item instanceof ImageStatusDisplayItem){
|
||||
RecyclerView.ViewHolder holder=list.findViewHolderForAdapterPosition(getMainAdapterOffset()+offset+index);
|
||||
if(holder instanceof ImageStatusDisplayItem.Holder){
|
||||
return (ImageStatusDisplayItem.Holder) holder;
|
||||
if(holder instanceof ImageStatusDisplayItem.Holder<?> imgHolder){
|
||||
return imgHolder;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -303,9 +311,9 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
position-=getMainAdapterOffset();
|
||||
if(position>=0 && position<displayItems.size()){
|
||||
StatusDisplayItem item=displayItems.get(position);
|
||||
if(item instanceof ImageStatusDisplayItem){
|
||||
PhotoLayoutHelper.TiledLayoutResult layout=((ImageStatusDisplayItem) item).tiledLayout;
|
||||
PhotoLayoutHelper.TiledLayoutResult.Tile tile=((ImageStatusDisplayItem) item).thisTile;
|
||||
if(item instanceof ImageStatusDisplayItem imgItem){
|
||||
PhotoLayoutHelper.TiledLayoutResult layout=imgItem.tiledLayout;
|
||||
PhotoLayoutHelper.TiledLayoutResult.Tile tile=imgItem.thisTile;
|
||||
int spans=0;
|
||||
for(int i=0;i<tile.colSpan;i++){
|
||||
spans+=layout.columnSizes[tile.startCol+i];
|
||||
@@ -323,7 +331,6 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
public void onConfigurationChanged(Configuration newConfig){
|
||||
super.onConfigurationChanged(newConfig);
|
||||
updateToolbar();
|
||||
list.invalidateItemDecorations();
|
||||
}
|
||||
|
||||
private void updateToolbar(){
|
||||
@@ -331,6 +338,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
if(toolbar==null)
|
||||
return;
|
||||
toolbar.setOnClickListener(v->scrollToTop());
|
||||
toolbar.setNavigationContentDescription(R.string.back);
|
||||
}
|
||||
|
||||
protected int getMainAdapterOffset(){
|
||||
@@ -390,8 +398,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
}
|
||||
for(int i=0;i<list.getChildCount();i++){
|
||||
RecyclerView.ViewHolder vh=list.getChildViewHolder(list.getChildAt(i));
|
||||
if(vh instanceof PollFooterStatusDisplayItem.Holder){
|
||||
PollFooterStatusDisplayItem.Holder footer=(PollFooterStatusDisplayItem.Holder) vh;
|
||||
if(vh instanceof PollFooterStatusDisplayItem.Holder footer){
|
||||
if(footer.getItemID().equals(holder.getItemID())){
|
||||
footer.rebind();
|
||||
break;
|
||||
@@ -513,7 +520,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
protected <I extends StatusDisplayItem, H extends StatusDisplayItem.Holder<I>> H findHolderOfType(String id, Class<H> type){
|
||||
for(int i=0;i<list.getChildCount();i++){
|
||||
RecyclerView.ViewHolder holder=list.getChildViewHolder(list.getChildAt(i));
|
||||
if(holder instanceof StatusDisplayItem.Holder && ((StatusDisplayItem.Holder<?>) holder).getItemID().equals(id) && type.isInstance(holder))
|
||||
if(holder instanceof StatusDisplayItem.Holder<?> itemHolder && itemHolder.getItemID().equals(id) && type.isInstance(holder))
|
||||
return type.cast(holder);
|
||||
}
|
||||
return null;
|
||||
@@ -523,7 +530,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
ArrayList<H> holders=new ArrayList<>();
|
||||
for(int i=0;i<list.getChildCount();i++){
|
||||
RecyclerView.ViewHolder holder=list.getChildViewHolder(list.getChildAt(i));
|
||||
if(holder instanceof StatusDisplayItem.Holder && ((StatusDisplayItem.Holder<?>) holder).getItemID().equals(id) && type.isInstance(holder))
|
||||
if(holder instanceof StatusDisplayItem.Holder<?> itemHolder && itemHolder.getItemID().equals(id) && type.isInstance(holder))
|
||||
holders.add(type.cast(holder));
|
||||
}
|
||||
return holders;
|
||||
@@ -562,6 +569,20 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
super.onApplyWindowInsets(insets);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){
|
||||
if(requestCode==PhotoViewer.PERMISSION_REQUEST && currentPhotoViewer!=null){
|
||||
currentPhotoViewer.onRequestPermissionsResult(permissions, grantResults);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause(){
|
||||
super.onPause();
|
||||
if(currentPhotoViewer!=null)
|
||||
currentPhotoViewer.onPause();
|
||||
}
|
||||
|
||||
protected class DisplayItemsAdapter extends UsableRecyclerView.Adapter<BindableViewHolder<StatusDisplayItem>> implements ImageLoaderRecyclerAdapter{
|
||||
|
||||
public DisplayItemsAdapter(){
|
||||
@@ -597,8 +618,6 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
|
||||
@Override
|
||||
public ImageLoaderRequest getImageRequest(int position, int image){
|
||||
if(position>=displayItems.size()) // TODO fix this in the image loader, these crashes are driving me crazy
|
||||
return null;
|
||||
return displayItems.get(position).getImageRequest(image);
|
||||
}
|
||||
|
||||
@@ -644,8 +663,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
for(int i=0;i<parent.getChildCount();i++){
|
||||
View child=parent.getChildAt(i);
|
||||
RecyclerView.ViewHolder holder=parent.getChildViewHolder(child);
|
||||
if(holder instanceof ImageStatusDisplayItem.Holder){
|
||||
ImageStatusDisplayItem.Holder<?> imgHolder=(ImageStatusDisplayItem.Holder<?>) holder;
|
||||
if(holder instanceof ImageStatusDisplayItem.Holder<?> imgHolder){
|
||||
if(!imgHolder.getItem().status.spoilerRevealed && TextUtils.isEmpty(imgHolder.getItem().status.spoilerText)){
|
||||
hiddenMediaPaint.setColor(0x80000000);
|
||||
PhotoLayoutHelper.TiledLayoutResult.Tile tile=imgHolder.getItem().thisTile;
|
||||
@@ -658,8 +676,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
for(int i=0;i<parent.getChildCount();i++){
|
||||
View child=parent.getChildAt(i);
|
||||
RecyclerView.ViewHolder holder=parent.getChildViewHolder(child);
|
||||
if(holder instanceof ImageStatusDisplayItem.Holder){
|
||||
ImageStatusDisplayItem.Holder<?> imgHolder=(ImageStatusDisplayItem.Holder<?>) holder;
|
||||
if(holder instanceof ImageStatusDisplayItem.Holder<?> imgHolder){
|
||||
if(!imgHolder.getItem().status.spoilerRevealed){
|
||||
PhotoLayoutHelper.TiledLayoutResult.Tile tile=imgHolder.getItem().thisTile;
|
||||
if(tile.startCol==0 && tile.startRow==0 && TextUtils.isEmpty(imgHolder.getItem().status.spoilerText)){
|
||||
@@ -731,6 +748,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||
}
|
||||
|
||||
private void rebuildMediaHiddenLayouts(int width){
|
||||
currentMediaHiddenLayoutsWidth=width;
|
||||
String title=getString(R.string.sensitive_content);
|
||||
TextPaint titlePaint=new TextPaint(Paint.ANTI_ALIAS_FLAG);
|
||||
titlePaint.setColor(getResources().getColor(R.color.gray_50));
|
||||
|
||||
@@ -76,9 +76,9 @@ import org.joinmastodon.android.ui.text.ComposeHashtagOrMentionSpan;
|
||||
import org.joinmastodon.android.ui.text.HtmlParser;
|
||||
import org.joinmastodon.android.ui.utils.SimpleTextWatcher;
|
||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||
import org.joinmastodon.android.ui.views.ComposeEditText;
|
||||
import org.joinmastodon.android.ui.views.ComposeMediaLayout;
|
||||
import org.joinmastodon.android.ui.views.ReorderableLinearLayout;
|
||||
import org.joinmastodon.android.ui.views.ComposeEditText;
|
||||
import org.joinmastodon.android.ui.views.SizeListenerLinearLayout;
|
||||
import org.parceler.Parcel;
|
||||
import org.parceler.Parcels;
|
||||
@@ -91,17 +91,15 @@ import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import androidx.annotation.DrawableRes;
|
||||
import me.grishka.appkit.Nav;
|
||||
import me.grishka.appkit.api.Callback;
|
||||
import me.grishka.appkit.api.ErrorResponse;
|
||||
import me.grishka.appkit.fragments.OnBackPressedListener;
|
||||
import me.grishka.appkit.fragments.ToolbarFragment;
|
||||
import me.grishka.appkit.imageloader.ViewImageLoader;
|
||||
import me.grishka.appkit.imageloader.requests.UrlImageLoaderRequest;
|
||||
import me.grishka.appkit.utils.V;
|
||||
|
||||
public class ComposeFragment extends ToolbarFragment implements OnBackPressedListener, ComposeEditText.SelectionListener{
|
||||
public class ComposeFragment extends MastodonToolbarFragment implements OnBackPressedListener, ComposeEditText.SelectionListener{
|
||||
|
||||
private static final int MEDIA_RESULT=717;
|
||||
private static final int IMAGE_DESCRIPTION_RESULT=363;
|
||||
@@ -211,6 +209,13 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy(){
|
||||
super.onDestroy();
|
||||
if(uploadingAttachment!=null && uploadingAttachment.uploadRequest!=null)
|
||||
uploadingAttachment.uploadRequest.cancel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Activity activity){
|
||||
super.onAttach(activity);
|
||||
@@ -409,14 +414,17 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis
|
||||
}
|
||||
char firstChar=editable.charAt(spanStart);
|
||||
String spanText=s.subSequence(spanStart, spanEnd).toString();
|
||||
if(firstChar=='@' || firstChar=='#'){
|
||||
Matcher matcher=HIGHLIGHT_PATTERN.matcher(spanText);
|
||||
if(!matcher.find()){ // invalid mention, remove
|
||||
if(firstChar=='@' || firstChar=='#' || firstChar==':'){
|
||||
Matcher matcher=AUTO_COMPLETE_PATTERN.matcher(spanText);
|
||||
char prevChar=spanStart>0 ? editable.charAt(spanStart-1) : ' ';
|
||||
if(!matcher.find() || !Character.isWhitespace(prevChar)){ // invalid mention, remove
|
||||
editable.removeSpan(span);
|
||||
continue;
|
||||
}else if(matcher.end()+spanStart<spanEnd){ // mention with something at the end, move the end offset
|
||||
editable.setSpan(span, spanStart, spanStart+matcher.end(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
|
||||
}
|
||||
}else{
|
||||
editable.removeSpan(span);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -426,7 +434,6 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis
|
||||
updateCharCounter(s);
|
||||
}
|
||||
});
|
||||
updateToolbar();
|
||||
if(replyTo!=null){
|
||||
replyText.setText(getString(R.string.in_reply_to, replyTo.account.displayName));
|
||||
ArrayList<String> mentions=new ArrayList<>();
|
||||
@@ -511,7 +518,6 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis
|
||||
public void onConfigurationChanged(Configuration newConfig){
|
||||
super.onConfigurationChanged(newConfig);
|
||||
emojiKeyboard.onConfigurationChanged();
|
||||
updateToolbar();
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
@@ -549,7 +555,9 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis
|
||||
mainEditText.getText().replace(start, mainEditText.getSelectionEnd(), prefix+emoji.shortcode+':');
|
||||
}
|
||||
|
||||
private void updateToolbar(){
|
||||
@Override
|
||||
protected void updateToolbar(){
|
||||
super.updateToolbar();
|
||||
getToolbar().setNavigationIcon(R.drawable.ic_fluent_dismiss_24_regular);
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ import me.grishka.appkit.imageloader.ViewImageLoader;
|
||||
import me.grishka.appkit.imageloader.requests.UrlImageLoaderRequest;
|
||||
import me.grishka.appkit.utils.V;
|
||||
|
||||
public class ComposeImageDescriptionFragment extends ToolbarFragment{
|
||||
public class ComposeImageDescriptionFragment extends MastodonToolbarFragment{
|
||||
private String accountID, attachmentID;
|
||||
private EditText edit;
|
||||
private Button saveButton;
|
||||
|
||||
@@ -212,8 +212,8 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
|
||||
private void onTabSelected(@IdRes int tab){
|
||||
Fragment newFragment=fragmentForTab(tab);
|
||||
if(tab==currentTab){
|
||||
if(newFragment instanceof ScrollableToTop)
|
||||
((ScrollableToTop) newFragment).scrollToTop();
|
||||
if(newFragment instanceof ScrollableToTop scrollable)
|
||||
scrollable.scrollToTop();
|
||||
return;
|
||||
}
|
||||
getChildFragmentManager().beginTransaction().hide(fragmentForTab(currentTab)).show(newFragment).commit();
|
||||
@@ -223,8 +223,7 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
|
||||
}
|
||||
|
||||
private void maybeTriggerLoading(Fragment newFragment){
|
||||
if(newFragment instanceof LoaderFragment){
|
||||
LoaderFragment lf=(LoaderFragment) newFragment;
|
||||
if(newFragment instanceof LoaderFragment lf){
|
||||
if(!lf.loaded && !lf.dataLoading)
|
||||
lf.loadData();
|
||||
}else if(newFragment instanceof DiscoverFragment){
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package org.joinmastodon.android.fragments;
|
||||
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Toolbar;
|
||||
|
||||
import org.joinmastodon.android.R;
|
||||
|
||||
import androidx.annotation.CallSuper;
|
||||
import me.grishka.appkit.fragments.ToolbarFragment;
|
||||
|
||||
public abstract class MastodonToolbarFragment extends ToolbarFragment{
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState){
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
updateToolbar();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig){
|
||||
super.onConfigurationChanged(newConfig);
|
||||
updateToolbar();
|
||||
}
|
||||
|
||||
@CallSuper
|
||||
protected void updateToolbar(){
|
||||
Toolbar toolbar=getToolbar();
|
||||
if(toolbar!=null && toolbar.getNavigationIcon()!=null){
|
||||
toolbar.setNavigationContentDescription(R.string.back);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -24,7 +24,7 @@ import me.grishka.appkit.fragments.BaseRecyclerFragment;
|
||||
import me.grishka.appkit.fragments.ToolbarFragment;
|
||||
import me.grishka.appkit.utils.V;
|
||||
|
||||
public class NotificationsFragment extends ToolbarFragment implements ScrollableToTop{
|
||||
public class NotificationsFragment extends MastodonToolbarFragment implements ScrollableToTop{
|
||||
|
||||
private TabLayout tabLayout;
|
||||
private ViewPager2 pager;
|
||||
@@ -81,8 +81,7 @@ public class NotificationsFragment extends ToolbarFragment implements Scrollable
|
||||
if(position==0)
|
||||
return;
|
||||
Fragment _page=getFragmentForPage(position);
|
||||
if(_page instanceof BaseRecyclerFragment){
|
||||
BaseRecyclerFragment page=(BaseRecyclerFragment) _page;
|
||||
if(_page instanceof BaseRecyclerFragment<?> page){
|
||||
if(!page.loaded && !page.isDataLoading())
|
||||
page.loadData();
|
||||
}
|
||||
@@ -124,18 +123,6 @@ public class NotificationsFragment extends ToolbarFragment implements Scrollable
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState){
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
updateToolbar();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig){
|
||||
super.onConfigurationChanged(newConfig);
|
||||
updateToolbar();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scrollToTop(){
|
||||
getFragmentForPage(pager.getCurrentItem()).scrollToTop();
|
||||
@@ -146,7 +133,9 @@ public class NotificationsFragment extends ToolbarFragment implements Scrollable
|
||||
allNotificationsFragment.loadData();
|
||||
}
|
||||
|
||||
private void updateToolbar(){
|
||||
@Override
|
||||
protected void updateToolbar(){
|
||||
super.updateToolbar();
|
||||
getToolbar().setOutlineProvider(null);
|
||||
}
|
||||
|
||||
|
||||