Compare commits

...

91 commits

Author SHA1 Message Date
Thomas
8e2d0452e7 Release 3.34.1 2025-08-22 16:15:58 +02:00
Thomas
19c66f8b90 Merge remote-tracking branch 'origin/develop' into develop 2025-08-22 15:37:14 +02:00
Thomas
dcd2553d40 Merge branch 'Fix_537' into develop 2025-08-22 15:37:01 +02:00
Thomas
e212b39590 Fix some crashes 2025-08-22 15:36:47 +02:00
Thomas
93b788b74e Fix issue #1279 - Crash when context activity is destroyed before fragment transaction 2025-08-22 14:50:24 +02:00
Alireza Rashidi
61d0372eda
Translated using Weblate (Persian)
Currently translated at 97.4% (1223 of 1255 strings)

Co-authored-by: Alireza Rashidi <alirezarashidigoorabi@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/fa/
Translation: Fedilab/Strings
2025-08-22 13:25:47 +02:00
0xd9a
b06a8eb53a Update change log 2025-08-22 16:55:24 +05:30
0xd9a
df0b63836f Make profile picture move to right side of title in conversation page in RTL mode (fix #1284) 2025-08-22 16:50:26 +05:30
0xd9a
45b9660e5d Add Persian language to "Change the language" preference (fix #1283) 2025-08-22 16:39:47 +05:30
0xd9a
6cc855cc9b Remove wrong summary from "Change the language" preference 2025-08-22 16:39:05 +05:30
Максим Горпиніч
361a2452fb
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1255 of 1255 strings)

Co-authored-by: Максим Горпиніч <gorpinicmaksim0@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/uk/
Translation: Fedilab/Strings
2025-08-22 09:02:46 +00:00
Liner Seven
261575ed14
Translated using Weblate (Japanese)
Currently translated at 100.0% (1255 of 1255 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ja/
Translation: Fedilab/Strings
2025-08-22 09:02:43 +00:00
0xd9a
4a5a4347cf Add change log for version code 538 2025-08-22 13:58:23 +05:30
0xd9a
4152687ca9 Update about page 2025-08-22 01:42:43 +05:30
Liner Seven
415ec8cbac
Translated using Weblate (Japanese)
Currently translated at 99.8% (1250 of 1252 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ja/
Translation: Fedilab/Strings
2025-08-21 22:02:14 +02:00
0xd9a
7baaecedd6 Fix #1282: Video buttons and time line not visible in light theme 2025-08-21 19:59:38 +05:30
ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝)
33921d4eb2
Translated using Weblate (Latvian)
Currently translated at 2.5% (1 of 39 strings)

Co-authored-by: ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝) <coool@mail.lv>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/lv/
Translation: Fedilab/description
2025-08-21 05:02:22 +00:00
ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝)
c855abd2b5
Translated using Weblate (Latvian)
Currently translated at 25.0% (313 of 1252 strings)

Co-authored-by: ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝) <coool@mail.lv>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/lv/
Translation: Fedilab/Strings
2025-08-21 03:01:57 +02:00
ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝)
80093f3863
Added translation using Weblate (Latvian)
Co-authored-by: ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝) <coool@mail.lv>
2025-08-20 14:02:36 +02:00
Liner Seven
7a761c5b97
Translated using Weblate (Japanese)
Currently translated at 99.8% (1250 of 1252 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ja/
Translation: Fedilab/Strings
2025-08-20 14:02:36 +02:00
josé m
9801431aa4
Translated using Weblate (Galician)
Currently translated at 99.7% (1249 of 1252 strings)

Co-authored-by: josé m <correoxm@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/gl/
Translation: Fedilab/Strings
2025-08-20 14:02:36 +02:00
0xd9a
e6e7e7e435 Add a language indicator to status (close #552) 2025-08-20 02:08:14 +05:30
0xd9a
6c225e2dbb Use MaterialButtons for counters in status info line 2025-08-20 01:58:46 +05:30
0xd9a
38d01bc488 Remove a duplicate line 2025-08-20 01:11:49 +05:30
0xd9a
0d60e55565 Add accessibility actions for translate, download, share actions in media activity 2025-08-20 00:55:04 +05:30
大王叫我来巡山
61b2c7b1d4
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.8% (1250 of 1252 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/zh_Hans/
Translation: Fedilab/Strings
2025-08-19 07:02:30 +00:00
Максим Горпиніч
3d03fd3886
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1252 of 1252 strings)

Co-authored-by: Максим Горпиніч <gorpinicmaksim0@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/uk/
Translation: Fedilab/Strings
2025-08-19 07:02:28 +00:00
0xd9a
bd987fe7f1 Use MaterialButton for sensitive media toggle + make it larger 2025-08-18 23:26:32 +05:30
0xd9a
dbc5bae868 Add accessibility action to toggle media sensitivity in timelines
(related #357)
2025-08-18 23:04:20 +05:30
0xd9a
3ad57e4683 Fix some styles in profile activity 2025-08-18 13:03:25 +05:30
大王叫我来巡山
45ceea25e1
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.8% (1248 of 1250 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/zh_Hans/
Translation: Fedilab/Strings
2025-08-15 18:02:42 +02:00
Максим Горпиніч
8e5588e523
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1250 of 1250 strings)

Co-authored-by: Максим Горпиніч <gorpinicmaksim0@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/uk/
Translation: Fedilab/Strings
2025-08-15 18:02:39 +02:00
Liner Seven
5dc2df787f
Translated using Weblate (Japanese)
Currently translated at 99.8% (1248 of 1250 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ja/
Translation: Fedilab/Strings
2025-08-15 18:02:37 +02:00
josé m
cf8e5e5c8f
Translated using Weblate (Galician)
Currently translated at 99.7% (1247 of 1250 strings)

Co-authored-by: josé m <correoxm@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/gl/
Translation: Fedilab/Strings
2025-08-15 18:02:34 +02:00
0xd9a
88e6fdb485 Set 'layout_height' of media descriptions in media activity to 'wrap_content'
(fix #1280)
2025-08-15 17:23:08 +05:30
0xd9a
7a461ea68e Fix some warnings 2025-08-15 17:22:11 +05:30
0xd9a
55ddf6957a Remove a duplicate switch case 2025-08-15 17:19:20 +05:30
0xd9a
da879029cc Merge remote-tracking branch 'upstream/develop' into develop 2025-08-15 01:57:24 +05:30
0xd9a
f9e9445ddd Improve accessibility in Manage timelines page 2025-08-15 01:56:56 +05:30
0xd9a
9584e32298 Add content descriptions to tabs in top bar 2025-08-15 00:01:29 +05:30
Liner Seven
49f4c6d699
Translated using Weblate (Japanese)
Currently translated at 100.0% (39 of 39 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/ja/
Translation: Fedilab/description
2025-08-14 14:02:31 +02:00
0xd9a
1c28b200a9 A new custom launcher icon, "Fedilab PS" 2025-08-14 17:19:51 +05:30
Liner Seven
4e6ef77e60
Translated using Weblate (Japanese)
Currently translated at 82.0% (32 of 39 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/ja/
Translation: Fedilab/description
2025-08-13 19:02:41 +00:00
大王叫我来巡山
36ae421518
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.8% (1245 of 1247 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/zh_Hans/
Translation: Fedilab/Strings
2025-08-13 21:02:13 +02:00
Максим Горпиніч
226b821368
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1247 of 1247 strings)

Co-authored-by: Максим Горпиніч <gorpinicmaksim0@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/uk/
Translation: Fedilab/Strings
2025-08-13 21:02:10 +02:00
Liner Seven
f728c33858
Translated using Weblate (Japanese)
Currently translated at 99.8% (1245 of 1247 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ja/
Translation: Fedilab/Strings
2025-08-13 21:02:07 +02:00
Hosted Weblate
00c9788689
Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/
Translation: Fedilab/Strings
2025-08-12 20:39:49 +00:00
0xd9a
26b46299ee Merge pull request 'Use 'Tracking' instead of 'UTM' in code and translations' (#1278) from uRDAlaqjNb/Fedilab:rename-utm-elements into develop
Reviewed-on: https://codeberg.org/tom79/Fedilab/pulls/1278
2025-08-12 22:39:22 +02:00
Andreas
abe33df515 Undo changed translations 2025-08-12 21:49:34 +02:00
6e6e58c4
a25b67ef4c Use 'Tracking' instead of 'UTM' in code and translations to better match the actual function 2025-08-12 20:25:31 +02:00
Irene
b31698f859
Translated using Weblate (Swedish)
Currently translated at 57.8% (721 of 1247 strings)

Co-authored-by: Irene <ps86m042i@mozmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/sv/
Translation: Fedilab/Strings
2025-08-12 20:02:33 +02:00
josé m
9e39e337dc
Translated using Weblate (Galician)
Currently translated at 99.8% (1245 of 1247 strings)

Co-authored-by: josé m <correoxm@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/gl/
Translation: Fedilab/Strings
2025-08-12 20:02:30 +02:00
Ettore Atalan
bcaff419dd
Translated using Weblate (German)
Currently translated at 97.7% (1219 of 1247 strings)

Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/de/
Translation: Fedilab/Strings
2025-08-12 20:02:27 +02:00
Liner Seven
cf97a75138
Translated using Weblate (Japanese)
Currently translated at 56.4% (22 of 39 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/ja/
Translation: Fedilab/description
2025-08-12 16:02:17 +02:00
Irene
6f58363e82
Translated using Weblate (Swedish)
Currently translated at 57.0% (712 of 1247 strings)

Co-authored-by: Irene <ps86m042i@mozmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/sv/
Translation: Fedilab/Strings
2025-08-12 06:02:07 +02:00
Thomas
d9288de31b Merge pull request 'Update list of tracking parameters' (#1275) from uRDAlaqjNb/Fedilab:update-tracking-parameters into develop
Reviewed-on: https://codeberg.org/tom79/Fedilab/pulls/1275
2025-08-11 20:23:13 +02:00
Andreas Kuchenbecker
d73a8a8325 Update list of tracking parameters
The browsers Firefox and Brave also implement URL parameter stripping.
The list of tracking parameters in Fedilab is updated to match the combined list of these implementations/browsers.
2025-08-11 19:55:46 +02:00
0xd9a
6b168c302a Fix: Tapping publish button multiple times publishes status multiple times 2025-08-11 14:26:45 +05:30
Liner Seven
e8773dbd32
Translated using Weblate (Japanese)
Currently translated at 99.8% (1245 of 1247 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ja/
Translation: Fedilab/Strings
2025-08-10 15:02:01 +02:00
Poesty Li
3496a46052
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.8% (1245 of 1247 strings)

Co-authored-by: Poesty Li <poesty7450@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/zh_Hans/
Translation: Fedilab/Strings
2025-08-09 17:02:19 +00:00
大王叫我来巡山
f5df7cefff
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.8% (1245 of 1247 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/zh_Hans/
Translation: Fedilab/Strings
2025-08-09 17:02:16 +00:00
Максим Горпиніч
264188e484
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1247 of 1247 strings)

Co-authored-by: Максим Горпиніч <gorpinicmaksim5@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/uk/
Translation: Fedilab/Strings
2025-08-09 17:02:14 +00:00
0xd9a
c8b753206b Fix #1273: "Use an alternative frontend" breaks Medium link 2025-08-09 14:16:32 +05:30
0xd9a
2477f5b75a Improve accessibility of translated content
- Focus translated content after original content
- Make the whole translation container focusable
- Set a minimum height limit to translated text
- Improve content description of translated text
2025-08-09 05:11:02 +05:30
Liner Seven
54dd37bd22
Translated using Weblate (Japanese)
Currently translated at 43.5% (17 of 39 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/ja/
Translation: Fedilab/description
2025-08-08 20:02:42 +02:00
Liner Seven
f0268777d1
Translated using Weblate (Japanese)
Currently translated at 33.3% (13 of 39 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/ja/
Translation: Fedilab/description
2025-08-07 19:02:44 +02:00
Poesty Li
c34172c0c7
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.8% (1244 of 1246 strings)

Co-authored-by: Poesty Li <poesty7450@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/zh_Hans/
Translation: Fedilab/Strings
2025-08-07 19:02:26 +02:00
大王叫我来巡山
038fb6bfc2
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.8% (1244 of 1246 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/zh_Hans/
Translation: Fedilab/Strings
2025-08-07 19:02:24 +02:00
Максим Горпиніч
4672c48c93
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1246 of 1246 strings)

Co-authored-by: Максим Горпиніч <gorpinicmaksim5@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/uk/
Translation: Fedilab/Strings
2025-08-07 19:02:21 +02:00
Liner Seven
de01f2b000
Translated using Weblate (Japanese)
Currently translated at 99.8% (1244 of 1246 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ja/
Translation: Fedilab/Strings
2025-08-07 19:02:19 +02:00
josé m
c4711e6592
Translated using Weblate (Galician)
Currently translated at 99.8% (1244 of 1246 strings)

Co-authored-by: josé m <correoxm@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/gl/
Translation: Fedilab/Strings
2025-08-07 19:02:17 +02:00
0xd9a
df5ab1db37 Update tab titles in bottom navigation
(tab titles are not visible in UI, but useful for screen readers)
2025-08-07 04:41:05 +05:30
Liner Seven
82ab8a1415
Translated using Weblate (Japanese)
Currently translated at 20.5% (8 of 39 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/ja/
Translation: Fedilab/description
2025-08-06 15:02:04 +02:00
0xd9a
43193951c2 Keep bottom hash tags in profile note (fix #1268) 2025-08-05 02:48:52 +05:30
Liner Seven
37b744b3e5
Translated using Weblate (Japanese)
Currently translated at 17.9% (7 of 39 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/ja/
Translation: Fedilab/description
2025-08-04 15:02:17 +02:00
தமிழ்நேரம்
ab6a2251b5
Translated using Weblate (Tamil)
Currently translated at 100.0% (39 of 39 strings)

Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/ta/
Translation: Fedilab/description
2025-08-02 19:02:38 +02:00
தமிழ்நேரம்
55597bc5c3
Translated using Weblate (Tamil)
Currently translated at 100.0% (1242 of 1242 strings)

Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ta/
Translation: Fedilab/Strings
2025-08-02 17:02:18 +00:00
Liner Seven
a81d07056b
Translated using Weblate (Japanese)
Currently translated at 10.2% (4 of 39 strings)

Co-authored-by: Liner Seven <linour7gmekiblo@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/ja/
Translation: Fedilab/description
2025-08-02 00:01:58 +00:00
Максим Горпиніч
329867f8d4
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (39 of 39 strings)

Co-authored-by: Максим Горпиніч <gorpinicmaksim5@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/uk/
Translation: Fedilab/description
2025-08-01 11:02:25 +00:00
Joan Pujolar
ff98cc2342
Translated using Weblate (Catalan)
Currently translated at 100.0% (39 of 39 strings)

Co-authored-by: Joan Pujolar <joan.pujolar@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/ca/
Translation: Fedilab/description
2025-08-01 11:02:24 +00:00
Priit Jõerüüt
cfcdd92dc1
Translated using Weblate (Estonian)
Currently translated at 29.1% (362 of 1242 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/et/
Translation: Fedilab/Strings
2025-08-01 13:02:07 +02:00
0xd9a
58e2457cf5 Show placeholders while profile pictures are loading 2025-07-29 01:01:58 +05:30
RintanBroadleaf
efe5718526
Translated using Weblate (Japanese)
Currently translated at 100.0% (1242 of 1242 strings)

Co-authored-by: RintanBroadleaf <Rintan@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ja/
Translation: Fedilab/Strings
2025-07-28 18:19:55 +00:00
Joan Pujolar
b4884b330e
Translated using Weblate (Catalan)
Currently translated at 100.0% (1242 of 1242 strings)

Co-authored-by: Joan Pujolar <joan.pujolar@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ca/
Translation: Fedilab/Strings
2025-07-28 18:19:53 +00:00
Thomas
0e6409d7d8 Release 3.34.0 2025-07-27 18:23:06 +02:00
Thomas
8ff3566498 Fix a crash with fit preview images when aspect ratio is important 2025-07-27 18:17:37 +02:00
Thomas
cd995da607 Fix issue #1257 - Automatically expand media does not work with the Pixelfed presentation 2025-07-27 11:13:42 +02:00
Thomas
6dc779e03d Merge remote-tracking branch 'origin/develop' into develop 2025-07-26 11:14:30 +02:00
Thomas
fe4402b4b9 Apply link colors to highlighted hashtags. Hide Hashtags if there are more than one. 2025-07-26 11:14:21 +02:00
Priit Jõerüüt
b0a896bef1
Translated using Weblate (Estonian)
Currently translated at 27.5% (342 of 1242 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/et/
Translation: Fedilab/Strings
2025-07-26 08:04:23 +00:00
Максим Горпиніч
d62d04fac2
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (38 of 38 strings)

Co-authored-by: Максим Горпиніч <gorpinicmaksim5@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/fedilab/description/uk/
Translation: Fedilab/description
2025-07-26 05:05:50 +02:00
165 changed files with 2030 additions and 817 deletions

View file

@ -13,8 +13,8 @@ android {
defaultConfig {
minSdk 21
targetSdk 34
versionCode 536
versionName "3.34.0-beta-2"
versionCode 538
versionName "3.34.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
flavorDimensions "default"

View file

@ -447,6 +447,26 @@
</activity-alias>
<activity-alias
android:name=".activities.MainActivity.BubblesPS"
android:enabled="false"
android:exported="true"
android:icon="@mipmap/ic_launcher_bubbles_ps"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_bubbles_ps_round"
android:targetActivity=".activities.MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/compose_shortcuts" />
</activity-alias>
<activity-alias
android:name=".activities.MainActivity.BubblesPeaGreen"
android:enabled="false"

View file

@ -1,8 +1,13 @@
[
{
"version": "3.34.0-beta-2",
"code": "536",
"note": "Added:\n- 3-Dots menu for remote conversations (Federation in background)\n- Quote support for Mastodon\n- Long press on tags: Follow / Mute\n\nChanged:\n- Improve accessibility in media activity\n- Improve content descriptions\n- Update languages\n- Update launcher icons, add more monochrome icons\n- Limit the number of highlighted hashtags at the bottom of messages\n\nFixed:\n- Fix text selection stop working when composing\n- Fix a crash with threads\n- Fix empty Hashtags"
"version": "3.34.1",
"code": "538",
"note": "Added:\n- Add content descriptions to tabs in top bar\n- Add accessibility action to toggle media sensitivity of posts in timelines\n- Add accessibility actions to translate, download, share in media viewer\n- Add a language indicator to focused status\n- Add Persian language to \"Change the language\" preference\n- Add new app logo\n\nChanged:\n- Show placeholders while profile pictures are loading\n- Update bottom navigation tab titles\n- Improve accessibility of translated content\n- Update list of tracking parameters used for \"Remove UTM parameters\"\n- Use 'Tracking' instead of 'UTM'\n- Improve accessibility in Manage timelines page\n- Make the show/hide media button larger\n- Update about page\n\nFixed:\n- Bottom hashtags in bios disappear when \"Highlight bottom hashtags\" enabled\n- \"Use an alternative frontend\" breaks Medium link\n- Tapping publish button multiple times publishes status multiple times\n- Alt text popup does not resize when swiping\n- Video controls not visible in light theme\n- Profile picture appears on left side of title in conversation page in RTL mode\n- Some crashes\n"
},
{
"version": "3.34.0",
"code": "537",
"note": "Added:\n- 3-Dots menu for remote conversations (Federation in background)\n- Quote support for Mastodon\n- Long press on tags: Follow / Mute\n\nChanged:\n- Improve accessibility in media activity\n- Improve content descriptions\n- Update languages\n- Update launcher icons, add more monochrome icons\n- Limit the number of highlighted hashtags at the bottom of messages\n\nFixed:\n- Fix text selection stop working when composing\n- Fix a crash with threads\n- Fix empty Hashtags\n- Fix automatically expand media does not work with the Pixelfed presentation\n- Fix a crash with fit preview images feature"
},
{
"version": "3.33.1",
@ -208,96 +213,5 @@
"version": "3.20.0",
"code": "483",
"note": "Added:\n- \"Follows you\" indicator in accounts list\n- Settings compose: display a dialog to warn if there are missing media description (default: disabled)\n- Settings > Cache: disable battery optimization\n- Settings > Cache - Add charts to check cache logs\n- Settings > Timelines: AutoPlay gif media (default: enabled)\n- Google: Automatic backup of data and settings\n\nChanged:\n- Improve detections of gap in timelines\n- Improve media description\n- Chat view by default\n- Chat view add an indicator for messages when not direct\n\nFixed:\n- Fix an issue with cache and fetch more\n- Cache view with large fonts\n- Bad behaviors with truncated messages"
},
{
"version": "3.19.1",
"code": "482",
"note": "Added:\n- Settings compose: display a dialog to warn if there are missing media description (default disabled)\n- Settings > Notification: disable battery optimization\n- Settings > Timelines: AutoPlay gif media (default: enabled)\n\nFixed:\n- Fix an issue with cache and fetch more\n- Cache view with large fonts\n- Bad behaviors with truncated messages"
},
{
"version": "3.19.0",
"code": "481",
"note": "Added:\n- Settings compose: don't send media if there are no description (default: disabled)\n- Settings Timelines: Enable/Disable truncate links\n- Allow to set max link length (20 - 150 chars)\n\nChanged:\n- Align media with text (left margin enabled)\n\nFixed:\n- Media previews remain the same when sharing\n- Edit media description not working\n- Accessibility (larger fonts): profiles/DM\n- Cross replies: Wrong visibility with the selected account\n- Several crashes"
},
{
"version": "3.18.2",
"code": "480",
"note": "Changed:\n- First media layout will depend of its ratio\n\nFixed:\n- Impossible to add media with the chat view\n- Chat view limited in chars\n- Freezes / bad behaviors due to the new media presentation"
},
{
"version": "3.18.1",
"code": "479",
"note": "Added:\n- Add Lingva translator (Settings > Timelines)\n- Add support for Nyastodon-style emoji reactions (skyevg)\n- Add chat view for DM (default: disable / Settings > Timelines)"
},
{
"version": "3.18.0",
"code": "478",
"note": "Added:\n- Support camel case tags (automatically recorded when composing)\n- Manage tags when composing (top right menu)\n- Custom tabs (default: enabled)\n\nChanged:\n- Media heights now use the screen size\n- Remove horizontal scroll for media\n- Reduce size of emoji when text size is increased\n- Update available languages in picker\n\nFixed:\n- Forwarded tags are added back after being deleted\n- TalkBack issues\n- Some crashes"
},
{
"version": "3.17.0",
"code": "477",
"note": "Added:\n- Peertube 2FA support\n- Cache home in background (default disabled -> New settings category and per account) / change frequency\n- Auto-fetch missing messages for the Home (default disabled -> in Settings - Timelines)\n- Automatically switch between tabs when searching\n- More deep links detection\n- Allow to group mentions at the top (default: disabled)\n\n\nFixed:\n- Dynamic color for Android 12+\n- Missing media description for previews\n- Fix a crash when replying\n- Fix button size not changed\n- Forward tags in replies\n- Media cannot be downloaded or shared with Android 10\n- Some crashes"
},
{
"version": "3.16.4",
"code": "476",
"note": "Added:\n- Cache home in background (default disabled -> New settings category and per account) / change frequency\n- Auto-fetch missing messages for the Home (default disabled -> in Settings - Timelines)\n- Automatically switch between tabs when searching\n\nFixed:\n- Some crashes"
},
{
"version": "3.16.3",
"code": "475",
"note": "Added:\n- Peertube 2FA support\n\nFixed:\n- Dynamic color for Android 12+"
},
{
"version": "3.16.2",
"code": "474",
"note": "Added:\n- Peertube support\n- Compose shortcut (long press launcher)\n- Long press compose button to write with another account\n- Edit description and focus for media (for the next Mastodon release)\n\nChanged:\n- Cross actions with two accounts display a dialog\n- Order & compact og values when sharing > title - url - content\n- Tap on top message (user info) open threads\n\nFixed:\n- Text cleared when adding a media\n- Fix Maths not working with quotes\n- Fix crashes"
},
{
"version": "3.16.1",
"code": "473",
"note": "Changed:\n- Edit description and focus for media (for the next Mastodon release)\n\nChanged:\n- Peertube: remove role support to avoid crashes with older instances\n\nFixed:\n- Fix some crashes"
},
{
"version": "3.16.0",
"code": "472",
"note": "Changed:\n- Peertube support\n- Compose shortcut\n- Long press compose button to write with another account\n\nChanged:\n- Cross actions with two accounts display a dialog\n- Order & compact og values when sharing > title - url - content\n\nFixed:\n- Text cleared when adding a media\n- Fix crashes"
},
{
"version": "3.15.2",
"code": "471",
"note": "Changed:\n- Add instance name when sharing\n\nFixed:\n- Fix a crash when removing media\n- Other minor fixes"
},
{
"version": "3.15.1",
"code": "470",
"note": "Changed:\n- Material dialogs\n\nFixed:\n- Light theme issues"
},
{
"version": "3.15.0",
"code": "469",
"note": "Added:\n- Maths support (view and compose)\n- Filter DMs in HOME (long press on the tab)\n- Filter languages for users in home timeline (from their profile)\n- Add several targeted languages for translator\n\nChanged:\n- Hide single media with preview is now a setting (default: disabled)\n- Group items in menu of messages\n\nFixed:\n- Cross-actions didn't display account instances"
},
{
"version": "3.14.6",
"code": "468",
"note": "Added:\n- Maths support (view and compose)\n\nChanged:\n- Hide single media with preview is now a setting (default: disabled)"
},
{
"version": "3.14.5",
"code": "467",
"note": "Changed:\n- Allow to swipe media for profiles\n\nFixed:\n- Fix crashes with pinch zoom\n- Copy/Paste in threads\n- Fix crash when checking redirection on http links\n- Display menu in media viewer resets pinch-zoom"
},
{
"version": "3.14.4",
"code": "466",
"note": "Changed:\n- Media viewer (pinch zoom)\n\nFixed:\n- Cross account actions (long press)\n- Boost color\n- Buttons not visible with custom themes.\n- Fix some bad behaviors with media viewer"
},
{
"version": "3.14.3",
"code": "465",
"note": "Added:\n- Display date of the message instead of the boost (default: disabled)\n- Allow to disable release notes popup in Settings\n\nFixed:\n- Fix timelines slow down and stuttering after some scrolls\n- Fix color issues with follow buttons\n- Fix import from settings (import from login was OK)"
}
]

View file

@ -19,8 +19,6 @@ import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
@ -63,31 +61,20 @@ public class AboutActivity extends BaseBarActivity {
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
String version = "";
try {
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
version = pInfo.versionName;
binding.aboutVersion.setText(getResources().getString(R.string.about_vesrion, version));
} catch (PackageManager.NameNotFoundException ignored) {
}
String version = "v" + BuildConfig.VERSION_NAME + " (" + (BuildConfig.DONATIONS ? "F-Droid" : "Google") + ")";
binding.aboutVersion.setText(version);
binding.aboutCode.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://codeberg.org/tom79/Fedilab"));
binding.aboutThekinrar.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://instances.social/"));
binding.aboutLicense.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://www.gnu.org/licenses/quick-guide-gplv3.fr.html"));
binding.aboutSupport.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://liberapay.com/tom79"));
if (BuildConfig.DONATIONS) {
binding.aboutSupport.setVisibility(View.VISIBLE);
} else {
binding.aboutSupport.setVisibility(View.GONE);
}
binding.aboutSupportPaypal.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://www.paypal.me/Mastalab"));
binding.donateLiberapay.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://liberapay.com/tom79"));
binding.donatePaypal.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://www.paypal.me/Mastalab"));
binding.donateOpencollective.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://opencollective.com/fedilab"));
String finalVersion = version;
binding.aboutVersionCopy.setOnClickListener(v -> {
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
String content = "Fedilab v" + finalVersion + " for " + (BuildConfig.DONATIONS ? "FDroid" : "Google");
String content = "Fedilab " + version;
ClipData clip = ClipData.newPlainText(Helper.CLIP_BOARD, content);
if (clipboard != null) {
@ -96,11 +83,7 @@ public class AboutActivity extends BaseBarActivity {
}
});
if (BuildConfig.DONATIONS) {
binding.aboutSupportPaypal.setVisibility(View.VISIBLE);
} else {
binding.aboutSupportPaypal.setVisibility(View.GONE);
}
binding.donateLinks.setVisibility(BuildConfig.DONATIONS ? View.VISIBLE : View.GONE);
binding.accountFollow.setIconResource(R.drawable.ic_baseline_person_add_24);
binding.aboutWebsite.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://fedilab.app"));
CrossActionHelper.fetchRemoteAccount(AboutActivity.this, "@apps@toot.fedilab.app", new CrossActionHelper.Callback() {
@ -112,8 +95,6 @@ public class AboutActivity extends BaseBarActivity {
@Override
public void federatedAccount(Account account) {
if (account != null && account.username.equalsIgnoreCase("apps")) {
binding.developerTitle.setVisibility(View.VISIBLE);
binding.acccountContainer.setVisibility(View.VISIBLE);
MastodonHelper.loadPPMastodon(binding.accountPp, account);
binding.accountDn.setText(account.display_name);
binding.accountUn.setText(account.acct);

View file

@ -193,7 +193,7 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac
binding.mediaDescription.setText(description);
binding.translate.setOnClickListener(v -> {
String descriptionToTranslate = attachments.get(mediaPosition - 1).description;
TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, status!=null?status.language:"en", translated -> {
TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, getStatusLanguageForTranslation(), translated -> {
if (translated != null) {
attachments.get(mediaPosition - 1).translation = translated;
binding.mediaDescriptionTranslated.setText(translated);
@ -248,7 +248,7 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac
}
binding.translate.setOnClickListener(v -> {
String descriptionToTranslate = attachments.get(position).description;
TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, status!=null?status.language:"en", translated -> {
TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, getStatusLanguageForTranslation(), translated -> {
if (translated != null) {
attachments.get(position).translation = translated;
binding.mediaDescriptionTranslated.setText(translated);
@ -292,6 +292,9 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac
setFullscreen(true);
}
public String getStatusLanguageForTranslation() {
return status != null ? status.language : "en";
}
private Spannable linkify(Context context, String content) {
if (content == null) {
@ -358,6 +361,14 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac
}
return true;
} else if (item.getItemId() == R.id.action_save) {
saveMedia();
} else if (item.getItemId() == R.id.action_share) {
shareMedia();
}
return true;
}
public void saveMedia() {
int position = binding.mediaViewpager.getCurrentItem();
Attachment attachment = attachments.get(position);
if (Build.VERSION.SDK_INT >= 23) {
@ -388,7 +399,9 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac
downloadID = -1;
}
}
} else if (item.getItemId() == R.id.action_share) {
}
public void shareMedia() {
int position = binding.mediaViewpager.getCurrentItem();
Attachment attachment = attachments.get(position);
if (attachment.type.compareTo("image") == 0) {
@ -407,8 +420,6 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac
}
}
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

View file

@ -589,7 +589,7 @@ public class ProfileActivity extends BaseActivity {
account.getSpanNote(ProfileActivity.this,
new WeakReference<>(binding.accountNote)), TextView.BufferType.SPANNABLE);
}),
}, true),
TextView.BufferType.SPANNABLE);
binding.accountNote.setMovementMethod(LinkMovementMethod.getInstance());

View file

@ -112,8 +112,8 @@ public class Account implements Serializable {
public synchronized Spannable getSpanNote(Context context, WeakReference<View> viewWeakReference) {
return SpannableHelper.convert(context, note, null, this, null, viewWeakReference, null, true, false);
}
public synchronized Spannable getSpanNote(Context context, WeakReference<View> viewWeakReference, Status.Callback callback) {
return SpannableHelper.convert(context, note, null, this, null, viewWeakReference, callback, true, false);
public synchronized Spannable getSpanNote(Context context, WeakReference<View> viewWeakReference, Status.Callback callback, boolean keepOriginalBottomHashTags) {
return SpannableHelper.convert(context, note, null, this, null, viewWeakReference, callback, true, false, keepOriginalBottomHashTags);
}
@Override

View file

@ -195,7 +195,7 @@ public class Status implements Serializable, Cloneable {
public synchronized Spannable getSpanContent(Context context, boolean checkRemotely, WeakReference<View> viewWeakReference, Callback callback) {
if (contentSpan == null) {
contentSpan = SpannableHelper.convert(context, content, this, null, null, checkRemotely, viewWeakReference, callback, true, true);
contentSpan = SpannableHelper.convert(context, content, this, null, null, checkRemotely, viewWeakReference, callback, true, true, false);
}
return contentSpan;
}

View file

@ -132,19 +132,19 @@ public class BottomMenu implements Serializable {
android.view.MenuItem menuItemLoop = null;
switch (menuItem.item_menu_type) {
case HOME:
menuItemLoop = bottomNavigationView.getMenu().add(Menu.NONE, R.id.nav_home, menuItem.position, context.getString(R.string.home_menu)).setIcon(R.drawable.ic_baseline_home_24);
menuItemLoop = bottomNavigationView.getMenu().add(Menu.NONE, R.id.nav_home, menuItem.position, R.string.tab_home_timeline).setIcon(R.drawable.ic_baseline_home_24);
break;
case LOCAL:
menuItemLoop = bottomNavigationView.getMenu().add(Menu.NONE, R.id.nav_local, menuItem.position, context.getString(R.string.local_menu)).setIcon(R.drawable.ic_baseline_people_alt_24);
menuItemLoop = bottomNavigationView.getMenu().add(Menu.NONE, R.id.nav_local, menuItem.position, R.string.tab_local_timeline).setIcon(R.drawable.ic_baseline_people_alt_24);
break;
case PUBLIC:
menuItemLoop = bottomNavigationView.getMenu().add(Menu.NONE, R.id.nav_public, menuItem.position, context.getString(R.string.v_public)).setIcon(R.drawable.ic_baseline_public_24);
menuItemLoop = bottomNavigationView.getMenu().add(Menu.NONE, R.id.nav_public, menuItem.position, R.string.tab_public_timeline).setIcon(R.drawable.ic_baseline_public_24);
break;
case NOTIFICATION:
menuItemLoop = bottomNavigationView.getMenu().add(Menu.NONE, R.id.nav_notifications, menuItem.position, context.getString(R.string.notifications)).setIcon(R.drawable.ic_baseline_notifications_24);
break;
case DIRECT:
menuItemLoop = bottomNavigationView.getMenu().add(Menu.NONE, R.id.nav_privates, menuItem.position, context.getString(R.string.v_private)).setIcon(R.drawable.ic_baseline_mail_24);
menuItemLoop = bottomNavigationView.getMenu().add(Menu.NONE, R.id.nav_privates, menuItem.position, R.string.tab_private_mentions).setIcon(R.drawable.ic_baseline_mail_24);
break;
}
if (menuItemLoop != null && !menuItem.visible) {

View file

@ -371,7 +371,7 @@ public class Helper {
public static final Pattern geminiPattern = Pattern.compile("(gemini://.*)\\b");
public static final Pattern xmppPattern = Pattern.compile("xmpp:[-a-zA-Z0-9+$&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]");
public static final Pattern peertubePattern = Pattern.compile("(https?://([\\da-z.-]+\\.[a-z.]{2,10}))/videos/watch/(\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12})$");
public static final Pattern mediumPattern = Pattern.compile("([\\w@-]*)?\\.?medium.com/@?([/\\w-]+)");
public static final Pattern mediumPattern = Pattern.compile("([\\w@-]*)?\\.?medium.com/@?([./\\w-]+)");
public static final Pattern wikipediaPattern = Pattern.compile("([\\w_-]+)\\.wikipedia.org/(((?!([\"'<])).)*)");
public static final Pattern codePattern = Pattern.compile("code=([\\w-]+)");
public static final Pattern nitterIDPattern = Pattern.compile("/status/(\\d+)");
@ -397,34 +397,85 @@ public class Helper {
public static final int NOTIFICATION_USER_NOTIF = 411;
public static final int NOTIFICATION_THEMING = 412;
/*
* List from ClearUrls
* https://gitlab.com/KevinRoebert/ClearUrls/blob/master/data/data.min.json#L106
* Sources for the list of tracking parameters:
* - Firefox: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/query-stripping/records
* - Brave: https://github.com/brave/brave-core/blob/master/components/query_filter/utils.cc
*/
private static final String[] UTM_PARAMS = {
private static final String[] TRACKING_PARAMS = {
"utm_\\w+",
"ga_source",
"ga_medium",
"ga_term",
"ga_content",
"ga_campaign",
"ga_place",
"yclid",
"ref_\\w+",
"__hsfp",
"__hssc",
"__hstc",
"__s",
"_bhlid",
"_branch_match_id",
"_branch_referrer",
"_gl",
"_hsenc",
"_kx",
"_openstat",
"at_recipient_id",
"at_recipient_list",
"bbeml",
"bsft_clkid",
"bsft_uid",
"ck_subscriber_id",
"dclid",
"et_rid",
"fb_action_ids",
"fb_action_types",
"fb_source",
"fb_ref",
"fb_comment_id",
"fbclid",
"action_object_map",
"action_type_map",
"action_ref_map",
"gs_l",
"gbraid",
"gclid",
"guce_referrer",
"guce_referrer_sig",
"h_sid",
"h_slt",
"hsCtaTracking",
"hsctatracking",
"igsh",
"igshid",
"irclickid",
"mc_eid",
"mkt_tok",
"hmb_campaign",
"hmb_medium",
"hmb_source",
"[\\?|&]ref[\\_]?"
"ml_subscriber",
"ml_subscriber_hash",
"msclkid",
"mtm_cid",
"oft_c",
"oft_ck",
"oft_d",
"oft_id",
"oft_ids",
"oft_k",
"oft_lk",
"oft_sk",
"oly_anon_id",
"oly_enc_id",
"pk_cid",
"rb_clickid",
"s_cid",
"sc_customer",
"sc_eh",
"sc_uid",
"si",
"sms_click",
"sms_source",
"sms_uph",
"srsltid",
"ss_email_id",
"ttclid",
"twclid",
"unicorn_click_id",
"vero_conv",
"vero_id",
"vgo_ee",
"wbraid",
"wickedid",
"yclid",
"ymclid",
"ysclid"
};
public static int counter = 1;
private static int notificationId = 1;
@ -831,8 +882,8 @@ public class Helper {
return "https://" + wikipediaReplaceHost + "/" + path + lang;
}
}
boolean filterUTM = Helper.getSharedValue(context, context.getString(R.string.SET_FILTER_UTM));
if (filterUTM) {
boolean filterTracking = Helper.getSharedValue(context, context.getString(R.string.SET_FILTER_TRACKING));
if (filterTracking) {
return remove_tracking_param(context, url);
}
return url;
@ -849,10 +900,10 @@ public class Helper {
if (original_content == null)
return original_content;
String cleaned_content = original_content;
for (String utm : UTM_PARAMS) {
cleaned_content = cleaned_content.replaceAll("&amp;" + utm + "=[0-9a-zA-Z._-]*", "");
cleaned_content = cleaned_content.replaceAll("&" + utm + "=[0-9a-zA-Z._-]*", "");
cleaned_content = cleaned_content.replaceAll("\\?" + utm + "=[0-9a-zA-Z._-]*", "?");
for (String param : TRACKING_PARAMS) {
cleaned_content = cleaned_content.replaceAll("&amp;" + param + "=[0-9a-zA-Z._-]*", "");
cleaned_content = cleaned_content.replaceAll("&" + param + "=[0-9a-zA-Z._-]*", "");
cleaned_content = cleaned_content.replaceAll("\\?" + param + "=[0-9a-zA-Z._-]*", "?");
}
if (cleaned_content.endsWith("?")) {
cleaned_content = cleaned_content.substring(0, cleaned_content.length() - 1);
@ -934,7 +985,9 @@ public class Helper {
ft.commitAllowingStateLoss();
}
}
if(!fragmentManager.isDestroyed()) {
fragmentManager.executePendingTransactions();
}
return fragment;
}
@ -1163,6 +1216,7 @@ public class Helper {
if (Helper.isValidContextForGlide(activity)) {
Glide.with(activity)
.asDrawable()
.placeholder(R.drawable.ic_person)
.load(avatar)
.apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10)))
.into(view);
@ -1176,6 +1230,7 @@ public class Helper {
try {
RequestBuilder<Drawable> requestBuilder = Glide.with(activity)
.asDrawable()
.placeholder(R.drawable.ic_person)
.load(targetedUrl)
.thumbnail(0.1f);
if (crop) {
@ -1187,6 +1242,7 @@ public class Helper {
} else {
RequestBuilder<GifDrawable> requestBuilder = Glide.with(activity)
.asGif()
.placeholder(R.drawable.ic_person)
.load(targetedUrl)
.thumbnail(0.1f);
if (crop) {

View file

@ -30,77 +30,37 @@ public class LogoHelper {
public static int getNotificationIcon(Context context) {
final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
String logo = sharedpreferences.getString(context.getString(R.string.SET_LOGO_LAUNCHER), "Bubbles");
switch (logo) {
case "Fediverse":
return R.drawable.ic_plain_fediverse;
case "Hero":
return R.drawable.ic_plain_hero;
case "Atom":
return R.drawable.ic_plain_atom;
case "BrainCrash":
return R.drawable.ic_plain_crash;
case "Mastalab":
return R.drawable.ic_plain_mastalab;
default:
return R.drawable.ic_plain_bubbles;
}
return switch (logo) {
case "Fediverse" -> R.drawable.ic_plain_fediverse;
case "Hero" -> R.drawable.ic_plain_hero;
case "Atom" -> R.drawable.ic_plain_atom;
case "BrainCrash" -> R.drawable.ic_plain_crash;
case "Mastalab" -> R.drawable.ic_plain_mastalab;
default -> R.drawable.ic_plain_bubbles;
};
}
public static int getMainLogo(Context context) {
final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
String logo = sharedpreferences.getString(context.getString(R.string.SET_LOGO_LAUNCHER), "Bubbles");
switch (logo) {
case "Fediverse":
return R.drawable.fedilab_logo_fediverse;
case "Hero":
return R.drawable.fedilab_logo_hero;
case "Atom":
return R.drawable.fedilab_logo_atom;
case "BrainCrash":
return R.drawable.fedilab_logo_crash;
case "Mastalab":
return R.drawable.fedilab_logo_mastalab;
case "BubblesUA":
return R.drawable.fedilab_logo_bubbles_ua;
case "BubblesPeaGreen":
return R.drawable.fedilab_logo_bubbles_pea_green;
case "BubblesPride":
return R.drawable.fedilab_logo_bubbles_pride;
case "BubblesPink":
return R.drawable.fedilab_logo_bubbles_pink;
case "BubblesPirate":
return R.drawable.fedilab_logo_bubbles_pirate;
default:
return R.drawable.fedilab_logo_bubbles;
}
return getDrawable(logo);
}
public static int getDrawable(String value) {
switch (value) {
case "Fediverse":
return R.drawable.fedilab_logo_fediverse;
case "Hero":
return R.drawable.fedilab_logo_hero;
case "Atom":
return R.drawable.fedilab_logo_atom;
case "BrainCrash":
return R.drawable.fedilab_logo_crash;
case "Mastalab":
return R.drawable.fedilab_logo_mastalab;
case "BubblesUA":
return R.drawable.fedilab_logo_bubbles_ua;
case "BubblesPeaGreen":
return R.drawable.fedilab_logo_bubbles_pea_green;
case "BubblesPride":
return R.drawable.fedilab_logo_bubbles_pride;
case "BubblesPink":
return R.drawable.fedilab_logo_bubbles_pink;
case "BubblesPirate":
return R.drawable.fedilab_logo_bubbles_pirate;
default:
return R.drawable.fedilab_logo_bubbles;
}
return switch (value) {
case "Fediverse" -> R.drawable.fedilab_logo_fediverse;
case "Hero" -> R.drawable.fedilab_logo_hero;
case "Atom" -> R.drawable.fedilab_logo_atom;
case "BrainCrash" -> R.drawable.fedilab_logo_crash;
case "Mastalab" -> R.drawable.fedilab_logo_mastalab;
case "BubblesUA" -> R.drawable.fedilab_logo_bubbles_ua;
case "BubblesPeaGreen" -> R.drawable.fedilab_logo_bubbles_pea_green;
case "BubblesPride" -> R.drawable.fedilab_logo_bubbles_pride;
case "BubblesPink" -> R.drawable.fedilab_logo_bubbles_pink;
case "BubblesPirate" -> R.drawable.fedilab_logo_bubbles_pirate;
default -> R.drawable.fedilab_logo_bubbles;
};
}
public static void setDrawable(String value) {

View file

@ -393,9 +393,11 @@ public class PinnedTimelineHelper {
switch (pinnedTimeline.type) {
case LIST:
tabCustomViewBinding.icon.setImageResource(R.drawable.ic_tl_list);
tab.setContentDescription(activity.getString(R.string.cd_list_timeline, name));
break;
case TAG:
tabCustomViewBinding.icon.setImageResource(R.drawable.ic_tl_tag);
tab.setContentDescription("#" + name);
break;
case REMOTE:
switch (pinnedTimeline.remoteInstance.type) {
@ -422,6 +424,7 @@ public class PinnedTimelineHelper {
tabCustomViewBinding.icon.setImageResource(R.drawable.peertube_icon);
break;
}
tab.setContentDescription(name);
break;
}
tab.setCustomView(tabCustomViewBinding.getRoot());
@ -430,24 +433,31 @@ public class PinnedTimelineHelper {
switch (pinnedTimeline.type) {
case HOME:
tabCustomDefaultViewBinding.icon.setImageResource(R.drawable.ic_baseline_home_24);
tab.setContentDescription(R.string.tab_home_timeline);
break;
case LOCAL:
tabCustomDefaultViewBinding.icon.setImageResource(R.drawable.ic_baseline_supervisor_account_24);
tab.setContentDescription(R.string.tab_local_timeline);
break;
case PUBLIC:
tabCustomDefaultViewBinding.icon.setImageResource(R.drawable.ic_baseline_public_24);
tab.setContentDescription(R.string.tab_public_timeline);
break;
case NOTIFICATION:
tabCustomDefaultViewBinding.icon.setImageResource(R.drawable.ic_baseline_notifications_24);
tab.setContentDescription(R.string.notifications);
break;
case DIRECT:
tabCustomDefaultViewBinding.icon.setImageResource(R.drawable.ic_baseline_mail_24);
tab.setContentDescription(R.string.tab_private_mentions);
break;
case BUBBLE:
tabCustomDefaultViewBinding.icon.setImageResource(R.drawable.ic_baseline_bubble_chart_24);
tab.setContentDescription(R.string.tab_bubble_timeline);
break;
case TREND_MESSAGE:
tabCustomDefaultViewBinding.icon.setImageResource(R.drawable.baseline_moving_24);
tab.setContentDescription(R.string.trending);
break;
}
tab.setCustomView(tabCustomDefaultViewBinding.getRoot());

View file

@ -135,12 +135,22 @@ public class SpannableHelper {
public static Spannable convert(Context context, String text,
Status status, Account account, Announcement announcement,
WeakReference<View> viewWeakReference, Status.Callback callback, boolean convertHtml, boolean convertMarkdown) {
return convert(context, text, status, account, announcement, false, viewWeakReference, callback, convertHtml, convertMarkdown);
return convert(context, text, status, account, announcement, false, viewWeakReference, callback, convertHtml, convertMarkdown, false);
}
public static Spannable convert(Context context, String text,
Status status, Account account, Announcement announcement, boolean checkRemotely,
WeakReference<View> viewWeakReference, Status.Callback callback, boolean convertHtml, boolean convertMarkdown) {
Status status, Account account, Announcement announcement, WeakReference<View> viewWeakReference,
Status.Callback callback, boolean convertHtml, boolean convertMarkdown, boolean keepOriginalBottomHashTags) {
return convert(context, text, status, account, announcement, false, viewWeakReference, callback, convertHtml, convertMarkdown, keepOriginalBottomHashTags);
}
/**
* @param keepOriginalBottomHashTags set this to {@code true} to preserve original bottom hash tags. For example, in account note
* <i>(profile bio/description)</i> in {@link app.fedilab.android.mastodon.activities.ProfileActivity ProfileActivity}
*/
public static Spannable convert(Context context, String text, Status status, Account account, Announcement announcement,
boolean checkRemotely, WeakReference<View> viewWeakReference, Status.Callback callback,
boolean convertHtml, boolean convertMarkdown, boolean keepOriginalBottomHashTags) {
if (text == null) {
return null;
}
@ -395,7 +405,7 @@ public class SpannableHelper {
}
boolean underlineBottomHashTags = sharedpreferences.getBoolean(context.getString(R.string.SET_UNDERLINE_BOTTOM_HASHTAGS), true);
if(underlineBottomHashTags) {
if(underlineBottomHashTags && !keepOriginalBottomHashTags) {
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
final Pattern bottomTagsPattern = Pattern.compile(patternBottomTags, Pattern.CASE_INSENSITIVE);
Matcher matcherBottomTags = bottomTagsPattern.matcher(content);
@ -1052,12 +1062,14 @@ public class SpannableHelper {
popupHashtagsBinding.muteTag.setOnClickListener(v -> {
Filter fedilabFilter = null;
if(MainActivity.mainFilters != null) {
for (Filter filter : MainActivity.mainFilters) {
if (filter.title.equals(Helper.FEDILAB_MUTED_HASHTAGS)) {
fedilabFilter = filter;
break;
}
}
}
//Filter for Fedilab doesn't exist we have to create it
if (fedilabFilter == null) {
Filter.FilterParams filterParams = new Filter.FilterParams();
@ -1071,7 +1083,7 @@ public class SpannableHelper {
FiltersVM filtersVM = new ViewModelProvider((ViewModelStoreOwner) context).get(FiltersVM.class);
filtersVM.addFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterParams)
.observe((LifecycleOwner) context, filter -> {
if (filter != null) {
if (filter != null && MainActivity.mainFilters != null) {
MainActivity.mainFilters.add(filter);
addTagToFilter(context, tag, status, filter);
}

View file

@ -1880,6 +1880,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
holder.binding.buttonPost.setEnabled(!statusDraft.submitted);
holder.binding.buttonPost.setOnClickListener(v -> {
v.setEnabled(false);
statusDraft.submitted = true;
notifyItemChanged(position);
manageDrafts.onSubmit(prepareDraft(statusList, this, account.instance, account.user_id));

View file

@ -72,15 +72,15 @@ public class ReorderBottomMenuAdapter extends RecyclerView.Adapter<RecyclerView.
switch (bottomMenu.bottom_menu.get(position).item_menu_type) {
case HOME:
holder.binding.icon.setImageResource(R.drawable.ic_baseline_home_24);
title = context.getString(R.string.home_menu);
title = context.getString(R.string.tab_home_timeline);
break;
case LOCAL:
holder.binding.icon.setImageResource(R.drawable.ic_baseline_people_alt_24);
title = context.getString(R.string.local);
title = context.getString(R.string.tab_local_timeline);
break;
case PUBLIC:
holder.binding.icon.setImageResource(R.drawable.ic_baseline_public_24);
title = context.getString(R.string.v_public);
title = context.getString(R.string.tab_public_timeline);
break;
case NOTIFICATION:
holder.binding.icon.setImageResource(R.drawable.ic_baseline_notifications_24);
@ -88,7 +88,7 @@ public class ReorderBottomMenuAdapter extends RecyclerView.Adapter<RecyclerView.
break;
case DIRECT:
holder.binding.icon.setImageResource(R.drawable.ic_baseline_mail_24);
title = context.getString(R.string.v_private);
title = context.getString(R.string.tab_private_mentions);
break;
}
holder.binding.text.setText(title);

View file

@ -117,26 +117,33 @@ public class ReorderTabAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
break;
case TAG:
holder.binding.icon.setImageResource(R.drawable.ic_baseline_label_24);
if (pinned.pinnedTimelines.get(position).tagTimeline.displayName != null)
holder.binding.text.setText(pinned.pinnedTimelines.get(position).tagTimeline.displayName);
else
holder.binding.text.setText(pinned.pinnedTimelines.get(position).tagTimeline.name);
if (pinned.pinnedTimelines.get(position).tagTimeline.displayName != null) {
String tagTimelineDisplayName = pinned.pinnedTimelines.get(position).tagTimeline.displayName;
holder.binding.text.setText(tagTimelineDisplayName);
holder.binding.getRoot().setContentDescription(context.getString(R.string.cd_hash_tag_timeline, tagTimelineDisplayName));
} else {
String tagTimelineName = pinned.pinnedTimelines.get(position).tagTimeline.name;
holder.binding.text.setText(tagTimelineName);
holder.binding.getRoot().setContentDescription("#" + tagTimelineName);
}
break;
case LIST:
String listTitle = pinned.pinnedTimelines.get(position).mastodonList.title;
holder.binding.icon.setImageResource(R.drawable.ic_baseline_view_list_24);
holder.binding.text.setText(pinned.pinnedTimelines.get(position).mastodonList.title);
holder.binding.text.setText(listTitle);
holder.binding.getRoot().setContentDescription(context.getString(R.string.cd_list_timeline, listTitle));
break;
case HOME:
holder.binding.icon.setImageResource(R.drawable.ic_baseline_home_24);
holder.binding.text.setText(R.string.home_menu);
holder.binding.text.setText(R.string.tab_home_timeline);
break;
case LOCAL:
holder.binding.icon.setImageResource(R.drawable.ic_baseline_supervisor_account_24);
holder.binding.text.setText(R.string.local_menu);
holder.binding.text.setText(R.string.tab_local_timeline);
break;
case PUBLIC:
holder.binding.icon.setImageResource(R.drawable.ic_baseline_public_24);
holder.binding.text.setText(R.string.v_public);
holder.binding.text.setText(R.string.tab_public_timeline);
break;
case NOTIFICATION:
holder.binding.icon.setImageResource(R.drawable.ic_baseline_notifications_24);
@ -144,11 +151,11 @@ public class ReorderTabAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
break;
case DIRECT:
holder.binding.icon.setImageResource(R.drawable.ic_baseline_mail_24);
holder.binding.text.setText(R.string.v_direct);
holder.binding.text.setText(R.string.tab_private_mentions);
break;
case BUBBLE:
holder.binding.icon.setImageResource(R.drawable.ic_baseline_bubble_chart_24);
holder.binding.text.setText(R.string.bubble);
holder.binding.text.setText(R.string.tab_bubble_timeline);
break;
case TREND_MESSAGE:
holder.binding.icon.setImageResource(R.drawable.baseline_moving_24);

View file

@ -71,7 +71,11 @@ public class SliderAdapter extends SliderViewAdapter<SliderAdapter.SliderAdapter
public void onBindViewHolder(SliderAdapterVH viewHolder, final int position) {
Attachment sliderItem = mSliderItems.get(position);
if (status.sensitive) {
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
final int timeout = sharedpreferences.getInt(context.getString(R.string.SET_NSFW_TIMEOUT), 5);
boolean expand_media = sharedpreferences.getBoolean(context.getString(R.string.SET_EXPAND_MEDIA), false);
if (status.sensitive && !expand_media) {
Glide.with(viewHolder.itemView)
.load(sliderItem.preview_url)
.fitCenter()
@ -83,9 +87,6 @@ public class SliderAdapter extends SliderViewAdapter<SliderAdapter.SliderAdapter
.fitCenter()
.into(viewHolder.binding.ivAutoImageSlider);
}
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
final int timeout = sharedpreferences.getInt(context.getString(R.string.SET_NSFW_TIMEOUT), 5);
boolean expand_media = sharedpreferences.getBoolean(context.getString(R.string.SET_EXPAND_MEDIA), false);
viewHolder.itemView.setOnClickListener(v -> {
if (status.sensitive && !expand_media) {

View file

@ -57,6 +57,7 @@ import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Looper;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.util.TypedValue;
@ -85,6 +86,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;
import androidx.core.app.ActivityOptionsCompat;
import androidx.core.content.ContextCompat;
import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ViewModelProvider;
@ -1345,8 +1347,8 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (status.isFocused) {
holder.binding.statusInfo.setVisibility(View.VISIBLE);
holder.binding.reblogsCount.setText(String.valueOf(status.reblogs_count));
holder.binding.favoritesCount.setText(String.valueOf(status.favourites_count));
holder.binding.reblogInfo.setText(String.valueOf(status.reblogs_count));
holder.binding.favouriteInfo.setText(String.valueOf(status.favourites_count));
if (statusToDeal.edited_at != null) {
holder.binding.editTime.setText(context.getString(R.string.edited_message_at, Helper.longDateToString(status.edited_at)));
@ -1378,6 +1380,10 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
} else {
holder.binding.app.setVisibility(View.GONE);
}
if (statusToDeal.language != null) {
holder.binding.language.setText(statusToDeal.language.toUpperCase());
holder.binding.language.setVisibility(View.VISIBLE);
} else holder.binding.language.setVisibility(View.VISIBLE);
} else {
holder.binding.app.setVisibility(View.GONE);
@ -1517,18 +1523,33 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
TextView.BufferType.SPANNABLE);
boolean underlineBottomHashTags = sharedpreferences.getBoolean(context.getString(R.string.SET_UNDERLINE_BOTTOM_HASHTAGS), true);
if(underlineBottomHashTags) {
int link_color;
boolean customLight = sharedpreferences.getBoolean(context.getString(R.string.SET_CUSTOMIZE_LIGHT_COLORS), false);
boolean customDark = sharedpreferences.getBoolean(context.getString(R.string.SET_CUSTOMIZE_DARK_COLORS), false);
int linkColor = -1;
if (currentNightMode == Configuration.UI_MODE_NIGHT_NO && customLight) {
link_color = sharedpreferences.getInt(context.getString(R.string.SET_LIGHT_LINK), -1);
if (link_color != -1) {
linkColor = link_color;
}
} else if (currentNightMode == Configuration.UI_MODE_NIGHT_YES && customDark) {
link_color = sharedpreferences.getInt(context.getString(R.string.SET_DARK_LINK), -1);
if (link_color != -1) {
linkColor = link_color;
}
}
if (statusToDeal.getBottomTags().length > 0) {
holder.binding.statusHashtags.setVisibility(View.VISIBLE);
holder.binding.statusHashtags.removeAllViews();
int index = 0;
for (String tag : statusToDeal.getBottomTags()) {
if(!statusToDeal.bottomTagsAllDisplayed && index > 2 && statusToDeal.getBottomTags().length > 3) {
int remaining = statusToDeal.getBottomTags().length - 3;
if(!statusToDeal.bottomTagsAllDisplayed && index > 2 && statusToDeal.getBottomTags().length > 3 && remaining > 1) {
Chip chip = new Chip(context);
chip.setClickable(true);
chip.setEnsureMinTouchTargetSize(false);
int remaining = statusToDeal.getBottomTags().length - 3;
chip.setText(context.getString(R.string.remaining_tags, remaining));
chip.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorPrimary));
chip.setTextColor(linkColor == - 1 ?ThemeHelper.getAttColor(context, R.attr.colorPrimary):linkColor);
chip.setOnClickListener(v -> {
statusToDeal.bottomTagsAllDisplayed = true;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
@ -1540,7 +1561,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
chip.setClickable(true);
chip.setEnsureMinTouchTargetSize(false);
chip.setText(tag);
chip.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorPrimary));
chip.setTextColor(linkColor == - 1 ?ThemeHelper.getAttColor(context, R.attr.colorPrimary):linkColor);
chip.setOnLongClickListener(v->{
SpannableHelper.longPressHashTags(context, statusToDeal, tag);
return true;
@ -1587,12 +1608,12 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
}
if (statusToDeal.translationContent != null) {
holder.binding.containerTrans.setVisibility(View.VISIBLE);
holder.binding.statusContentTranslated.setText(
statusToDeal.getSpanTranslate(context,
Spannable translatedText = statusToDeal.getSpanTranslate(context,
new WeakReference<>(holder.binding.statusContentTranslated), () -> {
recyclerView.post(() -> adapter.notifyItemChanged(holder.getBindingAdapterPosition()));
}),
TextView.BufferType.SPANNABLE);
});
holder.binding.statusContentTranslated.setText(translatedText, TextView.BufferType.SPANNABLE);
holder.binding.containerTrans.setContentDescription(context.getString(R.string.cd_translated_content, translatedText));
} else {
holder.binding.containerTrans.setVisibility(View.GONE);
}
@ -1616,11 +1637,12 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.card.setVisibility(View.GONE);
}
if (measuredWidth <= 0 && statusToDeal.media_attachments != null && statusToDeal.media_attachments.size() > 0) {
boolean finalFullAttachement = fullAttachement;
holder.binding.mediaContainer.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
holder.binding.mediaContainer.getViewTreeObserver().removeOnGlobalLayoutListener(this);
if (fullAttachement) {
if (finalFullAttachement) {
measuredWidth = holder.binding.mediaContainer.getWidth();
} else {
measuredWidth = holder.binding.media.mediaContainer.getWidth();
@ -1681,6 +1703,43 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.media.mediaContainer.setVisibility(View.VISIBLE);
int mediaPosition = 1;
boolean autoplaygif = sharedpreferences.getBoolean(context.getString(R.string.SET_AUTO_PLAY_GIG_MEDIA), false);
for (Attachment attachment : statusToDeal.media_attachments) {
float ratio = 1.0f;
float mediaH = -1.0f;
float mediaW = -1.0f;
if (attachment.meta != null && attachment.meta.getSmall() != null) {
mediaH = attachment.meta.getSmall().height;
mediaW = attachment.meta.getSmall().width;
if (mediaW != 0) {
ratio = measuredWidth > 0 ? measuredWidth / mediaW : 1.0f;
}
}
if(ratio >= 5) {
fullAttachement = false;
}
LayoutMediaBinding layoutMediaBinding = LayoutMediaBinding.inflate(LayoutInflater.from(context));
if ((fullAttachement && (!statusToDeal.sensitive || expand_media))) {
holder.binding.mediaContainer.addView(layoutMediaBinding.getRoot());
} else {
if (mediaPosition == 1) {
holder.binding.media.media1Container.addView(layoutMediaBinding.getRoot());
} else if (mediaPosition == 2 && statusToDeal.media_attachments.size() == 3) {
if (statusToDeal.media_attachments.get(0).meta != null && statusToDeal.media_attachments.get(0).meta.getSmall() != null && statusToDeal.media_attachments.get(0).meta.getSmall().width < statusToDeal.media_attachments.get(0).meta.getSmall().height) {
holder.binding.media.media2Container.addView(layoutMediaBinding.getRoot());
} else {
holder.binding.media.media3Container.addView(layoutMediaBinding.getRoot());
}
} else if (mediaPosition == 2) {
holder.binding.media.media2Container.addView(layoutMediaBinding.getRoot());
} else if (mediaPosition == 3 && statusToDeal.media_attachments.size() == 3) {
holder.binding.media.media4Container.addView(layoutMediaBinding.getRoot());
} else if (mediaPosition == 3) {
holder.binding.media.media3Container.addView(layoutMediaBinding.getRoot());
} else if (mediaPosition == 4) {
holder.binding.media.media4Container.addView(layoutMediaBinding.getRoot());
}
}
if (!fullAttachement || statusToDeal.sensitive) {
int defaultHeight = (int) Helper.convertDpToPixel(300, context);
int orientation = context.getResources().getConfiguration().orientation;
@ -1737,42 +1796,9 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.media.moreMedia.setText(context.getString(R.string.more_media, "+" + (statusToDeal.media_attachments.size() - 4)));
}
}
for (Attachment attachment : statusToDeal.media_attachments) {
LayoutMediaBinding layoutMediaBinding = LayoutMediaBinding.inflate(LayoutInflater.from(context));
if ((fullAttachement && (!statusToDeal.sensitive || expand_media))) {
holder.binding.mediaContainer.addView(layoutMediaBinding.getRoot());
} else {
if (mediaPosition == 1) {
holder.binding.media.media1Container.addView(layoutMediaBinding.getRoot());
} else if (mediaPosition == 2 && statusToDeal.media_attachments.size() == 3) {
if (statusToDeal.media_attachments.get(0).meta != null && statusToDeal.media_attachments.get(0).meta.getSmall() != null && statusToDeal.media_attachments.get(0).meta.getSmall().width < statusToDeal.media_attachments.get(0).meta.getSmall().height) {
holder.binding.media.media2Container.addView(layoutMediaBinding.getRoot());
} else {
holder.binding.media.media3Container.addView(layoutMediaBinding.getRoot());
}
} else if (mediaPosition == 2) {
holder.binding.media.media2Container.addView(layoutMediaBinding.getRoot());
} else if (mediaPosition == 3 && statusToDeal.media_attachments.size() == 3) {
holder.binding.media.media4Container.addView(layoutMediaBinding.getRoot());
} else if (mediaPosition == 3) {
holder.binding.media.media3Container.addView(layoutMediaBinding.getRoot());
} else if (mediaPosition == 4) {
holder.binding.media.media4Container.addView(layoutMediaBinding.getRoot());
}
}
if (fullAttachement && (!statusToDeal.sensitive || expand_media)) {
float ratio = 1.0f;
float mediaH = -1.0f;
float mediaW = -1.0f;
if (attachment.meta != null && attachment.meta.getSmall() != null) {
mediaH = attachment.meta.getSmall().height;
mediaW = attachment.meta.getSmall().width;
if (mediaW != 0) {
ratio = measuredWidth > 0 ? measuredWidth / mediaW : 1.0f;
}
}
if (autoplaygif && attachment.type.equalsIgnoreCase("gifv") && mediaPosition == 1) {
layoutMediaBinding.media.setVisibility(View.GONE);
@ -1858,6 +1884,14 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
});
ViewCompat.addAccessibilityAction(
layoutMediaBinding.mediaVideo,
context.getString(statusToDeal.sensitive ? R.string.cd_show_media : R.string.cd_hide_media),
(view, arguments) -> {
statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
return true;
});
} else {
loadAndAddAttachment(context, layoutMediaBinding, holder, adapter, mediaPosition, mediaW, mediaH, ratio, statusToDeal, attachment);
}
@ -1940,6 +1974,14 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
});
ViewCompat.addAccessibilityAction(
layoutMediaBinding.mediaVideo,
context.getString(statusToDeal.sensitive ? R.string.cd_show_media : R.string.cd_hide_media),
(view, arguments) -> {
statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
return true;
});
} else {
loadAndAddAttachment(context, layoutMediaBinding, holder, adapter, mediaPosition, -1.f, -1.f, -1.f, statusToDeal, attachment);
}
@ -2868,6 +2910,10 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (isArt) {
fullAttachement = true;
}
float ratio = measuredWidth > 0 ? measuredWidth / mediaW : 1.0f;
if(ratio >= 5) {
fullAttachement = false;
}
boolean expand_media = sharedpreferences.getBoolean(context.getString(R.string.SET_EXPAND_MEDIA), false);
RequestBuilder<Drawable> requestBuilder;
GlideRequests glideRequests = GlideApp.with(context);
@ -2909,12 +2955,14 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
Status statusToDeal, Attachment attachment) {
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
final int timeout = sharedpreferences.getInt(context.getString(R.string.SET_NSFW_TIMEOUT), 5);
boolean fullAttachement = sharedpreferences.getBoolean(context.getString(R.string.SET_FULL_PREVIEW), false);
boolean long_press_media = sharedpreferences.getBoolean(context.getString(R.string.SET_LONG_PRESS_STORE_MEDIA), false);
boolean expand_media = sharedpreferences.getBoolean(context.getString(R.string.SET_EXPAND_MEDIA), false);
LinearLayout.LayoutParams lp;
boolean fullAttachement = sharedpreferences.getBoolean(context.getString(R.string.SET_FULL_PREVIEW), false);
if(ratio >= 5) {
fullAttachement = false;
}
if (fullAttachement && mediaH > 0 && (!statusToDeal.sensitive || expand_media)) {
lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) (mediaH * ratio));
layoutMediaBinding.media.setScaleType(ImageView.ScaleType.FIT_CENTER);
@ -2972,9 +3020,9 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
RequestBuilder<Drawable> requestBuilder = prepareRequestBuilder(context, attachment, mediaW * ratio, mediaH * ratio, focusX, focusY, statusToDeal.sensitive, false);
if (!statusToDeal.sensitive || expand_media) {
layoutMediaBinding.viewHide.setImageResource(R.drawable.ic_baseline_visibility_24);
layoutMediaBinding.viewHide.setIconResource(R.drawable.ic_baseline_visibility_24);
} else {
layoutMediaBinding.viewHide.setImageResource(R.drawable.ic_baseline_visibility_off_24);
layoutMediaBinding.viewHide.setIconResource(R.drawable.ic_baseline_visibility_off_24);
}
requestBuilder.load(attachment.preview_url).into(layoutMediaBinding.media);
if (statusToDeal.sensitive) {
@ -3019,6 +3067,14 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
});
ViewCompat.addAccessibilityAction(
layoutMediaBinding.media,
context.getString(statusToDeal.sensitive ? R.string.cd_show_media : R.string.cd_hide_media),
(view, arguments) -> {
statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
return true;
});
if ((!statusToDeal.sensitive || expand_media) && (fullAttachement)) {
layoutMediaBinding.getRoot().setPadding(0, 0, 0, 10);
@ -3151,11 +3207,10 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.poll.pollInfo.setTextColor(theme_text_color);
holder.binding.cardDescription.setTextColor(theme_text_color);
holder.binding.time.setTextColor(theme_text_color);
holder.binding.reblogsCount.setTextColor(theme_text_color);
holder.binding.favoritesCount.setTextColor(theme_text_color);
holder.binding.favoritesCount.setTextColor(theme_text_color);
Helper.changeDrawableColor(context, holder.binding.repeatInfo, theme_text_color);
Helper.changeDrawableColor(context, holder.binding.favInfo, theme_text_color);
holder.binding.reblogInfo.setTextColor(theme_text_color);
holder.binding.favouriteInfo.setTextColor(theme_text_color);
Helper.changeDrawableColor(context, holder.binding.reblogInfo, theme_text_color);
Helper.changeDrawableColor(context, holder.binding.favouriteInfo, theme_text_color);
Helper.changeDrawableColor(context, R.drawable.ic_baseline_lock_24, theme_text_color);
}
if (theme_text_header_1_line != -1) {

View file

@ -45,6 +45,7 @@ import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.constraintlayout.widget.ConstraintSet;
import androidx.core.app.ActivityOptionsCompat;
import androidx.core.content.ContextCompat;
import androidx.core.view.ViewCompat;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelStoreOwner;
@ -161,9 +162,9 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter<RecyclerVie
RequestBuilder<Drawable> requestBuilder = prepareRequestBuilder(context, attachment, mediaW * ratio, mediaH * ratio, focusX, focusY, status.sensitive, false);
if (!status.sensitive || expand_media) {
layoutMediaBinding.viewHide.setImageResource(R.drawable.ic_baseline_visibility_24);
layoutMediaBinding.viewHide.setIconResource(R.drawable.ic_baseline_visibility_24);
} else {
layoutMediaBinding.viewHide.setImageResource(R.drawable.ic_baseline_visibility_off_24);
layoutMediaBinding.viewHide.setIconResource(R.drawable.ic_baseline_visibility_off_24);
}
requestBuilder.load(attachment.preview_url).into(layoutMediaBinding.media);
if (status.sensitive) {
@ -208,7 +209,14 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter<RecyclerVie
status.sensitive = !status.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
});
ViewCompat.addAccessibilityAction(
layoutMediaBinding.media,
context.getString(status.sensitive ? R.string.cd_show_media : R.string.cd_hide_media),
(view, arguments) -> {
status.sensitive = !status.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
return true;
});
}
@NotNull
@ -687,6 +695,14 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter<RecyclerVie
status.sensitive = !status.sensitive;
notifyItemChanged(holder.getBindingAdapterPosition());
});
ViewCompat.addAccessibilityAction(
layoutMediaBinding.mediaVideo,
context.getString(status.sensitive ? R.string.cd_show_media : R.string.cd_hide_media),
(view, arguments) -> {
status.sensitive = !status.sensitive;
notifyItemChanged(holder.getBindingAdapterPosition());
return true;
});
} else {
loadAndAddAttachment(context, layoutMediaBinding, holder, this, mediaPosition, -1.f, -1.f, -1.f, status, attachment);
}

View file

@ -32,6 +32,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.OptIn;
import androidx.core.app.ActivityCompat;
import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.media3.common.MediaItem;
@ -60,6 +61,7 @@ import app.fedilab.android.mastodon.client.entities.api.Attachment;
import app.fedilab.android.mastodon.helper.CacheDataSourceFactory;
import app.fedilab.android.mastodon.helper.Helper;
import app.fedilab.android.mastodon.helper.MediaHelper;
import app.fedilab.android.mastodon.helper.TranslateHelper;
import app.fedilab.android.mastodon.viewmodel.mastodon.TimelinesVM;
import es.dmoral.toasty.Toasty;
@ -74,6 +76,8 @@ public class FragmentMedia extends Fragment {
private boolean swipeEnabled;
private FragmentSlideMediaBinding binding;
private SlidrInterface slidrInterface;
private int mediaPictureTranslateAccessibilityActionId = 0;
private int mediaVideoTranslateAccessibilityActionId = 0;
private boolean visible = false;
@ -124,7 +128,6 @@ public class FragmentMedia extends Fragment {
enableSliding(true);
}
});
binding.mediaPicture.setContentDescription(attachment.description);
binding.mediaPicture.setOnClickListener(v -> {
if (isAdded()) {
((MediaActivity) requireActivity()).toogleFullScreen();
@ -137,6 +140,37 @@ public class FragmentMedia extends Fragment {
}
});
if (attachment.description != null) {
binding.mediaPicture.setContentDescription(attachment.description);
mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaPicture, getString(R.string.translate), (view2, arguments) -> {
translate();
return true;
});
binding.mediaVideo.setContentDescription(attachment.description);
mediaVideoTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaVideo, getString(R.string.translate), (view2, arguments) -> {
translate();
return true;
});
}
mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaPicture, getString(R.string.download), (view2, arguments) -> {
((MediaActivity) requireActivity()).saveMedia();
return true;
});
mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaVideo, getString(R.string.download), (view2, arguments) -> {
((MediaActivity) requireActivity()).saveMedia();
return true;
});
mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaPicture, getString(R.string.share), (view2, arguments) -> {
((MediaActivity) requireActivity()).shareMedia();
return true;
});
mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaVideo, getString(R.string.share), (view2, arguments) -> {
((MediaActivity) requireActivity()).shareMedia();
return true;
});
String type = attachment.type;
String preview_url = attachment.preview_url;
if (type.equalsIgnoreCase("unknown")) {
@ -267,6 +301,23 @@ public class FragmentMedia extends Fragment {
}
}
public void translate() {
if (attachment.translation == null) TranslateHelper.translate(
requireContext(),
attachment.description,
((MediaActivity) requireActivity()).getStatusLanguageForTranslation(),
translated -> {
attachment.translation = translated;
String translatedMediaDescription = getString(R.string.cd_translated_media_description, attachment.translation);
binding.mediaPicture.setContentDescription(translatedMediaDescription);
ViewCompat.removeAccessibilityAction(binding.mediaPicture, mediaPictureTranslateAccessibilityActionId);
binding.mediaVideo.setContentDescription(translatedMediaDescription);
ViewCompat.removeAccessibilityAction(binding.mediaVideo, mediaVideoTranslateAccessibilityActionId);
});
}
@androidx.annotation.OptIn(markerClass = androidx.media3.common.util.UnstableApi.class)
private void loadVideo(String url, String type) {
if (binding == null || !isAdded() || getActivity() == null || url == null) {

View file

@ -514,7 +514,9 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
initializeView();
needToCallResume = false;
}
try {
ContextCompat.registerReceiver(requireActivity(), receive_action, new IntentFilter(Helper.RECEIVE_STATUS_ACTION), ContextCompat.RECEIVER_NOT_EXPORTED);
}catch (Exception ignored){}
}
/**

View file

@ -104,15 +104,23 @@ public class TimelinesVM extends AndroidViewModel {
private static void sortDesc(List<Status> statusList) {
if(statusList == null) {
return;
}
Collections.sort(statusList, (obj1, obj2) -> obj2.id.compareToIgnoreCase(obj1.id));
}
public static void sortAsc(List<Status> statusList) {
if(statusList == null) {
return;
}
Collections.sort(statusList, (obj1, obj2) -> obj1.id.compareToIgnoreCase(obj2.id));
}
private static void sortDescConv(List<Conversation> conversationList) {
if(conversationList == null) {
return;
}
Collections.sort(conversationList, (obj1, obj2) -> obj2.id.compareToIgnoreCase(obj1.id));
}

View file

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:pathData="m58.47,25.62c-2.64,-0.04 -5.33,0.44 -7.93,1.5 -1.4,0.57 -2.7,1.27 -3.89,2.1 -7.68,5.29 -10.94,15.38 -7.28,24.38 0.72,1.77 1.67,3.39 2.79,4.83l5.88,-10.07c0.58,-1 0.46,-2.48 -0.26,-3.31h-0l-0.4,-0.97c-1.31,-3.22 -0,-6.85 2.92,-8.55 0.27,-0.16 0.56,-0.3 0.86,-0.42 3.52,-1.43 7.53,0.26 8.97,3.79l0.25,0.61c0.12,0.69 1.15,1.39 2.3,1.55l1.18,0.17c1.14,0.16 2.52,-0.54 3.06,-1.56 0,0 0.5,-0.95 2.06,-1.59 2.64,-1.07 5.66,0.2 6.73,2.84 0.07,0.17 0.12,0.34 0.17,0.5 0.18,0.39 0.5,0.59 0.81,0.69l1.49,0.13c-0.25,-1.33 -0.63,-2.65 -1.16,-3.96 -3.17,-7.8 -10.63,-12.56 -18.55,-12.67zM62.09,43.75c-1.07,-0.01 -2.26,0.65 -2.77,1.56 0,0 -0.97,1.73 -2.97,2.55 -1.64,0.66 -2.85,0.46 -2.85,0.46 -1.14,-0.2 -2.54,0.46 -3.13,1.46l-1.95,3.34c-0.59,1.02 -0.99,2.36 0.61,2.36h1.36c1.31,0 2.96,-0.92 3.64,-2.04 0,0 1.24,-2.02 3.69,-2.07 2.85,-0.06 5.21,2.21 5.27,5.06 0,0.04 0,0.07 0,0.11h-0c-0,2.8 -2.24,5.1 -5.06,5.16 -2.52,0.05 -3.88,-2.09 -3.88,-2.09 -0.7,-1.11 -2.36,-2.02 -3.67,-2.02l-3.34,0.02c-0.63,0.03 -1.29,0.17 -1.74,0.83l-1.23,2.11c-0.15,0.26 -0.3,0.52 -0.46,0.78 -0.58,1 -1.98,1.63 -3.12,1.41 0,0 -1.87,-0.36 -3.83,0.44 -4.07,1.66 -6.03,6.3 -4.38,10.37 1.66,4.07 6.3,6.03 10.37,4.38s6.03,-6.3 4.38,-10.37c-0.49,-1.2 -0.73,-1.46 -0.73,-1.46 -0.78,-0.85 -0.94,-2.36 -0.36,-3.35l0.18,-0.46c5.5,4.06 12.93,5.25 19.72,2.48 4.19,-1.7 7.5,-4.65 9.69,-8.24 2.06,-3.38 3.12,-7.34 2.97,-11.38l-2.02,-0.18s-0.74,0.15 -1.18,0.61c-0.08,0.12 -0.16,0.25 -0.24,0.36 -0.03,0.07 -0.07,0.11 -0.12,0.15 -0.53,0.67 -1.24,1.21 -2.09,1.55 -1.24,0.5 -2.55,0.49 -3.71,0.07 -0,-0 -0,-0 -0,-0h-0c-0.01,-0.01 -0.03,-0.01 -0.04,-0.02 -0.06,-0.02 -0.13,-0.05 -0.19,-0.07 -0.08,-0.03 -0.15,-0.07 -0.22,-0.1h-0c-0.07,-0.04 -0.15,-0.07 -0.22,-0.11 -0.07,-0.04 -0.14,-0.08 -0.21,-0.12h-0c-0.07,-0.04 -0.14,-0.09 -0.21,-0.13 -0.07,-0.05 -0.14,-0.1 -0.2,-0.14 -0.07,-0.05 -0.13,-0.1 -0.2,-0.15v-0c-0.04,-0.04 -0.09,-0.07 -0.13,-0.11 -0.02,-0.02 -0.04,-0.03 -0.06,-0.05 -0.06,-0.06 -0.12,-0.11 -0.18,-0.17 -0.06,-0.06 -0.12,-0.12 -0.17,-0.18 -0.11,-0.12 -0.22,-0.26 -0.32,-0.39 -0.05,-0.07 -0.1,-0.14 -0.15,-0.21 -0.19,-0.29 -0.35,-0.6 -0.49,-0.93l-0.07,-0.18c-0,-0.01 -0.01,-0.03 -0.02,-0.04 -0.02,-0.02 -0.05,-0.04 -0.08,-0.06 -0.01,-0.01 -0.02,-0.01 -0.03,-0.02 -0.02,-0.01 -0.05,-0.03 -0.08,-0.04 -0.03,-0.01 -0.06,-0.03 -0.1,-0.04 -0.14,-0.06 -0.32,-0.12 -0.54,-0.18v-0c-0.05,-0.01 -0.11,-0.03 -0.17,-0.04 -0,-0 -0.01,-0 -0.01,-0 -0.11,-0.03 -0.22,-0.05 -0.35,-0.08 -0,-0 -0.01,-0 -0.01,-0 -0.25,-0.05 -0.53,-0.1 -0.81,-0.14l-1.46,-0.21c-0.11,-0.02 -0.22,-0.02 -0.33,-0.02z"
android:strokeWidth="2"
android:strokeColor="#12d663"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillColor="#fff"
android:pathData="m75.54,56.53c2.06,-3.38 3.12,-7.34 2.97,-11.38l-2.02,-0.18s-0.74,0.15 -1.18,0.61c-0.08,0.12 -0.16,0.25 -0.24,0.36h-0c-0.03,0.07 -0.07,0.11 -0.12,0.15 -0.53,0.67 -1.24,1.21 -2.08,1.55 -1.24,0.5 -2.55,0.49 -3.72,0.07 -0,-0 -0,-0 -0,-0 0,-0 0,-0 -0,-0 -0.01,-0.01 -0.03,-0.01 -0.04,-0.02 -0.06,-0.02 -0.13,-0.05 -0.19,-0.07 -0.08,-0.03 -0.15,-0.07 -0.23,-0.1 0,-0 0,-0 -0,-0 -0.07,-0.04 -0.15,-0.07 -0.22,-0.11 0,-0 0,-0 -0,-0 -0.07,-0.04 -0.14,-0.08 -0.21,-0.12 0,-0 0,-0 -0,-0 -0.07,-0.04 -0.14,-0.09 -0.21,-0.13 -0,-0 0,-0 0,-0 -0.07,-0.05 -0.14,-0.09 -0.2,-0.14 0,-0 0,-0 -0,-0 -0.07,-0.05 -0.13,-0.1 -0.2,-0.15 0,-0 0,-0 -0,-0 -0.04,-0.04 -0.09,-0.07 -0.13,-0.11 -0.02,-0.02 -0.04,-0.03 -0.06,-0.05 -0.06,-0.06 -0.12,-0.11 -0.18,-0.17 -0.06,-0.06 -0.12,-0.12 -0.17,-0.18v-0c-0.11,-0.12 -0.22,-0.26 -0.32,-0.39 -0.05,-0.07 -0.1,-0.14 -0.15,-0.21v-0c-0.19,-0.29 -0.36,-0.59 -0.49,-0.92l-0.07,-0.18c-0,-0.01 -0.01,-0.03 -0.02,-0.04 -0.02,-0.02 -0.05,-0.04 -0.08,-0.06 -0.01,-0.01 -0.02,-0.01 -0.02,-0.02 -0.02,-0.01 -0.05,-0.03 -0.08,-0.04 0,-0 0,-0 -0,-0 -0.03,-0.01 -0.06,-0.03 -0.1,-0.04 -0.14,-0.06 -0.32,-0.12 -0.54,-0.18 -0,-0 0,-0 0,-0 -0.05,-0.01 -0.11,-0.03 -0.17,-0.04v-0c-0,-0 -0.01,-0 -0.01,-0 -0.11,-0.03 -0.23,-0.05 -0.35,-0.08 -0,-0 -0.01,-0 -0.01,-0 -0.25,-0.05 -0.53,-0.1 -0.81,-0.14l-1.46,-0.21c-0.11,-0.02 -0.22,-0.02 -0.33,-0.02l0,-0c-1.07,-0.01 -2.26,0.65 -2.77,1.56 0,0 -0.97,1.73 -2.97,2.55 -1.64,0.66 -2.85,0.46 -2.85,0.46 -1.14,-0.2 -2.54,0.46 -3.12,1.46l-1.95,3.34c-0.59,1.02 -0.99,2.36 0.61,2.36h1.36c1.31,0 2.95,-0.92 3.64,-2.04 0,0 1.24,-2.02 3.69,-2.07 2.85,-0.06 5.21,2.21 5.27,5.06 0,0.04 0,0.07 0,0.11" />
<path
android:fillColor="#009639"
android:pathData="m62.99,56.53c-0,2.8 -2.24,5.1 -5.06,5.16 -2.52,0.05 -3.88,-2.08 -3.88,-2.08 -0.7,-1.11 -2.36,-2.02 -3.67,-2.02l-3.34,0.02c-0.63,0.03 -1.29,0.17 -1.74,0.83l-1.23,2.11c-0.15,0.26 -0.3,0.52 -0.46,0.78 -0.58,1 -1.98,1.63 -3.12,1.41 0,0 -1.87,-0.36 -3.83,0.44 -4.07,1.66 -6.03,6.3 -4.37,10.37 1.66,4.07 6.3,6.03 10.37,4.38s6.03,-6.3 4.37,-10.37c-0.49,-1.2 -0.73,-1.46 -0.73,-1.46 -0.78,-0.85 -0.94,-2.36 -0.36,-3.35l0.18,-0.46c5.5,4.06 12.92,5.24 19.72,2.48 4.19,-1.7 7.5,-4.65 9.69,-8.23" />
<path
android:fillColor="#ed2e38"
android:pathData="m46.65,29.21c-7.68,5.29 -10.94,15.38 -7.28,24.38 0.72,1.77 1.67,3.39 2.79,4.83l5.88,-10.06c0.58,-1 0.46,-2.49 -0.26,-3.31l-0,0 -0.4,-0.97c-1.31,-3.22 -0,-6.85 2.92,-8.55z" />
<path
android:fillColor="#000"
android:pathData="m50.29,35.53c0.27,-0.16 0.56,-0.3 0.86,-0.42 3.52,-1.43 7.54,0.26 8.97,3.78l0.25,0.61c0.12,0.69 1.15,1.39 2.3,1.55l1.18,0.17c1.14,0.16 2.52,-0.54 3.06,-1.56 0,0 0.5,-0.95 2.06,-1.59 2.64,-1.07 5.65,0.2 6.73,2.84 0.07,0.17 0.12,0.33 0.17,0.5 0.18,0.39 0.49,0.59 0.81,0.69l1.49,0.14c-0.25,-1.33 -0.63,-2.66 -1.16,-3.96 -4.23,-10.4 -16.08,-15.4 -26.48,-11.17 -1.4,0.57 -2.7,1.27 -3.89,2.1z" />
</vector>

View file

@ -0,0 +1,22 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillAlpha="1"
android:fillColor="#000"
android:pathData="m75.54,56.53c2.06,-3.38 3.12,-7.34 2.97,-11.38l-2.02,-0.18s-0.74,0.15 -1.18,0.61c-0.08,0.12 -0.16,0.25 -0.24,0.36h-0c-0.03,0.07 -0.07,0.11 -0.12,0.15 -0.53,0.67 -1.24,1.21 -2.08,1.55 -1.24,0.5 -2.55,0.49 -3.72,0.07 -0,-0 -0,-0 -0,-0 0,-0 0,-0 -0,-0 -0.01,-0.01 -0.03,-0.01 -0.04,-0.02 -0.06,-0.02 -0.13,-0.05 -0.19,-0.07 -0.08,-0.03 -0.15,-0.07 -0.23,-0.1 0,-0 0,-0 -0,-0 -0.07,-0.04 -0.15,-0.07 -0.22,-0.11 0,-0 0,-0 -0,-0 -0.07,-0.04 -0.14,-0.08 -0.21,-0.12 0,-0 0,-0 -0,-0 -0.07,-0.04 -0.14,-0.09 -0.21,-0.13 -0,-0 0,-0 0,-0 -0.07,-0.05 -0.14,-0.09 -0.2,-0.14 0,-0 0,-0 -0,-0 -0.07,-0.05 -0.13,-0.1 -0.2,-0.15 0,-0 0,-0 -0,-0 -0.04,-0.04 -0.09,-0.07 -0.13,-0.11 -0.02,-0.02 -0.04,-0.03 -0.06,-0.05 -0.06,-0.06 -0.12,-0.11 -0.18,-0.17 -0.06,-0.06 -0.12,-0.12 -0.17,-0.18v-0c-0.11,-0.12 -0.22,-0.26 -0.32,-0.39 -0.05,-0.07 -0.1,-0.14 -0.15,-0.21v-0c-0.19,-0.29 -0.36,-0.59 -0.49,-0.92l-0.07,-0.18c-0,-0.01 -0.01,-0.03 -0.02,-0.04 -0.02,-0.02 -0.05,-0.04 -0.08,-0.06 -0.01,-0.01 -0.02,-0.01 -0.02,-0.02 -0.02,-0.01 -0.05,-0.03 -0.08,-0.04 0,-0 0,-0 -0,-0 -0.03,-0.01 -0.06,-0.03 -0.1,-0.04 -0.14,-0.06 -0.32,-0.12 -0.54,-0.18 -0,-0 0,-0 0,-0 -0.05,-0.01 -0.11,-0.03 -0.17,-0.04v-0c-0,-0 -0.01,-0 -0.01,-0 -0.11,-0.03 -0.23,-0.05 -0.35,-0.08 -0,-0 -0.01,-0 -0.01,-0 -0.25,-0.05 -0.53,-0.1 -0.81,-0.14l-1.46,-0.21c-0.11,-0.02 -0.22,-0.02 -0.33,-0.02l0,-0c-1.07,-0.01 -2.26,0.65 -2.77,1.56 0,0 -0.97,1.73 -2.97,2.55 -1.64,0.66 -2.85,0.46 -2.85,0.46 -1.14,-0.2 -2.54,0.46 -3.12,1.46l-1.95,3.34c-0.59,1.02 -0.99,2.36 0.61,2.36h1.36c1.31,0 2.95,-0.92 3.64,-2.04 0,0 1.24,-2.02 3.69,-2.07 2.85,-0.06 5.21,2.21 5.27,5.06 0,0.04 0,0.07 0,0.11" />
<path
android:fillAlpha="0.8"
android:fillColor="#000"
android:pathData="m62.99,56.53c-0,2.8 -2.24,5.1 -5.06,5.16 -2.52,0.05 -3.88,-2.08 -3.88,-2.08 -0.7,-1.11 -2.36,-2.02 -3.67,-2.02l-3.34,0.02c-0.63,0.03 -1.29,0.17 -1.74,0.83l-1.23,2.11c-0.15,0.26 -0.3,0.52 -0.46,0.78 -0.58,1 -1.98,1.63 -3.12,1.41 0,0 -1.87,-0.36 -3.83,0.44 -4.07,1.66 -6.03,6.3 -4.37,10.37 1.66,4.07 6.3,6.03 10.37,4.38s6.03,-6.3 4.37,-10.37c-0.49,-1.2 -0.73,-1.46 -0.73,-1.46 -0.78,-0.85 -0.94,-2.36 -0.36,-3.35l0.18,-0.46c5.5,4.06 12.92,5.24 19.72,2.48 4.19,-1.7 7.5,-4.65 9.69,-8.23" />
<path
android:fillAlpha="0.6"
android:fillColor="#000"
android:pathData="m46.65,29.21c-7.68,5.29 -10.94,15.38 -7.28,24.38 0.72,1.77 1.67,3.39 2.79,4.83l5.88,-10.06c0.58,-1 0.46,-2.49 -0.26,-3.31l-0,0 -0.4,-0.97c-1.31,-3.22 -0,-6.85 2.92,-8.55z" />
<path
android:fillAlpha="0.4"
android:fillColor="#000"
android:pathData="m50.29,35.53c0.27,-0.16 0.56,-0.3 0.86,-0.42 3.52,-1.43 7.54,0.26 8.97,3.78l0.25,0.61c0.12,0.69 1.15,1.39 2.3,1.55l1.18,0.17c1.14,0.16 2.52,-0.54 3.06,-1.56 0,0 0.5,-0.95 2.06,-1.59 2.64,-1.07 5.65,0.2 6.73,2.84 0.07,0.17 0.12,0.33 0.17,0.5 0.18,0.39 0.49,0.59 0.81,0.69l1.49,0.14c-0.25,-1.33 -0.63,-2.66 -1.16,-3.96 -4.23,-10.4 -16.08,-15.4 -26.48,-11.17 -1.4,0.57 -2.7,1.27 -3.89,2.1z" />
</vector>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_bubbles_ps_background">#FFFFFF</color>
</resources>

View file

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="@android:color/white"
android:pathData="m88.49,53.86c0,6.8 -1.98,13.32 -5.37,18.71l13.86,13.89c6.79,-9.07 11.03,-20.41 11.03,-32.6 0,-12.19 -4.24,-23.53 -11.03,-32.6l-13.85,13.89c3.39,5.38 5.37,11.62 5.37,18.71z" />
<path
android:fillColor="@android:color/white"
android:pathData="m54.01,88.44c-18.95,0 -34.5,-15.59 -34.5,-34.58 0,-18.99 15.55,-34.58 34.49,-34.58 7.07,0 13.29,1.98 18.67,5.67l13.85,-13.89c-9.05,-6.81 -20.36,-11.06 -32.52,-11.06 -29.69,0 -54.01,24.09 -54.01,54.14 0,30.05 24.32,53.86 54.01,53.86 12.44,0 23.75,-4.25 32.8,-11.06l-13.85,-13.89c-5.37,3.4 -11.88,5.38 -18.94,5.38z" />
</vector>

View file

@ -24,104 +24,104 @@
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:orientation="vertical"
android:paddingHorizontal="12dp"
android:paddingVertical="24dp">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center"
app:srcCompat="@drawable/fedilab_logo_bubbles" />
<!-- About app name -->
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:gravity="center_horizontal"
android:text="@string/app_name"
android:textSize="20sp" />
<!-- About version -->
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/about_version"
tools:text="x.y.z"
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_horizontal"
android:textSize="16sp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/about_version_copy"
style="@style/Widget.Material3.Button.OutlinedButton"
android:layout_width="36dp"
android:layout_height="36dp"
app:iconGravity="textStart"
app:iconPadding="0dp"
android:layout_marginStart="10dp"
android:contentDescription="@string/copy_version"
app:icon="@drawable/ic_copy_link"/>
</androidx.appcompat.widget.LinearLayoutCompat>
android:layout_marginTop="6dp"
android:text="@string/app_name"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.Material3.TitleLarge" />
<!-- About developer -->
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/developer_title"
<!-- About version -->
<com.google.android.material.textview.MaterialTextView
android:id="@+id/about_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="10dp"
android:gravity="center_vertical"
android:padding="5dp"
android:text="@string/about_developer"
android:textColor="?colorPrimary"
android:textSize="16sp"
android:visibility="gone" />
android:layout_gravity="center"
android:layout_marginTop="6dp"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.Material3.BodyLarge"
tools:text="X.Y.Z" />
<com.google.android.material.button.MaterialButton
android:id="@+id/about_version_copy"
style="@style/Widget.Material3.Button.IconButton.Outlined"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="6dp"
android:contentDescription="@string/copy_version"
app:icon="@drawable/ic_copy_link" />
<!-- About developer -->
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/about_fediverse"
android:textAppearance="@style/TextAppearance.Material3.LabelLarge" />
<com.google.android.material.card.MaterialCardView
style="@style/Widget.Material3.CardView.Elevated"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/acccount_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:visibility="gone"
tools:visibility="visible">
android:padding="12dp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/account_pp"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_margin="10dp"
android:contentDescription="@string/profile_picture" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:orientation="vertical"
android:padding="10dp">
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/account_dn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textSize="16sp" />
android:text="Fedilab Apps"
android:textAppearance="@style/TextAppearance.Material3.BodyLarge"
tools:ignore="HardcodedText" />
<androidx.appcompat.widget.AppCompatTextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/account_un"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textSize="14sp" />
</androidx.appcompat.widget.LinearLayoutCompat>
android:textAppearance="@style/TextAppearance.Material3.BodyMedium"
tools:text="apps@toot.fedilab.app" />
</androidx.appcompat.widget.LinearLayoutCompat>
<com.google.android.material.button.MaterialButton
android:id="@+id/account_follow"
style="@style/Widget.Material3.Button.Icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_margin="10dp"
style="@style/Widget.Material3.Button.IconButton.Filled"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/make_an_action"
android:scaleType="fitCenter"
android:visibility="gone"
@ -132,119 +132,123 @@
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/txt_developers"
</com.google.android.material.card.MaterialCardView>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/donate_links"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:textSize="18sp"
android:visibility="gone" />
android:layout_marginTop="12dp"
android:orientation="vertical">
<com.google.android.material.button.MaterialButton
android:id="@+id/about_support"
style="@style/Widget.Material3.Button.OutlinedButton"
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/support_the_app_on_liberapay" />
android:text="@string/about_donate"
android:textAppearance="@style/TextAppearance.Material3.LabelLarge" />
<com.google.android.material.button.MaterialButton
android:id="@+id/about_support_paypal"
style="@style/Widget.Material3.Button.OutlinedButton"
android:id="@+id/donate_liberapay"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="PayPal"
android:layout_marginTop="6dp"
android:text="Liberapay"
app:icon="@drawable/ic_liberapay"
tools:ignore="HardcodedText" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/about_website"
android:layout_width="match_parent"
<com.google.android.material.button.MaterialButton
android:id="@+id/donate_opencollective"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="6dp"
android:text="OpenCollective"
app:icon="@drawable/ic_opencollective"
tools:ignore="HardcodedText" />
<com.google.android.material.button.MaterialButton
android:id="@+id/donate_paypal"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="PayPal"
app:icon="@drawable/ic_paypal"
tools:ignore="HardcodedText" />
</androidx.appcompat.widget.LinearLayoutCompat>
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/about_website"
android:textAppearance="@style/TextAppearance.Material3.LabelLarge" />
<com.google.android.material.button.MaterialButton
android:id="@+id/about_website"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:autoLink="web"
android:gravity="center"
android:padding="10dp"
android:text="https://fedilab.app"
android:textSize="16sp"
android:text="fedilab.app"
app:icon="@drawable/ic_open_external"
tools:ignore="HardcodedText" />
<!-- About license -->
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="2"
android:gravity="center"
android:layout_marginTop="12dp"
android:text="@string/about_license"
android:textSize="16sp" />
android:textAppearance="@style/TextAppearance.Material3.LabelLarge" />
<com.google.android.material.button.MaterialButton
android:id="@+id/about_license"
android:layout_width="0dp"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="@string/about_license_action" />
</androidx.appcompat.widget.LinearLayoutCompat>
android:layout_marginTop="6dp"
android:text="@string/about_license_action"
app:icon="@drawable/ic_open_external" />
<!-- About license -->
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
<!-- Source code -->
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="2"
android:gravity="center"
android:layout_marginTop="12dp"
android:text="@string/about_code"
android:textSize="16sp" />
android:textAppearance="@style/TextAppearance.Material3.LabelLarge" />
<com.google.android.material.button.MaterialButton
android:id="@+id/about_code"
android:layout_width="0dp"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="@string/about_code_action" />
</androidx.appcompat.widget.LinearLayoutCompat>
android:layout_marginTop="6dp"
android:text="@string/about_code_action"
app:icon="@drawable/ic_open_external" />
<!-- About The Kinrar\'s API -->
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="2"
android:gravity="center"
android:layout_marginTop="12dp"
android:text="@string/about_thekinrar"
android:textSize="16sp" />
android:textAppearance="@style/TextAppearance.Material3.LabelLarge" />
<com.google.android.material.button.MaterialButton
android:id="@+id/about_thekinrar"
android:layout_width="0dp"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="@string/about_thekinrar_action" />
</androidx.appcompat.widget.LinearLayoutCompat>
android:layout_marginTop="6dp"
android:text="@string/about_thekinrar_action"
app:icon="@drawable/ic_open_external" />
</androidx.appcompat.widget.LinearLayoutCompat>
</ScrollView>

View file

@ -41,6 +41,11 @@
android:fitsSystemWindows="true"
app:layout_scrollFlags="scroll|enterAlways">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical">
<ImageView
android:id="@+id/profile_picture"
android:layout_width="30dp"
@ -56,6 +61,9 @@
android:layout_gravity="center_vertical"
android:ellipsize="end"
android:maxLines="1" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>

View file

@ -43,6 +43,7 @@
android:visibility="gone"
tools:visibility="visible"
app:layout_constraintStart_toStartOf="parent"
android:importantForAccessibility="noHideDescendants"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
@ -51,9 +52,8 @@
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingEnd="10dp"
android:importantForAccessibility="no"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_height="wrap_content"
android:maxHeight="300dp"
android:scrollbars="vertical"
android:layout_gravity="center_horizontal"
@ -74,7 +74,7 @@
android:paddingEnd="10dp"
android:maxHeight="300dp"
android:scrollbars="vertical"
android:layout_height="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom"
android:gravity="center"
android:textColor="#ffffffff"

View file

@ -64,16 +64,14 @@
tools:src="@tools:sample/backgrounds/scenic" />
<com.google.android.material.button.MaterialButton
android:id="@+id/qr_code_generator"
style="@style/Widget.Material3.Button.ElevatedButton"
android:layout_width="48dp"
android:layout_height="36dp"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:iconGravity="textStart"
app:iconPadding="0dp"
android:contentDescription="@string/qr_code_generator"
android:scaleType="fitCenter"
android:visibility="gone"
android:layout_marginEnd="10dp"
android:layout_marginBottom="5dp"
app:icon="@drawable/baseline_qr_code_24"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
@ -108,13 +106,12 @@
<com.google.android.material.button.MaterialButton
android:id="@+id/account_follow"
style="@style/Widget.Material3.Button.Icon"
style="@style/Widget.Material3.Button.IconButton.Filled"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="6dp"
android:layout_marginTop="6dp"
android:contentDescription="@string/make_an_action"
android:scaleType="fitCenter"
android:visibility="gone"
app:layout_constraintStart_toEndOf="@id/avatar_container"
app:layout_constraintTop_toBottomOf="@id/banner_container"
@ -123,13 +120,12 @@
<com.google.android.material.button.MaterialButton
android:id="@+id/account_notification"
style="@style/Widget.Material3.Button.Icon"
android:layout_width="48dp"
android:layout_height="48dp"
style="@style/Widget.Material3.Button.IconButton.Filled"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:layout_marginEnd="6dp"
android:contentDescription="@string/set_notify"
android:scaleType="fitCenter"
android:visibility="gone"
app:icon="@drawable/ic_baseline_notifications_off_24"
app:layout_constraintEnd_toStartOf="@id/avatar_container"
@ -138,13 +134,12 @@
<com.google.android.material.button.MaterialButton
android:id="@+id/header_edit_profile"
style="@style/Widget.Material3.Button.Icon"
android:layout_width="48dp"
android:layout_height="48dp"
style="@style/Widget.Material3.Button.IconButton.Filled"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginTop="6dp"
android:contentDescription="@string/edit_profile"
android:scaleType="fitCenter"
android:visibility="gone"
app:icon="@drawable/ic_baseline_edit_24"
app:layout_constraintStart_toEndOf="@id/avatar_container"
@ -441,6 +436,9 @@
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="gone"
android:layout_marginTop="6dp"
android:layout_marginHorizontal="6dp"
android:gravity="center_vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/familiar_followers"
@ -457,11 +455,10 @@
<com.google.android.material.button.MaterialButton
android:id="@+id/open_remote_profile"
style="@style/Widget.Material3.Button.Icon"
style="@style/Widget.Material3.Button.IconButton.Outlined"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="6dp"
android:layout_marginTop="6dp"
android:contentDescription="@string/display_remote_profile"
android:scaleType="fitCenter"
app:icon="@drawable/ic_baseline_manage_search_24" />

View file

@ -19,7 +19,7 @@
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:contentDescription="@string/instance_logo"
android:importantForAccessibility="no"
android:scaleType="center"
tools:src="@drawable/ic_baseline_home_24" />
@ -57,7 +57,7 @@
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:contentDescription="@string/move_timeline"
android:importantForAccessibility="no"
android:scaleType="center"
android:src="@drawable/ic_baseline_drag_handle_24"
tools:ignore="RtlHardcoded" />

View file

@ -310,6 +310,8 @@
android:layout_marginStart="48dp"
android:layout_marginTop="6dp"
android:layout_marginEnd="6dp"
android:focusable="true"
android:importantForAccessibility="yes"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
@ -332,12 +334,12 @@
<TextView
android:id="@+id/translation_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:background="?colorSurface"
android:elevation="2dp"
android:importantForAccessibility="no"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:text="@string/translation"
@ -352,9 +354,13 @@
android:layout_marginTop="4dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="4dp"
android:importantForAccessibility="no"
android:minHeight="48dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/translation_label"
app:layout_goneMarginBottom="8dp" />
app:layout_goneMarginBottom="8dp"
tools:maxLines="4"
tools:text="@tools:sample/lorem/random" />
</androidx.constraintlayout.widget.ConstraintLayout>
@ -562,51 +568,34 @@
android:layout_height="wrap_content"
tools:text="1 January 2021, 12:00" />
<androidx.appcompat.widget.LinearLayoutCompat
<com.google.android.material.button.MaterialButton
android:id="@+id/reblog_info"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/repeat_info"
android:contentDescription="@string/reblog"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="12dp"
app:srcCompat="@drawable/ic_repeat" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/reblogs_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="48dp"
android:textColor="?attr/colorControlNormal"
app:icon="@drawable/ic_repeat"
app:iconTint="?attr/colorControlNormal"
tools:text="10" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
<com.google.android.material.button.MaterialButton
android:id="@+id/favourite_info"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/fav_info"
android:layout_width="20dp"
android:contentDescription="@string/favourite"
android:layout_height="20dp"
android:layout_marginStart="12dp"
app:srcCompat="@drawable/ic_star_outline" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/favorites_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="48dp"
android:textColor="?attr/colorControlNormal"
app:icon="@drawable/ic_star_outline"
app:iconTint="?attr/colorControlNormal"
tools:text="10" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/language"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="12dp"
tools:text="EN" />
<View
android:layout_width="0dp"

View file

@ -60,15 +60,14 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/media" />
<ImageView
<com.google.android.material.button.MaterialButton
android:id="@+id/view_hide"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_margin="5dp"
style="@style/Widget.Material3.Button.IconButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/visibility"
android:src="@drawable/ic_baseline_visibility_24"
android:importantForAccessibility="no"
app:icon="@drawable/ic_baseline_visibility_24"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/media" />

View file

@ -8,7 +8,8 @@
<ImageButton
android:layout_gravity="center"
android:id="@id/exo_play_pause"
style="@style/ExoMediaButton.Pause" />
style="@style/ExoMediaButton.Pause"
app:tint="?colorPrimary" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/seekbar_controller"
@ -32,7 +33,10 @@
android:layout_width="wrap_content"
app:bar_height="6dp"
android:layout_height="26dp"
android:layout_weight="1" />
android:layout_weight="1"
app:buffered_color="?colorSecondaryContainer"
app:played_color="?colorPrimary"
app:scrubber_color="?colorPrimary" />
<TextView
android:id="@id/exo_duration"

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_bubbles_ps_background" />
<foreground android:drawable="@drawable/ic_launcher_bubbles_ps_foreground" />
<monochrome android:drawable="@drawable/ic_launcher_bubbles_ps_monochrome" />
</adaptive-icon>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_bubbles_ps_background" />
<foreground android:drawable="@drawable/ic_launcher_bubbles_ps_foreground" />
<monochrome android:drawable="@drawable/ic_launcher_bubbles_ps_monochrome" />
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -571,8 +571,6 @@
<string name="check_redirect">تحقّق مِن إعادة التوجيه</string>
<string name="no_redirect">هذا العنوان لا يحوّل إلى عنوان آخر</string>
<string name="redirect_detected">%1$s \n\nيُحوّل إلى\n\n %2$s</string>
<string name="set_utm_parameters">أزل معلّمات UTM</string>
<string name="set_utm_parameters_indication">يقوم التطبيق تلقائيا بإزالة معلمات UTM مِن عناوين المواقع قبل زيارة الرابط.</string>
<string name="talking_about">%d أشخاص يتحدثون عن ذلك</string>
<string name="twitter_accounts">حسابات تويتر (عبر Nitter)</string>
<string name="list_of_twitter_accounts">أسماء حسابات تويتر مُفرّقة بمسافة بيضاء</string>

View file

@ -518,8 +518,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -550,8 +550,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -579,8 +579,6 @@
\nredirects to
\n
\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -551,8 +551,6 @@
<string name="check_redirect">Comprovar la redirecció</string>
<string name="no_redirect">El redireccionament de la URL no funciona</string>
<string name="redirect_detected">%1$s \n\nredireccions a\n\n %2$s</string>
<string name="set_utm_parameters">Eliminar seguiments de màrketing (UTM)</string>
<string name="set_utm_parameters_indication">L\'aplicació eliminarà automàticament els seguiments de màrketing (UTM) dels URL abans de seguir un enllaç.</string>
<string name="talking_about">%d persones parlant</string>
<string name="twitter_accounts">Comptes de Twitter (via Nitter)</string>
<string name="list_of_twitter_accounts">Usuaris de Twitter separats per espais</string>
@ -1097,4 +1095,19 @@
<string name="set_mention_booster_indication">En respondre a un impuls, s\'esmenta en la resposta la persona impulsora</string>
<string name="no_cached_messages">No hi fa brams d\'inici guardats a la cau!</string>
<string name="icons_visibility_summary">Podeu ocultar amb tranquil·litat aquestes icones a baix de tot per tenir més espai. També estan en el submenú.</string>
<string name="links">Enllaços</string>
<string name="cd_open_profile">Obrir pàgina del perfil</string>
<string name="cd_switch_account">Canviar a %s</string>
<string name="cd_translated_media_description">Descripció traduïda de mèdia: %s</string>
<string name="add_featured_hashtag">Afegir etiqueta destacada</string>
<string name="no_feature_hashtag_suggestion">Sense suggeriments per a les etiquetes destacades!</string>
<string name="fields_title">Afegir o suprimir camps</string>
<string name="featured_hashtags_title">Afegir o suprimir etiquetes destacades</string>
<string name="delete_featured_hashtag">Esborrar etiqueta destacada</string>
<string name="delete_featured_hashtag_confirm">Estàs segura d\'esborrar aquesta etiqueta destacada?</string>
<string name="link_image">Imatge associada a l\'enllaç</string>
<string name="followed_tag_success">Ja estàs seguint aquesta etiqueta!</string>
<string name="action_follow_tag_confirm">Estàs segura de seguir l\'etiqueta %1$s??</string>
<string name="underline_bottom_hashtags">Ressaltar etiquetes inferiors</string>
<string name="remaining_tags">…i %d més</string>
</resources>

View file

@ -568,8 +568,6 @@
\npřesměrovává na
\n
\n %2$s</string>
<string name="set_utm_parameters">Odstranit parametry UTM</string>
<string name="set_utm_parameters_indication">Aplikace bude před otevřením odkazu automaticky odstraňovat parametry UTM.</string>
<string name="talking_about">Hovoří %d lidí</string>
<string name="twitter_accounts">Účty Twitteru (přes Nitter)</string>
<string name="list_of_twitter_accounts">Uživatelská jména Twitteru oddělená mezerou</string>

View file

@ -109,7 +109,7 @@
<item quantity="two">eiliad</item>
<item quantity="few">%d eiliadau</item>
<item quantity="many">%d eiliadau</item>
<item quantity="other"></item>
<item quantity="other"/>
</plurals>
<plurals name="date_minutes_polls">
<item quantity="zero">%d minutes</item>
@ -125,7 +125,7 @@
<item quantity="two">%d awr</item>
<item quantity="few">%d oriau</item>
<item quantity="many">%d oriau</item>
<item quantity="other"></item>
<item quantity="other"/>
</plurals>
<plurals name="date_day_polls">
<item quantity="zero">%d days</item>
@ -133,7 +133,7 @@
<item quantity="two">%d dydd</item>
<item quantity="few">%d dyddiau</item>
<item quantity="many">%d dyddiau</item>
<item quantity="other"></item>
<item quantity="other"/>
</plurals>
<!-- TOOT -->
<string name="toot_select_image_error">Roedd gwall!</string>
@ -503,7 +503,7 @@
<item quantity="two">%d pleidleisiwr</item>
<item quantity="few">%d pleidleisiwyr</item>
<item quantity="many">%d pleidleisiwyr</item>
<item quantity="other"></item>
<item quantity="other"/>
</plurals>
<string-array name="poll_choice_type">
<item>Single choice</item>
@ -571,8 +571,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nyn ailgyfeirio i\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d pobl yn sôn</string>
<string name="twitter_accounts">Cyfrifon Twitter (trwy Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -546,8 +546,6 @@
<string name="check_redirect">Tjek omdiregering</string>
<string name="no_redirect">Denne URL omdirigerer ikke</string>
<string name="redirect_detected">%1$s\n\nomdirigerer til\n\n%2$s</string>
<string name="set_utm_parameters">Fjern UTM-parametre</string>
<string name="set_utm_parameters_indication">App\'en fjerner automatisk UTM-parametre fra URL\'er, inden du følger et link.</string>
<string name="talking_about">%d folk snakker</string>
<string name="twitter_accounts">Twitter-kontoer (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter-brugernavne, adskilt af mellemrum</string>

View file

@ -63,7 +63,7 @@
<string name="no_emoji">Die App verfügt derzeit nicht über benutzerdefinierte Emojis.</string>
<string name="logout_account_confirmation">Bist Du sicher, dass Du Dich von @%1$s@%2$s abmelden möchtest\?</string>
<!-- Status -->
<string name="no_status">Kein Beitrag zum Anzeigen</string>
<string name="no_status">Keine Nachricht zum Anzeigen</string>
<string name="favourite_add">Diesen Beitrag Deinen Favoriten hinzufügen\?</string>
<string name="favourite_remove">Diesen Beitrag aus Deinen Favoriten entfernen\?</string>
<string name="reblog_add">Diesen Beitrag teilen\?</string>
@ -558,8 +558,6 @@
<string name="check_redirect">Weiterleitung prüfen</string>
<string name="no_redirect">Diese URL wird nicht weitergeleitet</string>
<string name="redirect_detected">%1$s \n\nweitergeleitet zu\n\n %2$s</string>
<string name="set_utm_parameters">UTM-Parameter entfernen</string>
<string name="set_utm_parameters_indication">Die App wird UTM-Parameter automatisch von URLs entfernen, bevor sie einen Link besucht.</string>
<string name="talking_about">%d Leute sprechen</string>
<string name="twitter_accounts">Twitter-Konten (über Nitter)</string>
<string name="list_of_twitter_accounts">Twitter-Benutzernamen durch ein Leerzeichen getrennt</string>
@ -1099,4 +1097,5 @@
<string name="add_poll">Umfrage anhängen</string>
<string name="links">Links</string>
<string name="toast_error_internet">Es gibt keine Verbindung zum Internet!</string>
<string name="cd_translated_content">Übersetzter Inhalt: %s</string>
</resources>

View file

@ -550,8 +550,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -551,8 +551,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Forigi UTM-parametrojn</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter-kontoj (per Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -555,8 +555,6 @@
<string name="check_redirect">Comprobar redirección</string>
<string name="no_redirect">El redireccionamiento de la URL no funciona</string>
<string name="redirect_detected">%1$s \n\nredirige a\n\n %2$s</string>
<string name="set_utm_parameters">Eliminar parámetros UTM</string>
<string name="set_utm_parameters_indication">La aplicación eliminará automáticamente los parámetros UTM de las URLs antes de visitar un enlace.</string>
<string name="talking_about">%d personas hablando</string>
<string name="twitter_accounts">Cuentas de Twitter (vía Nitter)</string>
<string name="list_of_twitter_accounts">Nombres de usuario de Twitter separados por un espacio</string>

View file

@ -91,4 +91,68 @@
<string name="shared_via">Jagatud Fedilabi abil</string>
<string name="cd_open_profile">Ava profiili leht</string>
<string name="cd_switch_account">Vaheta %s kontole</string>
<string name="logout_account_confirmation">Kas sa oled kindel, et soovid @%1$s@%2$s konto välja logida?</string>
<string name="no_status">Pole ühtegi näidatavat sõnumit</string>
<string name="favourite_add">Kas lisad selle sõnumi lemmikute hulka?</string>
<string name="favourite_remove">Kas eemaldad selle sõnumi lemmikute seast?</string>
<string name="reblog_add">Kas annad sellele sõnumite hoogu?</string>
<string name="more_action_1">Summuta</string>
<string name="more_action_2">Blokeeri</string>
<string name="more_action_3">Teata haldajale</string>
<string name="more_action_4">Kustuta</string>
<string name="more_action_5">Kopeeri</string>
<string name="more_action_6">Jaga</string>
<string name="more_action_7">Maini</string>
<string name="more_action_8">Ajastatud summutamine</string>
<string name="more_action_9">Kustuta ja koosta uuesti</string>
<string name="bookmarks">Järjehoidjad</string>
<string name="bookmark_add">Lisa järjehoidjaks</string>
<string name="bookmark_remove">Eemalda järjehoidja</string>
<string name="status_bookmarked">Olek on lisatud järjehoidjaks!</string>
<string name="status_unbookmarked">Olek on eemaldatud järjehoidjate seast!</string>
<string name="add_content_warning">Lisa sisuhoiatus</string>
<string name="remove_content_warning">Eemalda sisuhoiatus</string>
<string name="change_visibility">Muuda nähtavust</string>
<string name="set_language">Vali keel</string>
<string name="action_publish">Avalda</string>
<string name="open_new_attachment_panel">Ava uus manuste riba</string>
<string name="close_new_attachment_panel">Sulge uus manuste riba</string>
<string name="attach_images">Lisa pilte manuseks</string>
<string name="attach_audio">Lisa helifaile manuseks</string>
<string name="attach_videos">Lisa videoid manuseks</string>
<string name="attach_files">Lisa faile manuseks</string>
<string name="add_poll">Lisa küsitlus</string>
<string name="date_seconds">%d sek</string>
<string name="date_minutes">%d min</string>
<string name="date_hours">%d t</string>
<string name="date_day">%d pv</string>
<string name="about_vesrion">Versioon %1$s</string>
<string name="about_developer">Arendaja:</string>
<string name="about_license">Litsents:</string>
<string name="about_license_action">GNU GPL versioon 3</string>
<string name="about_code">Lähtekood:</string>
<string name="exit">Välju</string>
<string name="track_selection_title">Vali meediavood</string>
<string name="auto">Automaatne</string>
<string name="thumbnail">Pisipilt</string>
<string name="cd_translated_media_description">Tõlgitud meediumi kirjeldus: %s</string>
<string name="reblog_remove">Kas lõpetad sellele sõnumile hooandmise?</string>
<string name="toot_select_image_error">Meediumi valimisel tekkis viga!</string>
<string name="toot_delete_media">Kas eemaldad selle meediumi?</string>
<string name="toot_error_no_content">Sinu sõnum on tühi!</string>
<string name="toots_visibility_title">Vaikimisi on sõnumite nähtavus:</string>
<string name="toot_sent">Sõnum on saadetud!</string>
<string name="status_cnt">Sõnumid \n %1$s</string>
<string name="remove_scheduled">Kas kustutad ajastatud sõnumid?</string>
<string name="no_scheduled_toots">Pole ajastatud sõnumeid, mida kuvada!</string>
<string name="toot_scheduled">See sõnum on ajastatud!</string>
<string name="notif_status">kirjutas uue sõnumi</string>
<string name="toast_reblog">Sõnumile lisati hoogu!</string>
<string name="toast_unreblog">Sõnumile lõpetati hoo lisamine!</string>
<string name="toast_favourite">Sõnum lisati sinu lemmikute hulka!</string>
<string name="toast_unfavourite">Sõnum eemaldati sinu lemmikute seast!</string>
<string name="toast_bookmark">Sõnum lisati sinu järjehoidjate hulka!</string>
<string name="toast_unbookmark">Sõnum eemaldati sinu järjehoidjate seast!</string>
<string name="set_toots_page">Sõnumite arv ühel laadimiskorral</string>
<string name="direct_message">Otsesõnum</string>
</resources>

View file

@ -550,8 +550,6 @@
<string name="check_redirect">Egiaztatu birbideratzea</string>
<string name="no_redirect">URL honek ez du birbideratzen</string>
<string name="redirect_detected">%1$s \n\n helbideak \n\n %2$s helbidera birbideratzen du</string>
<string name="set_utm_parameters">Kendu UTM parametroak</string>
<string name="set_utm_parameters_indication">Aplikazioak automatikoki kenduko ditu URL baten UTM parametroak hau bisitatu aurretik.</string>
<string name="talking_about">%d pertsona hitz egiten</string>
<string name="twitter_accounts">Twitter kontuak (Nitter bidez)</string>
<string name="list_of_twitter_accounts">Twitter erabiltzaile-izenak zuriunez bereizita</string>

View file

@ -546,8 +546,6 @@
<string name="check_redirect">بررسی تغییر مسیر</string>
<string name="no_redirect">این نشانی تغییر مسیر نمی‌دهد</string>
<string name="redirect_detected">%1$s \n\nبه\n\n %2$s تغییر مسیر می‌دهد</string>
<string name="set_utm_parameters">پاک‌کردن پارامترهای UTM</string>
<string name="set_utm_parameters_indication">برنامه به‌طور خودکار پارامترهای UTM را از نشانی‌ها پیش از بازدید پیوند پاک می‌کند.</string>
<string name="talking_about">%d نفر در حال گفتگو</string>
<string name="twitter_accounts">حساب‌های توییتر (از طریق Nitter)</string>
<string name="list_of_twitter_accounts">نام‌های کاربری توییتر با فاصله جدا شده</string>
@ -722,7 +720,7 @@
<string name="label_rectangle">مستطیل</string>
<string name="messages_in_cache_for_other_timelines">بوق‌های نهان‌شده برای دیگر خط‌های زمانی</string>
<string name="delete_cache_message">آیا مطمئنید که می‌خواهید حافظه نهان را پاک کنید؟ اگر پیش‌نویس‌هایی با رسانه دارید، رسانه‌های پیوست از دست می‌روند.</string>
<string name="change_logo_description">تغییر لوگوی برنامه در دستگاه شما</string>
<string name="change_logo_description">تغییر نماد برنامه در دستگاه شما</string>
<string name="action_pin">سنجاق بوق</string>
<string name="set_unlisted_replies">پاسخ‌های فهرست‌نشده</string>
<string name="notification_remove_from_cache">آگاه‌سازی‌ها از حافظه نهان پاک شدند.</string>
@ -878,7 +876,7 @@
<string name="set_display_bookmark_indication">همیشه دکمه نشانه‌گذاری را نمایش بده</string>
<string name="fetch_more_messages">دریافت بوق‌های بیشتر…</string>
<string name="label_oval">بیضی</string>
<string name="pickup_logo">انتخاب لوگو</string>
<string name="pickup_logo">انتخاب نماد</string>
<string name="restart">بازآغاز</string>
<string name="chart_home_cache">سوابق حافظه نهان خانه در هر ساعت</string>
<string name="auto">خودکار</string>
@ -936,7 +934,7 @@
<string name="poll_type_single">تک‌گزینه‌ای</string>
<string name="poll_duration">مدت نظرسنجی:</string>
<string name="set_display_translate_indication">همیشه دکمه ترجمه را نمایش بده</string>
<string name="change_logo">تغییر لوگو</string>
<string name="change_logo">تغییر نماد</string>
<string name="toast_unpin">بوق دیگر سنجاق نیست!</string>
<string name="keep_notifications">نگهداری آگاه‌سازی‌ها</string>
<string name="set_notif_update">آگاه‌سازی برای به‌روزرسانی‌ها</string>

View file

@ -562,8 +562,6 @@
<string name="check_redirect">Vérifier la redirection</string>
<string name="no_redirect">Cette URL ne redirige pas</string>
<string name="redirect_detected">%1$s \n\nredirige vers\n\n %2$s</string>
<string name="set_utm_parameters">Supprimer les paramètres UTM</string>
<string name="set_utm_parameters_indication">Lapplication supprimera automatiquement les paramètres UTM des URL avant de visiter un lien.</string>
<string name="talking_about">%d personnes en parlent</string>
<string name="twitter_accounts">Comptes Twitter (via Nitter)</string>
<string name="list_of_twitter_accounts">Noms d\'utilisateurs Twitter séparés par un espace</string>

View file

@ -453,8 +453,6 @@
\nath-stiùireadh gu
\n
\n%2$s</string>
<string name="set_utm_parameters">Thoir air falbh paramadairean UTM</string>
<string name="set_utm_parameters_indication">Bheir an aplacaid air falbh paramadairean UTM o URLaichean gu fèin-obrachail mus tadhail i air a cheangal.</string>
<string name="talking_about">Tha %d a bruidhinn</string>
<string name="twitter_accounts">Cunntasan Twitter (slighe Nitter)</string>
<string name="list_of_twitter_accounts">Ainmean-cleachdaiche Twitter, sgaraichte le beàrnan</string>

View file

@ -549,8 +549,6 @@
<string name="check_redirect">Comproba redirección</string>
<string name="no_redirect">Este URL non redirixe</string>
<string name="redirect_detected">%1$s \n\nredirixe a\n\n %2$s</string>
<string name="set_utm_parameters">Eliminar parámetros UTM</string>
<string name="set_utm_parameters_indication">A app borrará automáticamente os parámetros UTM dos URLs antes de visitar a ligazón.</string>
<string name="talking_about">%d persoas comentando</string>
<string name="twitter_accounts">Contas de Twitter (vía Nitter)</string>
<string name="list_of_twitter_accounts">Nomes de usuaria Twitter separados por vírgulas</string>
@ -1111,4 +1109,13 @@
<string name="followed_tag_success">Agora segues esta etiqueta!</string>
<string name="action_follow_tag_confirm">Tes certeza de querer seguir a etiqueta %1$s??</string>
<string name="remaining_tags">…e %d máis</string>
<string name="tab_public_timeline">Cronoloxía pública</string>
<string name="tab_private_mentions">Mencións privadas</string>
<string name="cd_translated_content">Contido traducido: %s</string>
<string name="set_tracking_parameters">Retirar parámetros de rastrexo</string>
<string name="set_tracking_parameters_indication">A app quitará automaticamente os parámetros do URL que permiten rastrexarte ao premer nunha ligazón.</string>
<string name="cd_list_timeline">%s. Cronoloxía da lista</string>
<string name="cd_hash_tag_timeline">%s. Cronoloxía do cancelo</string>
<string name="cd_hide_media">Ocultar multimedia</string>
<string name="cd_show_media">Mostrar multimedia</string>
</resources>

View file

@ -550,8 +550,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -550,8 +550,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -550,8 +550,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -546,8 +546,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -560,8 +560,6 @@
<string name="check_redirect">Controlla reindirizzamento</string>
<string name="no_redirect">Questo URL non reindirizza</string>
<string name="redirect_detected">%1$s \n\nreindirizza verso\n\n %2$s</string>
<string name="set_utm_parameters">Rimuovi parametri UTM</string>
<string name="set_utm_parameters_indication">L\'app rimuoverà automaticamente i parametri UTM dagli URL prima di aprire un collegamento.</string>
<string name="talking_about">%d persone ne parlano</string>
<string name="twitter_accounts">Account Twitter (via Nitter)</string>
<string name="list_of_twitter_accounts">Nomi utente Twitter separati da spazio</string>

View file

@ -120,7 +120,7 @@
<string name="toot_delete_media">このメディアを削除しますか?</string>
<string name="toot_error_no_content">メッセージが入力されていません!</string>
<string name="toot_sent">投稿しました!</string>
<string name="toot_sensitive">メディアを閲覧注意にする</string>
<string name="toot_sensitive">センシティブな情報ですか?</string>
<string name="no_draft">下書きはありません!</string>
<string name="choose_accounts">アカウントを選択</string>
<string name="select_accounts">複数のアカウントを選択</string>
@ -142,7 +142,7 @@
<string name="status_cnt">投稿
\n %1$s</string>
<string name="following_cnt">フォロー中 \n %1$s</string>
<string name="followers_cnt">フォロワー\n %1$s</string>
<string name="followers_cnt">フォロワー \n %1$s</string>
<string name="reject">拒否</string>
<!-- Scheduled toots -->
<string name="no_scheduled_toots">投稿予約はありません!</string>
@ -195,7 +195,7 @@
<string name="set_notif_status">新しい投稿を通知する</string>
<string name="set_share_validation">ブースト前に確認ダイアログを表示する</string>
<string name="set_share_validation_fav">お気に入りに登録する前に確認ダイアログを表示する</string>
<string name="set_notify">通知する</string>
<string name="set_notify">通知しますか?</string>
<string name="set_notif_silent">サイレント通知</string>
<string name="set_nsfw_timeout">NSFW表示のタイムアウト(単位は秒、0でオフ)</string>
<string name="set_med_desc_timeout">メディアの説明のタイムアウト(単位は秒、0でオフ)</string>
@ -547,11 +547,9 @@
<string name="open_other_app">別のアプリで開く</string>
<string name="check_redirect">リダイレクト先を確認する</string>
<string name="no_redirect">このURLはリダイレクトではありません</string>
<string name="redirect_detected">%1$s\n\nは\n\n%2$sにリダイレクトしています</string>
<string name="set_utm_parameters">UTMパラメータを削除する</string>
<string name="set_utm_parameters_indication">リンクを開く前に自動的にURLからUTMパラメータを取り除きます。</string>
<string name="redirect_detected">%1$s \n\nは\n\n%2$sにリダイレクトしています</string>
<string name="talking_about">%d人が話題にしています</string>
<string name="twitter_accounts">Twitterアカウント(via Nitter)</string>
<string name="twitter_accounts">Twitterアカウント(Nitter経由)</string>
<string name="list_of_twitter_accounts">Twitterのユーザー名をスペースで区切って入力</string>
<string name="identity_proofs">身分証明</string>
<string name="verified_user">認証済み</string>
@ -571,7 +569,7 @@
\n
\nまた、そのメッセージを無視するように設定からプッシュ通知を無効にすることもできます。</string>
<string name="select_distributors">ディストリビューターを選択</string>
<string name="hide_content">コンテンツを非表示にする &lt;</string>
<string name="hide_content"><![CDATA[内容を非表示 <]]></string>
<string name="stop_recording">レコーディングを停止</string>
<string name="report_title">%1$sを報告しています</string>
<string name="report_indication_title_status">この投稿で何が起こっているのか教えてください</string>
@ -629,7 +627,7 @@
<string name="post_message_text">投稿を送信中 %d/%d</string>
<string name="instance_health_checkedat">%sでチェック</string>
<string name="instance_health_uptime">稼働時間: %,.2f</string>
<string name="show_content">コンテンツを表示 &gt;</string>
<string name="show_content"><![CDATA[内容を表示 >]]></string>
<string name="is_up">稼働しています!</string>
<string name="report_val1">この投稿が嫌いです</string>
<string name="report_1_block_title">%1$sをブロックする</string>
@ -1018,7 +1016,7 @@
<string name="frequency_minutes">頻度(分)</string>
<string name="fetching_messages">投稿を取得中</string>
<string name="add_description">説明を追加</string>
<string name="retrieve_remote_account">リモートアカウントを取得する</string>
<string name="retrieve_remote_account">リモートアカウントを取得!</string>
<string name="exit">終了</string>
<string name="reblog_missing_description">この投稿のメディアには説明がありません。ブーストしますか?</string>
<string name="total_fetched">取得した投稿の総数</string>
@ -1068,4 +1066,64 @@
<string name="Pronouns">代名詞</string>
<string name="pronouns_support">代名詞のサポート</string>
<string name="qr_code_generator">QRコード作成</string>
<string name="links">リンク</string>
<string name="instance_token">あなたのトークン</string>
<string name="more_options">他のオプション</string>
<string name="cd_open_profile">プロフィールページを開く</string>
<string name="cd_switch_account">%sに切り替え</string>
<string name="cd_translated_media_description">メディアの翻訳された説明: %s</string>
<string name="action_favourite">お気に入り</string>
<string name="action_reblog">ブースト</string>
<string name="action_quote">引用</string>
<string name="add_content_warning">閲覧警告を追加</string>
<string name="remove_content_warning">閲覧警告を削除</string>
<string name="change_visibility">表示の切り替え</string>
<string name="set_language">言語を設定</string>
<string name="action_publish">投稿</string>
<string name="open_new_attachment_panel">新しい添付ファイルパネルを開く</string>
<string name="close_new_attachment_panel">新しい添付ファイルパネルを閉じる</string>
<string name="attach_images">画像を添付</string>
<string name="attach_audio">音声を添付</string>
<string name="attach_videos">動画を添付</string>
<string name="attach_files">ファイルを添付</string>
<string name="add_poll">投票を追加</string>
<string name="toast_error_internet">インターネット接続がありません!</string>
<string name="toast_error_token_empty">トークンは空にすることはできません!</string>
<string name="set_pixelfed_full_media">フルスクリーンメディア</string>
<string name="set_pixelfed_full_media_indication">メディアはスクリーンの幅いっぱいに表示され、高さはアスペクト比を保って表示されます。</string>
<string name="instance_information">インスタンス情報</string>
<string name="network">ネットワーク</string>
<string name="twitter_tags">Twitterタグ(Nitter経由)</string>
<string name="add_featured_hashtag">おすすめするハッシュタグを追加</string>
<string name="no_feature_hashtag_suggestion">おすすめのハッシュタグ候補はありません!</string>
<string name="fields_title">フィールドを追加または削除</string>
<string name="featured_hashtags_title">おすすめのハッシュタグを追加または削除</string>
<string name="delete_featured_hashtag">おすすめのハッシュタグを削除</string>
<string name="delete_featured_hashtag_confirm">このおすすめしたハッシュタグを削除しますか?</string>
<string name="use_token">トークンを使用</string>
<string name="toast_fail_authenticate">アカウントの認証に失敗しました!</string>
<string name="link_image">リンクに添付された画像</string>
<string name="set_audo_hide_compose_title">投稿ボタンを自動的に隠す</string>
<string name="set_audo_hide_compose_summary">タイムラインを上にスクロールしたときに投稿ボタンを自動的に隠します</string>
<string name="followed_tag_success">このタグをフォローしました!</string>
<string name="action_follow_tag_confirm">タグ%1$sをフォローしますか</string>
<string name="set_mention_booster">ブーストしたユーザーをメンションする</string>
<string name="set_mention_booster_indication">ブーストされた投稿に返信するとき、その投稿をブーストしたユーザーを返信でメンションします</string>
<string name="underline_bottom_hashtags">下部のハッシュタグをハイライトする</string>
<string name="remaining_tags">…さらに%d件</string>
<string name="tab_public_timeline">公開タイムライン</string>
<string name="tab_private_mentions">プライベートメンション</string>
<string name="tab_home_timeline">\@string/context_home</string>
<string name="tab_local_timeline">\@string/local_menu</string>
<string name="cd_translated_content">翻訳済みコンテンツ: %s</string>
<string name="set_tracking_parameters">トラッキングパラメーターを削除</string>
<string name="set_tracking_parameters_indication">アプリはリンクを踏む前に自動的にURLからトラッキングパラメーターを削除します。</string>
<string name="tab_bubble_timeline">バブル・タイムライン</string>
<string name="cd_list_timeline">%s. リスト・タイムライン</string>
<string name="cd_hash_tag_timeline">%s. ハッシュタグ・タイムライン</string>
<string name="cd_hide_media">メディアを非表示</string>
<string name="cd_show_media">メディアを表示</string>
<string name="about_fediverse">フェディバース:</string>
<string name="about_website">ウェブサイト:</string>
<string name="about_donate">寄付:</string>
</resources>

View file

@ -551,8 +551,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -545,8 +545,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_about">Par lietotni</string>
<string name="action_privacy">Konfidencialitāte</string>
<string name="action_cache">Kešatmiņa</string>
<string name="close">Aizvērt</string>
<string name="yes"></string>
<string name="no"></string>
<string name="cancel">Atcelt</string>
<string name="download">Lejupielādēt</string>
<string name="password">Parole</string>
<string name="email">E-pasts</string>
<string name="accounts">Konti</string>
<string name="toots">Ziņojumi</string>
<string name="links">Saites</string>
<string name="tags">Birkas</string>
<string name="save">Saglabāt</string>
<string name="instance">Serveris (Instance)</string>
<string name="camera">Kamera</string>
<string name="replies">Atbildes</string>
<string name="drafts">Melnraksti</string>
<string name="translate">Tulkot</string>
<string name="notifications">Paziņojumi</string>
<string name="settings">Iestatījumi</string>
<string name="tab_home_timeline">\@string/context_home</string>
<string name="tab_local_timeline">\@string/local_menu</string>
<string name="action_quote">Citēt</string>
<string name="more_action_2">Bloķēt</string>
<string name="more_action_4">Dzēst</string>
<string name="more_action_5">Kopēt</string>
<string name="bookmarks">Grāmatzīmes</string>
<string name="action_publish">Publicēt</string>
<string name="about_developer">Izstrādātājs:</string>
<string name="about_license">Licence:</string>
<string name="followers">Sekotāji</string>
<string name="set_notify">Paziņot?</string>
<string name="settings_time_to">un</string>
<string name="action_follow">Sekot</string>
s
<string name="action_unblock">Atbloķēt</string>
<string name="languages">Valodas</string>
<string name="context_conversation">Sarunas</string>
<string name="information">Informācija</string>
<string name="category">Kategorija</string>
<string name="description">Apraksts</string>
<string name="settings_category_label_interface">Saskarne</string>
<string name="vote">Balsot</string>
<string name="settings_category_notif_categories">Kategorijas</string>
<string name="label_emoji">Emocijzīmes</string>
<string name="label_text">Teksts</string>
<string name="label_brush">Ota</string>
<string name="saving">Saglabā…</string>
<string name="category_regional">Reģionālā (Vietējā)</string>
<string name="category_art">Māksla</string>
<string name="category_music">Mūzika</string>
<string name="category_tech">Tehnoloğijas</string>
<string name="category_food">Ēdiens</string>
<string name="reports">Atskaites</string>
<string name="active">Aktīvs</string>
<string name="account">Konts</string>
<string name="select">Atlasīt</string>
<string name="replace_youtube">YouTube</string>
<string name="replace_twitter">Twitter</string>
<string name="replace_instagram">Instagram</string>
<string name="replace_reddit">Reddit</string>
<string name="link_color_title">Saites</string>
<string name="icons_color_title">Ikonas</string>
<string name="translation">Tulkojums</string>
<string name="network">Tīkls</string>
<string name="set_watermark">Ūdenszīmes</string>
<string name="keepon">Turpināt</string>
<string name="approve">Apstiprināt</string>
<string name="status">Statuss</string>
<string name="resolved">Atrisināts</string>
<string name="label_shape">Forma</string>
<string name="label_oval">Ovāls</string>
<string name="label_rectangle">Taisnstūris</string>
<string name="label_line">Līnija</string>
<string name="reply">Atbildēt</string>
<string name="allow">Atļaut</string>
<string name="user">Lietotājs</string>
<string name="moderator">Moderators</string>
<string name="administrator">Administrators</string>
<string name="confirmed">Apstiprināts</string>
<string name="unconfirmed">Neapstiprināts</string>
<string name="profiles">Profili</string>
<string name="notif_display_updates">Atjauninājumi</string>
<string name="domains">Domēni</string>
<string name="translator">Tulkotājs</string>
<string name="set_translator">Tulkotājs</string>
<string name="version">Versija</string>
<string name="v_list">Saraksts</string>
<string name="following">Seko</string>
<string name="exit">Iziet</string>
<string name="download_file">Lejupielādēt %1$s</string>
<string name="download_from" formatted="false">Datne: %1$s</string>
</resources>

View file

@ -550,8 +550,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -559,8 +559,6 @@
\nverwijst naar
\n
\n %2$s</string>
<string name="set_utm_parameters">UTM-parameters verwijderen</string>
<string name="set_utm_parameters_indication">De app verwijdert automatisch UTM parameters van URLs voordat een link bezocht wordt.</string>
<string name="talking_about">%d pratende mensen</string>
<string name="twitter_accounts">Twitteraccounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter gebruikersnamen gescheiden door spatie</string>

View file

@ -932,7 +932,6 @@
<string name="action_unfollow_tag">Slutt å følge emneknagg</string>
<string name="followed_tags">Følgte emneknagger</string>
<string name="set_unlisted_replies_indication">Det gjelder kun \"offentlige\" svar. Når aktivert, vil svarene dine automatisk ha synligheten «uopført» i stedet for «offentlig»</string>
<string name="set_utm_parameters_indication">Appen vil automatisk fjerne UTM-parametere fra URL-er før du besøker en lenke.</string>
<string name="login_status">Påloggingsstatus</string>
<string name="change_logo_description">Endre logoen til appen på enheten din</string>
<string name="action_pin">Fest melding</string>
@ -963,7 +962,6 @@
<string name="report_more">Er det noe mer du mener vi bør vite\?</string>
<string name="report_more_remote">Kontoen er fra en annen server. Send en anonymisert kopi av rapporten til den andre serveren\?</string>
<string name="administrator">Administrator</string>
<string name="set_utm_parameters">Fjern UTM parameter</string>
<string name="pinned">Festet</string>
<string name="about_mastodon">\"Mastodon er ikke et enkelt nettsted som Twitter eller Facebook, det er et nettverk av tusenvis av fellesskap som drives av forskjellige organisasjoner og enkeltpersoner som gir en sømløs opplevelse av sosiale medier.\"</string>
<string name="notif_display_follows">Følger</string>

View file

@ -550,8 +550,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -571,8 +571,6 @@
\nprzekierowuje do
\n
\n %2$s</string>
<string name="set_utm_parameters">Usuń parametry UTM</string>
<string name="set_utm_parameters_indication">Aplikacja automatycznie usunie parametry UTM z adresów URL przed odwiedzeniem linku.</string>
<string name="talking_about">%d ludzi o tym pisze</string>
<string name="twitter_accounts">Konta Twitter (przez Nitter)</string>
<string name="list_of_twitter_accounts">Nazwy użytkowników Twittera oddzielone spacjami</string>

View file

@ -564,8 +564,6 @@
\nredireciona para
\n
\n %2$s</string>
<string name="set_utm_parameters">Remover parâmetros UTM</string>
<string name="set_utm_parameters_indication">O aplicativo removerá automaticamente os parâmetros UTM das URLs antes de visitar um link.</string>
<string name="talking_about">%d pessoas conversando</string>
<string name="twitter_accounts">Contas do Twitter (via Nitter)</string>
<string name="list_of_twitter_accounts">Nomes de usuários do Twitter separados por um espaço</string>

View file

@ -556,8 +556,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -563,8 +563,6 @@
<string name="check_redirect">Проверить перенаправление</string>
<string name="no_redirect">Этот URL не перенаправляет</string>
<string name="redirect_detected">%1$s \n\nперенаправляет на\n\n %2$s</string>
<string name="set_utm_parameters">Удалить UTM параметры</string>
<string name="set_utm_parameters_indication">Приложение будет автоматически удалять UTM параметры из URL-адреса, перед посещением ссылки.</string>
<string name="talking_about">%d люди говорят</string>
<string name="twitter_accounts">Аккаунты Twitter (с помощью Nitter)</string>
<string name="list_of_twitter_accounts">Имена пользователей Twitter разделённые пробелом</string>

View file

@ -555,8 +555,6 @@
<string name="check_redirect">Verìfica sa deviatzione</string>
<string name="no_redirect">Custu URL non torrat a indiritzare</string>
<string name="redirect_detected">%1$s \n \n torrat a imbiare cara a\n \n %2$s</string>
<string name="set_utm_parameters">Boga is paràmetros UTM</string>
<string name="set_utm_parameters_indication">S\'aplicatzione at a bogare in manera automàtica is paràmetros UTM dae is URL in antis de abèrrere unu ligàmene.</string>
<string name="talking_about">%d persones nde sunt chistionende</string>
<string name="twitter_accounts">Contos de Twitter (pro mèdiu de Nitter)</string>
<string name="list_of_twitter_accounts">Nùmenes de utente de Twitter separados dae ispàtzios</string>

View file

@ -550,8 +550,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -560,8 +560,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -555,8 +555,6 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string>

View file

@ -57,17 +57,17 @@
<string name="follow_request">Följförfrågningar</string>
<string name="settings">Inställningar</string>
<string name="send_email">Skicka e-post</string>
<string name="scheduled_toots">Schemalagda toots</string>
<string name="disclaimer_full">Informationen nedan kan avspegla användarens profil ofullständigt.</string>
<string name="insert_emoji">Infoga emoji</string>
<string name="no_emoji">Appen kunde inte samla anpassade emojis för tillfället.</string>
<string name="logout_account_confirmation">Är du säker på att du vill logga ut @%1$s@%2$s?</string>
<string name="scheduled_toots">Schemalagda meddelanden</string>
<string name="disclaimer_full">Nedanstående information kan ge en ofullständig bild av användarens profil.</string>
<string name="insert_emoji">Infoga emotikon(er)</string>
<string name="no_emoji">Appen kan inte visa anpassade emotikoner för tillfället.</string>
<string name="logout_account_confirmation">Vill du verkligen logga ut från @%1$s@%2$s?</string>
<!-- Status -->
<string name="no_status">Ingen toot att visa</string>
<string name="favourite_add">Lägg till detta toot till dina favoriter?</string>
<string name="favourite_remove">Ta bort detta toot från dina favoriter?</string>
<string name="reblog_add">Knuffa detta toot?</string>
<string name="reblog_remove">Ta bort knuff av denna toot?</string>
<string name="no_status">Inga meddelanden</string>
<string name="favourite_add">Ska detta meddelande läggas till i dina favoriter?</string>
<string name="favourite_remove">Ska detta meddelande inte vara favoriserat längre?</string>
<string name="reblog_add">Knuffa detta meddelande?</string>
<string name="reblog_remove">Ska detta meddelande inte knuffas längre?</string>
<string name="more_action_1">Tysta</string>
<string name="more_action_2">Blockera</string>
<string name="more_action_3">Rapportera</string>
@ -76,7 +76,7 @@
<string name="more_action_6">Dela</string>
<string name="more_action_7">Omnämn</string>
<string name="more_action_8">Tidsinställd tystning</string>
<string name="more_action_9">Ta bort &amp; nytt utkast</string>
<string name="more_action_9">Ta bort &amp; skriv nytt utkast</string>
<string-array name="more_action_confirm">
<item>Tysta detta konto?</item>
<item>Blockera detta konto?</item>
@ -94,10 +94,10 @@
<item>Ta bort &amp; skriv om denna toot?</item>
</string-array>
<string name="bookmarks">Bokmärken</string>
<string name="bookmark_add">Lägger till bokmärke</string>
<string name="bookmark_add">Lägg till ett bokmärke</string>
<string name="bookmark_remove">Ta bort bokmärke</string>
<string name="status_bookmarked">Status har lagts till bokmärken!</string>
<string name="status_unbookmarked">Status togs bort från bokmärken!</string>
<string name="status_bookmarked">Statusen har bokmärkts!</string>
<string name="status_unbookmarked">Statusen togs bort från bokmärkena!</string>
<!-- Date -->
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
@ -112,7 +112,7 @@
<item quantity="other">%d minuter</item>
</plurals>
<plurals name="date_hours_polls">
<item quantity="one">%d timma</item>
<item quantity="one">%d timme</item>
<item quantity="other">%d timmar</item>
</plurals>
<plurals name="date_day_polls">
@ -120,18 +120,18 @@
<item quantity="other">%d dagar</item>
</plurals>
<!-- TOOT -->
<string name="toot_select_image_error">Ett fel uppstod när du valde media!</string>
<string name="toot_delete_media">Ta bort denna media?</string>
<string name="toot_error_no_content">Din toot är tom!</string>
<string name="toot_sent">Tooten har skickats!</string>
<string name="toot_select_image_error">Ett fel uppstod när du valde medium!</string>
<string name="toot_delete_media">Ta bort detta medium?</string>
<string name="toot_error_no_content">Ditt meddelande är tomt!</string>
<string name="toot_sent">Meddelandet har skickats!</string>
<string name="toot_sensitive">Känsligt innehåll?</string>
<string name="no_draft">Inga utkast!</string>
<string name="choose_accounts">Välj ett konto</string>
<string name="select_accounts">Välj några konton</string>
<string name="remove_draft">Ta bort utkast?</string>
<string name="upload_form_description">Beskriv för synskadade</string>
<string name="remove_draft">Ta bort utkastet?</string>
<string name="upload_form_description">Beskriv för personer med nedsatt syn</string>
<!-- Instance -->
<string name="instance_no_description">Ingen beskrivning tillgänglig!</string>
<string name="instance_no_description">Beskrivning saknas!</string>
<!-- About -->
<string name="about_vesrion">Version %1$s</string>
<string name="about_developer">Utvecklare:</string>
@ -550,8 +550,6 @@
<string name="check_redirect">Kontrollera omdirigering</string>
<string name="no_redirect">Denna URL kan inte omdirigera</string>
<string name="redirect_detected">%1$s \n\nomdirigerar till\n\n %2$s</string>
<string name="set_utm_parameters">Ta bort UTM parametrar</string>
<string name="set_utm_parameters_indication">Appen kommer automatiskt ta bort UTM-parametrar från webbadresser innan du besöker en länk.</string>
<string name="talking_about">%d personer pratar</string>
<string name="twitter_accounts">Twitter-konton (via Nitter)</string>
<string name="list_of_twitter_accounts">Twitteranvändarnamn separerade med mellanslag</string>
@ -588,4 +586,33 @@
<string name="delete_featured_hashtag">Ta bort vald tagg</string>
<string name="no_feature_hashtag_suggestion">Förslag saknas för vald tagg.</string>
<string name="fields_title">Lägg till eller ta bort fält</string>
<string name="cd_open_profile">Profilsida öppen för allmänheten</string>
<string name="cd_switch_account">Byt till %s</string>
<string name="cd_translated_media_description">Översatt mediebeskrivning: %s</string>
<string name="tab_home_timeline">\@sträng/kontext_hem</string>
<string name="tab_public_timeline">Tidslinje öppen för allmänheten</string>
<string name="tab_private_mentions">Privata omnämnanden</string>
<string name="cd_translated_content">Översatt innehåll: %s</string>
<string name="action_favourite">Favorit</string>
<string name="action_reblog">Knuffa</string>
<string name="action_quote">Citera</string>
<string name="warn_boost_no_media_description">Om meddelandet saknar beskrivning vill jag bli varnad innan jag knuffar det</string>
<string name="reblog_missing_description">Detta meddelande saknar mediebeskrivning. Vill du verkligen knuffa det ändå?</string>
<string name="add_content_warning">Lägg till en innehållsvarning</string>
<string name="remove_content_warning">Ta bort innehållsvarningen</string>
<string name="change_visibility">Ändra hur detta visas</string>
<string name="set_language">Ställ in språk</string>
<string name="action_publish">Publicera</string>
<string name="attach_images">Bifoga bilder</string>
<string name="attach_audio">Bifoga ljudfil</string>
<string name="attach_videos">Bifoga en film</string>
<string name="attach_files">Bifoga filer</string>
<string name="add_poll">Lägg till en omröstning</string>
<string name="toots_visibility_title">Förvald visningsgrupp för meddelanden:</string>
<string name="clipboard_version">Informationen har kopierats till urklipp</string>
<string name="tag_already_followed">Den taggen följer du redan!</string>
<string name="icon_size">Piktogramstorlekar</string>
<string name="show_my_messages">Visa mina meddelanden</string>
<string name="show_privates">Visa direktmeddelanden</string>
<string name="more_options">Fler inställningar</string>
</resources>

View file

@ -560,8 +560,6 @@
<string name="check_redirect">Wybadej przekerowanie</string>
<string name="no_redirect">Ta adresa URL niy przekerowuje</string>
<string name="redirect_detected">%1$s \n\nprzekerowuje do\n\n %2$s</string>
<string name="set_utm_parameters">Wymaż parametry UTM</string>
<string name="set_utm_parameters_indication">Aplikacyjo autōmatycznie wymaże parametry UTM ze adresy URL przed ôtwarciym linku.</string>
<string name="talking_about">%d ludzi godo</string>
<string name="twitter_accounts">Kōnta Twitter (bez Nitter)</string>
<string name="list_of_twitter_accounts">Miana używoczōw Twittera ôddzielōne spacyjami</string>

View file

@ -464,14 +464,12 @@
<string name="check_redirect">திருப்பி விடுங்கள்</string>
<string name="no_redirect">இந்த முகவரி திருப்பிவிடாது</string>
<string name="redirect_detected">%1$s\n\n திருப்பிவிடுகிறது\n\n %2$s</string>
<string name="set_utm_parameters">யுடிஎம் அளவுருக்களை அகற்று</string>
<string name="talking_about">%d மக்கள் பேசுகிறார்கள்</string>
<string name="twitter_accounts">ட்விட்டர் கணக்குகள் (நிட்டர் வழியாக)</string>
<string name="list_of_twitter_accounts">ட்விட்டர் பயனர்பெயர்கள் இடம் பிரிக்கப்பட்டது</string>
<string name="identity_proofs">அடையாள சான்றுகள்</string>
<string name="verified_user">சரிபார்க்கப்பட்ட அடையாளம்</string>
<string name="verified_by">%1$s ( %2$s) ஆல் சரிபார்க்கப்பட்டது</string>
<string name="set_utm_parameters_indication">இணைப்பைப் பார்வையிடுவதற்கு முன்பு பயன்பாடு தானாகவே UTM அளவுருக்களை UTM அளவுருக்களை அகற்றும்.</string>
<string name="action_disabled">நடவடிக்கை முடக்கப்பட்டது</string>
<string name="action_unfollow">பின்தொடரவும்</string>
<string name="error_destination_path">ஏதோ தவறு நடந்தது, தயவுசெய்து உங்கள் பதிவிறக்க கோப்பகத்தை அமைப்புகளில் சரிபார்க்கவும்.</string>
@ -1030,4 +1028,10 @@
<string name="set_mention_booster">பூச்டரைக் குறிப்பிடவும்</string>
<string name="set_mention_booster_indication">ஒரு ஊக்கத்திற்கு பதிலளிக்கும் போது, உயர்த்தப்பட்ட நபர் பதிலில் குறிப்பிடப்படுவார்</string>
<string name="underline_bottom_hashtags">கீழே உள்ள ஏச்டேக்குகளை முன்னிலைப்படுத்தவும்</string>
<string name="cd_open_profile">தன்விவரப் பக்கத்தைத் திற</string>
<string name="cd_switch_account">%s க்கு மாறு</string>
<string name="cd_translated_media_description">மொழிபெயர்க்கப்பட்ட ஊடக விளக்கம்: %s</string>
<string name="followed_tag_success">நீங்கள் இப்போது இந்தக் குறிச்சொல்லைப் பின்பற்றுங்கள்!</string>
<string name="action_follow_tag_confirm">நீங்கள் %1$s குறிச்சொல்லைப் பின்பற்ற விரும்புகிறீர்களா??</string>
<string name="remaining_tags">…மற்றும் %d மேலும்</string>
</resources>

View file

@ -559,8 +559,6 @@
\nyönlendirir
\n
\n %2$s</string>
<string name="set_utm_parameters">UTM parametrelerini kaldır</string>
<string name="set_utm_parameters_indication">Uygulama, bir bağlantıyı ziyaret etmeden önce bağlantılardan UTM parametrelerini otomatik olarak kaldıracak.</string>
<string name="talking_about">%d kişi konuşuyor</string>
<string name="twitter_accounts">Twitter hesapları (Nitter üzerinden)</string>
<string name="list_of_twitter_accounts">Twitter kullanıcı adları boşlukla ayrılmış</string>

View file

@ -559,8 +559,6 @@
<string name="check_redirect">Перевірити перенаправлення</string>
<string name="no_redirect">Ця URL-адреса не переспрямовує</string>
<string name="redirect_detected">%1$s \n\nперенаправляє на\n\n %2$s</string>
<string name="set_utm_parameters">Видалити параметри UTM</string>
<string name="set_utm_parameters_indication">Програма автоматично видалить параметри UTM з URL-адрес перед переходом за посиланням.</string>
<string name="talking_about">%d люди говорять</string>
<string name="twitter_accounts">Акаунти Twitter (через Nitter)</string>
<string name="list_of_twitter_accounts">Імена користувачів Twitter розділені пробілами</string>
@ -1121,4 +1119,19 @@
<string name="remaining_tags">…і ще %d</string>
<string name="followed_tag_success">Тепер ви підписані на цей тег!</string>
<string name="action_follow_tag_confirm">Ви впевнені, що хочете підписатися на тег %1$s??</string>
<string name="tab_home_timeline">\@string/context_home</string>
<string name="tab_local_timeline">\@string/local_menu</string>
<string name="tab_public_timeline">Публічна хронологія</string>
<string name="tab_private_mentions">Приватні згадки</string>
<string name="cd_translated_content">Перекладений вміст: %s</string>
<string name="set_tracking_parameters">Вилучити параметри відстеження</string>
<string name="set_tracking_parameters_indication">Додаток автоматично видалятиме параметри відстеження з URL-адрес перед переходом за посиланням.</string>
<string name="tab_bubble_timeline">Хронологія бульбашок</string>
<string name="cd_list_timeline">%s. Хронологія списку</string>
<string name="cd_hash_tag_timeline">%s. Хронологія хештегів</string>
<string name="cd_hide_media">Приховати медіафайли</string>
<string name="cd_show_media">Показати медіа</string>
<string name="about_fediverse">Федіверс:</string>
<string name="about_website">Вебсайт:</string>
<string name="about_donate">Пожертвувати:</string>
</resources>

View file

@ -584,8 +584,6 @@
\nchuyển hướng tới
\n
\n %2$s</string>
<string name="set_utm_parameters">Xóa UTM parameters</string>
<string name="set_utm_parameters_indication">Ứng dụng sẽ tự động xóa UTM parameters khỏi những URL trước khi mở một liên kết.</string>
<string name="talking_about">%d người đang thảo luận</string>
<string name="twitter_accounts">Tài khoản Twitter (qua Nitter)</string>
<string name="list_of_twitter_accounts">Tên người dùng Twitter phân cách bằng dấu cách</string>

View file

@ -443,7 +443,7 @@
<string name="password_too_short">密码应至少包含 8 个字符</string>
<string name="username_error">用户名只能包含字母、数字和下划线</string>
<string name="account_created">账号已创建!</string>
<string name="account_created_message">您的账号已创建! \n \n 请考虑在接下来的 48 小时内验证您的电子邮件。 \n \n 您现在可以通过在第一个字段中写入 <b>%1$s</b> 并轻按 <b>连接</b> 来连接你的账户。 \n \n <b>重要</b>:如果您的实例需要验证,您将在验证后收到一封电子邮件!</string>
<string name="account_created_message">您的账号已创建! \n \n 请考虑在接下来的 48 小时内验证您的电子邮件。 \n \n 您现在可以通过在第一个字段中写入 <b>%1$s</b> 并轻按 <b>连接</b> 来连接您的账号。 \n \n <b>重要</b>:如果您的实例需要验证,您将在验证后收到一封电子邮件!</string>
<string name="save_draft">将消息保存在草稿中?</string>
<string name="administration">管理</string>
<string name="reports">举报</string>
@ -548,8 +548,6 @@
<string name="check_redirect">检查重定向</string>
<string name="no_redirect">此 URL 不重定向</string>
<string name="redirect_detected">%1$s \n\n重定向到\n\n %2$s</string>
<string name="set_utm_parameters">删除 UTM 参数</string>
<string name="set_utm_parameters_indication">在访问链接之前,应用会自动从 URL 中删除 UTM 参数。</string>
<string name="talking_about">%d 人正在讨论</string>
<string name="twitter_accounts">Twitter 账号(来自 Nitter</string>
<string name="list_of_twitter_accounts">Twitter 用户名空格分隔</string>
@ -722,7 +720,7 @@
<string name="set_timelines_in_a_list_title">列表中的时间线</string>
<string name="set_use_cache_indication">时间线将被缓存,因此应用会更快。</string>
<string name="load_media_type_title">加载媒体缩略图</string>
<string name="display_media">示媒体</string>
<string name="display_media">示媒体</string>
<string name="cached_messages">缓存消息</string>
<string name="aggregate_notifications">聚合通知</string>
<string name="aggregate_notifications_summary">开启时,应用会收起相关通知</string>
@ -837,7 +835,7 @@
<string name="pref_custom_theme_new_summary">允许创建您的自定义主题</string>
<string name="pref_contributor_summary">选择一个由贡献者构建的主题</string>
<string name="messages_stored_in_drafts">存储在草稿中的消息</string>
<string name="display"></string>
<string name="display"></string>
<string name="also_boosted_by">也转发自:</string>
<string name="admin_scope">我是监察员</string>
<string name="location">地点</string>
@ -1069,9 +1067,9 @@
<string name="underline_links">带下划线的可点击元素</string>
<string name="qr_code_generator">二维码生成器</string>
<string name="toast_error_internet">没有互联网连接!</string>
<string name="instance_token">的令牌</string>
<string name="instance_token">的令牌</string>
<string name="toast_error_token_empty">令牌不能为空!</string>
<string name="toast_fail_authenticate">应用验证账失败!</string>
<string name="toast_fail_authenticate">应用验证账失败!</string>
<string name="use_token">使用令牌</string>
<string name="twitter_tags">Twitter 标签(通过 Nitter</string>
<string name="set_pixelfed_full_media">全屏媒体</string>
@ -1110,7 +1108,17 @@
<string name="cd_open_profile">打开个人资料页</string>
<string name="cd_switch_account">切换到 %s</string>
<string name="cd_translated_media_description">翻译的媒体描述:%s</string>
<string name="followed_tag_success">现在关注这个标签了!</string>
<string name="followed_tag_success">现在关注这个标签了!</string>
<string name="action_follow_tag_confirm">确定要关注 %1$s 标签吗?</string>
<string name="remaining_tags">…及另外 %d 个</string>
<string name="tab_public_timeline">公共时间线</string>
<string name="tab_private_mentions">私下提及</string>
<string name="cd_translated_content">已翻译的内容:%s</string>
<string name="set_tracking_parameters">删除跟踪参数</string>
<string name="set_tracking_parameters_indication">访问链接前应用会自动从 URL 删除跟踪参数。</string>
<string name="tab_bubble_timeline">气泡时间线</string>
<string name="cd_list_timeline">%s. 列表时间线</string>
<string name="cd_hash_tag_timeline">%s. 话题标签时间线</string>
<string name="cd_hide_media">隐藏媒体</string>
<string name="cd_show_media">显示媒体</string>
</resources>

View file

@ -545,8 +545,6 @@
<string name="check_redirect">檢查重新導向</string>
<string name="no_redirect">此 URL 不會重新導向</string>
<string name="redirect_detected">%1$s \n\n重新導向到\n\n %2$s</string>
<string name="set_utm_parameters">移除 UTM 參數</string>
<string name="set_utm_parameters_indication">應用程式將會在造訪連結前自動移除 UTM 參數</string>
<string name="talking_about">%d 個正在談論</string>
<string name="twitter_accounts">Twitter 帳號(透過 Nitter</string>
<string name="list_of_twitter_accounts">以空格分開的 Twitter 使用者名稱</string>

View file

@ -78,6 +78,14 @@
<string name="cd_open_profile">Open profile page</string>
<string name="cd_switch_account">Switch to %s</string>
<string name="cd_translated_media_description">Translated media description: %s</string>
<string name="tab_home_timeline">@string/context_home</string>
<string name="tab_local_timeline">@string/local_menu</string>
<string name="tab_public_timeline">Public timeline</string>
<string name="tab_private_mentions">Private mentions</string>
<string name="tab_bubble_timeline">Bubble timeline</string>
<string name="cd_translated_content">Translated content: %s</string>
<string name="cd_list_timeline">%s. List timeline</string>
<string name="cd_hash_tag_timeline">%s. Hash tag timeline</string>
<!-- Status -->
<string name="no_status">No message to display</string>
@ -120,6 +128,8 @@
<string name="bookmark_remove">Remove bookmark</string>
<string name="status_bookmarked">Status has been added to bookmarks!</string>
<string name="status_unbookmarked">Status was removed from bookmarks!</string>
<string name="cd_hide_media">Hide media</string>
<string name="cd_show_media">Show media</string>
<!-- Compose -->
<string name="add_content_warning">Add content warning</string>
@ -176,9 +186,12 @@
<string name="about_license">License: </string>
<string name="about_license_action">GNU GPL V3</string>
<string name="about_code">Source code: </string>
<string name="about_code_action" translatable="false">CodeBerg</string>
<string name="about_code_action" translatable="false">Codeberg</string>
<string name="about_thekinrar">Search instances:</string>
<string name="about_thekinrar_action" translatable="false">instances.social</string>
<string name="about_fediverse">Fediverse:</string>
<string name="about_website">Website:</string>
<string name="about_donate">Donate:</string>
<!-- Conversation -->
<!-- Accounts -->
<string name="no_accounts">No account to display</string>
@ -646,8 +659,8 @@
<string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string>
<string name="redirect_detected">%1$s \n\nredirects to\n\n %2$s</string>
<string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="set_tracking_parameters">Remove tracking parameters</string>
<string name="set_tracking_parameters_indication">The app will automatically remove tracking parameters from URLs before visiting a link.</string>
<string name="talking_about">%d people talking</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string>
<string name="twitter_tags">Twitter tags (via Nitter)</string>
@ -819,6 +832,7 @@
<string-array name="set_logo_type_value" translatable="false">
<item>Fedilab</item>
<item>Fedilab UA</item>
<item>Fedilab PS</item>
<item>Fedilab Pea Green</item>
<item>FediPride</item>
<item>FediPink</item>
@ -842,6 +856,7 @@
<string-array name="SET_LOGO_TYPE_VALUE" translatable="false">
<item>Bubbles</item>
<item>BubblesUA</item>
<item>BubblesPS</item>
<item>BubblesPeaGreen</item>
<item>BubblesPride</item>
<item>BubblesPink</item>
@ -866,6 +881,7 @@
<string-array name="SET_LOGO_DRAWABLE" translatable="false">
<item>@drawable/ic_launcher_bubbles_foreground</item>
<item>@drawable/ic_launcher_bubbles_ua_foreground</item>
<item>@drawable/ic_launcher_bubbles_ps_foreground</item>
<item>@drawable/ic_launcher_bubbles_pea_green_foreground</item>
<item>@drawable/ic_launcher_bubbles_pride_foreground</item>
<item>@drawable/ic_launcher_bubbles_pink_foreground</item>
@ -1024,6 +1040,7 @@
<item>pl</item>
<item>sr</item>
<item>uk</item>
<item>fa</item>
<item>ru</item>
<item>no</item>
<item>kab</item>
@ -1120,6 +1137,7 @@
<item>Polski</item>
<item>Српски</item>
<item>Українська</item>
<item>فارسی</item>
<item>Русский</item>
<item>Norsk</item>
<item>Taqbaylit</item>
@ -1302,7 +1320,7 @@
<string name="DEFAULT_THREAD_VALUE" translatable="false">ASK</string>
<string name="SET_INVIDIOUS_HOST" translatable="false">SET_INVIDIOUS_HOST</string>
<string name="DEFAULT_INVIDIOUS_HOST" translatable="false">invidious.snopyta.org</string>
<string name="SET_FILTER_UTM" translatable="false">SET_FILTER_UTM</string>
<string name="SET_FILTER_TRACKING" translatable="false">SET_FILTER_TRACKING</string>
<string name="SET_NITTER" translatable="false">SET_NITTER</string>
<string name="SET_NITTER_HOST" translatable="false">SET_NITTER_HOST</string>
<string name="DEFAULT_NITTER_HOST" translatable="false">nitter.net</string>

View file

@ -8,7 +8,6 @@
app:entryValues="@array/SET_TRANSLATE_ENTRIES"
app:iconSpaceReserved="false"
app:key="@string/SET_DEFAULT_LOCALE_NEW"
app:summary="@string/set_push_notifications"
app:title="@string/set_change_locale"
app:useSimpleSummaryProvider="true" />

View file

@ -91,10 +91,10 @@
<SwitchPreferenceCompat
app:iconSpaceReserved="false"
app:key="@string/SET_FILTER_UTM"
app:key="@string/SET_FILTER_TRACKING"
app:singleLineTitle="false"
app:summary="@string/set_utm_parameters_indication"
app:title="@string/set_utm_parameters" />
app:summary="@string/set_tracking_parameters_indication"
app:title="@string/set_tracking_parameters" />
</PreferenceCategory>

View file

@ -0,0 +1,19 @@
Afegits:
- Ressaltat de hashtags inferiors
- Enllaços en les tendències
- Etiquetes destacades als perfils
- Afegir/eliminar les etiquetes a l'editor de perfils
Canvis:
- Diàleg de confirmació en aguantar impulsar
- Obre missatges en tocar Difusions programades
- Millor selector d'idioma en filtratges
Correccions:
- Límit de resultats en filtres
- Selecció de mèdia a Pleroma
- Eliminacions errònies en missatges i impulsos temporitzats
- Fallides en enfilalls llargs
- Problema potencial de memòria en mèdia no retallats
- Les cites incrustades ja es veuen
- Algunes fallides

View file

@ -0,0 +1,10 @@
Afegits:
- Suport per a cites a Mastodon
- Aguantar sobre etiqueta: Seguir / Silenciar
Canvis:
- Límit d'etiquetes ressaltades al final del missatge
Correccions:
- Error amb els enfilalls
- Etiquetes que sortien buides

View file

@ -0,0 +1,16 @@
Afegits:
- Menú de 3 punts per a converses remotes (Federació en segon pla)
- Suport per cites a Mastodon
- Aguantar sobre etiqueta: Seguir / Silenciar
Canvis:
- Millor accessibilitat amb els mèdia
- Millors descripcions de contingut
- Actualització d'idiomes
- Actualització d'icones de llançadors, més icones monocromes
- Límitació d'etiquetes ressaltades al final dels missatges
Correccions:
- Error amb la selecció de text en redactar
- Error amb els enfilalls
- Correcció d'etiquetes buides

View file

@ -0,0 +1,18 @@
Afegits:
- Menú de 3 punts per a converses remotes (Federació en segon pla)
- Suport per cites a Mastodon
- Aguantar sobre etiqueta: Seguir / Silenciar
Canvis:
- Millor accessibilitat amb els mèdia
- Millors descripcions de contingut
- Actualització d'idiomes
- Actualització d'icones de llançadors: més de monocromes
- Límitació d'etiquetes ressaltades al final dels missatges
Corregit:
- Error amb la selecció de text en redactar
- Error amb els enfilalls
- Correcció d'etiquetes buides
- Falles amb l'expansió automàtica de mèdia amb Pixelfed
- Fallides amb la funcionalitat d'encabir imatges de previsionat

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