Compare commits

...

320 Commits

Author SHA1 Message Date
Thomas f12e478668 Merge branch 'tiktok_t' into 'develop'
Add tiktok.com/t support (closes #85)

Closes #85

See merge request tom79/nitterizeme!153
2022-09-30 12:54:18 +00:00
Thomas 20d814368b Merge branch 'sub_dom_reddit' into 'develop'
Support *.reddit.com (closes #86)

Closes #86

See merge request tom79/nitterizeme!154
2022-09-30 12:53:59 +00:00
NoPlagiarism b583cc86c9 Support *.reddit.com (closes #86) 2022-09-30 12:53:59 +00:00
Thomas 4f2c975aed Merge branch 'proxitok_new_instances' into 'develop'
Update ProxiTok instances list (closes #90)

Closes #90

See merge request tom79/nitterizeme!155
2022-09-30 12:53:14 +00:00
NoPlagiarism 231058ed06 Update ProxiTok instances list (closes #90) 2022-09-30 12:53:14 +00:00
Thomas 497d6573ea Merge branch 'vxtwitter' into 'develop'
Added vxtwitter.com support (closes #88)

Closes #88

See merge request tom79/nitterizeme!156
2022-09-30 12:52:20 +00:00
NoPlagiarism ee13a1e249 Added vxtwitter.com support (closes #88) 2022-09-13 18:55:05 +05:00
NoPlagiarism 3f9ce8c1da Add tiktok.com/t support (closes #85) 2022-08-15 21:35:57 +05:00
Thomas 7e73c9c5d0 Fix issue #83 - Archive Invidition on README.md 2022-07-29 10:04:02 +02:00
Thomas 656c4b4482 Fix issue #82 - Support for "old.reddit.com" domain 2022-07-29 10:01:15 +02:00
Thomas 2f5a11a999 Merge branch 'vt-proxitok' into 'develop'
Add vt.tiktok.com support

See merge request tom79/nitterizeme!151
2022-07-29 07:44:29 +00:00
Thomas 16c3c609f1 Merge branch 'develop' into 'develop'
Translate to Ukrainian

See merge request tom79/nitterizeme!152
2022-07-29 07:44:19 +00:00
Суспільне Надбання 2628a3bad3 Translate to Ukrainian 2022-07-19 23:33:46 +03:00
NoPlagiarism 206bcebe63 Add vt.tiktok.com support 2022-07-12 18:42:19 +05:00
Thomas b275b37f62 Release 1.30.0 2022-07-03 09:22:36 +02:00
Thomas 1315d61d15 Some fixes 2022-07-03 09:19:15 +02:00
Thomas 08eb5639d3 Merge branch 'develop' of https://framagit.org/tom79/nitterizeme into develop
 Conflicts:
	app/src/main/java/app/fedilab/nitterizeme/adapters/InstanceAdapter.java
	app/src/main/java/app/fedilab/nitterizeme/helpers/Utils.java
2022-07-03 09:10:23 +02:00
Thomas c15496491f Merge branch 'issue-68' into 'develop'
Fix Twitter ref_url parameter (#68)

Closes #68

See merge request tom79/nitterizeme!150
2022-05-17 05:44:51 +00:00
Thomas f49b4b0974 Merge branch 'issue-67' into 'develop'
Fix NullPointerException (#67)

Closes #67

See merge request tom79/nitterizeme!149
2022-05-17 05:43:33 +00:00
Thomas bece2e04f5 Merge branch 'invidio-dot-us-remainder' into 'develop'
Remove only mention of invidio.us

See merge request tom79/nitterizeme!147
2022-05-17 05:43:25 +00:00
Thomas 73ca4c2eda Merge branch 'proxitok' into 'develop'
Add Proxitok

Closes #71

See merge request tom79/nitterizeme!146
2022-05-17 05:43:14 +00:00
Jo 7663f877d8 Add Proxitok 2022-05-17 05:43:13 +00:00
Joëlle van Essen 63d837796a
Fix Twitter ref_url parameter (#68) 2022-05-15 11:54:44 +02:00
Joëlle van Essen 9348939ce6
Fix NullPointerException (#67) 2022-05-15 11:30:23 +02:00
Joëlle van Essen 946cb69c73
Remove only mention of invidio.us 2022-05-15 10:49:22 +02:00
Thomas e6ae7a44c3 Merge branch 'develop' of https://framagit.org/tom79/nitterizeme into develop 2022-01-27 18:44:35 +01:00
Thomas 4757e2c116 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!144
2022-01-27 17:43:30 +00:00
Thomas 3095e85090 New Crowdin updates 2022-01-27 17:43:26 +00:00
Thomas f6ac365bd1 remove useless icons 2022-01-27 18:41:53 +01:00
Thomas c9de4e6c30 Remove useless in-app player 2022-01-27 18:32:37 +01:00
Thomas bccbab9729 Merge branch 'ms8661-develop-patch-90173' into 'develop'
Fix wikipedia URL transformation

See merge request tom79/nitterizeme!145
2022-01-14 05:48:10 +00:00
ms8661 68e5a818b7 Fix language param 'lang' appended to wikipedia URL; use '?' instead of '&' since it is the first and only param 2022-01-11 03:33:04 +00:00
ms8661 ef988a3dd0 Handle mobile wikipedia URLs (subdomain='m') 2022-01-11 03:06:06 +00:00
Thomas 59a0a82ade Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!143
2021-10-28 05:22:14 +00:00
Thomas 7029eed037 New Crowdin updates 2021-10-28 05:22:14 +00:00
Thomas b149c557eb Merge branch 'update_readme' into 'develop'
Update readme

See merge request tom79/nitterizeme!142
2021-10-26 17:50:42 +00:00
කසුන් 65e30bcd5e Update readme 2021-10-26 17:50:42 +00:00
Thomas ad7add4381 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!141
2021-10-26 17:50:11 +00:00
Thomas 49e2d1e89b New Crowdin updates 2021-10-26 17:50:11 +00:00
Thomas 5f52457191 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!139
2021-10-26 10:46:31 +00:00
Thomas 812ce64b79 Merge branch 'update_screenshots' into 'develop'
Update screenshots

See merge request tom79/nitterizeme!140
2021-10-26 10:46:02 +00:00
0xd9a 1531be28e9 Update screenshots 2021-10-26 16:10:24 +05:30
Thomas 65c11b03d2 New translations strings.xml (Urdu (India)) 2021-10-26 09:52:34 +00:00
Thomas 673e42609f New translations strings.xml (Sardinian) 2021-10-26 09:52:32 +00:00
Thomas d50f2ef283 New translations strings.xml (Kurmanji (Kurdish)) 2021-10-26 09:52:30 +00:00
Thomas a862415fbb New translations strings.xml (Bengali) 2021-10-26 09:52:26 +00:00
Thomas 3335e0a0af New translations strings.xml (Persian) 2021-10-26 09:52:24 +00:00
Thomas 197fbf5deb New translations strings.xml (Portuguese, Brazilian) 2021-10-26 09:52:23 +00:00
Thomas 3b8fb2e0f9 New translations strings.xml (Galician) 2021-10-26 09:52:20 +00:00
Thomas 2126324bba New translations strings.xml (Urdu (Pakistan)) 2021-10-26 09:52:18 +00:00
Thomas da9c8fbf68 New translations strings.xml (Chinese Simplified) 2021-10-26 09:52:15 +00:00
Thomas 11c895cec1 New translations strings.xml (Portuguese) 2021-10-26 09:52:13 +00:00
Thomas f51c2d3df9 New translations strings.xml (Polish) 2021-10-26 09:52:11 +00:00
Thomas 69e2e4fa59 New translations strings.xml (Dutch) 2021-10-26 09:52:08 +00:00
Thomas 19919cc34c New translations strings.xml (Japanese) 2021-10-26 09:52:06 +00:00
Thomas 7187823032 New translations strings.xml (Italian) 2021-10-26 09:52:04 +00:00
Thomas 17accc6787 New translations strings.xml (Finnish) 2021-10-26 09:52:02 +00:00
Thomas 749c390f21 New translations strings.xml (Basque) 2021-10-26 09:52:00 +00:00
Thomas 0dbf79e45b New translations strings.xml (Greek) 2021-10-26 09:51:58 +00:00
Thomas 9bed5abe8d New translations strings.xml (German) 2021-10-26 09:51:56 +00:00
Thomas f2986dc0c1 New translations strings.xml (Arabic) 2021-10-26 09:51:54 +00:00
Thomas a3e7b57b8e New translations strings.xml (Russian) 2021-10-26 09:51:52 +00:00
Thomas 0aa30f84ac New translations strings.xml (Spanish) 2021-10-26 09:51:50 +00:00
Thomas 75a0022e8d New translations full_description.txt (Bengali, India) 2021-10-26 09:51:40 +00:00
Thomas 90497c89b7 New translations full_description.txt (Bengali) 2021-10-26 09:51:38 +00:00
Thomas 5b10b2586e New translations strings.xml (French) 2021-10-26 09:51:22 +00:00
Thomas a14bd7aa3b Prepare release 1.20.0 2021-10-26 11:50:31 +02:00
Thomas 72f5e505db Add Wikipedia & Medium into check app + change navigation color 2021-10-26 11:46:58 +02:00
Thomas 7c6827b4a4 Merge remote-tracking branch 'origin/develop' into develop 2021-10-26 11:00:23 +02:00
Thomas 2046f416ff Change json parser + new file version on server 2021-10-26 11:00:07 +02:00
Thomas 9eda917ff4 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!138
2021-10-26 07:47:46 +00:00
Thomas ec89a4ec66 New translations short_description.txt (Japanese) 2021-10-26 07:44:46 +00:00
Thomas 19f14e9e6c New translations short_description.txt (German) 2021-10-26 07:44:28 +00:00
Thomas 7fd3b870f1 New translations full_description.txt (French) 2021-10-26 07:44:27 +00:00
Thomas 1093849bb7 New translations strings.xml (Urdu (India)) 2021-10-26 07:44:25 +00:00
Thomas bede01bd36 New translations strings.xml (Sardinian) 2021-10-26 07:44:22 +00:00
Thomas e00923a081 New translations strings.xml (Kurmanji (Kurdish)) 2021-10-26 07:44:20 +00:00
Thomas 77dce54e2e New translations strings.xml (Bengali) 2021-10-26 07:44:16 +00:00
Thomas 7ae9ca4ed0 New translations strings.xml (Persian) 2021-10-26 07:44:12 +00:00
Thomas 0ab9f305da New translations strings.xml (Portuguese, Brazilian) 2021-10-26 07:44:10 +00:00
Thomas ab3826b06d New translations strings.xml (Galician) 2021-10-26 07:44:08 +00:00
Thomas 65689cafc5 New translations strings.xml (Urdu (Pakistan)) 2021-10-26 07:44:06 +00:00
Thomas 845590505e New translations full_description.txt (Spanish) 2021-10-26 07:44:04 +00:00
Thomas 68cfe81329 New translations strings.xml (Chinese Simplified) 2021-10-26 07:44:02 +00:00
Thomas 69320423a8 New translations strings.xml (Portuguese) 2021-10-26 07:43:59 +00:00
Thomas e87a9d1c56 New translations strings.xml (Polish) 2021-10-26 07:43:57 +00:00
Thomas 4acf9b9ddd New translations strings.xml (Dutch) 2021-10-26 07:43:55 +00:00
Thomas 9ea15d9b73 New translations strings.xml (Japanese) 2021-10-26 07:43:53 +00:00
Thomas 78c6bfbef5 New translations strings.xml (Italian) 2021-10-26 07:43:51 +00:00
Thomas efc6377811 New translations strings.xml (Finnish) 2021-10-26 07:43:49 +00:00
Thomas 5449171a02 New translations strings.xml (Basque) 2021-10-26 07:43:47 +00:00
Thomas 9d2a2e8cba New translations strings.xml (Greek) 2021-10-26 07:43:44 +00:00
Thomas dfff4116fc New translations strings.xml (German) 2021-10-26 07:43:42 +00:00
Thomas dbad880e21 New translations strings.xml (Arabic) 2021-10-26 07:43:40 +00:00
Thomas ee2219df62 New translations strings.xml (Russian) 2021-10-26 07:43:38 +00:00
Thomas fb0add1b27 New translations strings.xml (Spanish) 2021-10-26 07:43:35 +00:00
Thomas 60fa149c89 New translations full_description.txt (Arabic) 2021-10-26 07:43:33 +00:00
Thomas 0841ae9f9b New translations full_description.txt (Greek) 2021-10-26 07:43:31 +00:00
Thomas 1eb7df1e27 New translations full_description.txt (Sardinian) 2021-10-26 07:43:26 +00:00
Thomas 1bfb47bf49 New translations full_description.txt (Kurmanji (Kurdish)) 2021-10-26 07:43:23 +00:00
Thomas 2b1664caba New translations full_description.txt (Bengali, India) 2021-10-26 07:43:21 +00:00
Thomas 2913d3458c New translations full_description.txt (Bengali) 2021-10-26 07:43:19 +00:00
Thomas ed6357b2e7 New translations full_description.txt (Persian) 2021-10-26 07:43:17 +00:00
Thomas 8f2961804b New translations full_description.txt (German) 2021-10-26 07:43:14 +00:00
Thomas be813cbc55 New translations full_description.txt (Galician) 2021-10-26 07:43:12 +00:00
Thomas e97c209293 New translations full_description.txt (Chinese Simplified) 2021-10-26 07:43:10 +00:00
Thomas a5033a6720 New translations full_description.txt (Russian) 2021-10-26 07:43:08 +00:00
Thomas cadf486d13 New translations full_description.txt (Portuguese) 2021-10-26 07:43:06 +00:00
Thomas 6da8ba1a6b New translations full_description.txt (Polish) 2021-10-26 07:43:04 +00:00
Thomas bbd354b395 New translations full_description.txt (Dutch) 2021-10-26 07:43:01 +00:00
Thomas 0219831e2b New translations full_description.txt (Japanese) 2021-10-26 07:42:59 +00:00
Thomas 9fe924c23e New translations full_description.txt (Italian) 2021-10-26 07:42:57 +00:00
Thomas 806e665f33 New translations full_description.txt (Finnish) 2021-10-26 07:42:55 +00:00
Thomas caa6194f7b New translations full_description.txt (Basque) 2021-10-26 07:42:53 +00:00
Thomas 4a3d69b885 New translations full_description.txt (Urdu (Pakistan)) 2021-10-26 07:42:50 +00:00
Thomas 9815c5dc4b New translations strings.xml (French) 2021-10-26 07:42:48 +00:00
Thomas 7e8248e5a6 Merge remote-tracking branch 'origin/develop' into develop 2021-10-25 18:56:19 +02:00
Thomas 98ce97656b Some improvements 2021-10-25 18:56:09 +02:00
Thomas e3b4fc6f33 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!137
2021-10-25 16:11:21 +00:00
Thomas bb2f0e6b82 Update F-Droid descriptions 2021-10-25 17:41:17 +02:00
Thomas b9ae945002 Add logic to Wikiless #61 2021-10-25 17:23:14 +02:00
Thomas a86f8e0925 Add translations Wikiless #61 2021-10-25 17:05:18 +02:00
Thomas 308dc9bb70 Prepare logic and views for supporting Wikiless #61 2021-10-25 17:03:25 +02:00
Thomas bab3fc1a70 fix CI 2021-10-25 16:20:45 +02:00
Thomas fc9b49723c fix CI 2021-10-25 16:15:36 +02:00
Thomas 825ce5dd0c fix CI 2021-10-25 16:03:46 +02:00
Thomas 29f2030c58 fix CI 2021-10-25 16:01:07 +02:00
Thomas 21d9bd99bf New translations strings.xml (Urdu (India)) 2021-10-25 13:53:22 +00:00
Thomas 6c32e69845 New translations strings.xml (Sardinian) 2021-10-25 13:53:19 +00:00
Thomas f40e6389ad New translations strings.xml (Kurmanji (Kurdish)) 2021-10-25 13:53:15 +00:00
Thomas 79bfce23b2 New translations strings.xml (Bengali) 2021-10-25 13:53:09 +00:00
Thomas a6399cd08a New translations strings.xml (Persian) 2021-10-25 13:53:03 +00:00
Thomas fa480b00a1 New translations strings.xml (Portuguese, Brazilian) 2021-10-25 13:52:58 +00:00
Thomas dd355ad9a7 New translations strings.xml (Galician) 2021-10-25 13:52:56 +00:00
Thomas 88a3e39dc0 New translations strings.xml (Urdu (Pakistan)) 2021-10-25 13:52:54 +00:00
Thomas 33b1caadfa New translations strings.xml (Chinese Simplified) 2021-10-25 13:52:51 +00:00
Thomas 37d3cab021 New translations strings.xml (Portuguese) 2021-10-25 13:52:49 +00:00
Thomas 8d12509685 New translations strings.xml (Polish) 2021-10-25 13:52:47 +00:00
Thomas ede7624d10 New translations strings.xml (Dutch) 2021-10-25 13:52:45 +00:00
Thomas 60f8cc00b9 New translations strings.xml (Japanese) 2021-10-25 13:52:43 +00:00
Thomas 0af0af5739 New translations strings.xml (Italian) 2021-10-25 13:52:40 +00:00
Thomas e671a8bbc3 New translations strings.xml (Finnish) 2021-10-25 13:52:38 +00:00
Thomas 73884ebd00 New translations strings.xml (Basque) 2021-10-25 13:52:35 +00:00
Thomas 2fd27bb6e0 New translations strings.xml (Greek) 2021-10-25 13:52:33 +00:00
Thomas 1cd8c14800 New translations strings.xml (German) 2021-10-25 13:52:31 +00:00
Thomas 33f541fdc0 New translations strings.xml (Arabic) 2021-10-25 13:52:29 +00:00
Thomas eb041296fe New translations strings.xml (Russian) 2021-10-25 13:52:27 +00:00
Thomas acdd5093bf New translations strings.xml (Spanish) 2021-10-25 13:52:25 +00:00
Thomas f3c9bef70b New translations full_description.txt (Bengali, India) 2021-10-25 13:52:14 +00:00
Thomas b00d4e1fdf New translations full_description.txt (Chinese Simplified) 2021-10-25 13:52:07 +00:00
Thomas ebce8e16bd New translations full_description.txt (Polish) 2021-10-25 13:52:03 +00:00
Thomas 201f51c9fb New translations strings.xml (French) 2021-10-25 13:51:55 +00:00
Thomas 83e5c5f3ad fix CI 2021-10-25 15:51:27 +02:00
Thomas 72bd0c0eb1 Fix bottom buttons position + mastodon account 2021-10-25 15:40:56 +02:00
Thomas 80367e4441 Fix toolbar missing 2021-10-25 15:36:37 +02:00
Thomas a7358ee1c3 Support scribe.rip #63 - Handle subdomains to transform them into sribe.rip/@subdomain/...... 2021-10-25 15:23:43 +02:00
Thomas f931e157e1 Support scribe.rip #63 2021-10-25 14:50:06 +02:00
Thomas 2c82b71b56 Update libraries 2021-10-25 12:14:43 +02:00
Thomas 0ce1e2dff4 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!136
2021-10-25 09:54:44 +00:00
Thomas 4150095a9b New translations strings.xml (Kurmanji (Kurdish)) 2021-10-24 21:19:46 +00:00
Thomas 5e1094d527 New translations full_description.txt (Bengali) 2021-10-24 15:21:26 +00:00
Thomas c91b9e9694 New translations full_description.txt (Bengali, India) 2021-10-24 15:21:12 +00:00
Thomas d012fe8d99 New translations strings.xml (Kurmanji (Kurdish)) 2021-10-24 15:20:59 +00:00
Thomas a81ee3c507 New translations short_description.txt (Kurmanji (Kurdish)) 2021-10-24 15:20:56 +00:00
Thomas bdbcb23dc5 New translations strings.xml (Sardinian) 2021-10-24 15:20:55 +00:00
Thomas a142fa8a76 New translations full_description.txt (Sardinian) 2021-10-24 15:20:53 +00:00
Thomas e03c71ad21 New translations short_description.txt (Sardinian) 2021-10-24 15:20:51 +00:00
Thomas ff4efb732d New translations strings.xml (Urdu (India)) 2021-10-24 15:20:46 +00:00
Thomas 5ae4baab50 New translations full_description.txt (Kurmanji (Kurdish)) 2021-10-24 15:20:42 +00:00
Thomas d7b1cf7a26 New translations strings.xml (Urdu (Pakistan)) 2021-10-24 15:20:39 +00:00
Thomas a05390b7f4 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!135
2021-09-21 19:40:48 +00:00
Thomas 4b9532079a New translations short_description.txt (Russian) 2021-08-15 08:39:09 +00:00
Thomas 782d969413 release 1.19.0 2021-06-11 18:44:00 +02:00
Thomas 2f086199bd Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!134
2021-06-11 16:42:30 +00:00
Thomas 1ce8e74966 New Crowdin updates 2021-06-11 16:42:30 +00:00
Thomas cad00f38de add *.properties 2021-06-11 18:41:03 +02:00
Thomas c74b9a03e5 add *.properties 2021-06-11 18:40:27 +02:00
Thomas a3377c5530 Fix issue #56 2021-06-11 18:36:43 +02:00
Thomas d768a5e329 Fix issue #56 2021-06-11 18:36:33 +02:00
Thomas 02ca17db71 Release 1.18.0 2021-02-09 19:04:13 +01:00
Thomas 2f65dbc736 Fix issue #50 2021-02-09 18:56:44 +01:00
Thomas d9ceb97a45 todo added 2021-02-09 18:41:54 +01:00
Thomas 0a81728645 comment #54 - add more utm detection 2021-02-09 18:27:20 +01:00
Thomas 6f1f35fb02 Merge branch 'crowdin_lite_flavor' into 'develop'
Crowdin lite flavor

See merge request tom79/nitterizeme!133
2020-12-24 17:02:43 +01:00
Thomas b81b330a16 Crowdin lite flavor 2020-12-24 17:02:43 +01:00
Thomas 7d0522e174 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!132
2020-12-24 16:57:34 +01:00
Thomas 91d8073992 New Crowdin updates 2020-12-24 16:57:34 +01:00
Thomas 42b5cb8939 Release 1.17.1 2020-12-19 11:37:26 +01:00
Thomas 8ba5f776fd Merge branch 'crowdin_lite_flavor' into develop
# Conflicts:
#	crowdin.yml
2020-12-19 11:12:49 +01:00
Thomas 321824cc0d Merge branch 'develop' of https://framagit.org/tom79/nitterizeme into develop 2020-12-19 11:07:56 +01:00
Thomas 27a0db62ae Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!130
2020-12-19 11:07:46 +01:00
Thomas 7a8d1822ed New Crowdin updates 2020-12-19 11:07:46 +01:00
Thomas d4f05891af Merge branch 'l10n_crowdin_lite_flavor' into 'crowdin_lite_flavor'
New Crowdin updates

See merge request tom79/nitterizeme!129
2020-12-19 11:07:42 +01:00
Thomas 7a2148cc42 New Crowdin updates 2020-12-19 11:07:41 +01:00
Thomas d7fb8c1a32 Merge branch 'develop' of https://framagit.org/tom79/nitterizeme into develop 2020-12-19 10:03:42 +01:00
Thomas d575c5a39a Update Crowdin configuration file 2020-12-19 10:01:58 +01:00
Thomas 20e9e7bfaa Update Crowdin configuration file 2020-12-19 10:01:39 +01:00
Thomas 0c8dd86525 Release 1.17.1 2020-12-19 09:06:15 +01:00
Thomas 3cdbcdb0ba Fix issue due to lib 2020-12-19 09:05:16 +01:00
Thomas 64bd75a6f9 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!128
2020-12-19 09:01:56 +01:00
Thomas 00a8cce859 New Crowdin updates 2020-12-19 09:01:55 +01:00
Thomas 8517901b13 Merge remote-tracking branch 'origin/develop' into develop 2020-12-17 14:54:35 +01:00
Thomas 0e4f62ec11 Merge branch 'l10n_develop' into develop
# Conflicts:
#	app/src/fullLinks/fastlane/metadata/android/fa/short_description.txt
#	app/src/fullLinks/fastlane/metadata/android/fi/full_description.txt
#	app/src/fullLinks/fastlane/metadata/android/fi/short_description.txt
#	app/src/fullLinks/fastlane/metadata/android/it/short_description.txt
#	app/src/fullLinks/fastlane/metadata/android/pl/short_description.txt
#	app/src/fullLinks/fastlane/metadata/android/pt/full_description.txt
2020-12-17 14:54:30 +01:00
Thomas 546a557a35 New translations short_description.txt (Urdu (India)) 2020-12-17 14:41:07 +01:00
Thomas 4aa07e8a71 New translations short_description.txt (Finnish) 2020-12-17 14:41:03 +01:00
Thomas 4ad6d43378 New translations full_description.txt (Hebrew) 2020-12-17 14:40:58 +01:00
Thomas 8c8f0eecdc New translations short_description.txt (Hebrew) 2020-12-17 14:40:54 +01:00
Thomas 86560ac65e New translations full_description.txt (Hungarian) 2020-12-17 14:40:49 +01:00
Thomas 65efff459a New translations short_description.txt (Hungarian) 2020-12-17 14:40:45 +01:00
Thomas 6004e1c567 New translations full_description.txt (Italian) 2020-12-17 14:40:41 +01:00
Thomas ab42f874d6 New translations short_description.txt (Italian) 2020-12-17 14:40:37 +01:00
Thomas 48bfc1f736 New translations full_description.txt (Japanese) 2020-12-17 14:40:33 +01:00
Thomas 85a43619a5 New translations short_description.txt (Japanese) 2020-12-17 14:40:29 +01:00
Thomas f2218b543b New translations full_description.txt (Finnish) 2020-12-17 14:40:25 +01:00
Thomas 89dd8ca0d4 New translations short_description.txt (Korean) 2020-12-17 14:40:20 +01:00
Thomas 6e0802433f New translations full_description.txt (Dutch) 2020-12-17 14:40:13 +01:00
Thomas 468a25dce7 New translations short_description.txt (Dutch) 2020-12-17 14:40:09 +01:00
Thomas b284f0bc48 New translations full_description.txt (Norwegian) 2020-12-17 14:40:03 +01:00
Thomas 24864aef3c New translations short_description.txt (Norwegian) 2020-12-17 14:39:59 +01:00
Thomas f447212624 New translations full_description.txt (Polish) 2020-12-17 14:39:55 +01:00
Thomas ed55da3169 New translations short_description.txt (Polish) 2020-12-17 14:39:51 +01:00
Thomas 65af55b82d New translations full_description.txt (Portuguese) 2020-12-17 14:39:45 +01:00
Thomas a1ba57cf77 New translations full_description.txt (Korean) 2020-12-17 14:39:41 +01:00
Thomas 49a9821921 New translations strings.xml (Finnish) 2020-12-17 14:39:36 +01:00
Thomas 0482b54385 New translations full_description.txt (Basque) 2020-12-17 14:39:31 +01:00
Thomas 5db112c7d2 New translations short_description.txt (Romanian) 2020-12-17 14:39:28 +01:00
Thomas 6257394d2c New translations full_description.txt (French) 2020-12-17 14:39:23 +01:00
Thomas 9b2c71baa7 New translations short_description.txt (French) 2020-12-17 14:39:20 +01:00
Thomas 49ae2ff766 New translations full_description.txt (Spanish) 2020-12-17 14:39:14 +01:00
Thomas 1e872614c8 New translations short_description.txt (Spanish) 2020-12-17 14:39:08 +01:00
Thomas 94310b7b81 New translations full_description.txt (Arabic) 2020-12-17 14:39:04 +01:00
Thomas 295b419401 New translations short_description.txt (Arabic) 2020-12-17 14:39:00 +01:00
Thomas 7424f7d34d New translations full_description.txt (Catalan) 2020-12-17 14:38:56 +01:00
Thomas 69e28747cc New translations short_description.txt (Basque) 2020-12-17 14:38:53 +01:00
Thomas 7bc9596019 New translations short_description.txt (Catalan) 2020-12-17 14:38:49 +01:00
Thomas 1b34d961eb New translations full_description.txt (Czech) 2020-12-17 14:38:46 +01:00
Thomas 3050027138 New translations short_description.txt (Czech) 2020-12-17 14:38:42 +01:00
Thomas f196f3cc13 New translations full_description.txt (Danish) 2020-12-17 14:38:38 +01:00
Thomas d1feb46bdf New translations short_description.txt (Danish) 2020-12-17 14:38:35 +01:00
Thomas e99e371bab New translations full_description.txt (German) 2020-12-17 14:38:29 +01:00
Thomas 597a48def9 New translations short_description.txt (German) 2020-12-17 14:38:25 +01:00
Thomas 4a651556f6 New translations full_description.txt (Greek) 2020-12-17 14:38:18 +01:00
Thomas 2b174039bd New translations short_description.txt (Greek) 2020-12-17 14:38:14 +01:00
Thomas 1389d7b5c4 New translations full_description.txt (Romanian) 2020-12-17 14:38:08 +01:00
Thomas e0b34b9789 New translations short_description.txt (Russian) 2020-12-17 14:38:02 +01:00
Thomas b488b7e980 New translations full_description.txt (Persian) 2020-12-17 14:37:58 +01:00
Thomas af642e5f3c New translations short_description.txt (Persian) 2020-12-17 14:37:54 +01:00
Thomas 3f9abef98a New translations full_description.txt (Tamil) 2020-12-17 14:37:50 +01:00
Thomas c7a9f7cdb8 New translations short_description.txt (Tamil) 2020-12-17 14:37:46 +01:00
Thomas 22c9f05391 New translations full_description.txt (Bengali) 2020-12-17 14:37:40 +01:00
Thomas 82bddf494e New translations full_description.txt (Hindi) 2020-12-17 14:37:31 +01:00
Thomas 63b9cc0071 New translations short_description.txt (Hindi) 2020-12-17 14:37:27 +01:00
Thomas d0635cc770 New translations short_description.txt (Indonesian) 2020-12-17 14:37:24 +01:00
Thomas 7e45dc8395 New translations short_description.txt (Breton) 2020-12-17 14:37:19 +01:00
Thomas 654e2ea876 New translations full_description.txt (Kannada) 2020-12-17 14:37:14 +01:00
Thomas 9416aa3a98 New translations short_description.txt (Kannada) 2020-12-17 14:37:11 +01:00
Thomas f59bcc421c New translations full_description.txt (Occitan) 2020-12-17 14:37:06 +01:00
Thomas 02f2838012 New translations short_description.txt (Occitan) 2020-12-17 14:37:02 +01:00
Thomas 04728351c9 New translations full_description.txt (Bengali, India) 2020-12-17 14:36:58 +01:00
Thomas b2ad89a626 New translations short_description.txt (Bengali, India) 2020-12-17 14:36:54 +01:00
Thomas a68c4feaa5 New translations full_description.txt (Urdu (India)) 2020-12-17 14:36:50 +01:00
Thomas 5ac69b1b27 New translations full_description.txt (Breton) 2020-12-17 14:36:47 +01:00
Thomas 2558ef275a New translations full_description.txt (Russian) 2020-12-17 14:36:44 +01:00
Thomas cbc4713b54 New translations full_description.txt (Indonesian) 2020-12-17 14:36:42 +01:00
Thomas eb8265f06f New translations short_description.txt (Portuguese, Brazilian) 2020-12-17 14:36:38 +01:00
Thomas 309879850b New translations full_description.txt (Serbian (Cyrillic)) 2020-12-17 14:36:33 +01:00
Thomas e92b196284 New translations short_description.txt (Serbian (Cyrillic)) 2020-12-17 14:36:30 +01:00
Thomas 58c730fe91 New translations full_description.txt (Swedish) 2020-12-17 14:36:26 +01:00
Thomas b6371dbd60 New translations short_description.txt (Swedish) 2020-12-17 14:36:22 +01:00
Thomas ed3eb8e50c New translations full_description.txt (Turkish) 2020-12-17 14:36:16 +01:00
Thomas cb4e58fba2 New translations short_description.txt (Turkish) 2020-12-17 14:36:12 +01:00
Thomas cf4ee2ad57 New translations full_description.txt (Ukrainian) 2020-12-17 14:36:06 +01:00
Thomas aa23f49296 New translations short_description.txt (Ukrainian) 2020-12-17 14:36:02 +01:00
Thomas b695fac32a New translations short_description.txt (Chinese Simplified) 2020-12-17 14:35:54 +01:00
Thomas 61f5fe985a New translations full_description.txt (Chinese Traditional) 2020-12-17 14:35:50 +01:00
Thomas deb76d4f8d New translations short_description.txt (Chinese Traditional) 2020-12-17 14:35:46 +01:00
Thomas 954416d507 New translations full_description.txt (Vietnamese) 2020-12-17 14:35:41 +01:00
Thomas f58edc3198 New translations short_description.txt (Vietnamese) 2020-12-17 14:35:37 +01:00
Thomas 848c69873b New translations full_description.txt (Galician) 2020-12-17 14:35:31 +01:00
Thomas 9a98ad58e9 New translations short_description.txt (Galician) 2020-12-17 14:35:28 +01:00
Thomas f231c7891a New translations full_description.txt (Portuguese, Brazilian) 2020-12-17 14:35:25 +01:00
Thomas bdfdaac137 New translations full_description.txt (Chinese Simplified) 2020-12-17 14:35:21 +01:00
Thomas 339c7c1fb2 Update Crowdin configuration file 2020-12-17 14:33:12 +01:00
Thomas 2030e71913 New translations strings.xml (Bengali) 2020-12-17 14:30:08 +01:00
Thomas 92ea1bddf5 New translations strings.xml (Bengali, India) 2020-12-17 14:29:58 +01:00
Thomas fddd77ae40 Update fastlane 2020-12-17 14:27:38 +01:00
Thomas 67b5b7db11 New translations short_description.txt (Persian) 2020-12-15 23:00:39 +01:00
Thomas 845c544c3f New translations full_description.txt (Finnish) 2020-12-15 01:08:45 +01:00
Thomas bbfa1a28d2 New translations strings.xml (Finnish) 2020-12-15 01:08:43 +01:00
Thomas 8e7abb8c8c New translations short_description.txt (Finnish) 2020-12-14 19:06:55 +01:00
Thomas 04b63f02be New translations strings.xml (Finnish) 2020-12-14 19:06:52 +01:00
Thomas 9770465a9e New translations strings.xml (Finnish) 2020-12-14 13:06:57 +01:00
Thomas 0e737843ae New translations short_description.txt (Polish) 2020-12-12 23:56:22 +01:00
Thomas 4e548c546a New translations full_description.txt (Portuguese, Brazilian) 2020-12-12 23:56:11 +01:00
Thomas 41d79c1409 New translations full_description.txt (Bengali) 2020-12-12 23:56:02 +01:00
Thomas de99b45737 New translations short_description.txt (Italian) 2020-12-12 23:55:37 +01:00
Thomas 0428b7950a New translations full_description.txt (Bengali, India) 2020-12-12 23:55:30 +01:00
Thomas b4e605647d Release 1.17.0 2020-12-12 18:12:53 +01:00
Thomas 9c39d717dc Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!124
2020-12-12 18:10:49 +01:00
Thomas 1d1dfc58cc New Crowdin updates 2020-12-12 18:10:48 +01:00
Thomas 2252f60e5d Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!123
2020-12-12 17:47:10 +01:00
Thomas 84a2c41708 New translations strings.xml (Bengali, India) 2020-12-12 17:41:59 +01:00
Thomas e316caa152 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	app/src/fullLinks/play/listings/fa/full-description.txt
2020-12-12 17:40:07 +01:00
Thomas 2d05261aa1 Fastlane 2020-12-12 17:39:49 +01:00
Thomas 8e9637d446 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!122
2020-12-12 15:44:28 +01:00
Thomas 51379b649d New translations strings.xml (Polish) 2020-12-09 17:50:56 +01:00
Thomas 5ed28907d7 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!121
2020-12-09 10:16:47 +01:00
Thomas 281ad20806 New Crowdin updates 2020-12-09 10:16:46 +01:00
Thomas b381ade471 Release 1.16.0 2020-12-02 18:45:45 +01:00
Thomas 2a423f7ecd Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!120
2020-12-02 18:39:40 +01:00
Thomas c5219204ca New Crowdin updates 2020-12-02 18:39:39 +01:00
Thomas d63fa2a6e5 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!119
2020-12-02 16:08:28 +01:00
Thomas 647e614dd2 New Crowdin updates 2020-12-02 16:08:28 +01:00
Thomas deced3ebe3 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/nitterizeme!118
2020-12-02 08:37:47 +01:00
Thomas 4fed0d7539 New Crowdin updates 2020-12-02 08:37:47 +01:00
Thomas b1475bfced Fix issue #48 2020-12-02 08:36:02 +01:00
Thomas 2c5bb5aa58 Support teddit 2020-12-01 13:35:01 +01:00
Thomas 39b183d2dc Support teddit 2020-12-01 11:40:20 +01:00
Thomas 0b2fea479f Support teddit 2020-12-01 10:29:24 +01:00
Thomas 0a61f26d1e Support teddit 2020-11-30 18:59:29 +01:00
290 changed files with 5890 additions and 2074 deletions

3
.gitignore vendored
View File

@ -8,3 +8,6 @@
.externalNativeBuild
.cxx
/app/release/
*.properties
/app/lite/release/
/app/fullLinks/release/

View File

@ -1,46 +1,87 @@
# UntrackMe [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![Crowdin](https://badges.crowdin.net/nitterizeme/localized.svg)](https://crowdin.com/project/nitterizeme) [![pipeline status](https://framagit.org/tom79/nitterizeme/badges/develop/pipeline.svg)](https://framagit.org/tom79/nitterizeme/commits/develop)
UntrackMe once set by default to open Twitter and YouTube links will transform them into Nitter and Invidious links and delegate the action to another app.
UntrackMe transforms Twitter, YouTube, Instagram, Reddit and Medium and Wikipedia links to links of open source, [privacy friendly front-ends](#privacy-friendly-front-ends). Converts Google Maps links to OpenStreetMap links. Removes tracking parameters from any url. Then delegates the action to other apps that are capable of handling them.
There are two versions of UntrackMe - Once handling all URLs for removing tracking parameters - Another one called "UntrackMe Lite" that will only handle Twitter, Youtube, Instagram, Google Maps and shortened URLs.
##### Versions of UntrackMe:
- **Lite**<br>
Can handle Twitter, YouTube, Instagram, Reddit Medium, Wikipedia, Google Maps and shortened urls.
- **Full**<br>
All features of _Lite_ version + Can remove tracking parameters from any url.
## Donate
[<img alt="Donate using Liberapay" src="http://img.shields.io/liberapay/patrons/tom79.svg?logo=liberapay"/>](https://liberapay.com/tom79/donate)
## Download
Full version: [<img alt='Get it on F-Droid' src='./images/get-it-on-fdroid.png' height="80"/>](https://f-droid.org/app/app.fedilab.nitterizeme)
- **Full Version**:<br>
[<img alt='Get it on F-Droid' src='./images/get-it-on-fdroid.png' height="80"/>](https://f-droid.org/app/app.fedilab.nitterizeme)
Lite version: [<img alt='Get it on F-Droid' src='./images/get-it-on-fdroid.png' height="80"/>](https://f-droid.org/app/app.fedilab.nitterizemelite)
- **Lite Version**:<br>
[<img alt='Get it on F-Droid' src='./images/get-it-on-fdroid.png' height="80"/>](https://f-droid.org/app/app.fedilab.nitterizemelite)
### What is Nitter:
## Privacy Friendly Front-Ends
A free and open source alternative Twitter front-end focused on privacy.
Github project: [/zedeus/nitter](https://github.com/zedeus/nitter)
- **Nitter**<br>
Nitter is a free and open source front-end for Twitter<br>
_Source Code: [github.com/zedeus/nitter](https://github.com/zedeus/nitter)_
- **Invidious**<br>
Invidious is a free and open source front-end for YouTube<br>
_Source Code: [github.com/iv-org/invidious](https://github.com/iv-org/invidious)_
### What is Invidious:
- **Bibliogram**<br>
Bibliogram is a free and open source front-end for Instagram<br>
_Source Code: [sr.ht/~cadence/bibliogram](https://sr.ht/~cadence/bibliogram)_
A free and open source alternative front-end to YouTube
Github project: [/omarroth/invidious](https://github.com/omarroth/invidious)
- **Teddit**<br>
Teddit is a free and open source front-end for Reddit<br>
_Source Code: [codeberg.org/teddit/teddit](https://codeberg.org/teddit/teddit)_
### What is Bibliogram:
- **Libreddit**<br>
Libreddit is a free and open source front-end for Reddit<br>
_Source Code: [github.com/spikecodes/libreddit](https://github.com/spikecodes/libreddit)_
- **Scribe**<br>
Scribe is a free and open source front-end for Medium<br>
_Source Code: [sr.ht/~edwardloveall/scribe](https://sr.ht/~edwardloveall/scribe)_
- **Wikiless**<br>
Wikiless is a free and open source front-end for Wikipedia<br>
_Source Code: [codeberg.org/orenom/wikiless](https://codeberg.org/orenom/wikiless)_
- **ProxiTok**<br>
ProxiTok is an open source alternative frontend for TikTok<br>
_Source Code: [github.com/pablouser1/ProxiTok](https://github.com/pablouser1/ProxiTok)_
A free and open source alternative front-end to Instagram
Github project: [/cloudrac3r/bibliogram](https://github.com/cloudrac3r/bibliogram)
### Screenshots:
<img alt="A simple interface to cusomize instances" src="src/fullLinks/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png" width=250/>
![A simple interface to cusomize instances](./images/img1.png) ![Clicking on app will open settings](./images/img2.png) ![You can get latencies for instances and pick up them here](./images/img3.png)
<img alt="The app handled and transformed it before delegating the action" src="src/fullLinks/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png" width=250/>
![A YouTube link received via a text message](./images/img4.png) ![The app handled and transformed it before delegating the action](./images/img5.png) ![The app opened the transformed link](./images/img6.png)
<img alt="You can get latencies for instances and pick up them here" src="src/fullLinks/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png" width=250/>
<img alt="You can customize the parameters and values you want to add to invidious urls" src="src/fullLinks/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png" width=250/>
<img alt="Check which domains are set to open in UntrackMe" src="src/fullLinks/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png" width=250/>
### Going further
#### Privacy Redirect
A web extension from [@SimonBrazell](https://github.com/SimonBrazell) that redirects Twitter, YouTube, Instagram & Google Maps requests to privacy friendly alternatives - Nitter, Invidious, FreeTube, Bibliogram & OpenStreetMap.
Source code of [Privacy Redirect](https://github.com/SimonBrazell/privacy-redirect)
#### Deprecated / Archived
For a full coverage with URLs, you can use FireFox with the [Invidition](https://addons.mozilla.org/fr/firefox/addon/invidition/) plugin from [@booteille](https://framapiaf.org/@booteille).
Source code of [Invidition on Godeberg](https://codeberg.org/Booteille/invidition)
Source code of [Invidition on Codeberg](https://codeberg.org/Booteille/invidition)

View File

@ -2,12 +2,12 @@ apply plugin: 'com.android.application'
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
buildToolsVersion "30.0.3"
defaultConfig {
minSdkVersion 15
targetSdkVersion 30
versionCode 26
versionName "1.15.2"
versionCode 33
versionName "1.30.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
lintOptions {
@ -15,6 +15,10 @@ android {
checkReleaseBuilds false
abortOnError false
}
buildFeatures {
viewBinding true
}
productFlavors {
fullLinks {
applicationId "app.fedilab.nitterizeme"
@ -49,14 +53,15 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
//Don't upgrade until there is a fix with barrier in recycler view
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.preference:preference:1.1.1'
implementation 'org.jsoup:jsoup:1.13.1'
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
}

View File

@ -7,8 +7,7 @@
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="false"
@ -25,7 +24,8 @@
android:name=".activities.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar"
tools:replace="android:label">
tools:replace="android:label"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
@ -47,8 +47,14 @@
<!-- SHORTENED URLs -->
<data android:host="t.co" />
<data android:host="vxtwitter.com" />
<data android:host="nyti.ms" />
<data android:host="bit.ly" />
<data android:host="aspedrom.com" />
<data android:host="is.gd" />
<data android:host="fb.me" />
<data android:host="rb.gy" />
<data android:host="cutt.ly" />
<data android:host="amp.gs" />
<data android:host="tinyurl.com" />
<data android:host="goo.gl" />
@ -58,13 +64,14 @@
<data android:host="bl.ink" />
<data android:host="buff.ly" />
<data android:host="maps.app.goo.gl" />
<data android:host="vm.tiktok.com" />
<data android:host="vt.tiktok.com" />
<!-- INSTAGRAM URLs -->
<data android:host="instagram.com" />
<data android:host="www.instagram.com" />
<data android:host="m.instagram.com" />
<!-- TWITTER URLs -->
<data android:host="mobile.twitter.com" />
<data android:host="www.twitter.com" />
@ -79,6 +86,19 @@
<data android:host="youtu.be" />
<data android:host="youtube-nocookie.com" />
<!-- REDDIT URLs -->
<data android:host="www.reddit.com" />
<data android:host="reddit.com" />
<data android:host="i.reddit.com" />
<data android:host="i.redd.it" />
<data android:host="old.reddit.com" />
<data android:host="preview.redd.it" />
<data android:host="*.reddit.com" />
<!-- TIKTOK URLs -->
<data android:host="tiktok.com" />
<data android:host="www.tiktok.com" />
<data android:host="us.tiktok.com" />
<!-- INVIDIOUS INSTANCES -->
<data android:host="invidious.snopyta.org" />
@ -106,6 +126,22 @@
<data android:host="bibliogram.dsrev.ru" />
<data android:host="bibliogram.pussthecat.org" />
<!-- PROXITOK INSTANCES -->
<data android:host="proxitok.pabloferreiro.es" />
<data android:host="proxitok.privacydev.net" />
<data android:host="proxitok.pussthecat.org" />
<!-- MEDIUM URLs -->
<data android:host="www.medium.com" />
<data android:host="medium.com" />
<data android:host="*.medium.com" />
<!-- WIKIPEDIA URLs -->
<data android:host="wikipedia.org" />
<data android:host="www.wikipedia.org" />
<data android:host="*.wikipedia.org" />
<data android:host="*" />
<data android:pathPattern=".*" />
<data android:scheme="https" />
@ -119,8 +155,15 @@
<!-- SHORTENED URLs -->
<data android:host="t.co" />
<data android:host="vxtwitter.com" />
<data android:host="nyti.ms" />
<data android:host="bit.ly" />
<data android:host="aspedrom.com" />
<data android:host="is.gd" />
<data android:host="fb.me" />
<data android:host="rb.gy" />
<data android:host="cutt.ly" />
<data android:host="bit.do" />
<data android:host="amp.gs" />
<data android:host="tinyurl.com" />
<data android:host="goo.gl" />
@ -130,6 +173,8 @@
<data android:host="bl.ink" />
<data android:host="buff.ly" />
<data android:host="maps.app.goo.gl" />
<data android:host="vm.tiktok.com" />
<data android:host="vt.tiktok.com" />
<!-- INSTAGRAM URLs -->
<data android:host="instagram.com" />
@ -150,6 +195,30 @@
<data android:host="youtube-nocookie.com" />
<!-- REDDIT URLs -->
<data android:host="www.reddit.com" />
<data android:host="reddit.com" />
<data android:host="i.reddit.com" />
<data android:host="i.redd.it" />
<data android:host="old.reddit.com" />
<data android:host="preview.redd.it" />
<data android:host="*.reddit.com" />
<!-- MEDIUM URLs -->
<data android:host="www.medium.com" />
<data android:host="medium.com" />
<data android:host="*.medium.com" />
<!-- WIKIPEDIA URLs -->
<data android:host="wikipedia.org" />
<data android:host="www.wikipedia.org" />
<data android:host="*.wikipedia.org" />
<!-- TIKTOK URLs -->
<data android:host="tiktok.com" />
<data android:host="www.tiktok.com" />
<data android:host="us.tiktok.com" />
<data android:host="*" />
<data android:mimeType="text/plain" />
@ -234,13 +303,6 @@
android:label="@string/invidious_settings"
android:targetActivity=".activities.InvidiousSettingsActivity"
android:theme="@style/AppTheme" />
<activity-alias
android:name=".activities.WebviewPlayerActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:launchMode="singleTask"
android:targetActivity=".activities.WebviewPlayerActivity"
android:theme="@style/AppTheme" />
</application>
</manifest>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 404 KiB

View File

@ -1 +0,0 @@
Trasforma i links di Youtube, Twitter e Instagram nel loro front-end alternativo, gratuito, open-source e focalizzato sulla privacy.

View File

@ -1,31 +0,0 @@
UntrackMe uma vez definido por padrão para abrir os links Twitter, YouTube e Instagram, os transformará em links Nitter, Invidious e Bibliogram e delegará a ação a outro aplicativo.
Também suporta links do Google Maps para transformá-los em links do OpenStreetMap ou Geo URI.
O aplicativo detectará URLs encurtadas e exibirá o URL completo antes de visitar o site.
**Versão literal:
- Ao compartilhar um link do Twitter, YouTube ou Google Maps basta pegar o UntrackMe para transformá-lo antes de compartilhá-lo com outro aplicativo.
**Versão completa:
- Contém todas as características da versão lite e também manipula todos os links para remover os parâmetros de rastreamento. Utiliza seu próprio seletor de aplicativos que exibe URLs antes de visitá-los.
O que ê o Nitter :
Uma front-end alternativa ao Twitter, livre e de código aberto, focada na privacidade.
Projeto Github: https://github.com/zedeus/nitter
O que é Invidious:
Uma front-end alternativa, livre e de de código aberto para o YouTube
Projeto Github: https://github.com/omarroth/invidious
O que é Bibliograma:
Um front-end alternativo gratuito e de código aberto para a Instagram
Projeto Github: https://github.com/cloudrac3r/bibliogram

View File

@ -1 +0,0 @@
- Add Android 11 support

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 404 KiB

View File

@ -1 +0,0 @@
- Add Android 11 support

View File

@ -3,9 +3,11 @@
xmlns:tools="http://schemas.android.com/tools"
package="app.fedilab.nitterizeme">
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="false"
@ -21,7 +23,8 @@
<activity
android:name=".activities.MainActivity"
android:label="@string/app_name_lite"
android:theme="@style/AppTheme.NoActionBar">
android:theme="@style/AppTheme.NoActionBar"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
@ -31,7 +34,8 @@
<activity
android:name=".activities.TransformActivity"
android:noHistory="true"
android:theme="@style/Theme.AppCompat.Translucent">
android:theme="@style/Theme.AppCompat.Translucent"
android:exported="true">
<!-- The app should handle these domains, more can be added here -->
<intent-filter>
@ -42,8 +46,15 @@
<!-- SHORTENED URLs -->
<data android:host="t.co" />
<data android:host="vxtwitter.com" />
<data android:host="nyti.ms" />
<data android:host="bit.ly" />
<data android:host="aspedrom.com" />
<data android:host="is.gd" />
<data android:host="fb.me" />
<data android:host="rb.gy" />
<data android:host="cutt.ly" />
<data android:host="bit.do" />
<data android:host="amp.gs" />
<data android:host="tinyurl.com" />
<data android:host="goo.gl" />
@ -53,6 +64,8 @@
<data android:host="bl.ink" />
<data android:host="buff.ly" />
<data android:host="maps.app.goo.gl" />
<data android:host="vm.tiktok.com" />
<data android:host="vt.tiktok.com" />
<!-- INSTAGRAM URLs -->
<data android:host="instagram.com" />
@ -74,6 +87,29 @@
<data android:host="youtu.be" />
<data android:host="youtube-nocookie.com" />
<!-- REDDIT URLs -->
<data android:host="www.reddit.com" />
<data android:host="reddit.com" />
<data android:host="i.reddit.com" />
<data android:host="i.redd.it" />
<data android:host="old.reddit.com" />
<data android:host="preview.redd.it" />
<data android:host="*.reddit.com" />
<!-- TIKTOK URLs -->
<data android:host="tiktok.com" />
<data android:host="www.tiktok.com" />
<data android:host="us.tiktok.com" />
<!-- MEDIUM URLs -->
<data android:host="www.medium.com" />
<data android:host="medium.com" />
<data android:host="*.medium.com" />
<!-- WIKIPEDIA URLs -->
<data android:host="wikipedia.org" />
<data android:host="www.wikipedia.org" />
<data android:host="*.wikipedia.org" />
<data android:pathPattern=".*" />
<data android:scheme="https" />
@ -87,8 +123,15 @@
<!-- SHORTENED URLs -->
<data android:host="t.co" />
<data android:host="vxtwitter.com" />
<data android:host="nyti.ms" />
<data android:host="bit.ly" />
<data android:host="is.gd" />
<data android:host="fb.me" />
<data android:host="rb.gy" />
<data android:host="cutt.ly" />
<data android:host="bit.do" />
<data android:host="aspedrom.com" />
<data android:host="amp.gs" />
<data android:host="tinyurl.com" />
<data android:host="goo.gl" />
@ -98,6 +141,8 @@
<data android:host="bl.ink" />
<data android:host="buff.ly" />
<data android:host="maps.app.goo.gl" />
<data android:host="vm.tiktok.com" />
<data android:host="vt.tiktok.com" />
<!-- INSTAGRAM URLs -->
<data android:host="instagram.com" />
@ -117,6 +162,29 @@
<data android:host="youtu.be" />
<data android:host="youtube-nocookie.com" />
<!-- REDDIT URLs -->
<data android:host="www.reddit.com" />
<data android:host="reddit.com" />
<data android:host="i.reddit.com" />
<data android:host="i.redd.it" />
<data android:host="old.reddit.com" />
<data android:host="preview.redd.it" />
<data android:host="*.reddit.com" />
<!-- TIKTOK URLs -->
<data android:host="tiktok.com" />
<data android:host="www.tiktok.com" />
<data android:host="us.tiktok.com" />
<!-- MEDIUM URLs -->
<data android:host="www.medium.com" />
<data android:host="medium.com" />
<data android:host="*.medium.com" />
<!-- WIKIPEDIA URLs -->
<data android:host="wikipedia.org" />
<data android:host="www.wikipedia.org" />
<data android:host="*.wikipedia.org" />
<data android:mimeType="text/plain" />
</intent-filter>
@ -194,12 +262,6 @@
android:configChanges="orientation|screenSize"
android:label="@string/invidious_settings"
android:theme="@style/AppTheme" />
<activity
android:name=".activities.WebviewPlayerActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name_lite"
android:launchMode="singleTask"
android:theme="@style/AppTheme" />
</application>
</manifest>

View File

@ -0,0 +1,477 @@
{
"providers": {
"amazon": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"pf_rd_[a-zA-Z]=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"qid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"srs=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(adsensecustomsearchads\\.com)\\/.*",
"pd_rd_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"__mk_[a-zA-Z]{1,3}_[a-zA-Z]{1,3}=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"spIA=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ms3_c=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"[a-zA-Z%0-9]*ie=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"refRID=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"colid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"coliid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"[^a-zA-Z%0-9]adId=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"qualifier=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"_encoding=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"smid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"field-lbr_brands_browse-bin=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [
".*(amazon\\.).*(\\/gp).*\\/redirector.html\\/.*"
],
"redirections": []
},
"fls-na.amazon": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(fls-na\\.amazon)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"google": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(google)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"ved=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"bi[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"gfe_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ei=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"site=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"&\\.[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"oq=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"esrc=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"uact=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"cd=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"cad=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"gws_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"atyp=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"vet=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"_u=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"je=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"dcr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ie=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sei=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sa=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"dpr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"hl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"btn[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sa=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"usg=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"cd=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"cad=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"uact=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [
".*(mail\\.google\\.).*(\\/mail\\/u\\/0).*",
".*(google\\.).*(\\/upload)?(\\/drive)\\/.*",
".*(docs\\.google\\.).*\\/.*",
".*(accounts\\.google\\.).*",
".*(google\\.).*\\/searchbyimage\\?image_url=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(hangouts\\.google\\.).*\\/webchat.*zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(client-channel\\.google\\.).*\\/client-channel.*zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(google\\.).*\\/complete\\/search\\?.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(google\\.).*\\/s\\?tbm=map.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(news\\.google\\.).*\\?hl=.*",
".*(google\\.).*\\/setprefs\\?.*hl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
".*(google\\.).*\\/appsactivity\\/.*",
".*(google\\.).*\\/recaptcha\\/.*"
],
"redirections": [
".*google\\..*\\/.*url\\?.*url=((https|http)[^&]*)",
".*google\\..*\\/.*url\\?.*q=((https|http)[^&]*)"
]
},
"googlesyndication": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(googlesyndication)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"doubleclick": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(doubleclick)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": [
".*doubleclick\\..*\\/.*tag_for_child_directed_treatment=;%3F(.*)"
]
},
"globalRules": {
"urlPattern": ".*",
"completeProvider": false,
"rules": [
"utm_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ga_source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ga_medium=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ga_term=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ga_content=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ga_campaign=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ga_place=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"yclid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"_openstat=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"fb_action_ids=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"fb_action_types=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"fb_source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"fb_ref=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"fbclid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"action_object_map=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"action_type_map=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"action_ref_map=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"gs_l=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"mkt_tok=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"hmb_campaign=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"hmb_medium=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"hmb_source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"[\\?|&]ref[\\_]?=[^\\/|\\?|&]*",
"\\?$",
"\\&$"
],
"exceptions": [
".*([\\.]?matrix\\.org)(\\/_matrix)\\/.*",
".*([\\.]?prismic\\.io).*",
".*([\\.]?gitlab\\.com).*",
".*([\\.]?gcsip\\.com).*[\\?|&]ref[\\_]?=[^\\/|\\?|&]*.*",
".*([\\.]?cloudflare\\.com).*",
".*([\\.]?tv2\\.no)(\\/api)\\/.*"
],
"redirections": []
},
"adtech": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(adtech)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"contentpass.net": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(contentpass\\.net).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"bf-ad": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bf-ad)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"amazon-adsystem": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon-adsystem)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"adsensecustomsearchads": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(adsensecustomsearchads)(\\.[a-zA-Z]{2,}).*",
"completeProvider": true,
"rules": [],
"exceptions": [],
"redirections": []
},
"youtube": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"feature=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"gclid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"kw=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"facebook": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(facebook)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"hc_[a-zA-Z_\\[\\]0-9]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"[a-zA-Z]*ref[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"__tn__=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"eid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"__xts__%5B[0-9]%5D=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [
".*(facebook\\.)\\w{2,}.*(\\/plugins\\/).*"
],
"redirections": [
".*l\\.facebook\\..*\\/.*l\\.php\\?.*u=((https%3A%2F%2F|http%3A%2F%2F)[^&]*)"
]
},
"twitter": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitter)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"src=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ref_[a-z_]+=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"reddit": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(reddit)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [],
"exceptions": [],
"redirections": [
"out\\.reddit\\.\\w{2,}\\/.*url=([^&]*)"
]
},
"netflix": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(netflix)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"trackId=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"tctx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"jb[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"tiktok": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tiktok)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"_[a-z]=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"(sec_)?(u|user_)id=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"share_[a-z_]+=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"timestamp=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"u_code=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ugbiz_name=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"utm_[a-z_]+=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"techcrunch": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?([\\.]?techcrunch\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"ncid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sr_share=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"guccounter=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"guce_referrer_[a-z]+=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"bing": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bing)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"cvid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"form=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sk=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sp=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"sc=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"qs=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"qp=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"tweakers": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tweakers\\.net)(.*\\?.*)",
"completeProvider": false,
"rules": [
"nb=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"u=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"twitch": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitch)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"tt_medium=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"tt_content=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"vivaldi": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(vivaldi\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"pk_campaign=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"pk_kwd=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"indeed": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(indeed\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"from=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"alid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"[a-zA-Z]*tk=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"hhdotru": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(hh\\.ru)(.*\\?.*)",
"completeProvider": false,
"rules": [
"vss=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"t=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"swnt=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"grpos=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ptl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"stl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"exp=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"plim=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"ebay": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(ebay)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"completeProvider": false,
"rules": [
"_trkparms=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"_trksid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"_from=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"cnet": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(cnet\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"ftag=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"imdb.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(imdb\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"ref_=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"pf_rd_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"govdelivery.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(govdelivery\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [],
"exceptions": [],
"redirections": [
".*links\\.govdelivery\\.com.*\\/track\\?.*(http:\\/\\/.*)",
".*links\\.govdelivery\\.com.*\\/track\\?.*(https:\\/\\/.*)"
]
},
"walmart.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(walmart\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"u1=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"ath[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"net-parade.it": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(net\\-parade\\.it)(.*\\?.*)",
"completeProvider": false,
"rules": [
"pl=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"prvnizpravy.cz": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(prvnizpravy\\.cz)(.*\\?.*)",
"completeProvider": false,
"rules": [
"xid=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"youku.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youku\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"spm=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
"tpa=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"nytimes.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(nytimes\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"smid=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"tchibo.de": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tchibo\\.de)(.*\\?.*)",
"completeProvider": false,
"rules": [
"wbdcd=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"steam": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steampowered\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"snr=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
},
"disq.us": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(disq\\.us)(.*\\?.*)",
"completeProvider": false,
"rules": [],
"exceptions": [],
"redirections": [
".*disq\\.us.*\\/.*url\\?.*url=((https%3A%2F%2F|http%3A%2F%2F).*)%3A"
]
},
"mozaws.net": {
"urlPattern": "https?://outgoing\\.prod\\.mozaws\\.net/.*",
"completeProvider": false,
"rules": [],
"exceptions": [],
"redirections": [
"https?://[^/]+/v1/[0-9a-f]{64}/(.*)"
]
},
"shutterstock.com": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(shutterstock\\.com)(.*\\?.*)",
"completeProvider": false,
"rules": [
"src=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
],
"exceptions": [],
"redirections": []
}
}
}

View File

@ -23,29 +23,29 @@ import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.text.style.UnderlineSpan;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import app.fedilab.nitterizeme.BuildConfig;
import app.fedilab.nitterizeme.R;
import app.fedilab.nitterizeme.databinding.ActivityAboutBinding;
public class AboutActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
ActivityAboutBinding binding = ActivityAboutBinding.inflate(getLayoutInflater());
View viewRoot = binding.getRoot();
setContentView(viewRoot);
TextView about_version = findViewById(R.id.about_version);
try {
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
String version = pInfo.versionName;
about_version.setText(getResources().getString(R.string.about_vesrion, version));
binding.aboutVersion.setText(getResources().getString(R.string.about_vesrion, version));
} catch (PackageManager.NameNotFoundException ignored) {
}
@ -55,77 +55,70 @@ public class AboutActivity extends AppCompatActivity {
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
//Developer click for Mastodon account
TextView developer_mastodon = findViewById(R.id.developer_mastodon);
SpannableString content = new SpannableString(developer_mastodon.getText().toString());
SpannableString content = new SpannableString(binding.developerMastodon.getText().toString());
content.setSpan(new ForegroundColorSpan(ContextCompat.getColor(AboutActivity.this, R.color.colorAccent)), 0, content.length(), 0);
developer_mastodon.setText(content);
developer_mastodon.setOnClickListener(v -> {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://toot.fedilab.app/@UntrackMe"));
binding.developerMastodon.setText(content);
binding.developerMastodon.setOnClickListener(v -> {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://toot.fedilab.app/@apps"));
startActivity(browserIntent);
});
//App Name:
TextView app_name = findViewById(R.id.app_name);
if (BuildConfig.fullLinks) {
app_name.setText(R.string.app_name);
binding.appName.setText(R.string.app_name);
} else {
app_name.setText(R.string.app_name_lite);
binding.appName.setText(R.string.app_name_lite);
}
//Developer Github
TextView github = findViewById(R.id.github);
content = new SpannableString(github.getText().toString());
content = new SpannableString(binding.github.getText().toString());
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
github.setText(content);
github.setOnClickListener(v -> {
binding.github.setText(content);
binding.github.setOnClickListener(v -> {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/stom79"));
startActivity(browserIntent);
});
//Developer Framagit
TextView framagit = findViewById(R.id.framagit);
content = new SpannableString(framagit.getText().toString());
content = new SpannableString(binding.framagit.getText().toString());
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
framagit.setText(content);
framagit.setOnClickListener(v -> {
binding.framagit.setText(content);
binding.framagit.setOnClickListener(v -> {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://framagit.org/tom79"));
startActivity(browserIntent);
});
//Developer Codeberg
TextView codeberg = findViewById(R.id.codeberg);
content = new SpannableString(codeberg.getText().toString());
content = new SpannableString(binding.codeberg.getText().toString());
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
codeberg.setText(content);
codeberg.setOnClickListener(v -> {
binding.codeberg.setText(content);
binding.codeberg.setOnClickListener(v -> {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://codeberg.org/tom79"));
startActivity(browserIntent);
});
//Developer donation
Button donatePaypal = findViewById(R.id.donate_paypal);
donatePaypal.setOnClickListener(v -> {
binding.donatePaypal.setOnClickListener(v -> {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.paypal.me/Mastalab"));
startActivity(browserIntent);
});
Button donateLiberapay = findViewById(R.id.donate_liberapay);
donateLiberapay.setOnClickListener(v -> {
binding.donateLiberapay.setOnClickListener(v -> {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://liberapay.com/tom79"));
startActivity(browserIntent);
});
Button how_to = findViewById(R.id.how_to);
how_to.setOnClickListener(v -> {
binding.howTo.setOnClickListener(v -> {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://fedilab.app/wiki/untrackme/"));
startActivity(browserIntent);
});
TextView license = findViewById(R.id.license);
content = new SpannableString(license.getText().toString());
content = new SpannableString(binding.license.getText().toString());
content.setSpan(new ForegroundColorSpan(ContextCompat.getColor(AboutActivity.this, R.color.colorAccent)), 0, content.length(), 0);
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
license.setText(content);
license.setOnClickListener(v -> {
binding.license.setText(content);
binding.license.setOnClickListener(v -> {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.gnu.org/licenses/quick-guide-gplv3.fr.html"));
startActivity(browserIntent);
});

View File

@ -14,6 +14,12 @@ package app.fedilab.nitterizeme.activities;
* You should have received a copy of the GNU General Public License along with UntrackMe; if not,
* see <http://www.gnu.org/licenses>. */
import static app.fedilab.nitterizeme.activities.MainActivity.APP_PREFS;
import static app.fedilab.nitterizeme.helpers.Utils.INTENT_ACTION;
import static app.fedilab.nitterizeme.helpers.Utils.KILL_ACTIVITY;
import static app.fedilab.nitterizeme.helpers.Utils.LAST_USED_APP_PACKAGE;
import static app.fedilab.nitterizeme.helpers.Utils.URL_APP_PICKER;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
@ -26,30 +32,19 @@ import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.constraintlayout.widget.ConstraintLayout;
import java.util.ArrayList;
import java.util.List;
import app.fedilab.nitterizeme.R;
import app.fedilab.nitterizeme.adapters.AppPickerAdapter;
import app.fedilab.nitterizeme.databinding.ActivityPickupAppBinding;
import app.fedilab.nitterizeme.entities.AppPicker;
import app.fedilab.nitterizeme.helpers.Utils;
import app.fedilab.nitterizeme.sqlite.DefaultAppDAO;
import app.fedilab.nitterizeme.sqlite.Sqlite;
import static app.fedilab.nitterizeme.activities.MainActivity.APP_PREFS;
import static app.fedilab.nitterizeme.helpers.Utils.INTENT_ACTION;
import static app.fedilab.nitterizeme.helpers.Utils.KILL_ACTIVITY;
import static app.fedilab.nitterizeme.helpers.Utils.LAST_USED_APP_PACKAGE;
import static app.fedilab.nitterizeme.helpers.Utils.URL_APP_PICKER;
public class AppsPickerActivity extends Activity {
@ -62,7 +57,9 @@ public class AppsPickerActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pickup_app);
ActivityPickupAppBinding binding = ActivityPickupAppBinding.inflate(getLayoutInflater());
View viewRoot = binding.getRoot();
setContentView(viewRoot);
if (getIntent() == null) {
finish();
}
@ -102,8 +99,8 @@ public class AppsPickerActivity extends Activity {
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
View blank = findViewById(R.id.blank);
blank.setOnClickListener(v -> finish());
binding.blank.setOnClickListener(v -> finish());
String thisPackageName = getApplicationContext().getPackageName();
ArrayList<String> packages = new ArrayList<>();
List<AppPicker> appPickers = new ArrayList<>();
@ -132,8 +129,8 @@ public class AppsPickerActivity extends Activity {
}
}
String defaultApp = new DefaultAppDAO(AppsPickerActivity.this, db).getDefault(packages);
TextView urlText = findViewById(R.id.url);
urlText.setText(url);
binding.url.setText(url);
if (defaultApp != null) {
Intent intent = new Intent(action, Uri.parse(url));
@ -142,13 +139,11 @@ public class AppsPickerActivity extends Activity {
finish();
return;
} else {
ConstraintLayout app_container = findViewById(R.id.app_container);
app_container.setVisibility(View.VISIBLE);
GridView gridView = findViewById(R.id.app_list);
binding.appContainer.setVisibility(View.VISIBLE);
AppPickerAdapter appPickerAdapter = new AppPickerAdapter(appPickers);
gridView.setAdapter(appPickerAdapter);
gridView.setNumColumns(3);
gridView.setOnItemClickListener((parent, view1, position, id) -> {
binding.appList.setAdapter(appPickerAdapter);
binding.appList.setNumColumns(3);
binding.appList.setOnItemClickListener((parent, view1, position, id) -> {
if (!appPickers.get(position).isSelected()) {
for (AppPicker ap : appPickers) {
ap.setSelected(false);
@ -178,16 +173,13 @@ public class AppsPickerActivity extends Activity {
});
Button always = findViewById(R.id.always);
Button once = findViewById(R.id.once);
always.setOnClickListener(v -> {
binding.always.setOnClickListener(v -> {
boolean isPresent = new DefaultAppDAO(AppsPickerActivity.this, db).isPresent(appToUse);
long val = -1;
if (isPresent) {
ArrayList<String> oldConcurrent = new DefaultAppDAO(AppsPickerActivity.this, db).getConcurrent(appToUse);
ArrayList<String> newConcurrent = Utils.union(oldConcurrent, packages);
ArrayList<String> newConcurrent = oldConcurrent != null ? Utils.union(oldConcurrent, packages) : packages;
newConcurrent.remove(appToUse);
new DefaultAppDAO(AppsPickerActivity.this, db).update(appToUse, newConcurrent);
} else {
@ -210,7 +202,7 @@ public class AppsPickerActivity extends Activity {
finish();
});
once.setOnClickListener(v -> {
binding.once.setOnClickListener(v -> {
if (action.compareTo(Intent.ACTION_VIEW) == 0) {
Intent intent = new Intent(action, Uri.parse(url));
intent.setPackage(appToUse);
@ -229,8 +221,7 @@ public class AppsPickerActivity extends Activity {
});
}
ImageView copyLink = findViewById(R.id.copy_link);
copyLink.setOnClickListener(v -> {
binding.copyLink.setOnClickListener(v -> {
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("", url);
assert clipboard != null;

View File

@ -23,17 +23,19 @@ import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
import app.fedilab.nitterizeme.BuildConfig;
import app.fedilab.nitterizeme.R;
import app.fedilab.nitterizeme.adapters.AppInfoAdapter;
import app.fedilab.nitterizeme.databinding.ActivityCheckAppBinding;
import app.fedilab.nitterizeme.entities.AppInfo;
@ -60,10 +62,42 @@ public class CheckAppActivity extends AppCompatActivity {
"youtu.be",
"youtube-nocookie.com"
};
public static String[] reddit_domains = {
"www.reddit.com",
"reddit.com",
"i.reddit.com",
"old.reddit.com",
"i.redd.it",
"preview.redd.it"
};
public static String[] medium_domains = {
"medium.com",
"www.medium.com"
};
public static String[] wikipedia_domains = {
"wikipedia.org",
"www.wikipedia.org"
};
public static String[] tiktok_domains = {
"tiktok.com",
"www.tiktok.com",
"us.tiktok.com"
};
public static String[] shortener_domains = {
"t.co",
"vxtwitter.com",
"nyti.ms",
"bit.ly",
"is.gd",
"aspedrom.com",
"bit.do",
"fb.me",
"rb.gy",
"cutt.ly",
"amp.gs",
"tinyurl.com",
"goo.gl",
@ -72,11 +106,12 @@ public class CheckAppActivity extends AppCompatActivity {
"ow.ly",
"bl.ink",
"buff.ly",
"maps.app.goo.gl"
"maps.app.goo.gl",
"vm.tiktok.com",
"vt.tiktok.com"
};
//Supported instances to redirect one instance to another faster for the user
public static String[] invidious_instances = {
"invidio.us",
"invidious.snopyta.org",
"invidiou.sh",
"invidious.toot.koeln",
@ -101,16 +136,24 @@ public class CheckAppActivity extends AppCompatActivity {
"bibliogram.dsrev.ru",
"bibliogram.pussthecat.org"
};
public static String[] proxitok_instances = {
"proxitok.pabloferreiro.es",
"proxitok.privacydev.net",
"proxitok.pussthecat.org"
};
public static String outlook_safe_domain = "safelinks.protection.outlook.com";
private RecyclerView list_apps;
private String[] domains;
private ActivityCheckAppBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_check_app);
binding = ActivityCheckAppBinding.inflate(getLayoutInflater());
View viewRoot = binding.getRoot();
setContentView(viewRoot);
setTitle(R.string.check_apps);
@ -118,10 +161,32 @@ public class CheckAppActivity extends AppCompatActivity {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
if (BuildConfig.fullLinks) {
domains = new String[twitter_domains.length + youtube_domains.length + shortener_domains.length + instagram_domains.length + invidious_instances.length + nitter_instances.length + bibliogram_instances.length];
domains = new String[
twitter_domains.length
+ youtube_domains.length
+ reddit_domains.length
+ instagram_domains.length
+ wikipedia_domains.length
+ medium_domains.length
+ tiktok_domains.length
+ shortener_domains.length
+ invidious_instances.length
+ nitter_instances.length
+ bibliogram_instances.length
+ proxitok_instances.length
];
} else {
domains = new String[twitter_domains.length + youtube_domains.length + shortener_domains.length + instagram_domains.length];
domains = new String[
twitter_domains.length
+ youtube_domains.length
+ reddit_domains.length
+ instagram_domains.length
+ wikipedia_domains.length
+ medium_domains.length
+ tiktok_domains.length
+ shortener_domains.length];
}
int i = 0;
for (String host : twitter_domains) {
@ -132,10 +197,26 @@ public class CheckAppActivity extends AppCompatActivity {
domains[i] = host;
i++;
}
for (String host : reddit_domains) {
domains[i] = host;
i++;
}
for (String host : instagram_domains) {
domains[i] = host;
i++;
}
for (String host : medium_domains) {
domains[i] = host;
i++;
}
for (String host : wikipedia_domains) {
domains[i] = host;
i++;
}
for (String host : tiktok_domains) {
domains[i] = host;
i++;
}
for (String host : shortener_domains) {
domains[i] = host;
i++;
@ -153,27 +234,28 @@ public class CheckAppActivity extends AppCompatActivity {
domains[i] = host;
i++;
}
for (String host : proxitok_instances) {
domains[i] = host;
i++;
}
}
list_apps = findViewById(R.id.list_apps);
final LinearLayoutManager mLayoutManager;
mLayoutManager = new LinearLayoutManager(CheckAppActivity.this);
list_apps.setLayoutManager(mLayoutManager);
list_apps.setNestedScrollingEnabled(false);
binding.listApps.setLayoutManager(mLayoutManager);
binding.listApps.setNestedScrollingEnabled(false);
}
@Override
protected void onResume() {
super.onResume();
if (list_apps != null) {
int position = ((LinearLayoutManager) Objects.requireNonNull(list_apps.getLayoutManager()))
.findFirstVisibleItemPosition();
ArrayList<AppInfo> appInfos = getAppInfo();
AppInfoAdapter appInfoAdapter = new AppInfoAdapter(appInfos);
list_apps.setAdapter(appInfoAdapter);
list_apps.scrollToPosition(position);
}
int position = ((LinearLayoutManager) Objects.requireNonNull(binding.listApps.getLayoutManager()))
.findFirstVisibleItemPosition();
ArrayList<AppInfo> appInfos = getAppInfo();
AppInfoAdapter appInfoAdapter = new AppInfoAdapter(appInfos);
binding.listApps.setAdapter(appInfoAdapter);
binding.listApps.scrollToPosition(position);
}
@Override
@ -209,42 +291,60 @@ public class CheckAppActivity extends AppCompatActivity {
private ArrayList<AppInfo> getAppInfo() {
ArrayList<AppInfo> appInfos = new ArrayList<>();
int j = 0;
for (String domain : domains) {
if (j == 0) {
if (Arrays.asList(twitter_domains).contains(domain)) {
AppInfo appInfo = new AppInfo();
appInfo.setTitle("Twitter");
appInfos.add(appInfo);
} else if (j == twitter_domains.length) {
} else if (Arrays.asList(youtube_domains).contains(domain)) {
AppInfo appInfo = new AppInfo();
appInfo.setTitle("YouTube");
appInfos.add(appInfo);
} else if (j == twitter_domains.length + youtube_domains.length) {
} else if (Arrays.asList(instagram_domains).contains(domain)) {
AppInfo appInfo = new AppInfo();
appInfo.setTitle("Instagram");
appInfos.add(appInfo);
} else if (j == twitter_domains.length + youtube_domains.length + instagram_domains.length) {
} else if (Arrays.asList(reddit_domains).contains(domain)) {
AppInfo appInfo = new AppInfo();
appInfo.setTitle("Reddit");
appInfos.add(appInfo);
} else if (Arrays.asList(medium_domains).contains(domain)) {
AppInfo appInfo = new AppInfo();
appInfo.setTitle("Medium");
appInfos.add(appInfo);
} else if (Arrays.asList(wikipedia_domains).contains(domain)) {
AppInfo appInfo = new AppInfo();
appInfo.setTitle("Wikipedia");
appInfos.add(appInfo);
} else if (Arrays.asList(tiktok_domains).contains(domain)) {
AppInfo appInfo = new AppInfo();
appInfo.setTitle("TikTok");
appInfos.add(appInfo);
} else if (Arrays.asList(shortener_domains).contains(domain)) {
AppInfo appInfo = new AppInfo();
appInfo.setTitle(getString(R.string.shortener_services));
appInfos.add(appInfo);
} else if (j == twitter_domains.length + youtube_domains.length + instagram_domains.length + shortener_domains.length) {
} else if (Arrays.asList(invidious_instances).contains(domain)) {
AppInfo appInfo = new AppInfo();
appInfo.setTitle(getString(R.string.invidious_instances));
appInfos.add(appInfo);
} else if (j == twitter_domains.length + youtube_domains.length + instagram_domains.length + shortener_domains.length + invidious_instances.length) {
} else if (Arrays.asList(nitter_instances).contains(domain)) {
AppInfo appInfo = new AppInfo();
appInfo.setTitle(getString(R.string.nitter_instances));
appInfos.add(appInfo);
} else if (j == twitter_domains.length + youtube_domains.length + instagram_domains.length + shortener_domains.length + invidious_instances.length + nitter_instances.length) {
} else if (Arrays.asList(bibliogram_instances).contains(domain)) {
AppInfo appInfo = new AppInfo();
appInfo.setTitle(getString(R.string.bibliogram_instances));
appInfos.add(appInfo);
} else if (Arrays.asList(proxitok_instances).contains(domain)) {
AppInfo appInfo = new AppInfo();
appInfo.setTitle(getString(R.string.proxitok_instances));
appInfos.add(appInfo);
}
AppInfo appInfo = new AppInfo();
appInfo.setDomain(domain);
appInfo.setApplicationInfo(getDefaultApp("https://" + domain + "/"));
appInfos.add(appInfo);
j++;
}
return appInfos;
}

View File

@ -20,16 +20,15 @@ import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import app.fedilab.nitterizeme.R;
import app.fedilab.nitterizeme.adapters.DefaultAppAdapter;
import app.fedilab.nitterizeme.databinding.ActivityDefaultAppBinding;
import app.fedilab.nitterizeme.entities.DefaultApp;
import app.fedilab.nitterizeme.helpers.Utils;
import app.fedilab.nitterizeme.sqlite.DefaultAppDAO;
@ -42,7 +41,9 @@ public class DefaultAppActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_default_app);
ActivityDefaultAppBinding binding = ActivityDefaultAppBinding.inflate(getLayoutInflater());
View viewRoot = binding.getRoot();
setContentView(viewRoot);
setTitle(R.string.default_apps);
@ -51,18 +52,16 @@ public class DefaultAppActivity extends AppCompatActivity {
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
RecyclerView list_apps = findViewById(R.id.list_apps);
final LinearLayoutManager mLayoutManager;
mLayoutManager = new LinearLayoutManager(DefaultAppActivity.this);
list_apps.setLayoutManager(mLayoutManager);
list_apps.setNestedScrollingEnabled(false);
binding.listApps.setLayoutManager(mLayoutManager);
binding.listApps.setNestedScrollingEnabled(false);
ArrayList<DefaultApp> appInfos = getAppInfo();
DefaultAppAdapter defaultAppAdapter = new DefaultAppAdapter(appInfos);
list_apps.setAdapter(defaultAppAdapter);
binding.listApps.setAdapter(defaultAppAdapter);
if (appInfos.size() == 0) {
TextView no_apps = findViewById(R.id.no_apps);
no_apps.setVisibility(View.VISIBLE);
binding.noApps.setVisibility(View.VISIBLE);
}
}
@ -73,7 +72,9 @@ public class DefaultAppActivity extends AppCompatActivity {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}

View File

@ -19,48 +19,41 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.snackbar.Snackbar;
import java.util.ArrayList;
import java.util.List;
import app.fedilab.nitterizeme.R;
import app.fedilab.nitterizeme.adapters.InstanceAdapter;
import app.fedilab.nitterizeme.databinding.ActivityPopupInstanceBinding;
import app.fedilab.nitterizeme.entities.Instance;
import app.fedilab.nitterizeme.viewmodels.SearchInstanceVM;
public class InstanceActivity extends AppCompatActivity {
private static final String list_for_instances = "https://framagit.org/tom79/fedilab_app/-/blob/master/content/untrackme_instances/payload_2.json";
private static final String list_for_instances = "https://framagit.org/tom79/fedilab_app/-/blob/master/content/untrackme_instances/payload_3.json";
private ActivityPopupInstanceBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_popup_instance);
binding = ActivityPopupInstanceBinding.inflate(getLayoutInflater());
View viewRoot = binding.getRoot();
setContentView(viewRoot);
setTitle(R.string.select_instances);
SearchInstanceVM viewModel = new ViewModelProvider(this).get(SearchInstanceVM.class);
viewModel.getInstances().observe(this, result -> {
LinearLayout instance_container = findViewById(R.id.instance_container);
RelativeLayout loader = findViewById(R.id.loader);
RecyclerView invidious_instances = findViewById(R.id.invidious_instances);
RecyclerView nitter_instances = findViewById(R.id.nitter_instances);
RecyclerView bibliogram_instances = findViewById(R.id.bibliogram_instances);
Button latency_test = findViewById(R.id.latency_test);
ImageButton instance_info = findViewById(R.id.instance_info);
Button close = findViewById(R.id.close);
if (result == null) {
View parentLayout = findViewById(android.R.id.content);
Snackbar.make(parentLayout, R.string.error_message_internet, Snackbar.LENGTH_LONG).setAction(R.string.close, v -> finish()).show();
@ -71,81 +64,178 @@ public class InstanceActivity extends AppCompatActivity {
String invidiousHost = sharedpreferences.getString(MainActivity.SET_INVIDIOUS_HOST, MainActivity.DEFAULT_INVIDIOUS_HOST);
String nitterHost = sharedpreferences.getString(MainActivity.SET_NITTER_HOST, MainActivity.DEFAULT_NITTER_HOST);
String bibliogramHost = sharedpreferences.getString(MainActivity.SET_BIBLIOGRAM_HOST, MainActivity.DEFAULT_BIBLIOGRAM_HOST);
String tedditHost = sharedpreferences.getString(MainActivity.SET_TEDDIT_HOST, MainActivity.DEFAULT_TEDDIT_HOST);
String scribeHost = sharedpreferences.getString(MainActivity.SET_SCRIBERIP_HOST, MainActivity.DEFAULT_SCRIBERIP_HOST);
String wikilessHost = sharedpreferences.getString(MainActivity.SET_WIKILESS_HOST, MainActivity.DEFAULT_WIKILESS_HOST);
String proxitokHost = sharedpreferences.getString(MainActivity.SET_PROXITOK_HOST, MainActivity.DEFAULT_PROXITOK_HOST);
ArrayList<Instance> invidiousInstances = new ArrayList<>();
ArrayList<Instance> nitterInstances = new ArrayList<>();
ArrayList<Instance> bibliogramInstances = new ArrayList<>();
ArrayList<Instance> tedditInstances = new ArrayList<>();
ArrayList<Instance> scribeInstances = new ArrayList<>();
ArrayList<Instance> wikilessInstances = new ArrayList<>();
ArrayList<Instance> proxitokInstances = new ArrayList<>();
boolean customInvidiousInstance = true;
boolean customNitterInstance = true;
boolean customBibliogramInstance = true;
boolean customTedditInstance = true;
boolean customScribeInstance = true;
boolean customWikilessInstance = true;
boolean customProxitokInstance = true;
for (Instance instance : result) {
if (instance.getType() == Instance.instanceType.INVIDIOUS) {
if (instance.getInstanceType() == Instance.instanceType.YOUTUBE) {
invidiousInstances.add(instance);
if (invidiousHost != null && invidiousHost.trim().toLowerCase().compareTo(instance.getDomain()) == 0) {
customInvidiousInstance = false;
}
} else if (instance.getType() == Instance.instanceType.NITTER) {
} else if (instance.getInstanceType() == Instance.instanceType.TWITTER) {
nitterInstances.add(instance);
if (nitterHost != null && nitterHost.trim().toLowerCase().compareTo(instance.getDomain()) == 0) {
customNitterInstance = false;
}
} else if (instance.getType() == Instance.instanceType.BIBLIOGRAM) {
} else if (instance.getInstanceType() == Instance.instanceType.INSTAGRAM) {
bibliogramInstances.add(instance);
if (bibliogramHost != null && bibliogramHost.trim().toLowerCase().compareTo(instance.getDomain()) == 0) {
customBibliogramInstance = false;
}
} else if (instance.getInstanceType() == Instance.instanceType.REDDIT) {
tedditInstances.add(instance);
if (tedditHost != null && tedditHost.trim().toLowerCase().compareTo(instance.getDomain()) == 0) {
customTedditInstance = false;
}
} else if (instance.getInstanceType() == Instance.instanceType.MEDIUM) {
scribeInstances.add(instance);
if (scribeHost != null && scribeHost.trim().toLowerCase().compareTo(instance.getDomain()) == 0) {
customScribeInstance = false;
}
} else if (instance.getInstanceType() == Instance.instanceType.WIKIPEDIA) {
wikilessInstances.add(instance);
if (wikilessHost != null && wikilessHost.trim().toLowerCase().compareTo(instance.getDomain()) == 0) {
customWikilessInstance = false;
}
} else if (instance.getInstanceType() == Instance.instanceType.PROXITOK) {
proxitokInstances.add(instance);
if (proxitokHost != null && proxitokHost.trim().toLowerCase().compareTo(instance.getDomain()) == 0) {
customProxitokInstance = false;
}
}
}
List<String> defaultLocales = new ArrayList<>();
defaultLocales.add("--");
//Check if custom instances are also added
if (customInvidiousInstance) {
Instance instance = new Instance();
instance.setChecked(true);
instance.setDomain(invidiousHost);
instance.setLocale("--");
instance.setLocales(defaultLocales);
invidiousInstances.add(0, instance);
}
if (customNitterInstance) {
Instance instance = new Instance();
instance.setChecked(true);
instance.setDomain(nitterHost);
instance.setLocale("--");
instance.setLocales(defaultLocales);
nitterInstances.add(0, instance);
}
if (customBibliogramInstance) {
Instance instance = new Instance();
instance.setChecked(true);
instance.setDomain(bibliogramHost);
instance.setLocale("--");
instance.setLocales(defaultLocales);
bibliogramInstances.add(0, instance);
}
if (customTedditInstance) {
Instance instance = new Instance();
instance.setChecked(true);
instance.setDomain(tedditHost);
instance.setLocales(defaultLocales);
tedditInstances.add(0, instance);
}
if (customScribeInstance) {
Instance instance = new Instance();
instance.setChecked(true);
instance.setDomain(scribeHost);
instance.setLocales(defaultLocales);
scribeInstances.add(0, instance);
}
if (customWikilessInstance) {
Instance instance = new Instance();
instance.setChecked(true);
instance.setDomain(wikilessHost);
instance.setLocales(defaultLocales);
wikilessInstances.add(0, instance);
}
if (customProxitokInstance) {
Instance instance = new Instance();
instance.setChecked(true);
instance.setDomain(proxitokHost);
instance.setLocales(defaultLocales);
proxitokInstances.add(0, instance);
}
binding.instanceContainer.setVisibility(View.VISIBLE);
binding.loader.setVisibility(View.GONE);
final LinearLayoutManager iLayoutManager = new LinearLayoutManager(this);
InstanceAdapter invidiousAdapter = new InstanceAdapter(invidiousInstances);
invidious_instances.setAdapter(invidiousAdapter);
invidious_instances.setLayoutManager(iLayoutManager);
invidious_instances.setNestedScrollingEnabled(false);
binding.invidiousInstances.setAdapter(invidiousAdapter);
binding.invidiousInstances.setLayoutManager(iLayoutManager);
binding.invidiousInstances.setNestedScrollingEnabled(false);
final LinearLayoutManager nLayoutManager = new LinearLayoutManager(this);
InstanceAdapter nitterAdapter = new InstanceAdapter(nitterInstances);
nitter_instances.setAdapter(nitterAdapter);
nitter_instances.setLayoutManager(nLayoutManager);
nitter_instances.setNestedScrollingEnabled(false);
binding.nitterInstances.setAdapter(nitterAdapter);
binding.nitterInstances.setLayoutManager(nLayoutManager);
binding.nitterInstances.setNestedScrollingEnabled(false);
final LinearLayoutManager bLayoutManager = new LinearLayoutManager(this);
InstanceAdapter bibliogramAdapter = new InstanceAdapter(bibliogramInstances);
bibliogram_instances.setAdapter(bibliogramAdapter);
bibliogram_instances.setLayoutManager(bLayoutManager);
bibliogram_instances.setNestedScrollingEnabled(false);
latency_test.setOnClickListener(
v -> {
binding.bibliogramInstances.setAdapter(bibliogramAdapter);
binding.bibliogramInstances.setLayoutManager(bLayoutManager);
binding.bibliogramInstances.setNestedScrollingEnabled(false);
final LinearLayoutManager tLayoutManager = new LinearLayoutManager(this);
InstanceAdapter tedditAdapter = new InstanceAdapter(tedditInstances);
binding.tedditInstances.setAdapter(tedditAdapter);
binding.tedditInstances.setLayoutManager(tLayoutManager);
binding.tedditInstances.setNestedScrollingEnabled(false);
final LinearLayoutManager sLayoutManager = new LinearLayoutManager(this);
InstanceAdapter scribeAdapter = new InstanceAdapter(scribeInstances);
binding.scribeInstances.setAdapter(scribeAdapter);
binding.scribeInstances.setLayoutManager(sLayoutManager);
binding.scribeInstances.setNestedScrollingEnabled(false);
final LinearLayoutManager wLayoutManager = new LinearLayoutManager(this);
InstanceAdapter wikilessAdapter = new InstanceAdapter(wikilessInstances);
binding.wikilessInstances.setAdapter(wikilessAdapter);
binding.wikilessInstances.setLayoutManager(wLayoutManager);
binding.wikilessInstances.setNestedScrollingEnabled(false);
final LinearLayoutManager pLayoutManager = new LinearLayoutManager(this);
InstanceAdapter proxitokAdapter = new InstanceAdapter(proxitokInstances);
binding.proxitokInstances.setAdapter(proxitokAdapter);
binding.proxitokInstances.setLayoutManager(pLayoutManager);
binding.proxitokInstances.setNestedScrollingEnabled(false);
binding.latencyTest.setOnClickListener(v -> {
invidiousAdapter.evalLatency();
nitterAdapter.evalLatency();
bibliogramAdapter.evalLatency();
tedditAdapter.evalLatency();
scribeAdapter.evalLatency();
wikilessAdapter.evalLatency();
proxitokAdapter.evalLatency();
}
);
instance_info.setOnClickListener(v -> {
binding.instanceInfo.setOnClickListener(v -> {
AlertDialog.Builder instanceInfo = new AlertDialog.Builder(this);
instanceInfo.setTitle(R.string.about_instances_title);
View view = getLayoutInflater().inflate(R.layout.popup_instance_info, new LinearLayout(getApplicationContext()), false);
@ -157,11 +247,9 @@ public class InstanceActivity extends AppCompatActivity {
alertDialog.show();
});
close.setOnClickListener(v -> finish());
binding.close.setOnClickListener(v -> finish());
instance_container.setVisibility(View.VISIBLE);
loader.setVisibility(View.GONE);
});
}

View File

@ -14,6 +14,8 @@ package app.fedilab.nitterizeme.activities;
* You should have received a copy of the GNU General Public License along with UntrackMe; if not,
* see <http://www.gnu.org/licenses>. */
import static app.fedilab.nitterizeme.helpers.Utils.KILL_ACTIVITY;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@ -27,47 +29,49 @@ import android.provider.Settings;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageButton;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SwitchCompat;
import androidx.appcompat.widget.Toolbar;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.Group;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.textfield.TextInputEditText;
import java.util.List;
import java.util.Objects;
import app.fedilab.nitterizeme.BuildConfig;
import app.fedilab.nitterizeme.R;
import static app.fedilab.nitterizeme.helpers.Utils.KILL_ACTIVITY;
import app.fedilab.nitterizeme.databinding.ActivityMainBinding;
import app.fedilab.nitterizeme.databinding.ContentMainBinding;
public class MainActivity extends AppCompatActivity {
public static final String APP_PREFS = "app_prefs";
public static final String SET_NITTER_HOST = "set_nitter_host";
public static final String SET_INVIDIOUS_HOST = "set_invidious_host";
public static final String SET_TEDDIT_HOST = "set_teddit_host";
public static final String SET_OSM_HOST = "set_osm_host";
public static final String SET_BIBLIOGRAM_HOST = "set_bibliogram_host";
public static final String SET_SCRIBERIP_HOST = "set_scriberip_host";
public static final String SET_WIKILESS_HOST = "set_wikiless_host";
public static final String SET_PROXITOK_HOST = "set_proxitok_host";
@SuppressWarnings({"unused", "RedundantSuppression"})
public static String TAG = "UntrackMe";
public static String DEFAULT_NITTER_HOST = "nitter.net";
public static String DEFAULT_INVIDIOUS_HOST = "invidious.snopyta.org";
public static String SET_INVIDIOUS_ENABLED = "set_invidious_enabled";
public static String SET_TEDDIT_ENABLED = "set_teddit_enabled";
public static String SET_NITTER_ENABLED = "set_nitter_enabled";
public static String SET_SCRIBERIP_ENABLED = "set_scriberip_enabled";
public static String SET_WIKILESS_ENABLED = "set_wikiless_enabled";
public static String SET_OSM_ENABLED = "set_osm_enabled";
public static String SET_PROXITOK_ENABLED = "set_osm_enabled";
public static String DEFAULT_OSM_HOST = "www.openstreetmap.org";
public static String SET_BIBLIOGRAM_ENABLED = "set_bibliogram_enabled";
public static String DEFAULT_BIBLIOGRAM_HOST = "bibliogram.art";
public static String DEFAULT_SCRIBERIP_HOST = "scribe.rip";
public static String DEFAULT_WIKILESS_HOST = "wikiless.org";
public static String DEFAULT_TEDDIT_HOST = "teddit.net";
public static String DEFAULT_PROXITOK_HOST = "proxitok.pabloferreiro.es";
public static String SET_GEO_URIS = "set_geo_uris";
public static String SET_EMBEDDED_PLAYER = "set_embedded_player";
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
@ -82,366 +86,538 @@ public class MainActivity extends AppCompatActivity {
private String nitterHost;
private String invidiousHost;
private String bibliogramHost;
private String tedditHost;
private String scriberipHost;
private String wikilessHost;
private String osmHost;
private String proxitokHost;
private ContentMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActivityMainBinding activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());
View viewRoot = activityMainBinding.getRoot();
setContentView(viewRoot);
binding = activityMainBinding.contentMain;
setSupportActionBar(activityMainBinding.toolbar);
Objects.requireNonNull(getSupportActionBar()).setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
SharedPreferences sharedpreferences = getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
TextView current_instance_nitter = findViewById(R.id.current_instance_nitter);
TextView current_instance_invidious = findViewById(R.id.current_instance_invidious);
TextView current_instance_bibliogram = findViewById(R.id.current_instance_bibliogram);
TextView current_instance_osm = findViewById(R.id.current_instance_osm);
TextInputEditText nitter_instance = findViewById(R.id.nitter_instance);
TextInputEditText invidious_instance = findViewById(R.id.invidious_instance);
TextInputEditText bibliogram_instance = findViewById(R.id.bibliogram_instance);
TextInputEditText osm_instance = findViewById(R.id.osm_instance);
Group invidious_current_group = findViewById(R.id.group_current_invidious);
Group nitter_current_group = findViewById(R.id.group_current_nitter);
Group bibliogram_current_group = findViewById(R.id.group_current_bibliogram);
Group osm_current_group = findViewById(R.id.group_current_osm);
Group invidious_custom_group = findViewById(R.id.group_custom_invidious);
Group nitter_custom_group = findViewById(R.id.group_custom_nitter);
Group bibliogram_custom_group = findViewById(R.id.group_custom_bibliogram);
Group osm_custom_group = findViewById(R.id.group_custom_osm);
SwitchCompat enable_nitter = findViewById(R.id.enable_nitter);
SwitchCompat enable_invidious = findViewById(R.id.enable_invidious);
SwitchCompat enable_bibliogram = findViewById(R.id.enable_bibliogram);
SwitchCompat enable_osm = findViewById(R.id.enable_osm);
ImageButton expand_instance_nitter = findViewById(R.id.button_expand_instance_nitter);
ImageButton expand_instance_invidious = findViewById(R.id.button_expand_instance_invidious);
ImageButton expand_instance_bibliogram = findViewById(R.id.button_expand_instance_bibliogram);
ImageButton expand_instance_osm = findViewById(R.id.button_expand_instance_osm);
boolean nitter_enabled = sharedpreferences.getBoolean(SET_NITTER_ENABLED, true);
boolean invidious_enabled = sharedpreferences.getBoolean(SET_INVIDIOUS_ENABLED, true);
boolean osm_enabled = sharedpreferences.getBoolean(SET_OSM_ENABLED, true);
boolean bibliogram_enabled = sharedpreferences.getBoolean(SET_BIBLIOGRAM_ENABLED, true);
boolean teddit_enabled = sharedpreferences.getBoolean(SET_TEDDIT_ENABLED, true);
boolean scriberip_enabled = sharedpreferences.getBoolean(SET_SCRIBERIP_ENABLED, true);
boolean wikiless_enabled = sharedpreferences.getBoolean(SET_WIKILESS_ENABLED, true);
boolean proxitok_enabled = sharedpreferences.getBoolean(SET_PROXITOK_ENABLED, true);
boolean geouri_enabled = sharedpreferences.getBoolean(SET_GEO_URIS, false);
boolean embedded_player = sharedpreferences.getBoolean(SET_EMBEDDED_PLAYER, false);
enable_nitter.setChecked(nitter_enabled);
enable_invidious.setChecked(invidious_enabled);
enable_bibliogram.setChecked(bibliogram_enabled);
enable_osm.setChecked(osm_enabled);
ImageButton save_instance_nitter = findViewById(R.id.button_save_instance_nitter);
ImageButton save_instance_invidious = findViewById(R.id.button_save_instance_invidious);
ImageButton save_instance_bibliogram = findViewById(R.id.button_save_instance_bibliogram);
ImageButton save_instance_osm = findViewById(R.id.button_save_instance_osm);
CheckBox enable_geo_uris = findViewById(R.id.enable_geo_uris);
CheckBox enable_embed_player = findViewById(R.id.enable_embed_player);
binding.enableNitter.setChecked(nitter_enabled);
binding.enableInvidious.setChecked(invidious_enabled);
binding.enableBibliogram.setChecked(bibliogram_enabled);
binding.enableTeddit.setChecked(teddit_enabled);
binding.enableScriberip.setChecked(scriberip_enabled);
binding.enableWikiless.setChecked(wikiless_enabled);
binding.enableOsm.setChecked(osm_enabled);
binding.enableProxitok.setChecked(proxitok_enabled);
nitterHost = sharedpreferences.getString(SET_NITTER_HOST, null);
invidiousHost = sharedpreferences.getString(SET_INVIDIOUS_HOST, null);
bibliogramHost = sharedpreferences.getString(SET_BIBLIOGRAM_HOST, null);
tedditHost = sharedpreferences.getString(SET_TEDDIT_HOST, null);
scriberipHost = sharedpreferences.getString(SET_SCRIBERIP_HOST, null);
wikilessHost = sharedpreferences.getString(SET_WIKILESS_HOST, null);
osmHost = sharedpreferences.getString(SET_OSM_HOST, null);
proxitokHost = sharedpreferences.getString(SET_PROXITOK_HOST, null);
invidious_current_group.setVisibility(invidious_enabled ? View.VISIBLE : View.GONE);
nitter_current_group.setVisibility(nitter_enabled ? View.VISIBLE : View.GONE);
bibliogram_current_group.setVisibility(bibliogram_enabled ? View.VISIBLE : View.GONE);
osm_current_group.setVisibility((osm_enabled && geouri_enabled) ? View.VISIBLE : View.GONE);
enable_geo_uris.setVisibility(osm_enabled ? View.VISIBLE : View.GONE);
enable_embed_player.setVisibility(invidious_enabled ? View.VISIBLE : View.GONE);
binding.groupCurrentInvidious.setVisibility(invidious_enabled ? View.VISIBLE : View.GONE);
binding.groupCurrentNitter.setVisibility(nitter_enabled ? View.VISIBLE : View.GONE);
binding.groupCurrentBibliogram.setVisibility(bibliogram_enabled ? View.VISIBLE : View.GONE);
binding.groupCurrentTeddit.setVisibility(bibliogram_enabled ? View.VISIBLE : View.GONE);
binding.groupCurrentScriberip.setVisibility(scriberip_enabled ? View.VISIBLE : View.GONE);
binding.groupCurrentWikiless.setVisibility(wikiless_enabled ? View.VISIBLE : View.GONE);
binding.groupCurrentOsm.setVisibility((osm_enabled && geouri_enabled) ? View.VISIBLE : View.GONE);
binding.groupCurrentProxitok.setVisibility(proxitok_enabled ? View.VISIBLE : View.GONE);
binding.enableGeoUris.setVisibility(osm_enabled ? View.VISIBLE : View.GONE);
enable_invidious.setOnCheckedChangeListener((buttonView, isChecked) -> {
binding.enableInvidious.setOnCheckedChangeListener((buttonView, isChecked) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(SET_INVIDIOUS_ENABLED, isChecked);
editor.apply();
invidious_current_group.setVisibility(isChecked ? View.VISIBLE : View.GONE);
invidious_custom_group.setVisibility(View.GONE);
enable_embed_player.setVisibility(isChecked ? View.VISIBLE : View.GONE);
expand_instance_invidious.setRotation(0);
binding.groupCurrentInvidious.setVisibility(isChecked ? View.VISIBLE : View.GONE);
binding.groupCustomInvidious.setVisibility(View.GONE);
binding.buttonExpandInstanceInvidious.setRotation(0);
});
enable_nitter.setOnCheckedChangeListener((buttonView, isChecked) -> {
binding.enableNitter.setOnCheckedChangeListener((buttonView, isChecked) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(SET_NITTER_ENABLED, isChecked);
editor.apply();
nitter_current_group.setVisibility(isChecked ? View.VISIBLE : View.GONE);
nitter_custom_group.setVisibility(View.GONE);
expand_instance_nitter.setRotation(0);
binding.groupCurrentNitter.setVisibility(isChecked ? View.VISIBLE : View.GONE);
binding.groupCustomNitter.setVisibility(View.GONE);
binding.buttonExpandInstanceNitter.setRotation(0);
});
enable_bibliogram.setOnCheckedChangeListener((buttonView, isChecked) -> {
binding.enableBibliogram.setOnCheckedChangeListener((buttonView, isChecked) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(SET_BIBLIOGRAM_ENABLED, isChecked);
editor.apply();
bibliogram_current_group.setVisibility(isChecked ? View.VISIBLE : View.GONE);
bibliogram_custom_group.setVisibility(View.GONE);
expand_instance_bibliogram.setRotation(0);
binding.groupCurrentBibliogram.setVisibility(isChecked ? View.VISIBLE : View.GONE);
binding.groupCustomBibliogram.setVisibility(View.GONE);
binding.buttonExpandInstanceBibliogram.setRotation(0);
});
enable_osm.setOnCheckedChangeListener((buttonView, isChecked) -> {
binding.enableTeddit.setOnCheckedChangeListener((buttonView, isChecked) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(SET_TEDDIT_ENABLED, isChecked);
editor.apply();
binding.groupCurrentTeddit.setVisibility(isChecked ? View.VISIBLE : View.GONE);
binding.groupCustomTeddit.setVisibility(View.GONE);
binding.buttonExpandInstanceTeddit.setRotation(0);
});
binding.enableScriberip.setOnCheckedChangeListener((buttonView, isChecked) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(SET_SCRIBERIP_ENABLED, isChecked);
editor.apply();
binding.groupCurrentScriberip.setVisibility(isChecked ? View.VISIBLE : View.GONE);
binding.groupCustomScriberip.setVisibility(View.GONE);
binding.buttonExpandInstanceScriberip.setRotation(0);
});
binding.enableWikiless.setOnCheckedChangeListener((buttonView, isChecked) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(SET_WIKILESS_ENABLED, isChecked);
editor.apply();
binding.groupCurrentWikiless.setVisibility(isChecked ? View.VISIBLE : View.GONE);
binding.groupCustomWikiless.setVisibility(View.GONE);
binding.buttonExpandInstanceWikiless.setRotation(0);
});
binding.enableOsm.setOnCheckedChangeListener((buttonView, isChecked) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(SET_OSM_ENABLED, isChecked);
editor.apply();
osm_custom_group.setVisibility(View.GONE);
enable_geo_uris.setVisibility(isChecked ? View.VISIBLE : View.GONE);
expand_instance_osm.setRotation(0);
binding.groupCustomOsm.setVisibility(View.GONE);
binding.enableGeoUris.setVisibility(isChecked ? View.VISIBLE : View.GONE);
binding.buttonExpandInstanceOsm.setRotation(0);
boolean geo = sharedpreferences.getBoolean(SET_GEO_URIS, false);
if (isChecked) {
if (geo) {
osm_current_group.setVisibility(View.GONE);
osm_custom_group.setVisibility(View.GONE);
binding.groupCurrentOsm.setVisibility(View.GONE);
binding.groupCustomOsm.setVisibility(View.GONE);
} else {
osm_current_group.setVisibility(View.VISIBLE);
binding.groupCurrentOsm.setVisibility(View.VISIBLE);
}
} else {
osm_current_group.setVisibility(View.GONE);
binding.groupCurrentOsm.setVisibility(View.GONE);
}
});
binding.enableProxitok.setOnCheckedChangeListener((buttonView, isChecked) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(SET_PROXITOK_ENABLED, isChecked);
editor.apply();
binding.groupCurrentProxitok.setVisibility(isChecked ? View.VISIBLE : View.GONE);
binding.groupCustomProxitok.setVisibility(View.GONE);
binding.buttonExpandInstanceProxitok.setRotation(0);
});
expand_instance_nitter.setOnClickListener(v -> {
boolean custom_instance_visibility = nitter_custom_group.getVisibility() == View.VISIBLE;
binding.buttonExpandInstanceNitter.setOnClickListener(v -> {
boolean custom_instance_visibility = binding.groupCustomNitter.getVisibility() == View.VISIBLE;
if (custom_instance_visibility) {
expand_instance_nitter.setRotation(0f);
nitter_custom_group.setVisibility(View.GONE);
binding.buttonExpandInstanceNitter.setRotation(0f);
binding.groupCustomNitter.setVisibility(View.GONE);
} else {
expand_instance_nitter.setRotation(180f);
nitter_custom_group.setVisibility(View.VISIBLE);
binding.buttonExpandInstanceNitter.setRotation(180f);
binding.groupCustomNitter.setVisibility(View.VISIBLE);
}
if (nitterHost != null) {
nitter_instance.setText(nitterHost);
binding.nitterInstance.setText(nitterHost);
} else {
nitter_instance.setText("");
binding.nitterInstance.setText("");
}
});
expand_instance_invidious.setOnClickListener(v -> {
boolean custom_instance_visibility = invidious_custom_group.getVisibility() == View.VISIBLE;
binding.buttonExpandInstanceInvidious.setOnClickListener(v -> {
boolean custom_instance_visibility = binding.groupCustomInvidious.getVisibility() == View.VISIBLE;
if (custom_instance_visibility) {
expand_instance_invidious.setRotation(0f);
invidious_custom_group.setVisibility(View.GONE);
binding.buttonExpandInstanceInvidious.setRotation(0f);
binding.groupCustomInvidious.setVisibility(View.GONE);
} else {
expand_instance_invidious.setRotation(180f);
invidious_custom_group.setVisibility(View.VISIBLE);
binding.buttonExpandInstanceInvidious.setRotation(180f);
binding.groupCustomInvidious.setVisibility(View.VISIBLE);
}
if (invidiousHost != null) {
invidious_instance.setText(invidiousHost);
binding.invidiousInstance.setText(invidiousHost);
} else {
invidious_instance.setText("");
binding.invidiousInstance.setText("");
}
});
expand_instance_bibliogram.setOnClickListener(v -> {
boolean custom_instance_visibility = bibliogram_custom_group.getVisibility() == View.VISIBLE;
binding.buttonExpandInstanceBibliogram.setOnClickListener(v -> {
boolean custom_instance_visibility = binding.groupCustomBibliogram.getVisibility() == View.VISIBLE;
if (custom_instance_visibility) {
expand_instance_bibliogram.setRotation(0f);
bibliogram_custom_group.setVisibility(View.GONE);
binding.buttonExpandInstanceBibliogram.setRotation(0f);
binding.groupCustomBibliogram.setVisibility(View.GONE);
} else {
expand_instance_bibliogram.setRotation(180f);
bibliogram_custom_group.setVisibility(View.VISIBLE);
binding.buttonExpandInstanceBibliogram.setRotation(180f);
binding.groupCustomBibliogram.setVisibility(View.VISIBLE);
}
if (bibliogramHost != null) {
bibliogram_instance.setText(bibliogramHost);
binding.bibliogramInstance.setText(bibliogramHost);
} else {
bibliogram_instance.setText("");
binding.bibliogramInstance.setText("");
}
});
expand_instance_osm.setOnClickListener(v -> {
boolean custom_instance_visibility = osm_custom_group.getVisibility() == View.VISIBLE;
binding.buttonExpandInstanceTeddit.setOnClickListener(v -> {
boolean custom_instance_visibility = binding.groupCustomTeddit.getVisibility() == View.VISIBLE;
if (custom_instance_visibility) {
expand_instance_osm.setRotation(0f);
osm_custom_group.setVisibility(View.GONE);
binding.buttonExpandInstanceTeddit.setRotation(0f);
binding.groupCustomTeddit.setVisibility(View.GONE);
} else {
expand_instance_osm.setRotation(180f);
osm_custom_group.setVisibility(View.VISIBLE);
binding.buttonExpandInstanceTeddit.setRotation(180f);
binding.groupCustomTeddit.setVisibility(View.VISIBLE);
}
if (tedditHost != null) {
binding.tedditInstance.setText(tedditHost);
} else {
binding.tedditInstance.setText("");
}
});
binding.buttonExpandInstanceScriberip.setOnClickListener(v -> {
boolean custom_instance_visibility = binding.groupCustomScriberip.getVisibility() == View.VISIBLE;
if (custom_instance_visibility) {
binding.buttonExpandInstanceScriberip.setRotation(0f);
binding.groupCustomScriberip.setVisibility(View.GONE);
} else {
binding.buttonExpandInstanceScriberip.setRotation(180f);
binding.groupCustomScriberip.setVisibility(View.VISIBLE);
}
if (scriberipHost != null) {
binding.scriberipInstance.setText(scriberipHost);
} else {
binding.scriberipInstance.setText("");
}
});
binding.buttonExpandInstanceWikiless.setOnClickListener(v -> {
boolean custom_instance_visibility = binding.groupCustomWikiless.getVisibility() == View.VISIBLE;
if (custom_instance_visibility) {
binding.buttonExpandInstanceWikiless.setRotation(0f);
binding.groupCustomWikiless.setVisibility(View.GONE);
} else {
binding.buttonExpandInstanceWikiless.setRotation(180f);
binding.groupCustomWikiless.setVisibility(View.VISIBLE);
}
if (wikilessHost != null) {
binding.wikilessInstance.setText(wikilessHost);
} else {
binding.wikilessInstance.setText("");
}
});
binding.buttonExpandInstanceOsm.setOnClickListener(v -> {
boolean custom_instance_visibility = binding.groupCustomOsm.getVisibility() == View.VISIBLE;
if (custom_instance_visibility) {
binding.buttonExpandInstanceOsm.setRotation(0f);
binding.groupCustomOsm.setVisibility(View.GONE);
} else {
binding.buttonExpandInstanceOsm.setRotation(180f);
binding.groupCustomOsm.setVisibility(View.VISIBLE);
}
if (osmHost != null) {
osm_instance.setText(osmHost);
binding.osmInstance.setText(osmHost);
} else {
osm_instance.setText("");
binding.osmInstance.setText("");
}
});
binding.buttonExpandInstanceProxitok.setOnClickListener(v -> {
boolean custom_instance_visibility = binding.groupCustomProxitok.getVisibility() == View.VISIBLE;
if (custom_instance_visibility) {
binding.buttonExpandInstanceProxitok.setRotation(0f);
binding.groupCustomProxitok.setVisibility(View.GONE);
} else {
binding.buttonExpandInstanceProxitok.setRotation(180f);
binding.groupCustomProxitok.setVisibility(View.VISIBLE);
}
if (proxitokHost != null) {
binding.proxitokInstance.setText(proxitokHost);
} else {
binding.proxitokInstance.setText("");
}
});
if (nitterHost != null) {
nitter_instance.setText(nitterHost);
current_instance_nitter.setText(nitterHost);
binding.nitterInstance.setText(nitterHost);
binding.currentInstanceNitter.setText(nitterHost);
} else {
current_instance_nitter.setText(DEFAULT_NITTER_HOST);
binding.currentInstanceNitter.setText(DEFAULT_NITTER_HOST);
}
if (invidiousHost != null) {
invidious_instance.setText(invidiousHost);
current_instance_invidious.setText(invidiousHost);
binding.invidiousInstance.setText(invidiousHost);
binding.currentInstanceInvidious.setText(invidiousHost);
} else {
current_instance_invidious.setText(DEFAULT_INVIDIOUS_HOST);
binding.currentInstanceInvidious.setText(DEFAULT_INVIDIOUS_HOST);
}
if (bibliogramHost != null) {
bibliogram_instance.setText(bibliogramHost);
current_instance_bibliogram.setText(bibliogramHost);
binding.bibliogramInstance.setText(bibliogramHost);
binding.currentInstanceBibliogram.setText(bibliogramHost);
} else {
current_instance_bibliogram.setText(DEFAULT_BIBLIOGRAM_HOST);
binding.currentInstanceBibliogram.setText(DEFAULT_BIBLIOGRAM_HOST);
}
if (tedditHost != null) {
binding.tedditInstance.setText(tedditHost);
binding.currentInstanceTeddit.setText(tedditHost);
} else {
binding.currentInstanceTeddit.setText(DEFAULT_TEDDIT_HOST);
}
if (scriberipHost != null) {
binding.scriberipInstance.setText(scriberipHost);
binding.currentInstanceScriberip.setText(scriberipHost);
} else {
binding.currentInstanceScriberip.setText(DEFAULT_SCRIBERIP_HOST);
}
if (wikilessHost != null) {
binding.wikilessInstance.setText(wikilessHost);
binding.currentInstanceWikiless.setText(wikilessHost);
} else {
binding.currentInstanceWikiless.setText(DEFAULT_WIKILESS_HOST);
}
if (osmHost != null) {
osm_instance.setText(osmHost);
current_instance_osm.setText(osmHost);
binding.osmInstance.setText(osmHost);
binding.currentInstanceOsm.setText(osmHost);
} else {
current_instance_osm.setText(DEFAULT_OSM_HOST);
binding.currentInstanceOsm.setText(DEFAULT_OSM_HOST);
}
enable_geo_uris.setChecked(geouri_enabled);
binding.enableGeoUris.setChecked(geouri_enabled);
if (geouri_enabled) {
osm_current_group.setVisibility(View.GONE);
osm_custom_group.setVisibility(View.GONE);
binding.groupCurrentOsm.setVisibility(View.GONE);
binding.groupCustomOsm.setVisibility(View.GONE);
} else if (osm_enabled) {
osm_current_group.setVisibility(View.VISIBLE);
binding.groupCurrentOsm.setVisibility(View.VISIBLE);
} else {
osm_custom_group.setVisibility(View.GONE);
binding.groupCustomOsm.setVisibility(View.GONE);
}
if (proxitokHost != null) {
binding.proxitokInstance.setText(proxitokHost);
binding.currentInstanceProxitok.setText(proxitokHost);
} else {
binding.currentInstanceProxitok.setText(DEFAULT_PROXITOK_HOST);
}
enable_embed_player.setChecked(embedded_player);
save_instance_nitter.setOnClickListener(v -> {
binding.buttonSaveInstanceNitter.setOnClickListener(v -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
if (nitter_instance.getText() != null && nitter_instance.getText().toString().trim().length() > 0) {
String custom_instance = nitter_instance.getText().toString().toLowerCase().trim();
if (binding.nitterInstance.getText() != null && binding.nitterInstance.getText().toString().trim().length() > 0) {
String custom_instance = binding.nitterInstance.getText().toString().toLowerCase().trim();
editor.putString(SET_NITTER_HOST, custom_instance);
current_instance_nitter.setText(custom_instance);
binding.currentInstanceNitter.setText(custom_instance);
} else {
editor.putString(SET_NITTER_HOST, null);
current_instance_nitter.setText(DEFAULT_NITTER_HOST);
binding.currentInstanceNitter.setText(DEFAULT_NITTER_HOST);
}
editor.apply();
});
save_instance_invidious.setOnClickListener(v -> {
binding.buttonSaveInstanceInvidious.setOnClickListener(v -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
if (invidious_instance.getText() != null && invidious_instance.getText().toString().trim().length() > 0) {
String custom_instance = invidious_instance.getText().toString().toLowerCase().trim();
if (binding.invidiousInstance.getText() != null && binding.invidiousInstance.getText().toString().trim().length() > 0) {
String custom_instance = binding.invidiousInstance.getText().toString().toLowerCase().trim();
editor.putString(SET_INVIDIOUS_HOST, custom_instance);
current_instance_invidious.setText(custom_instance);
binding.currentInstanceInvidious.setText(custom_instance);
} else {
editor.putString(SET_INVIDIOUS_HOST, null);
current_instance_invidious.setText(DEFAULT_INVIDIOUS_HOST);
binding.currentInstanceInvidious.setText(DEFAULT_INVIDIOUS_HOST);
}
editor.apply();
});
save_instance_bibliogram.setOnClickListener(v -> {
binding.buttonSaveInstanceBibliogram.setOnClickListener(v -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
if (bibliogram_instance.getText() != null && bibliogram_instance.getText().toString().trim().length() > 0) {
String custom_instance = bibliogram_instance.getText().toString().toLowerCase().trim();
if (binding.bibliogramInstance.getText() != null && binding.bibliogramInstance.getText().toString().trim().length() > 0) {
String custom_instance = binding.bibliogramInstance.getText().toString().toLowerCase().trim();
editor.putString(SET_BIBLIOGRAM_HOST, custom_instance);
current_instance_bibliogram.setText(custom_instance);
binding.currentInstanceBibliogram.setText(custom_instance);
} else {
editor.putString(SET_BIBLIOGRAM_HOST, null);
current_instance_bibliogram.setText(DEFAULT_BIBLIOGRAM_HOST);
binding.currentInstanceBibliogram.setText(DEFAULT_BIBLIOGRAM_HOST);
}
editor.apply();
});
save_instance_osm.setOnClickListener(v -> {
binding.buttonSaveInstanceTeddit.setOnClickListener(v -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
if (osm_instance.getText() != null && osm_instance.getText().toString().trim().length() > 0) {
String custom_instance = osm_instance.getText().toString().toLowerCase().trim();
if (binding.tedditInstance.getText() != null && binding.tedditInstance.getText().toString().trim().length() > 0) {
String custom_instance = binding.tedditInstance.getText().toString().toLowerCase().trim();
editor.putString(SET_TEDDIT_HOST, custom_instance);
binding.currentInstanceTeddit.setText(custom_instance);
} else {
editor.putString(SET_TEDDIT_HOST, null);
binding.currentInstanceTeddit.setText(DEFAULT_TEDDIT_HOST);
}
editor.apply();
});
binding.buttonSaveInstanceScriberip.setOnClickListener(v -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
if (binding.scriberipInstance.getText() != null && binding.scriberipInstance.getText().toString().trim().length() > 0) {
String custom_instance = binding.scriberipInstance.getText().toString().toLowerCase().trim();
editor.putString(SET_SCRIBERIP_HOST, custom_instance);
binding.currentInstanceScriberip.setText(custom_instance);
} else {
editor.putString(SET_SCRIBERIP_HOST, null);
binding.currentInstanceScriberip.setText(DEFAULT_SCRIBERIP_HOST);
}
editor.apply();
});
binding.buttonSaveInstanceWikiless.setOnClickListener(v -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
if (binding.wikilessInstance.getText() != null && binding.wikilessInstance.getText().toString().trim().length() > 0) {
String custom_instance = binding.wikilessInstance.getText().toString().toLowerCase().trim();
editor.putString(SET_WIKILESS_HOST, custom_instance);
binding.currentInstanceWikiless.setText(custom_instance);
} else {
editor.putString(SET_WIKILESS_HOST, null);
binding.currentInstanceWikiless.setText(DEFAULT_WIKILESS_HOST);
}
editor.apply();
});
binding.buttonSaveInstanceOsm.setOnClickListener(v -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
if (binding.osmInstance.getText() != null && binding.osmInstance.getText().toString().trim().length() > 0) {
String custom_instance = binding.osmInstance.getText().toString().toLowerCase().trim();
editor.putString(SET_OSM_HOST, custom_instance);
} else {
editor.putString(SET_OSM_HOST, null);
current_instance_osm.setText(DEFAULT_OSM_HOST);
binding.currentInstanceOsm.setText(DEFAULT_OSM_HOST);
}
editor.apply();
});
binding.buttonSaveInstanceProxitok.setOnClickListener(v -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
if (binding.proxitokInstance.getText() != null && binding.proxitokInstance.getText().toString().trim().length() > 0) {
String custom_instance = binding.proxitokInstance.getText().toString().toLowerCase().trim();
editor.putString(SET_PROXITOK_HOST, custom_instance);
binding.currentInstanceProxitok.setText(custom_instance);
} else {
editor.putString(SET_PROXITOK_HOST, null);
binding.currentInstanceProxitok.setText(DEFAULT_PROXITOK_HOST);
}
editor.apply();
});
Button configure = findViewById(R.id.configure);
configure.setOnClickListener(v -> {
binding.configure.setOnClickListener(v -> {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getApplicationInfo().packageName, null);
intent.setData(uri);
startActivity(intent);
});
ImageButton buttonExpand = findViewById(R.id.button_expand);
buttonExpand.setOnClickListener(v -> {
binding.buttonExpand.setOnClickListener(v -> {
Intent intent = new Intent(MainActivity.this, CheckAppActivity.class);
startActivity(intent);
});
ImageButton buttonPing = findViewById(R.id.instances);
buttonPing.setOnClickListener(v -> {
binding.instances.setOnClickListener(v -> {
Intent intent = new Intent(MainActivity.this, InstanceActivity.class);
startActivity(intent);
});
enable_geo_uris.setOnCheckedChangeListener((buttonView, isChecked) -> {
binding.enableGeoUris.setOnCheckedChangeListener((buttonView, isChecked) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(SET_GEO_URIS, isChecked);
editor.apply();
TextView osm_indications = findViewById(R.id.osm_indications);
if (isChecked) {
expand_instance_osm.setRotation(0f);
osm_current_group.setVisibility(View.GONE);
osm_custom_group.setVisibility(View.GONE);
osm_indications.setText(R.string.redirect_gm_to_geo_uri);
binding.buttonExpandInstanceOsm.setRotation(0f);
binding.groupCurrentOsm.setVisibility(View.GONE);
binding.groupCustomOsm.setVisibility(View.GONE);
binding.osmIndications.setText(R.string.redirect_gm_to_geo_uri);
} else {
osm_current_group.setVisibility(View.VISIBLE);
osm_indications.setText(R.string.redirect_gm_to_osm);
binding.groupCurrentOsm.setVisibility(View.VISIBLE);
binding.osmIndications.setText(R.string.redirect_gm_to_osm);
}
});
enable_embed_player.setOnCheckedChangeListener((buttonView, isChecked) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(SET_EMBEDDED_PLAYER, isChecked);
editor.apply();
});
sharedpreferences.registerOnSharedPreferenceChangeListener(
(sharedPreferences, key) -> {
switch (key) {
case SET_NITTER_HOST:
nitterHost = sharedpreferences.getString(SET_NITTER_HOST, null);
nitter_custom_group.setVisibility(View.GONE);
binding.groupCustomNitter.setVisibility(View.GONE);
if (nitterHost != null && nitterHost.trim().length() > 0)
current_instance_nitter.setText(nitterHost);
binding.currentInstanceNitter.setText(nitterHost);
else
current_instance_nitter.setText(DEFAULT_NITTER_HOST);
expand_instance_nitter.setRotation(0f);
binding.currentInstanceNitter.setText(DEFAULT_NITTER_HOST);
binding.buttonExpandInstanceNitter.setRotation(0f);
break;
case SET_INVIDIOUS_HOST:
invidiousHost = sharedpreferences.getString(SET_INVIDIOUS_HOST, null);
invidious_custom_group.setVisibility(View.GONE);
binding.groupCustomInvidious.setVisibility(View.GONE);
if (invidiousHost != null && invidiousHost.trim().length() > 0)
current_instance_invidious.setText(invidiousHost);
binding.currentInstanceInvidious.setText(invidiousHost);
else
current_instance_invidious.setText(DEFAULT_INVIDIOUS_HOST);
expand_instance_invidious.setRotation(0f);
binding.currentInstanceInvidious.setText(DEFAULT_INVIDIOUS_HOST);
binding.buttonExpandInstanceInvidious.setRotation(0f);
break;
case SET_BIBLIOGRAM_HOST:
bibliogramHost = sharedpreferences.getString(SET_BIBLIOGRAM_HOST, null);
bibliogram_custom_group.setVisibility(View.GONE);
binding.groupCustomBibliogram.setVisibility(View.GONE);
if (bibliogramHost != null && bibliogramHost.trim().length() > 0)
current_instance_bibliogram.setText(bibliogramHost);
binding.currentInstanceBibliogram.setText(bibliogramHost);
else
current_instance_bibliogram.setText(DEFAULT_BIBLIOGRAM_HOST);
expand_instance_bibliogram.setRotation(0f);
binding.currentInstanceBibliogram.setText(DEFAULT_BIBLIOGRAM_HOST);
binding.buttonExpandInstanceBibliogram.setRotation(0f);
break;
case SET_TEDDIT_HOST:
tedditHost = sharedpreferences.getString(SET_TEDDIT_HOST, null);
binding.groupCustomTeddit.setVisibility(View.GONE);
if (tedditHost != null && tedditHost.trim().length() > 0)
binding.currentInstanceTeddit.setText(tedditHost);
else
binding.currentInstanceTeddit.setText(DEFAULT_TEDDIT_HOST);
binding.buttonExpandInstanceTeddit.setRotation(0f);
break;
case SET_SCRIBERIP_HOST:
scriberipHost = sharedpreferences.getString(SET_SCRIBERIP_HOST, null);
binding.groupCustomScriberip.setVisibility(View.GONE);
if (scriberipHost != null && scriberipHost.trim().length() > 0)
binding.currentInstanceScriberip.setText(scriberipHost);
else
binding.currentInstanceScriberip.setText(DEFAULT_SCRIBERIP_HOST);
binding.buttonExpandInstanceScriberip.setRotation(0f);
break;
case SET_WIKILESS_HOST:
wikilessHost = sharedpreferences.getString(SET_WIKILESS_HOST, null);
binding.groupCustomWikiless.setVisibility(View.GONE);
if (wikilessHost != null && wikilessHost.trim().length() > 0)
binding.currentInstanceWikiless.setText(wikilessHost);
else
binding.currentInstanceWikiless.setText(DEFAULT_WIKILESS_HOST);
binding.buttonExpandInstanceWikiless.setRotation(0f);
break;
case SET_OSM_HOST:
osmHost = sharedpreferences.getString(SET_OSM_HOST, null);
osm_custom_group.setVisibility(View.GONE);
binding.groupCustomOsm.setVisibility(View.GONE);
if (osmHost != null && osmHost.trim().length() > 0)
current_instance_osm.setText(osmHost);
binding.currentInstanceOsm.setText(osmHost);
else
current_instance_osm.setText(DEFAULT_OSM_HOST);
expand_instance_osm.setRotation(0f);
binding.currentInstanceOsm.setText(DEFAULT_OSM_HOST);
binding.buttonExpandInstanceOsm.setRotation(0f);
break;
case SET_PROXITOK_HOST:
proxitokHost = sharedpreferences.getString(SET_PROXITOK_HOST, null);
binding.groupCustomProxitok.setVisibility(View.GONE);
if (proxitokHost != null && proxitokHost.trim().length() > 0)
binding.currentInstanceProxitok.setText(proxitokHost);
else
binding.currentInstanceProxitok.setText(DEFAULT_PROXITOK_HOST);
binding.buttonExpandInstanceProxitok.setRotation(0f);
break;
}
if (key.equals(SET_NITTER_HOST) || key.equals(SET_INVIDIOUS_HOST) || key.equals(SET_BIBLIOGRAM_HOST) || key.equals(SET_OSM_HOST)) {
if (key.equals(SET_NITTER_HOST) || key.equals(SET_INVIDIOUS_HOST) || key.equals(SET_BIBLIOGRAM_HOST) || key.equals(SET_TEDDIT_HOST) || key.equals(SET_OSM_HOST) || key.equals(SET_PROXITOK_HOST)) {
View parentLayout = findViewById(android.R.id.content);
Snackbar.make(parentLayout, R.string.instances_saved, Snackbar.LENGTH_LONG).show();
}
@ -450,8 +626,7 @@ public class MainActivity extends AppCompatActivity {
);
//Invidious custom settings
ImageButton invidious_settings = findViewById(R.id.invidious_settings);
invidious_settings.setOnClickListener(v -> {
binding.invidiousSettings.setOnClickListener(v -> {
Intent intent = new Intent(MainActivity.this, InvidiousSettingsActivity.class);
startActivity(intent);
});
@ -498,41 +673,53 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onResume() {
super.onResume();
TextInputEditText nitter_instance = findViewById(R.id.nitter_instance);
TextInputEditText invidious_instance = findViewById(R.id.invidious_instance);
TextInputEditText bibliogram_instance = findViewById(R.id.bibliogram_instance);
TextView current_instance_nitter = findViewById(R.id.current_instance_nitter);
TextView current_instance_invidious = findViewById(R.id.current_instance_invidious);
TextView current_instance_bibliogram = findViewById(R.id.current_instance_bibliogram);
SharedPreferences sharedpreferences = getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
String nitterHost = sharedpreferences.getString(SET_NITTER_HOST, null);
String invidiousHost = sharedpreferences.getString(SET_INVIDIOUS_HOST, null);
String bibliogramHost = sharedpreferences.getString(SET_BIBLIOGRAM_HOST, null);
String tedditHost = sharedpreferences.getString(SET_TEDDIT_HOST, null);
String scriberipHost = sharedpreferences.getString(SET_SCRIBERIP_HOST, null);
String wikilessHost = sharedpreferences.getString(SET_WIKILESS_HOST, null);
String proxitokHost = sharedpreferences.getString(SET_PROXITOK_HOST, null);
if (nitterHost != null) {
nitter_instance.setText(nitterHost);
current_instance_nitter.setText(nitterHost);
binding.nitterInstance.setText(nitterHost);
binding.currentInstanceNitter.setText(nitterHost);
}
if (invidiousHost != null) {
invidious_instance.setText(invidiousHost);
current_instance_invidious.setText(invidiousHost);
binding.invidiousInstance.setText(invidiousHost);
binding.currentInstanceInvidious.setText(invidiousHost);
}
if (bibliogramHost != null) {
bibliogram_instance.setText(bibliogramHost);
current_instance_bibliogram.setText(bibliogramHost);
binding.bibliogramInstance.setText(bibliogramHost);
binding.currentInstanceBibliogram.setText(bibliogramHost);
}
if (tedditHost != null) {
binding.tedditInstance.setText(tedditHost);
binding.currentInstanceTeddit.setText(tedditHost);
}
if (scriberipHost != null) {
binding.scriberipInstance.setText(scriberipHost);
binding.currentInstanceScriberip.setText(scriberipHost);
}
if (wikilessHost != null) {
binding.wikilessInstance.setText(wikilessHost);
binding.currentInstanceWikiless.setText(wikilessHost);
}
if (proxitokHost != null) {
binding.proxitokInstance.setText(proxitokHost);
binding.currentInstanceProxitok.setText(proxitokHost);
}
ConstraintLayout display_indications = findViewById(R.id.display_indications);
if (BuildConfig.fullLinks) {
List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(new Intent(Intent.ACTION_VIEW, Uri.parse("https://fedilab.app")), PackageManager.MATCH_DEFAULT_ONLY);
String thisPackageName = getApplicationContext().getPackageName();
if (resolveInfos.size() == 1 && resolveInfos.get(0).activityInfo.packageName.compareTo(thisPackageName) == 0) {
display_indications.setVisibility(View.VISIBLE);
binding.displayIndications.setVisibility(View.VISIBLE);
} else {
display_indications.setVisibility(View.GONE);
binding.displayIndications.setVisibility(View.GONE);
}
} else {
display_indications.setVisibility(View.GONE);
binding.displayIndications.setVisibility(View.GONE);
}
}
}

View File

@ -14,6 +14,16 @@ package app.fedilab.nitterizeme.activities;
* You should have received a copy of the GNU General Public License along with UntrackMe; if not,
* see <http://www.gnu.org/licenses>. */
import static app.fedilab.nitterizeme.activities.CheckAppActivity.shortener_domains;
import static app.fedilab.nitterizeme.helpers.Utils.KILL_ACTIVITY;
import static app.fedilab.nitterizeme.helpers.Utils.forwardToBrowser;
import static app.fedilab.nitterizeme.helpers.Utils.isRouted;
import static app.fedilab.nitterizeme.helpers.Utils.manageShortened;
import static app.fedilab.nitterizeme.helpers.Utils.manageShortenedShare;
import static app.fedilab.nitterizeme.helpers.Utils.remove_tracking_param;
import static app.fedilab.nitterizeme.helpers.Utils.routerEnabledForHost;
import static app.fedilab.nitterizeme.helpers.Utils.transformUrl;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
@ -31,16 +41,6 @@ import java.util.regex.Pattern;
import app.fedilab.nitterizeme.BuildConfig;
import app.fedilab.nitterizeme.helpers.Utils;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.shortener_domains;
import static app.fedilab.nitterizeme.helpers.Utils.KILL_ACTIVITY;
import static app.fedilab.nitterizeme.helpers.Utils.forwardToBrowser;
import static app.fedilab.nitterizeme.helpers.Utils.isRouted;
import static app.fedilab.nitterizeme.helpers.Utils.manageShortened;
import static app.fedilab.nitterizeme.helpers.Utils.manageShortenedShare;
import static app.fedilab.nitterizeme.helpers.Utils.remove_tracking_param;
import static app.fedilab.nitterizeme.helpers.Utils.routerEnabledForHost;
import static app.fedilab.nitterizeme.helpers.Utils.transformUrl;
public class TransformActivity extends Activity {
@ -59,7 +59,7 @@ public class TransformActivity extends Activity {
//Dealing with URLs
if (Objects.requireNonNull(intent.getAction()).equals(Intent.ACTION_VIEW)) {
String url = Objects.requireNonNull(intent.getData()).toString();
url = remove_tracking_param(url);
url = remove_tracking_param(TransformActivity.this, url);
URL url_;
String host = null;
try {
@ -77,12 +77,12 @@ public class TransformActivity extends Activity {
Intent delegate = new Intent(Intent.ACTION_VIEW);
String transformedURL = transformUrl(TransformActivity.this, url);
if (transformedURL != null) {
delegate.setData(Uri.parse(transformUrl(TransformActivity.this, url)));
delegate.setData(Uri.parse(transformedURL));
delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (BuildConfig.fullLinks) {
forwardToBrowser(TransformActivity.this, delegate);
} else {
if (delegate.resolveActivity(getPackageManager()) != null) {
if (delegate.resolveActivity(getPackageManager()) != null || !BuildConfig.fullLinks) {
startActivity(delegate);
finish();
}
@ -94,7 +94,7 @@ public class TransformActivity extends Activity {
forwardToBrowser(TransformActivity.this, intent);
}
} else {
String newUrl = remove_tracking_param(url);
String newUrl = remove_tracking_param(TransformActivity.this, url);
try {
url_ = new URL(newUrl);
host = url_.getHost();
@ -154,7 +154,7 @@ public class TransformActivity extends Activity {
forwardToBrowser(TransformActivity.this, sendIntent);
return;
}
url = Utils.remove_tracking_param(url);
url = Utils.remove_tracking_param(TransformActivity.this, url);
URL url_;
String host = null;
try {

View File

@ -1,233 +0,0 @@
package app.fedilab.nitterizeme.activities;
/* Copyright 2020 Thomas Schneider
*
* This file is a part of UntrackMe
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* UntrackMe is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with UntrackMe; if not,
* see <http://www.gnu.org/licenses>. */
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.webkit.WebView;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import java.io.IOException;
import app.fedilab.nitterizeme.R;
import app.fedilab.nitterizeme.helpers.PlayerChromeClient;
import app.fedilab.nitterizeme.helpers.Utils;
public class WebviewPlayerActivity extends AppCompatActivity {
private static final int EXTERNAL_STORAGE_REQUEST_CODE = 84;
private String videoUrl;
private WebView webView;
private RelativeLayout loader;
private BroadcastReceiver receive_data;
private FrameLayout webview_container;
private String streaming_url;
private String initialUrl;
@SuppressLint("SetJavaScriptEnabled")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initialUrl = null;
Bundle b = getIntent().getExtras();
if (b != null) {
initialUrl = b.getString("url", null);
}
if (initialUrl == null) {
finish();
}
setContentView(R.layout.activity_webview_player);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
final ViewGroup videoLayout = findViewById(R.id.videoLayout);
webView = findViewById(R.id.webview);
webView.setBackgroundColor(Color.TRANSPARENT);
loader = findViewById(R.id.loader);
webview_container = findViewById(R.id.webview_container);
webView.getSettings().setJavaScriptEnabled(true);
PlayerChromeClient playerChromeClient = new PlayerChromeClient(WebviewPlayerActivity.this, webView, webview_container, videoLayout);
playerChromeClient.setOnToggledFullscreen(fullscreen -> {
if (fullscreen) {
videoLayout.setVisibility(View.VISIBLE);
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
attrs.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
getWindow().setAttributes(attrs);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
} else {
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
attrs.flags &= ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
getWindow().setAttributes(attrs);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
videoLayout.setVisibility(View.GONE);
}
});
receive_data = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle b = intent.getExtras();
assert b != null;
streaming_url = b.getString("streaming_url", null);
if (streaming_url != null) {
webView.stopLoading();
webView.loadUrl(streaming_url);
loader.setVisibility(View.GONE);
webview_container.setVisibility(View.VISIBLE);
}
}
};
webView.setWebChromeClient(playerChromeClient);
LocalBroadcastManager.getInstance(WebviewPlayerActivity.this).registerReceiver(receive_data, new IntentFilter(Utils.RECEIVE_STREAMING_URL));
AsyncTask.execute(() -> {
try {
Document document = Jsoup
.connect(initialUrl).ignoreContentType(true).get();
Element video = document.select("video").first();
if (video != null) {
Element source = video.select("source").first();
if (source != null) {
videoUrl = source.absUrl("src");
runOnUiThread(() -> webView.loadUrl(videoUrl));
}
}
} catch (IOException e) {
e.printStackTrace();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_player, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_share && initialUrl != null) {
AsyncTask.execute(() -> {
try {
Document document = Jsoup
.connect(initialUrl).ignoreContentType(true).get();
Element metaTitle = document.select("meta[property=\"og:title\"]").first();
String title = metaTitle.attr("content");
Element metaMedia = document.select("meta[property=\"og:video:url\"]").first();
String media = metaMedia.attr("content");
Element metaDescription = document.select("meta[property=\"og:description\"]").first();
String description = metaDescription.attr("content");
runOnUiThread(() -> {
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, title);
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(media));
sendIntent.putExtra(Intent.EXTRA_TEXT, description + "\n\n" + initialUrl);
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, getString(R.string.share_with)));
});
} catch (IOException e) {
e.printStackTrace();
}
});
return true;
} else if (id == R.id.action_download && streaming_url != null) {
if (Build.VERSION.SDK_INT >= 23) {
if (ContextCompat.checkSelfPermission(WebviewPlayerActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(WebviewPlayerActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(WebviewPlayerActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, EXTERNAL_STORAGE_REQUEST_CODE);
} else {
Utils.manageDownloadsNoPopup(WebviewPlayerActivity.this, streaming_url);
}
} else {
Utils.manageDownloadsNoPopup(WebviewPlayerActivity.this, streaming_url);
}
return true;
} else if (id == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onPause() {
super.onPause();
if (webView != null) {
webView.onPause();
}
}
@Override
public void onResume() {
super.onResume();
if (webView != null) {
webView.onResume();
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (receive_data != null) {
LocalBroadcastManager.getInstance(WebviewPlayerActivity.this).unregisterReceiver(receive_data);
}
if (webView != null) {
webView.stopLoading();
webView.destroy();
}
}
}

View File

@ -14,6 +14,16 @@ package app.fedilab.nitterizeme.adapters;
* You should have received a copy of the GNU General Public License along with UntrackMe; if not,
* see <http://www.gnu.org/licenses>. */
import static app.fedilab.nitterizeme.activities.MainActivity.APP_PREFS;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_BIBLIOGRAM_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_INVIDIOUS_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_NITTER_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_PROXITOK_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_SCRIBERIP_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_TEDDIT_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_WIKILESS_HOST;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Handler;
@ -21,10 +31,6 @@ import android.os.Looper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
@ -34,13 +40,10 @@ import java.util.List;
import java.util.Locale;
import app.fedilab.nitterizeme.R;
import app.fedilab.nitterizeme.databinding.DrawerInstanceBinding;
import app.fedilab.nitterizeme.entities.Instance;
import app.fedilab.nitterizeme.helpers.Utils;
import static app.fedilab.nitterizeme.activities.MainActivity.APP_PREFS;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_BIBLIOGRAM_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_INVIDIOUS_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_NITTER_HOST;
public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@ -62,9 +65,8 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) {
Context context = parent.getContext();
LayoutInflater layoutInflater = LayoutInflater.from(context);
return new ViewHolder(layoutInflater.inflate(R.layout.drawer_instance, parent, false));
DrawerInstanceBinding itemBinding = DrawerInstanceBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
return new ViewHolder(itemBinding);
}
@Override
@ -76,35 +78,38 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
SharedPreferences sharedpreferences = context.getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
//Reset checked instances by type when tipping
holder.checkbox_instance.setText(instance.getDomain());
holder.binding.checkboxInstance.setText(instance.getDomain());
if (instance.getLatency() == -1) {
holder.latency.setVisibility(View.GONE);
holder.progress.setVisibility(View.GONE);
holder.binding.latency.setVisibility(View.GONE);
holder.binding.progress.setVisibility(View.GONE);
} else if (instance.getLatency() == 0) {
holder.latency.setVisibility(View.GONE);
holder.progress.setVisibility(View.VISIBLE);
holder.binding.latency.setVisibility(View.GONE);
holder.binding.progress.setVisibility(View.VISIBLE);
} else if (instance.getLatency() == -2) {
holder.latency.setText(R.string.error);
holder.latency.setVisibility(View.GONE);
holder.progress.setVisibility(View.VISIBLE);
holder.binding.latency.setText(R.string.error);
holder.binding.latency.setVisibility(View.GONE);
holder.binding.progress.setVisibility(View.VISIBLE);
} else {
holder.latency.setText(String.format(Locale.getDefault(), "%d ms", instance.getLatency()));
holder.latency.setVisibility(View.VISIBLE);
holder.progress.setVisibility(View.GONE);
holder.binding.latency.setText(String.format(Locale.getDefault(), "%d ms", instance.getLatency()));
holder.binding.latency.setVisibility(View.VISIBLE);
holder.binding.progress.setVisibility(View.GONE);
}
holder.locale.setText(instance.getLocale());
List<String> locales = instance.getLocales();
StringBuilder locale = new StringBuilder();
for (String _l : locales) {
locale.append(_l).append(" ");
}
holder.binding.locale.setText(locale.toString());
if (instance.isCloudflare()) {
holder.useCloudflare.setVisibility(View.VISIBLE);
holder.useCloudflare.setOnClickListener(v -> Toast.makeText(context, R.string.cloudflare, Toast.LENGTH_SHORT).show());
holder.binding.useCloudflare.setVisibility(View.VISIBLE);
holder.binding.useCloudflare.setOnClickListener(v -> Toast.makeText(context, R.string.cloudflare, Toast.LENGTH_SHORT).show());
} else {
holder.useCloudflare.setVisibility(View.GONE);
holder.binding.useCloudflare.setVisibility(View.GONE);
}
holder.checkbox_instance.setChecked(instance.isChecked());
holder.binding.checkboxInstance.setChecked(instance.isChecked());
holder.checkbox_instance.setOnClickListener(v -> {
holder.binding.checkboxInstance.setOnClickListener(v -> {
boolean isChecked = !instance.isChecked();
for (Instance _ins : instances) {
@ -112,8 +117,8 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
}
instance.setChecked(true);
SharedPreferences.Editor editor = sharedpreferences.edit();
switch (instance.getType()) {
case INVIDIOUS:
switch (instance.getInstanceType()) {
case YOUTUBE:
if (isChecked) {
editor.putString(SET_INVIDIOUS_HOST, instance.getDomain().trim());
} else {
@ -121,7 +126,7 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
}
editor.apply();
break;
case NITTER:
case TWITTER:
if (isChecked) {
editor.putString(SET_NITTER_HOST, instance.getDomain().trim());
} else {
@ -129,7 +134,7 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
}
editor.apply();
break;
case BIBLIOGRAM:
case INSTAGRAM:
if (isChecked) {
editor.putString(SET_BIBLIOGRAM_HOST, instance.getDomain().trim());
} else {
@ -137,13 +142,47 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
}
editor.apply();
break;
case REDDIT:
if (isChecked) {
editor.putString(SET_TEDDIT_HOST, instance.getDomain().trim());
} else {
editor.putString(SET_TEDDIT_HOST, null);
}
editor.apply();
break;
case MEDIUM:
if (isChecked) {
editor.putString(SET_SCRIBERIP_HOST, instance.getDomain().trim());
} else {
editor.putString(SET_SCRIBERIP_HOST, null);
}
editor.apply();
break;
case WIKIPEDIA:
if (isChecked) {
editor.putString(SET_WIKILESS_HOST, instance.getDomain().trim());
} else {
editor.putString(SET_WIKILESS_HOST, null);
}
editor.apply();
break;
case PROXITOK:
if (isChecked) {
editor.putString(SET_PROXITOK_HOST, instance.getDomain().trim());
} else {
editor.putString(SET_PROXITOK_HOST, null);
}
editor.apply();
break;
}
instanceAdapter.notifyItemRangeChanged(0, instances.size());
});
}
@SuppressLint("NotifyDataSetChanged")
public void evalLatency() {
for (Instance instance : instances) {
instance.setLatency(0);
@ -152,7 +191,7 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
public void run() {
long ping = Utils.ping(instance.getDomain());
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> {
@SuppressLint("NotifyDataSetChanged") Runnable myRunnable = () -> {
instance.setLatency(ping);
notifyDataSetChanged();
};
@ -176,18 +215,11 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
static class ViewHolder extends RecyclerView.ViewHolder {
RadioButton checkbox_instance;
TextView latency, locale;
ProgressBar progress;
ImageView useCloudflare;
DrawerInstanceBinding binding;
ViewHolder(@NonNull View itemView) {
super(itemView);
checkbox_instance = itemView.findViewById(R.id.checkbox_instance);
latency = itemView.findViewById(R.id.latency);
progress = itemView.findViewById(R.id.progress);
locale = itemView.findViewById(R.id.locale);
useCloudflare = itemView.findViewById(R.id.use_cloudflare);
ViewHolder(@NonNull DrawerInstanceBinding itemView) {
super(itemView.getRoot());
binding = itemView;
}
}

View File

@ -1,5 +1,7 @@
package app.fedilab.nitterizeme.entities;
import java.util.List;
/* Copyright 2020 Thomas Schneider
*
* This file is a part of UntrackMe
@ -16,12 +18,14 @@ package app.fedilab.nitterizeme.entities;
* see <http://www.gnu.org/licenses>. */
public class Instance {
private String domain;
private long latency = -1;
private boolean checked = false;
private instanceType type;
private instanceType instanceType;
private boolean cloudflare = false;
private String locale;
private List<String> locales;
private String type;
public String getDomain() {
return domain;
@ -47,14 +51,6 @@ public class Instance {
this.checked = checked;
}
public instanceType getType() {
return type;
}
public void setType(instanceType type) {
this.type = type;
}
public boolean isCloudflare() {
return cloudflare;
}
@ -63,17 +59,38 @@ public class Instance {
this.cloudflare = cloudflare;
}
public String getLocale() {
return locale;
public List<String> getLocales() {
return locales;
}
public void setLocale(String locale) {
this.locale = locale;
public void setLocales(List<String> locales) {
this.locales = locales;
}
public Instance.instanceType getInstanceType() {
return instanceType;
}
public void setInstanceType(Instance.instanceType instanceType) {
this.instanceType = instanceType;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public enum instanceType {
INVIDIOUS,
NITTER,
BIBLIOGRAM
YOUTUBE,
TWITTER,
INSTAGRAM,
REDDIT,
MEDIUM,
WIKIPEDIA,
PROXITOK
}
}

View File

@ -1,181 +0,0 @@
package app.fedilab.nitterizeme.helpers;
/* Copyright 2020 Thomas Schneider
*
* This file is a part of UntrackMe
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* UntrackMe is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with UntrackMe; if not,
* see <http://www.gnu.org/licenses>. */
import android.app.Activity;
import android.media.MediaPlayer;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.FrameLayout;
import androidx.appcompat.app.AppCompatActivity;
/**
* Custom WebChromeClient
*/
public class PlayerChromeClient extends WebChromeClient implements MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener {
private final WebView webView;
private final View activityNonVideoView;
private final ViewGroup activityVideoView;
private final Activity activity;
private FrameLayout videoViewContainer;
private CustomViewCallback videoViewCallback;
private ToggledFullscreenCallback toggledFullscreenCallback;
private boolean isVideoFullscreen;
public PlayerChromeClient(Activity activity, WebView webView, FrameLayout activityNonVideoView, ViewGroup activityVideoView) {
this.activity = activity;
this.isVideoFullscreen = false;
this.webView = webView;
this.activityNonVideoView = activityNonVideoView;
this.activityVideoView = activityVideoView;
}
/**
* Set a callback that will be fired when the video starts or finishes displaying using a custom view (typically full-screen)
*
* @param callback A VideoEnabledWebChromeClient.ToggledFullscreenCallback callback
*/
public void setOnToggledFullscreen(ToggledFullscreenCallback callback) {
this.toggledFullscreenCallback = callback;
}
//FULLSCREEN VIDEO
//Code from https://stackoverflow.com/a/16179544/3197259
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
if (view instanceof FrameLayout) {
if (((AppCompatActivity) activity).getSupportActionBar() != null)
//noinspection ConstantConditions
((AppCompatActivity) activity).getSupportActionBar().hide();
// A video wants to be shown
FrameLayout frameLayout = (FrameLayout) view;
View focusedChild = frameLayout.getFocusedChild();
// Save video related variables
isVideoFullscreen = true;
this.videoViewContainer = frameLayout;
this.videoViewCallback = callback;
// Hide the non-video view, add the video view, and show it
activityNonVideoView.setVisibility(View.INVISIBLE);
activityVideoView.addView(videoViewContainer, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
activityVideoView.setVisibility(View.VISIBLE);
if (focusedChild instanceof android.widget.VideoView) {
// android.widget.VideoView (typically API level <11)
android.widget.VideoView videoView = (android.widget.VideoView) focusedChild;
// Handle all the required events
videoView.setOnCompletionListener(this);
videoView.setOnErrorListener(this);
} else {
// Other classes, including:
// - android.webkit.HTML5VideoFullScreen$VideoSurfaceView, which inherits from android.view.SurfaceView (typically API level 11-18)
// - android.webkit.HTML5VideoFullScreen$VideoTextureView, which inherits from android.view.TextureView (typically API level 11-18)
// - com.android.org.chromium.content.browser.ContentVideoView$VideoSurfaceView, which inherits from android.view.SurfaceView (typically API level 19+)
// Handle HTML5 video ended event only if the class is a SurfaceView
// Test case: TextureView of Sony Xperia T API level 16 doesn't work fullscreen when loading the javascript below
if (webView != null && webView.getSettings().getJavaScriptEnabled() && focusedChild instanceof SurfaceView) {
// Run javascript code that detects the video end and notifies the Javascript interface
String js = "javascript:";
js += "var _ytrp_html5_video_last;";
js += "var _ytrp_html5_video = document.getElementsByTagName('video')[0];";
js += "if (_ytrp_html5_video != undefined && _ytrp_html5_video != _ytrp_html5_video_last) {";
{
js += "_ytrp_html5_video_last = _ytrp_html5_video;";
js += "function _ytrp_html5_video_ended() {";
{
js += "_VideoEnabledWebView.notifyVideoEnd();"; // Must match Javascript interface name and method of VideoEnableWebView
}
js += "}";
js += "_ytrp_html5_video.addEventListener('ended', _ytrp_html5_video_ended);";
}
js += "}";
webView.loadUrl(js);
}
}
// Notify full-screen change
if (toggledFullscreenCallback != null) {
toggledFullscreenCallback.toggledFullscreen(true);
}
}
}
// Available in API level 14+, deprecated in API level 18+
@Override
public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) {
onShowCustomView(view, callback);
}
@Override
public void onHideCustomView() {
if (((AppCompatActivity) activity).getSupportActionBar() != null)
//noinspection ConstantConditions
((AppCompatActivity) activity).getSupportActionBar().show();
// This method should be manually called on video end in all cases because it's not always called automatically.
// This method must be manually called on back key press (from this class' onBackPressed() method).
if (isVideoFullscreen) {
// Hide the video view, remove it, and show the non-video view
activityVideoView.setVisibility(View.INVISIBLE);
activityVideoView.removeView(videoViewContainer);
activityNonVideoView.setVisibility(View.VISIBLE);
// Call back (only in API level <19, because in API level 19+ with chromium webview it crashes)
if (videoViewCallback != null && !videoViewCallback.getClass().getName().contains(".chromium.")) {
videoViewCallback.onCustomViewHidden();
}
// Reset video related variables
isVideoFullscreen = false;
videoViewContainer = null;
videoViewCallback = null;
// Notify full-screen change
if (toggledFullscreenCallback != null) {
toggledFullscreenCallback.toggledFullscreen(false);
}
}
}
// Video will start loading
@Override
public View getVideoLoadingProgressView() {
return super.getVideoLoadingProgressView();
}
// Video finished playing, only called in the case of android.widget.VideoView (typically API level <11)
@Override
public void onCompletion(MediaPlayer mp) {
onHideCustomView();
}
// Error while playing video, only called in the case of android.widget.VideoView (typically API level <11)
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false; // By returning false, onCompletion() will be called
}
public interface ToggledFullscreenCallback {
void toggledFullscreen(boolean fullscreen);
}
}

View File

@ -15,8 +15,28 @@ package app.fedilab.nitterizeme.helpers;
* see <http://www.gnu.org/licenses>. */
import static app.fedilab.nitterizeme.activities.CheckAppActivity.bibliogram_instances;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.instagram_domains;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.invidious_instances;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.medium_domains;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.nitter_instances;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.outlook_safe_domain;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.reddit_domains;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.shortener_domains;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.tiktok_domains;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.twitter_domains;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.wikipedia_domains;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.youtube_domains;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_BIBLIOGRAM_ENABLED;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_INVIDIOUS_ENABLED;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_NITTER_ENABLED;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_PROXITOK_ENABLED;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_SCRIBERIP_ENABLED;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_TEDDIT_ENABLED;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_TEDDIT_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_WIKILESS_ENABLED;
import android.app.Activity;
import android.app.DownloadManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@ -25,9 +45,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.os.Parcelable;
@ -38,10 +56,16 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.preference.PreferenceManager;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.InetAddress;
@ -49,13 +73,11 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@ -68,21 +90,6 @@ import app.fedilab.nitterizeme.BuildConfig;
import app.fedilab.nitterizeme.R;
import app.fedilab.nitterizeme.activities.AppsPickerActivity;
import app.fedilab.nitterizeme.activities.MainActivity;
import app.fedilab.nitterizeme.activities.WebviewPlayerActivity;
import static android.content.Context.DOWNLOAD_SERVICE;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.bibliogram_instances;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.instagram_domains;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.invidious_instances;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.nitter_instances;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.outlook_safe_domain;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.shortener_domains;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.twitter_domains;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.youtube_domains;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_BIBLIOGRAM_ENABLED;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_EMBEDDED_PLAYER;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_INVIDIOUS_ENABLED;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_NITTER_ENABLED;
public class Utils {
@ -91,16 +98,22 @@ public class Utils {
public static final String INTENT_ACTION = "intent_action";
public static final String LAST_USED_APP_PACKAGE = "last_used_app_package";
public static final Pattern youtubePattern = Pattern.compile("(www\\.|m\\.)?(youtube\\.com|youtu\\.be|youtube-nocookie\\.com)/(((?!([\"'<])).)*)");
public static final Pattern redditPattern = Pattern.compile("(www\\.|m\\.)?(reddit\\.com|preview\\.redd\\.it|i\\.redd\\.it)/(((?!([\"'<])).)*)");
public static final Pattern redditSubdomainPattern = Pattern.compile("([\\w_-]+)\\.reddit.com/?(?!r/)(((?!([\"'<])).)*)");
public static final Pattern nitterPattern = Pattern.compile("(mobile\\.|www\\.)?twitter.com([\\w-/]+)");
public static final Pattern bibliogramPostPattern = Pattern.compile("(m\\.|www\\.)?instagram.com(/p/[\\w-/]+)");
public static final Pattern scriberipPattern = Pattern.compile("(www\\.)?medium.com/(((?!([\"'<])).)*)");
public static final Pattern scriberipSubdomainPattern = Pattern.compile("([\\w_-]+)\\.medium.com/(((?!([\"'<])).)*)");
public static final Pattern tiktokPattern = Pattern.compile("(www\\.|us\\.)?tiktok.com/(((?!([\"'<])).)*)");
public static final Pattern wikilessPattern = Pattern.compile("([\\w_-]+)\\.(?:m\\.)?wikipedia.org/(((?!([\"'<])).)*)");
public static final Pattern bibliogramAccountPattern = Pattern.compile("(m\\.|www\\.)?instagram.com(((?!/p/).)+)");
public static final Pattern maps = Pattern.compile("/maps/place/([^@]+@)?([\\d.,z]+).*");
public static final Pattern ampExtract = Pattern.compile("amp/s/(.*)");
public static final String RECEIVE_STREAMING_URL = "receive_streaming_url";
public static final Pattern outlookRedirect = Pattern.compile("(.*)safelinks\\.protection\\.outlook\\.com/?[?]?((?!url).)*url=([^&]+)");
private static final Pattern extractPlace = Pattern.compile("/maps/place/(((?!/data).)*)");
private static final Pattern googleRedirect = Pattern.compile("https?://(www\\.)?google(\\.\\w{2,})?(\\.\\w{2,})/url\\?q=(.*)");
private static final Pattern googleRedirect = Pattern.compile("https?://(www\\.)?google(\\.\\w{2,})?(\\.\\w{2,})/url\\?(q=|q%3D)(.*)");
private static final String[] G_TRACKING = {
"sourceid",
"aqs",
@ -168,7 +181,7 @@ public class Utils {
if (entry.toString().toLowerCase().startsWith("location")) {
Matcher matcher = urlPattern.matcher(entry.toString());
if (matcher.find()) {
newURL = remove_tracking_param(matcher.group(1));
newURL = remove_tracking_param(context, matcher.group(1));
urls.add(transformUrl(context, newURL));
}
}
@ -186,7 +199,7 @@ public class Utils {
if (entry.toString().toLowerCase().startsWith("location")) {
Matcher matcher = urlPattern.matcher(entry.toString());
if (matcher.find()) {
newURL = remove_tracking_param(matcher.group(1));
newURL = remove_tracking_param(context, matcher.group(1));
urls.add(transformUrl(context, newURL));
}
}
@ -221,7 +234,7 @@ public class Utils {
String newUrl = null;
URL url_;
String host = null;
url = Utils.remove_tracking_param(url);
url = Utils.remove_tracking_param(context, url);
try {
url_ = new URL(url);
host = url_.getHost();
@ -295,6 +308,56 @@ public class Utils {
} else {
return url;
}
} else if (host != null && host.endsWith(medium_domains[0])) {
boolean scriberip_enabled = sharedpreferences.getBoolean(MainActivity.SET_SCRIBERIP_ENABLED, true);
if (scriberip_enabled) {
String scriberipHost = sharedpreferences.getString(MainActivity.SET_SCRIBERIP_HOST, MainActivity.DEFAULT_SCRIBERIP_HOST);
assert scriberipHost != null;
scriberipHost = scriberipHost.toLowerCase();
if (scriberipHost.startsWith("http")) {
scheme = "";
}
Matcher matcher = scriberipSubdomainPattern.matcher(url);
while (matcher.find()) {
final String subdomain = matcher.group(1);
final String path = matcher.group(2);
if (subdomain != null && subdomain.toLowerCase().compareTo("www") != 0) {
url = scheme + "medium.com" + "/@" + subdomain + "/" + path;
}
}
matcher = scriberipPattern.matcher(url);
while (matcher.find()) {
final String scriberip_directory = matcher.group(2);
newUrl = scheme + scriberipHost + "/" + scriberip_directory;
}
return newUrl;
} else {
return url;
}
} else if (host != null && host.endsWith(wikipedia_domains[0])) {
boolean wikiless_enabled = sharedpreferences.getBoolean(MainActivity.SET_WIKILESS_ENABLED, true);
if (wikiless_enabled) {
String wikilessHost = sharedpreferences.getString(MainActivity.SET_WIKILESS_HOST, MainActivity.DEFAULT_WIKILESS_HOST);
assert wikilessHost != null;
wikilessHost = wikilessHost.toLowerCase();
if (wikilessHost.startsWith("http")) {
scheme = "";
}
Matcher matcher = wikilessPattern.matcher(url);
String subdomain = "";
String path = "";
while (matcher.find()) {
String tmpSub = matcher.group(1);
if (tmpSub != null && tmpSub.toLowerCase().compareTo("www") != 0) {
subdomain = matcher.group(1);
}
path = matcher.group(2);
}
newUrl = scheme + wikilessHost + "/" + path + (subdomain != null ? "?lang=" + subdomain : "");
return newUrl;
} else {
return url;
}
} else if (url.contains("/maps/place")) {
boolean osm_enabled = sharedpreferences.getBoolean(MainActivity.SET_OSM_ENABLED, true);
if (osm_enabled) {
@ -371,6 +434,58 @@ public class Utils {
} else {
return url;
}
} else if (Arrays.asList(reddit_domains).contains(host) || (host != null && host.endsWith(reddit_domains[1]))) { //Reddit URL
boolean teddit_enabled = sharedpreferences.getBoolean(SET_TEDDIT_ENABLED, true);
if (teddit_enabled) {
String tedditHost = sharedpreferences.getString(SET_TEDDIT_HOST, MainActivity.DEFAULT_TEDDIT_HOST);
assert tedditHost != null;
tedditHost = tedditHost.toLowerCase();
if (tedditHost.startsWith("http")) {
scheme = "";
}
Matcher matcher = redditSubdomainPattern.matcher(url);
while (matcher.find()) {
final String subdomain = matcher.group(1);
final String path = matcher.group(2);
if (subdomain != null && subdomain.toLowerCase().compareTo("www") != 0) {
url = scheme + "reddit.com" + "/r/" + subdomain + "/" + path;
}
}
matcher = redditPattern.matcher(url);
while (matcher.find()) {
String redditPath = matcher.group(3);
if (Objects.requireNonNull(matcher.group(2)).compareTo("preview.redd.it") == 0 ||
Objects.requireNonNull(matcher.group(2)).compareTo("i.redd.it") == 0
) {
newUrl = scheme + tedditHost + "/pics/w:null_" + (redditPath != null ? redditPath.split("\\?|%26")[0] : "null");
} else {
newUrl = scheme + tedditHost + "/" + redditPath;
}
}
return newUrl;
} else {
return url;
}
} else if (host != null && Arrays.asList(tiktok_domains).contains(host)) {
boolean proxitok_enabled = sharedpreferences.getBoolean(SET_PROXITOK_ENABLED, true);
if (proxitok_enabled) {
String proxitokHost = sharedpreferences.getString(MainActivity.SET_PROXITOK_HOST, MainActivity.DEFAULT_PROXITOK_HOST);
assert proxitokHost != null;
proxitokHost = proxitokHost.toLowerCase();
Matcher matcher = tiktokPattern.matcher(url);
while (matcher.find()) {
String path = matcher.group(2);
if (path == null || path.trim().equals("") || path.startsWith("@") || path.startsWith("music") || path.startsWith("tag") || path.startsWith("t")) {
newUrl = url.replace(host, proxitokHost);
}
}
if (newUrl == null) {
newUrl = url;
}
return newUrl;
} else {
return url;
}
} else if (Arrays.asList(invidious_instances).contains(host)) {
boolean invidious_enabled = sharedpreferences.getBoolean(SET_INVIDIOUS_ENABLED, true);
newUrl = url;
@ -645,14 +760,83 @@ public class Utils {
return timeDifference;
}
/**
* Remove unwanted redirects from Google - recursive removal
*
* @param context Context
* @param url String initial url
* @return String url without Google redirects
*/
private static String removeGoogleRedirects(Context context, String url) {
Matcher matcher = googleRedirect.matcher(url);
if (matcher.find()) {
return remove_tracking_param(context, matcher.group(5));
}
return url;
}
/**
* Clean URLs from utm parameters
*
* @param url String URL
* @return cleaned URL String
*/
public static String remove_tracking_param(String url) {
public static String remove_tracking_param(Context context, String url) {
if (url != null) {
try {
InputStream inputStream = context.getAssets().open("rules.json");
BufferedReader bR = new BufferedReader(new InputStreamReader(inputStream));
String line;
StringBuilder responseStrBuilder = new StringBuilder();
while ((line = bR.readLine()) != null) {
responseStrBuilder.append(line);
}
inputStream.close();
JSONObject result = new JSONObject(responseStrBuilder.toString());
JSONObject providers = result.getJSONObject("providers");
Iterator<String> iter = providers.keys();
while (iter.hasNext()) {
String key = iter.next();
JSONObject domainValues = providers.getJSONObject(key);
String urlPattern = domainValues.getString("urlPattern");
JSONArray rules = domainValues.getJSONArray("rules");
JSONArray exceptions = domainValues.getJSONArray("exceptions");
boolean completeProvider = domainValues.getBoolean("completeProvider");
Pattern rulesRegex = Pattern.compile(
urlPattern,
Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
Matcher matcher = rulesRegex.matcher(url);
if (matcher.find()) {
//noinspection StatementWithEmptyBody
if (!completeProvider) {
for (int i = 0; i < rules.length(); i++) {
boolean exception = false;
for (int j = 0; j < exceptions.length(); j++) {
Pattern exceptionRegex = Pattern.compile(
exceptions.getString(j),
Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
Matcher matcherException = exceptionRegex.matcher(url);
if (matcherException.find()) {
exception = true;
}
}
if (!exception) {
url = url.replaceAll(rules.getString(i), "");
}
}
} else {
//TODO see what can be done with that URL
}
}
}
} catch (IOException | JSONException e) {
e.printStackTrace();
}
for (String utm : UTM_PARAMS) {
url = url.replaceAll("&amp;" + utm + "=[0-9a-zA-Z._-]*", "");
url = url.replaceAll("&" + utm + "=[0-9a-zA-Z._-]*", "");
@ -661,10 +845,7 @@ public class Utils {
url = url.replaceAll("#" + utm + "=" + urlRegex, "");
}
try {
Matcher matcher = googleRedirect.matcher(url);
if (matcher.find()) {
url = matcher.group(4);
}
url = removeGoogleRedirects(context, url);
URL redirectURL = new URL(url);
String host = redirectURL.getHost();
if (host != null) {
@ -688,36 +869,6 @@ public class Utils {
}
/**
* Manage downloads with URLs
*
* @param context Context
* @param url String download url
*/
public static void manageDownloadsNoPopup(final Context context, final String url) {
final DownloadManager.Request request;
try {
request = new DownloadManager.Request(Uri.parse(url.trim()));
} catch (Exception e) {
return;
}
try {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss", Locale.ENGLISH);
Date now = new Date();
final String fileName = "UntrackMe_" + formatter.format(now) + ".mp4";
request.allowScanningByMediaScanner();
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
DownloadManager dm = (DownloadManager) context.getSystemService(DOWNLOAD_SERVICE);
assert dm != null;
dm.enqueue(request);
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
/**
* Check if an app is installed
*
@ -883,7 +1034,7 @@ public class Utils {
* @param extraText String text when sharing content
* @param scheme String scheme of the URL
*/
public static void manageShortenedShare(Context context, String url, String extraText, String scheme) {
public static void manageShortenedShare(Context context, String url, String extraText, final String scheme) {
ArrayList<String> notShortnedURLDialog = new ArrayList<>();
Thread thread = new Thread() {
@Override
@ -903,6 +1054,7 @@ public class Utils {
boolean nitter_enabled = sharedpreferences.getBoolean(SET_NITTER_ENABLED, true);
boolean invidious_enabled = sharedpreferences.getBoolean(SET_INVIDIOUS_ENABLED, true);
boolean osm_enabled = sharedpreferences.getBoolean(MainActivity.SET_OSM_ENABLED, true);
boolean teddit_enabled = sharedpreferences.getBoolean(SET_TEDDIT_ENABLED, true);
if (nitter_enabled && Arrays.asList(twitter_domains).contains(host)) {
Matcher matcher = nitterPattern.matcher(notShortnedURLDialog.get(notShortnedURLDialog.size() - 1));
String newUrlFinal = notShortnedURLDialog.get(notShortnedURLDialog.size() - 1);
@ -940,6 +1092,28 @@ public class Utils {
sendIntent.putExtra(Intent.EXTRA_TEXT, newExtraText);
sendIntent.setType("text/plain");
forwardToBrowser(context, sendIntent);
} else if (teddit_enabled && Arrays.asList(reddit_domains).contains(host)) {
Matcher matcher = redditPattern.matcher(url);
String newUrlFinal = notShortnedURLDialog.get(notShortnedURLDialog.size() - 1);
while (matcher.find()) {
String redditPath = matcher.group(3);
String tedditHost = sharedpreferences.getString(MainActivity.SET_TEDDIT_HOST, MainActivity.DEFAULT_TEDDIT_HOST);
assert tedditHost != null;
tedditHost = tedditHost.toLowerCase();
if (Objects.requireNonNull(matcher.group(2)).compareTo("preview.redd.it") == 0 ||
Objects.requireNonNull(matcher.group(2)).compareTo("i.redd.it") == 0
) {
newUrlFinal = scheme + tedditHost + "/pics/w:null_" + (redditPath != null ? redditPath.split("\\?|%26")[0] : "null");
} else {
newUrlFinal = scheme + tedditHost + "/" + redditPath;
}
}
String newExtraText = extraText.replaceAll(Pattern.quote(url), Matcher.quoteReplacement(newUrlFinal));
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, newExtraText);
sendIntent.setType("text/plain");
forwardToBrowser(context, sendIntent);
} else if (osm_enabled && notShortnedURLDialog.get(notShortnedURLDialog.size() - 1).contains("/maps/place/")) {
String newUrlFinal = notShortnedURLDialog.get(notShortnedURLDialog.size() - 1);
Matcher matcher = maps.matcher(notShortnedURLDialog.get(notShortnedURLDialog.size() - 1));
@ -1018,29 +1192,10 @@ public class Utils {
targetIntents.add(targetIntent);
}
SharedPreferences sharedpreferences = context.getSharedPreferences(MainActivity.APP_PREFS, Context.MODE_PRIVATE);
boolean embedded_player = sharedpreferences.getBoolean(SET_EMBEDDED_PLAYER, false);
if (Arrays.asList(invidious_instances).contains(Objects.requireNonNull(i.getData()).getHost()) && embedded_player) {
if (!i.getData().toString().contains("videoplayback")) {
Intent intentPlayer = new Intent(context, WebviewPlayerActivity.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
intentPlayer.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
}
intentPlayer.putExtra("url", i.getData().toString());
context.startActivity(intentPlayer);
} else {
Intent intentStreamingUrl = new Intent(Utils.RECEIVE_STREAMING_URL);
Bundle b = new Bundle();
b.putString("streaming_url", i.getData().toString());
intentStreamingUrl.putExtras(b);
LocalBroadcastManager.getInstance(context).sendBroadcast(intentStreamingUrl);
}
} else if (targetIntents.size() > 0) {
Intent chooserIntent = Intent.createChooser(targetIntents.remove(0), context.getString(R.string.open_with));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[]{}));
context.startActivity(chooserIntent);
}
Intent chooserIntent = Intent.createChooser(targetIntents.remove(0), context.getString(R.string.open_with));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[]{}));
context.startActivity(chooserIntent);
((Activity) context).finish();
} else {
@ -1069,10 +1224,12 @@ public class Utils {
} catch (MalformedURLException e) {
e.printStackTrace();
}
return Arrays.asList(twitter_domains).contains(host) || Arrays.asList(nitter_instances).contains(host)
return Arrays.asList(twitter_domains).contains(host) || Arrays.asList(nitter_instances).contains(host) || Arrays.asList(reddit_domains).contains(host)
|| Arrays.asList(instagram_domains).contains(host) || Arrays.asList(bibliogram_instances).contains(host)
|| url.contains("/maps/place") || url.contains("/amp/s/") || (host != null && host.contains(outlook_safe_domain))
|| Arrays.asList(youtube_domains).contains(host) || Arrays.asList(invidious_instances).contains(host);
|| Arrays.asList(youtube_domains).contains(host) || Arrays.asList(invidious_instances).contains(host)
|| Arrays.asList(tiktok_domains).contains(host) || (host != null && host.endsWith(medium_domains[0])
|| (host != null && host.endsWith(wikipedia_domains[0])) || (host != null && host.endsWith(reddit_domains[1])));
}
public static boolean routerEnabledForHost(Context context, String url) {
@ -1094,6 +1251,14 @@ public class Utils {
return sharedpreferences.getBoolean(MainActivity.SET_OSM_ENABLED, true);
} else if (Arrays.asList(youtube_domains).contains(host) || Arrays.asList(invidious_instances).contains(host)) {
return sharedpreferences.getBoolean(SET_INVIDIOUS_ENABLED, true);
} else if (Arrays.asList(reddit_domains).contains(host) || (host != null && host.endsWith(reddit_domains[1]))) {
return sharedpreferences.getBoolean(SET_TEDDIT_ENABLED, true);
} else if (Arrays.asList(tiktok_domains).contains(host)) {
return sharedpreferences.getBoolean(SET_PROXITOK_ENABLED, true);
} else if (host != null && host.endsWith(medium_domains[0])) {
return sharedpreferences.getBoolean(SET_SCRIBERIP_ENABLED, true);
} else if (host != null && host.endsWith(wikipedia_domains[0])) {
return sharedpreferences.getBoolean(SET_WIKILESS_ENABLED, true);
} else
return url.contains("/amp/s/") || (host != null && host.contains(outlook_safe_domain));
}

View File

@ -14,6 +14,20 @@ package app.fedilab.nitterizeme.viewmodels;
* You should have received a copy of the GNU General Public License along with UntrackMe; if not,
* see <http://www.gnu.org/licenses>. */
import static app.fedilab.nitterizeme.activities.MainActivity.APP_PREFS;
import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_BIBLIOGRAM_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_INVIDIOUS_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_NITTER_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_SCRIBERIP_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_TEDDIT_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_WIKILESS_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_BIBLIOGRAM_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_INVIDIOUS_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_NITTER_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_SCRIBERIP_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_TEDDIT_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_WIKILESS_HOST;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
@ -38,14 +52,6 @@ import javax.net.ssl.HttpsURLConnection;
import app.fedilab.nitterizeme.entities.Instance;
import static app.fedilab.nitterizeme.activities.MainActivity.APP_PREFS;
import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_BIBLIOGRAM_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_INVIDIOUS_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_NITTER_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_BIBLIOGRAM_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_INVIDIOUS_HOST;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_NITTER_HOST;
public class SearchInstanceVM extends AndroidViewModel {
private MutableLiveData<List<Instance>> instancesMLD;
@ -67,8 +73,6 @@ public class SearchInstanceVM extends AndroidViewModel {
@Override
public void run() {
List<Instance> instances = getInstancesFromFedilabApp();
List<Instance> bibliogramInstances = getInstancesFromBibliogramArt();
instances.addAll(bibliogramInstances);
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> instancesMLD.setValue(instances);
mainHandler.post(myRunnable);
@ -81,7 +85,7 @@ public class SearchInstanceVM extends AndroidViewModel {
HttpsURLConnection httpsURLConnection;
ArrayList<Instance> instances = new ArrayList<>();
try {
String instances_url = "https://fedilab.app/untrackme_instances/payload_2.json";
String instances_url = "https://fedilab.app/untrackme_instances/payload_3.json";
URL url = new URL(instances_url);
httpsURLConnection = (HttpsURLConnection) url.openConnection();
httpsURLConnection.setConnectTimeout(10 * 1000);
@ -98,38 +102,173 @@ public class SearchInstanceVM extends AndroidViewModel {
}
httpsURLConnection.getInputStream().close();
SharedPreferences sharedpreferences = getApplication().getApplicationContext().getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
String defaultInvidious = sharedpreferences.getString(SET_INVIDIOUS_HOST, DEFAULT_INVIDIOUS_HOST);
String defaultNitter = sharedpreferences.getString(SET_NITTER_HOST, DEFAULT_NITTER_HOST);
String defaultYoutube = sharedpreferences.getString(SET_INVIDIOUS_HOST, DEFAULT_INVIDIOUS_HOST);
String defaultTwitter = sharedpreferences.getString(SET_NITTER_HOST, DEFAULT_NITTER_HOST);
String defaultReddit = sharedpreferences.getString(SET_TEDDIT_HOST, DEFAULT_TEDDIT_HOST);
String defaultInstagram = sharedpreferences.getString(SET_BIBLIOGRAM_HOST, DEFAULT_BIBLIOGRAM_HOST);
String defaultMedium = sharedpreferences.getString(SET_SCRIBERIP_HOST, DEFAULT_SCRIBERIP_HOST);
String defaultWikipedia = sharedpreferences.getString(SET_WIKILESS_HOST, DEFAULT_WIKILESS_HOST);
if (response != null) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArrayInvidious = jsonObject.getJSONArray("invidious");
JSONArray jsonArrayNitter = jsonObject.getJSONArray("nitter");
for (int i = 0; i < jsonArrayInvidious.length(); i++) {
JSONArray jsonArrayYoutube = jsonObject.getJSONArray("Youtube");
JSONArray jsonArrayTwitter = jsonObject.getJSONArray("Twitter");
JSONArray jsonArrayInstagram = jsonObject.getJSONArray("Instagram");
JSONArray jsonArrayReddit = jsonObject.getJSONArray("Reddit");
JSONArray jsonArrayMedium = jsonObject.getJSONArray("Medium");
JSONArray jsonArrayWikipedia = jsonObject.getJSONArray("Wikipedia");
for (int i = 0; i < jsonArrayYoutube.length(); i++) {
Instance instance = new Instance();
String domain = jsonArrayInvidious.getJSONObject(i).getString("domain");
boolean cloudFlare = jsonArrayInvidious.getJSONObject(i).getBoolean("cloudflare");
String locale = jsonArrayInvidious.getJSONObject(i).getString("locale");
String domain = jsonArrayYoutube.getJSONObject(i).getString("domain");
String type = jsonArrayYoutube.getJSONObject(i).getString("type");
boolean cloudFlare = jsonArrayYoutube.getJSONObject(i).getBoolean("cloudflare");
List<String> localesList = new ArrayList<>();
if (jsonArrayYoutube.getJSONObject(i).has("country")) {
JSONArray locales = jsonArrayYoutube.getJSONObject(i).getJSONArray("country");
for (int j = 0; j < locales.length(); j++) {
localesList.add(locales.getString(j));
}
} else {
localesList.add("--");
}
instance.setLocales(localesList);
instance.setDomain(domain);
instance.setType(type);
instance.setCloudflare(cloudFlare);
instance.setLocale(locale);
instance.setType(Instance.instanceType.INVIDIOUS);
if (defaultInvidious != null && domain.compareTo(defaultInvidious) == 0) {
instance.setInstanceType(Instance.instanceType.YOUTUBE);
if (defaultYoutube != null && domain.compareTo(defaultYoutube) == 0) {
instance.setChecked(true);
}
instances.add(instance);
}
for (int i = 0; i < jsonArrayNitter.length(); i++) {
for (int i = 0; i < jsonArrayTwitter.length(); i++) {
Instance instance = new Instance();
String domain = jsonArrayNitter.getJSONObject(i).getString("domain");
boolean cloudFlare = jsonArrayNitter.getJSONObject(i).getBoolean("cloudflare");
String locale = jsonArrayNitter.getJSONObject(i).getString("locale");
String domain = jsonArrayTwitter.getJSONObject(i).getString("domain");
String type = jsonArrayTwitter.getJSONObject(i).getString("type");
boolean cloudFlare = jsonArrayTwitter.getJSONObject(i).getBoolean("cloudflare");
List<String> localesList = new ArrayList<>();
if (jsonArrayTwitter.getJSONObject(i).has("country")) {
JSONArray locales = jsonArrayTwitter.getJSONObject(i).getJSONArray("country");
for (int j = 0; j < locales.length(); j++) {
localesList.add(locales.getString(j));
}
} else {
localesList.add("--");
}
instance.setLocales(localesList);
instance.setDomain(domain);
instance.setType(type);
instance.setCloudflare(cloudFlare);
instance.setLocale(locale);
instance.setType(Instance.instanceType.NITTER);
if (defaultNitter != null && domain.compareTo(defaultNitter) == 0) {
instance.setInstanceType(Instance.instanceType.TWITTER);
if (defaultTwitter != null && domain.compareTo(defaultTwitter) == 0) {
instance.setChecked(true);
}
instances.add(instance);
}
for (int i = 0; i < jsonArrayInstagram.length(); i++) {
Instance instance = new Instance();
String domain = jsonArrayInstagram.getJSONObject(i).getString("domain");
String type = jsonArrayInstagram.getJSONObject(i).getString("type");
boolean cloudFlare = jsonArrayInstagram.getJSONObject(i).getBoolean("cloudflare");
List<String> localesList = new ArrayList<>();
if (jsonArrayInstagram.getJSONObject(i).has("country")) {
JSONArray locales = jsonArrayInstagram.getJSONObject(i).getJSONArray("country");
for (int j = 0; j < locales.length(); j++) {
localesList.add(locales.getString(j));
}
} else {
localesList.add("--");
}
instance.setLocales(localesList);
instance.setDomain(domain);
instance.setType(type);
instance.setCloudflare(cloudFlare);
instance.setInstanceType(Instance.instanceType.INSTAGRAM);
if (defaultInstagram != null && domain.compareTo(defaultInstagram) == 0) {
instance.setChecked(true);
}
instances.add(instance);
}
for (int i = 0; i < jsonArrayReddit.length(); i++) {
Instance instance = new Instance();
String domain = jsonArrayReddit.getJSONObject(i).getString("domain");
String type = jsonArrayReddit.getJSONObject(i).getString("type");
boolean cloudFlare = jsonArrayReddit.getJSONObject(i).getBoolean("cloudflare");
List<String> localesList = new ArrayList<>();
if (jsonArrayReddit.getJSONObject(i).has("country")) {
JSONArray locales = jsonArrayReddit.getJSONObject(i).getJSONArray("country");
for (int j = 0; j < locales.length(); j++) {
localesList.add(locales.getString(j));
}
} else {
localesList.add("--");
}
instance.setLocales(localesList);
instance.setDomain(domain);
instance.setType(type);
instance.setCloudflare(cloudFlare);
instance.setInstanceType(Instance.instanceType.REDDIT);
if (defaultReddit != null && domain.compareTo(defaultReddit) == 0) {
instance.setChecked(true);
}
instances.add(instance);
}
for (int i = 0; i < jsonArrayMedium.length(); i++) {
Instance instance = new Instance();
String domain = jsonArrayMedium.getJSONObject(i).getString("domain");
String type = jsonArrayMedium.getJSONObject(i).getString("type");
boolean cloudFlare = jsonArrayMedium.getJSONObject(i).getBoolean("cloudflare");
List<String> localesList = new ArrayList<>();
if (jsonArrayMedium.getJSONObject(i).has("country")) {
JSONArray locales = jsonArrayMedium.getJSONObject(i).getJSONArray("country");
for (int j = 0; j < locales.length(); j++) {
localesList.add(locales.getString(j));
}
} else {
localesList.add("--");
}
instance.setLocales(localesList);
instance.setDomain(domain);
instance.setType(type);
instance.setCloudflare(cloudFlare);
instance.setInstanceType(Instance.instanceType.MEDIUM);
if (defaultMedium != null && domain.compareTo(defaultMedium) == 0) {
instance.setChecked(true);
}
instances.add(instance);
}
for (int i = 0; i < jsonArrayWikipedia.length(); i++) {
Instance instance = new Instance();
String domain = jsonArrayWikipedia.getJSONObject(i).getString("domain");
String type = jsonArrayWikipedia.getJSONObject(i).getString("type");
boolean cloudFlare = jsonArrayWikipedia.getJSONObject(i).getBoolean("cloudflare");
List<String> localesList = new ArrayList<>();
if (jsonArrayWikipedia.getJSONObject(i).has("country")) {
JSONArray locales = jsonArrayWikipedia.getJSONObject(i).getJSONArray("country");
for (int j = 0; j < locales.length(); j++) {
localesList.add(locales.getString(j));
}
} else {
localesList.add("--");
}
instance.setLocales(localesList);
instance.setDomain(domain);
instance.setType(type);
instance.setCloudflare(cloudFlare);
instance.setInstanceType(Instance.instanceType.WIKIPEDIA);
if (defaultWikipedia != null && domain.compareTo(defaultWikipedia) == 0) {
instance.setChecked(true);
}
instances.add(instance);
@ -137,6 +276,7 @@ public class SearchInstanceVM extends AndroidViewModel {
} catch (JSONException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
@ -145,56 +285,4 @@ public class SearchInstanceVM extends AndroidViewModel {
}
private List<Instance> getInstancesFromBibliogramArt() {
HttpsURLConnection httpsURLConnection;
ArrayList<Instance> instances = new ArrayList<>();
try {
String instances_url = "https://bibliogram.art/api/instances";
URL url = new URL(instances_url);
httpsURLConnection = (HttpsURLConnection) url.openConnection();
httpsURLConnection.setConnectTimeout(10 * 1000);
httpsURLConnection.setRequestProperty("http.keepAlive", "false");
httpsURLConnection.setRequestProperty("Content-Type", "application/json");
httpsURLConnection.setRequestProperty("Accept", "application/json");
httpsURLConnection.setRequestMethod("GET");
httpsURLConnection.setDefaultUseCaches(true);
httpsURLConnection.setUseCaches(true);
String response = null;
if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) {
java.util.Scanner s = new java.util.Scanner(httpsURLConnection.getInputStream()).useDelimiter("\\A");
response = s.hasNext() ? s.next() : "";
}
httpsURLConnection.getInputStream().close();
SharedPreferences sharedpreferences = getApplication().getApplicationContext().getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
String defaultBibliogram = sharedpreferences.getString(SET_BIBLIOGRAM_HOST, DEFAULT_BIBLIOGRAM_HOST);
if (response != null) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArrayBibliogram = jsonObject.getJSONArray("data");
for (int i = 0; i < jsonArrayBibliogram.length(); i++) {
Instance instance = new Instance();
String url_bibliogram = jsonArrayBibliogram.getJSONObject(i).getString("address");
URL urlBibliogram = new URL(url_bibliogram);
String domain = urlBibliogram.getHost();
boolean cloudFlare = jsonArrayBibliogram.getJSONObject(i).getBoolean("using_cloudflare");
String locale = jsonArrayBibliogram.getJSONObject(i).getString("country");
instance.setDomain(domain);
instance.setCloudflare(cloudFlare);
instance.setLocale(locale);
instance.setType(Instance.instanceType.BIBLIOGRAM);
if (defaultBibliogram != null && domain.compareTo(defaultBibliogram) == 0) {
instance.setChecked(true);
}
instances.add(instance);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
return instances;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#FFFFFF"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M19,9h-4V3H9v6H5l7,7 7,-7zM5,18v2h14v-2H5z" />
</vector>

View File

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#FFFFFF"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z" />
</vector>

View File

@ -109,7 +109,7 @@
android:id="@+id/developer_mastodon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="\@UntrackMe@toot.fedilab.org"
android:text="\@apps@toot.fedilab.app"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
@ -122,27 +122,27 @@
<TextView
android:id="@+id/framagit"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginRight="15dp"
android:text="Framagit"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/github"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginRight="15dp"
android:text="Github"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/codeberg"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginRight="15dp"
android:text="Codeberg"
android:textSize="16sp"
tools:ignore="HardcodedText" />
@ -202,8 +202,7 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Wiki"
tools:ignore="HardcodedText" />
android:text="@string/wiki" />
<Button
android:id="@+id/how_to"
@ -307,4 +306,4 @@
tools:ignore="HardcodedText" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</ScrollView>

View File

@ -25,7 +25,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
@ -35,7 +34,9 @@
</com.google.android.material.appbar.AppBarLayout>
<include layout="@layout/content_main" />
<include
android:id="@+id/content_main"
layout="@layout/content_main" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -68,6 +68,7 @@
android:padding="2dp"
android:src="@drawable/ic_copy"
app:layout_constraintEnd_toEndOf="parent"
android:contentDescription="@string/copy_url"
app:layout_constraintTop_toTopOf="parent" />
<TextView
@ -76,14 +77,13 @@
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:drawableStart="@drawable/ic_app_logo"
android:drawableLeft="@drawable/ic_app_logo"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:paddingTop="5dp"
android:text="@string/continue_with"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:drawableStartCompat="@drawable/ic_app_logo"
app:layout_constraintTop_toBottomOf="@+id/scroll_url" />
<GridView

View File

@ -2,7 +2,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/fab_margin"
android:padding="@dimen/fab_margin"
android:orientation="vertical">
<RelativeLayout
@ -10,7 +10,7 @@
android:layout_height="0dp"
android:layout_weight="1">
<ScrollView
<androidx.core.widget.NestedScrollView
android:id="@+id/scrolling_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -62,8 +62,62 @@
android:id="@+id/bibliogram_instances"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/teddit_instances"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/teddit_instances"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/scribe_instances"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/scribe_instances"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/wikiless_instances"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/wikiless_instances"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/proxitok_instances"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/proxitok_instances"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
</androidx.core.widget.NestedScrollView>
<RelativeLayout
android:id="@+id/loader"

View File

@ -1,52 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!--
/* Copyright 2020 Thomas Schneider
*
* This file is a part of UntrackMe
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* UntrackMe is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with UntrackMe; if not,
* see <http://www.gnu.org/licenses>. */
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
tools:context=".activities.WebviewPlayerActivity">
<FrameLayout
android:id="@+id/webview_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
<!-- View where the video will be shown when video goes fullscreen -->
<RelativeLayout
android:id="@+id/videoLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
<RelativeLayout
android:id="@+id/loader"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
</RelativeLayout>

View File

@ -243,7 +243,6 @@
android:layout_marginLeft="@dimen/label_instance_margin_start"
android:gravity="center_vertical"
android:text="@string/instance_label"
app:layout_constraintStart_toEndOf="@id/button_expand_instance_invidious"
app:layout_constraintTop_toTopOf="@id/guide_invidious" />
@ -254,7 +253,7 @@
android:layout_height="40dp"
android:contentDescription="@string/custom_settings_for_invidious"
android:src="@drawable/ic_settings_applications"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toEndOf="@+id/enable_invidious"
app:layout_constraintTop_toTopOf="@id/guide_invidious" />
<TextView
@ -265,7 +264,7 @@
android:layout_marginLeft="5dp"
android:gravity="center_vertical"
android:textColor="#fff"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toStartOf="@+id/invidious_settings"
app:layout_constraintStart_toEndOf="@id/label_instance_invidious"
app:layout_constraintTop_toTopOf="@id/guide_invidious" />
@ -316,15 +315,6 @@
app:barrierDirection="bottom"
app:constraint_referenced_ids="invidious_instance_container,button_save_instance_invidious" />
<CheckBox
android:id="@+id/enable_embed_player"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="@string/use_built_in_player"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/barrier_invidious_2" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_current_invidious"
@ -348,7 +338,7 @@
style="@style/containerCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/osm_container"
app:layout_constraintBottom_toTopOf="@id/teddit_container"
app:layout_constraintTop_toBottomOf="@id/invidious_container">
<androidx.constraintlayout.widget.ConstraintLayout
@ -485,13 +475,440 @@
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/teddit_container"
style="@style/containerCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/scriberip_container"
app:layout_constraintTop_toBottomOf="@id/bibliogram_container">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_teddit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="40dp" />
<View
android:id="@+id/top_part_bg_teddit"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/topBar"
app:layout_constraintBottom_toBottomOf="@id/guide_teddit"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/teddit_indications"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:text="@string/redirect_reddit_to_teddit"
app:layout_constraintBottom_toBottomOf="@id/guide_teddit"
app:layout_constraintEnd_toStartOf="@id/enable_teddit"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/enable_teddit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
app:layout_constraintBottom_toBottomOf="@id/guide_teddit"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageButton
android:id="@+id/button_expand_instance_teddit"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@null"
android:contentDescription="@string/expand_instance_details"
android:scaleType="fitCenter"
android:src="@drawable/ic_expand_more"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/guide_teddit" />
<TextView
android:id="@+id/label_instance_teddit"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="@dimen/label_instance_margin_start"
android:layout_marginLeft="@dimen/label_instance_margin_start"
android:gravity="center_vertical"
android:text="@string/instance_label"
app:layout_constraintStart_toEndOf="@id/button_expand_instance_teddit"
app:layout_constraintTop_toTopOf="@id/guide_teddit" />
<TextView
android:id="@+id/current_instance_teddit"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginStart="5dp"
android:layout_marginLeft="5dp"
android:gravity="center_vertical"
android:textColor="#fff"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/label_instance_teddit"
app:layout_constraintTop_toTopOf="@id/guide_teddit" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier_teddit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="label_instance_teddit,current_instance_teddit,button_expand_instance_teddit" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/teddit_instance_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/button_save_instance_teddit"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/barrier_teddit">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/teddit_instance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/custom_teddit"
android:inputType="textUri"
android:maxLines="1"
android:textSize="@dimen/custom_instance_input_text_size" />
</com.google.android.material.textfield.TextInputLayout>
<ImageButton
android:id="@+id/button_save_instance_teddit"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_margin="5dp"
android:background="@null"
android:contentDescription="@string/save"
android:src="@drawable/ic_save"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/barrier_teddit" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_current_teddit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="label_instance_teddit,current_instance_teddit,button_expand_instance_teddit" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_custom_teddit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="teddit_instance_container,button_save_instance_teddit" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/scriberip_container"
style="@style/containerCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/wikiless_container"
app:layout_constraintTop_toBottomOf="@id/teddit_container">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_scriberip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="40dp" />
<View
android:id="@+id/top_part_bg_scriberip"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/topBar"
app:layout_constraintBottom_toBottomOf="@id/guide_scriberip"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/scriberip_indications"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:text="@string/redirect_medium_to_scriberip"
app:layout_constraintBottom_toBottomOf="@id/guide_scriberip"
app:layout_constraintEnd_toStartOf="@id/enable_scriberip"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/enable_scriberip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
app:layout_constraintBottom_toBottomOf="@id/guide_scriberip"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageButton
android:id="@+id/button_expand_instance_scriberip"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@null"
android:contentDescription="@string/expand_instance_details"
android:scaleType="fitCenter"
android:src="@drawable/ic_expand_more"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/guide_scriberip" />
<TextView
android:id="@+id/label_instance_scriberip"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="@dimen/label_instance_margin_start"
android:layout_marginLeft="@dimen/label_instance_margin_start"
android:gravity="center_vertical"
android:text="@string/instance_label"
app:layout_constraintStart_toEndOf="@id/button_expand_instance_scriberip"
app:layout_constraintTop_toTopOf="@id/guide_scriberip" />
<TextView
android:id="@+id/current_instance_scriberip"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginStart="5dp"
android:layout_marginLeft="5dp"
android:gravity="center_vertical"
android:textColor="#fff"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/label_instance_scriberip"
app:layout_constraintTop_toTopOf="@id/guide_scriberip" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier_scriberip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="label_instance_scriberip,current_instance_scriberip,button_expand_instance_scriberip" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/scriberip_instance_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/button_save_instance_scriberip"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/barrier_scriberip">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/scriberip_instance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/custom_scriberip"
android:inputType="textUri"
android:maxLines="1"
android:textSize="@dimen/custom_instance_input_text_size" />
</com.google.android.material.textfield.TextInputLayout>
<ImageButton
android:id="@+id/button_save_instance_scriberip"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_margin="5dp"
android:background="@null"
android:contentDescription="@string/save"
android:src="@drawable/ic_save"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/barrier_scriberip" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_current_scriberip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="label_instance_scriberip,current_instance_scriberip,button_expand_instance_scriberip" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_custom_scriberip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="scriberip_instance_container,button_save_instance_scriberip" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/wikiless_container"
style="@style/containerCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/osm_container"
app:layout_constraintTop_toBottomOf="@id/scriberip_container">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_wikiless"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="40dp" />
<View
android:id="@+id/top_part_bg_wikiless"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/topBar"
app:layout_constraintBottom_toBottomOf="@id/guide_wikiless"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/wikiless_indications"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:text="@string/redirect_wikipedia_to_wikiless"
app:layout_constraintBottom_toBottomOf="@id/guide_wikiless"
app:layout_constraintEnd_toStartOf="@id/enable_wikiless"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/enable_wikiless"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
app:layout_constraintBottom_toBottomOf="@id/guide_wikiless"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageButton
android:id="@+id/button_expand_instance_wikiless"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@null"
android:contentDescription="@string/expand_instance_details"
android:scaleType="fitCenter"
android:src="@drawable/ic_expand_more"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/guide_wikiless" />
<TextView
android:id="@+id/label_instance_wikiless"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="@dimen/label_instance_margin_start"
android:layout_marginLeft="@dimen/label_instance_margin_start"
android:gravity="center_vertical"
android:text="@string/instance_label"
app:layout_constraintStart_toEndOf="@id/button_expand_instance_wikiless"
app:layout_constraintTop_toTopOf="@id/guide_wikiless" />
<TextView
android:id="@+id/current_instance_wikiless"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginStart="5dp"
android:layout_marginLeft="5dp"
android:gravity="center_vertical"
android:textColor="#fff"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/label_instance_wikiless"
app:layout_constraintTop_toTopOf="@id/guide_wikiless" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier_wikiless"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="label_instance_wikiless,current_instance_wikiless,button_expand_instance_wikiless" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/wikiless_instance_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/button_save_instance_wikiless"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/barrier_wikiless">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/wikiless_instance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/custom_wikiless"
android:inputType="textUri"
android:maxLines="1"
android:textSize="@dimen/custom_instance_input_text_size" />
</com.google.android.material.textfield.TextInputLayout>
<ImageButton
android:id="@+id/button_save_instance_wikiless"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_margin="5dp"
android:background="@null"
android:contentDescription="@string/save"
android:src="@drawable/ic_save"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/barrier_wikiless" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_current_wikiless"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="label_instance_wikiless,current_instance_wikiless,button_expand_instance_wikiless" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_custom_wikiless"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="wikiless_instance_container,button_save_instance_wikiless" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/osm_container"
style="@style/containerCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/buttons_container"
app:layout_constraintTop_toBottomOf="@id/bibliogram_container">
app:layout_constraintBottom_toTopOf="@id/proxitok_container"
app:layout_constraintTop_toBottomOf="@id/teddit_container">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
@ -644,19 +1061,161 @@
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/proxitok_container"
style="@style/containerCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/buttons_container"
app:layout_constraintTop_toBottomOf="@id/osm_container">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_proxitok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="40dp" />
<View
android:id="@+id/top_part_bg_proxitok"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/topBar"
app:layout_constraintBottom_toBottomOf="@id/guide_proxitok"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/proxitok_indications"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:text="@string/redirect_tiktok_to_proxitok"
app:layout_constraintBottom_toBottomOf="@id/guide_proxitok"
app:layout_constraintEnd_toStartOf="@id/enable_proxitok"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/enable_proxitok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
app:layout_constraintBottom_toBottomOf="@id/guide_proxitok"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageButton
android:id="@+id/button_expand_instance_proxitok"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@null"
android:contentDescription="@string/expand_instance_details"
android:scaleType="fitCenter"
android:src="@drawable/ic_expand_more"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/guide_proxitok" />
<TextView
android:id="@+id/label_instance_proxitok"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="@dimen/label_instance_margin_start"
android:layout_marginLeft="@dimen/label_instance_margin_start"
android:gravity="center_vertical"
android:text="@string/instance_label"
app:layout_constraintStart_toEndOf="@id/button_expand_instance_proxitok"
app:layout_constraintTop_toTopOf="@id/guide_proxitok" />
<TextView
android:id="@+id/current_instance_proxitok"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginStart="5dp"
android:layout_marginLeft="5dp"
android:gravity="center_vertical"
android:textColor="#fff"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/label_instance_proxitok"
app:layout_constraintTop_toTopOf="@id/guide_proxitok" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier_proxitok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="label_instance_proxitok,current_instance_proxitok,button_expand_instance_proxitok" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/proxitok_instance_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/button_save_instance_proxitok"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/barrier_proxitok">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/proxitok_instance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/custom_proxitok"
android:inputType="textUri"
android:maxLines="1"
android:textSize="@dimen/custom_instance_input_text_size" />
</com.google.android.material.textfield.TextInputLayout>
<ImageButton
android:id="@+id/button_save_instance_proxitok"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_margin="5dp"
android:background="@null"
android:contentDescription="@string/save"
android:src="@drawable/ic_save"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/barrier_proxitok" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_current_proxitok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="label_instance_proxitok,current_instance_proxitok,button_expand_instance_proxitok" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_custom_proxitok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="proxitok_instance_container,button_save_instance_proxitok" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/buttons_container"
style="@style/containerCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/display_indications"
app:layout_constraintTop_toBottomOf="@id/osm_container">
app:layout_constraintTop_toBottomOf="@id/proxitok_container">
<Button
android:id="@+id/configure"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:drawableStart="@drawable/ic_settings"
android:drawableLeft="@drawable/ic_settings"

View File

@ -44,8 +44,8 @@
android:id="@+id/locale"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginEnd="2dp"
android:layout_marginRight="2dp"
android:layout_marginEnd="5dp"
android:layout_marginRight="5dp"
android:gravity="center_vertical"
android:textAllCaps="true"
app:layout_constraintBottom_toTopOf="@id/barrier_latency_top"

View File

@ -1,17 +0,0 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="app.fedilab.nitterizeme.activities.WebviewPlayerActivity">
<item
android:id="@+id/action_share"
android:icon="@drawable/ic_share"
android:orderInCategory="1"
android:title="@string/share"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_download"
android:icon="@drawable/ic_download"
android:orderInCategory="2"
android:title="@string/download"
app:showAsAction="ifRoom" />
</menu>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">يقوم بتحويل Youtube إلى Invidious</string>
<string name="redirect_twitter_to_nitter">يقوم بتحويل تويتر إلى Nitter</string>
<string name="redirect_instagram_to_bibliogram">يقوم بتحويل أنستغرام إلى Bibliogram</string>
<string name="redirect_reddit_to_teddit">إعادة توجيه ريديت إلى Teddit</string>
<string name="redirect_medium_to_scriberip">إعادة توجيه Medium إلى Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">إعادة توجيه ويكيبيديا إلى ويكيلس</string>
<string name="custom_bibliogram">مثيل خادم Bibliogram مخصَّص</string>
<string name="custom_scriberip">مثيل مخصص Scribe.rip</string>
<string name="custom_wikiless">مثيل Wikiless مخصص</string>
<string name="custom_teddit">مثيل Teddit مخصص</string>
<string name="redirect_gm_to_geo_uri">إعادة توجيه خريطة غوغل إلى Geo URI</string>
<string name="configure">ضبط</string>
<string name="display_supported_links">اظهر الروابط المدعومة</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">مثيلات خوادم Invidious</string>
<string name="nitter_instances">مثيلات خوادم Nitter</string>
<string name="bibliogram_instances">مثيلات خوادم Bibliogram</string>
<string name="teddit_instances">مثيلات Teddit</string>
<string name="scribe_instances">خلط المثيلات</string>
<string name="wikiless_instances">مثيلات Wikiless</string>
<string name="latency">وقت الإستجابة</string>
<string name="error_message_internet">تحقق من اتصالك بالإنترنت</string>
<string name="instance_label">مثيل الخادم:</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>حذف:</b> إلغاء تعقبني سوف يزيل المعلمة من الرابط، إذا كان موجودا</string>
<string name="invidious_help_other">إذا قمت بتحديد قيم أخرى لمعلمة، سيتم إضافتها إلى عنوان URL. إذا كان المعامل موجود مسبقا، سيتم تغيير قيمته إلى اختيارك</string>
<string name="invidious_help_explanations">[1] معلمة \'محلية\' تم تعيينها إلى \'صحيح\' افتراضيا للحصول على خصوصية أفضل</string>
<string name="copy_url">نسخ عنوان URL إلى الحافظة</string>
<string-array name="invidious_theme">
<item>تجاهل</item>
<item>إزالة</item>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="redirect_medium_to_scriberip">Redirect Medium to Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirect Wikipedia to Wikiless</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">মান নির্ধারণ করো</string>
<string name="display_supported_links">Display supported links</string>
@ -44,9 +50,12 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">ল্যাটেন্সি</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
<string name="instance_label">সংগঠন:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
<string name="instance_info">Information about listed instances</string>
@ -55,7 +64,7 @@
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">শেয়ার</string>
<string name="download">ডাউনলোড</string>
<string name="share_with">Share with</string>
<string name="share_with">শেয়ার করো</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Remove:</b> UntrackMe will remove the parameter from URL, if it exists</string>
<string name="invidious_help_other">If you select other values for a parameter, they will be added to the URL. If the parameter already exists, its value will be changed to your choice</string>
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>উপেক্ষা করো</item>
<item>সরাও</item>

View File

@ -27,7 +27,9 @@
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,6 +46,7 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>

View File

@ -27,7 +27,9 @@
<string name="redirect_youtube_to_invidious">Redirecció de YouTube de Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirecció Instagram per Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Costum Bibliogram exemple</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirecció de mapes de Google per a Geo URI</string>
<string name="configure">Configurar</string>
<string name="display_supported_links">Mostrar suport enllaços</string>
@ -44,9 +46,10 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instàncies</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latència</string>
<string name="error_message_internet">Comproveu la connexió a Internet</string>
<string name="instance_label">Instance:</string>
<string name="instance_label">Instància:</string>
<string name="expand_instance_details">Ampliar exemple detalls</string>
<string name="cloudflare">Aquest exemple utilitza Cloudflare</string>
<string name="instance_info">Informació sobre el llistat de les instàncies</string>
@ -60,7 +63,7 @@
<string name="select_instances">Seleccioneu instàncies</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">Sempre</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,14 +75,14 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">Suprimeix</string>
<string name="cancel">Cancel·la</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_title">Tema</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Suprimeix</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Suprimeix</item>
<item>Enabled</item>
<item>Disabled</item>
<item>Deshabilitat</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Suprimeix</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Suprimeix</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Suprimeix</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Suprimeix</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Suprimeix</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -27,7 +27,9 @@
<string name="redirect_youtube_to_invidious">Přesměrujte YouTube na Invidious</string>
<string name="redirect_twitter_to_nitter">Přesměrovat Twitter na Nitter</string>
<string name="redirect_instagram_to_bibliogram">Přesměrovat Instagram na Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Vlastní Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Přesměrovat Google mapu na Geo URI</string>
<string name="configure">Konfigurovat</string>
<string name="display_supported_links">Zobrazit podporované odkazy</string>
@ -44,6 +46,7 @@
<string name="invidious_instances">Invidious instancí</string>
<string name="nitter_instances">Instance Nitter</string>
<string name="bibliogram_instances">Bibliogram instancí</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latence</string>
<string name="error_message_internet">Zkontrolujte připojení k Internetu</string>
<string name="instance_label">Instance:</string>
@ -60,7 +63,7 @@
<string name="select_instances">Vybrat instance</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">Vždy</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,14 +75,14 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">Odstranit</string>
<string name="cancel">Zrušit</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_title">Motiv</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
@ -95,7 +98,7 @@
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_title">Místní</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Odstranit</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Odstranit</item>
<item>Enabled</item>
<item>Disabled</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Odstranit</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Odstranit</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Odstranit</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Odstranit</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Odstranit</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -27,7 +27,9 @@
<string name="redirect_youtube_to_invidious">Omdirigere YouTube til Uheldige,</string>
<string name="redirect_twitter_to_nitter">Omdirigere Twitter-til Nitter</string>
<string name="redirect_instagram_to_bibliogram">Omdirigere Instagram til at Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Brugerdefineret Bibliogram eksempel</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Google Redirect Kort at Geo-URI</string>
<string name="configure">Konfigurer</string>
<string name="display_supported_links">Visning understøttes links</string>
@ -44,6 +46,7 @@
<string name="invidious_instances">Uheldige tilfælde</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram tilfælde</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Ventetid</string>
<string name="error_message_internet">Tjek din Internetforbindelse</string>
<string name="instance_label">Instans:</string>
@ -60,7 +63,7 @@
<string name="select_instances">Vælg tilfælde</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">Altid</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,14 +75,14 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">Slet</string>
<string name="cancel">Annullér</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_title">Tema</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
@ -95,7 +98,7 @@
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_title">Lokalt</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>Enabled</item>
<item>Disabled</item>
<item>Deaktiveret</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">YouTube zu Invidious umleiten</string>
<string name="redirect_twitter_to_nitter">Twitter zu Nitter umleiten</string>
<string name="redirect_instagram_to_bibliogram">Instagram zu Bibliogram umleiten</string>
<string name="redirect_reddit_to_teddit">Reddit an Teddit weiterleiten</string>
<string name="redirect_medium_to_scriberip">Medium zu Scribe.rip weiterleiten</string>
<string name="redirect_wikipedia_to_wikiless">Wikipedia zu Wikiless weiterleiten</string>
<string name="custom_bibliogram">Benutzerdefinierte Bibliogram Instanz</string>
<string name="custom_scriberip">Benutzerdefinierte Scribe.rip Instanz</string>
<string name="custom_wikiless">Benutzerdefinierte Wikiless Instanz</string>
<string name="custom_teddit">Benutzerdefinierte Teddit Instanz</string>
<string name="redirect_gm_to_geo_uri">Google Maps zu Geo URI umleiten</string>
<string name="configure">Konfigurieren</string>
<string name="display_supported_links">Unterstützte Links anzeigen</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Invidious-Instanzen</string>
<string name="nitter_instances">Nitter-Instanzen</string>
<string name="bibliogram_instances">Bibliogram-Instanzen</string>
<string name="teddit_instances">Teddit-Instanzen</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">Latenz</string>
<string name="error_message_internet">Überprüfe deine Internetverbindung</string>
<string name="instance_label">Instanz:</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Entfernen:</b> UntrackMe wird den Parameter von der URL entfernen, falls er existiert</string>
<string name="invidious_help_other">Wenn Sie andere Werte für einen Parameter auswählen, werden diese zur URL hinzugefügt. Wenn der Parameter bereits vorhanden ist, wird der Wert auf Ihre Wahl geändert</string>
<string name="invidious_help_explanations">[1] \'\"local\' Sprachparameter ist standardmäßig auf \'wahr\' gesetzt, um die Privatsphäre zu verbessern</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>Ignorieren</item>
<item>Entfernen</item>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">Ανακατεύθυνση Youtube σε Invidious</string>
<string name="redirect_twitter_to_nitter">Ανακατεύθυνση Twitter σε Nitter</string>
<string name="redirect_instagram_to_bibliogram">Ανακατεύθυνση Instagram σε Bibliogram</string>
<string name="redirect_reddit_to_teddit">Ανακατεύθυνση Reddit σε Teddit</string>
<string name="redirect_medium_to_scriberip">Ανακατεύθυνση Medium σε Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirect Wikipedia to Wikiless</string>
<string name="custom_bibliogram">Προσαρμοσμένος κόμβος Bibliogram</string>
<string name="custom_scriberip">Προσαρμοσμένος κόμβος Scribe.rip</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">Προσαρμοσμένος κόμβος Teddit</string>
<string name="redirect_gm_to_geo_uri">Ανακατεύθυνση Google Map σε Geo URI</string>
<string name="configure">Ρύθμιση</string>
<string name="display_supported_links">Εμφάνιση υποστηριζόμενων συνδέσμων</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Κόμβοι Invidious</string>
<string name="nitter_instances">Κόμβοι Nitter</string>
<string name="bibliogram_instances">Κόμβοι Bibliogram</string>
<string name="teddit_instances">Κόμβοι Teddit</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">Καθυστέρηση</string>
<string name="error_message_internet">Ελέγξτε τη σύνδεσή σας στο Internet</string>
<string name="instance_label">Κόμβος:</string>
@ -85,8 +94,8 @@
<string name="invidious_thin_mode_indication">Φόρτωση στοιχείων HTML, CSS, JS και video (απενεργοποιεί τις εικόνες)</string>
<string name="invidious_language_mode_indication">Διαθέσιμες γλώσσες</string>
<string name="invidious_language_mode_title">Γλώσσα Διεπαφής</string>
<string name="pref_invidious_head1">Site-wide parameters</string>
<string name="pref_invidious_head2">Player parameters</string>
<string name="pref_invidious_head1">Παράμετροι ιστότοπου</string>
<string name="pref_invidious_head2">Παράμετροι αναπαραγωγέα</string>
<string name="invidious_annotations_mode_title">Σχολιασμοί</string>
<string name="invidious_annotations_mode_indication">Show legacy annotations, provided by the Internet Archive</string>
<string name="invidious_autoplay_mode_indication">Automatically play video on load</string>
@ -94,9 +103,9 @@
<string name="invidious_continue_mode_title">Συνέχεια</string>
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Ακρόαση</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_listen_mode_indication">Αναπαραγωγή μόνο ήχου από το βίντεο</string>
<string name="invidious_local_mode_title">Τοπικά</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_local_mode_indication">Ενεργοποίηση μεσολάβησης ροών βίντεο</string>
<string name="invidious_subtitles_mode_title">Υπότιτλοι</string>
<string name="invidious_subtitles_mode_indication">Λίστα ISO 639-1 κωδικών γλώσσας</string>
<string name="invidious_quality_mode_title">Ποιότητα</string>
@ -104,9 +113,9 @@
<string name="invidious_loop_mode_title">Επανάληψη</string>
<string name="invidious_volume_mode_title">Ένταση ήχου</string>
<string name="invidious_volume_mode_indication">Default player volume, can be any whole number between 0 and 100</string>
<string name="invidious_loop_mode_indication">Loop player by default</string>
<string name="invidious_loop_mode_indication">Ενεργοποίηση επανάληψης από προεπιλογή</string>
<string name="invidious_volume_mode_value">Τιμή έντασης ήχου</string>
<string name="invidious_volume_mode_value_indication">Override the volume with this value</string>
<string name="invidious_volume_mode_value_indication">Αντικατάσταση έντασης με αυτήν την τιμή</string>
<string name="pref_invidious_head3">Τύπος Αναπαραγωγέα</string>
<string name="invidious_player_style_mode_title">Εμφάνιση</string>
<string name="invidious_player_style_mode_indication">Invidious, the default one. YouTube, using a centered play button and always visible video control bar</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Remove:</b> UntrackMe will remove the parameter from URL, if it exists</string>
<string name="invidious_help_other">If you select other values for a parameter, they will be added to the URL. If the parameter already exists, its value will be changed to your choice</string>
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>Παράβλεψη</item>
<item>Αφαίρεση</item>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">Redirigir YouTube a Invidious</string>
<string name="redirect_twitter_to_nitter">Redirigir Twitter a Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirigir Instagram a Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirigir Reddit a Teddit</string>
<string name="redirect_medium_to_scriberip">Redirect Medium to Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirect Wikipedia to Wikiless</string>
<string name="custom_bibliogram">Nodo personalizado de Bibliogram</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">Servidor personalizado de Teddit</string>
<string name="redirect_gm_to_geo_uri">Redirigir Google Map a Geo URI</string>
<string name="configure">Configurar</string>
<string name="display_supported_links">Mostrar enlaces compatibles</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Nodos de Invidious</string>
<string name="nitter_instances">Nodos de Nitter</string>
<string name="bibliogram_instances">Nodos de Bibliogram</string>
<string name="teddit_instances">Instancias de Teddit</string>
<string name="scribe_instances">Instancias Scribe</string>
<string name="wikiless_instances">Instancias Wikiless</string>
<string name="latency">Latencia</string>
<string name="error_message_internet">Comprueba tu conexión a Internet</string>
<string name="instance_label">Nodo:</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Eliminar:</b> UntrackMe eliminará el parámetro de la URL, si existe</string>
<string name="invidious_help_other">Si seleccionas otros valores para un parámetro, se añadirán a la URL. Si el parámetro ya existe, su valor será cambiado al que hayas elegido</string>
<string name="invidious_help_explanations">El parámetro \'local\' [1] está establecido como \'true\' por defecto para una mejor privacidad</string>
<string name="copy_url">Copiar URL al portapapeles</string>
<string-array name="invidious_theme">
<item>Ignorar</item>
<item>Eliminar</item>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">Birbideratu YouTube Invidious-era</string>
<string name="redirect_twitter_to_nitter">Birbideratu Twitter Nitter-era</string>
<string name="redirect_instagram_to_bibliogram">Birbideratu Instagram Bibliogram-era</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="redirect_medium_to_scriberip">Redirect Medium to Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirect Wikipedia to Wikiless</string>
<string name="custom_bibliogram">Hautatu Bibliogram instatzia</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Berbideratu Google Map Geo URI-ra</string>
<string name="configure">Konfiguratu</string>
<string name="display_supported_links">Erakutsi onartutako estekak</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Invidious instantziak</string>
<string name="nitter_instances">Nitter instantziak</string>
<string name="bibliogram_instances">Bibliogram instantziak</string>
<string name="teddit_instances">Teddit instances</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">Latentzia</string>
<string name="error_message_internet">Egiaztatu zure internet konexioa</string>
<string name="instance_label">Instantzia:</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Kendu:</b> UntrackMe aplikazioak parametroa kenduko du URLtik, aurkituz gero</string>
<string name="invidious_help_other">Parametroarentzat beste balio batzuk hautatzen badituzu, URLra gehituko dira. Parametroa aurretik badago, balioa aldatuko zaio zure aukera jartzeko</string>
<string name="invidious_help_explanations">[1] Parametro \'lokala\' egiazkora jartzen da pribatutasun hobe baterako</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>Ezikusi</item>
<item>Kendu</item>

View File

@ -1,175 +1,185 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Settings</string>
<string name="action_about">About</string>
<string name="developer">Developer</string>
<string name="donations">Donations</string>
<string name="about_the_app">About the app</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="license">License</string>
<string name="about_vesrion">Release %1$s</string>
<string name="custom_nitter">Custom Nitter instance</string>
<string name="save">Save</string>
<string name="close">Close</string>
<string name="instances_saved">Custom instances have been saved!</string>
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
<string name="Donate">Donate</string>
<string name="warning">Warning</string>
<string name="error">Error</string>
<string name="valid">Valid</string>
<string name="icon_of_the_app">Icon of the app</string>
<string name="open_with">Open with</string>
<string name="redirect_gm_to_osm">Redirect Google Map to OpenStreetMap</string>
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
<string name="use_geo_uri">Use geo URI</string>
<string name="how_to">How-to</string>
<string name="shortened_detected">Shortened URL</string>
<string name="shortener_services">Shortener services</string>
<string name="open">Open</string>
<string name="dismiss">Dismiss</string>
<string name="resolving_shortened">Resolving shortened URL, please wait…</string>
<string name="try_to_redirect">%1$s \n\nwill redirect you to\n\n<b>%2$s</b></string>
<string name="try_to_redirect_again">Then it will redirect you to\n\n<b>%1$s</b></string>
<string name="the_app_failed_shortened">The app didn\'t manage to retrieve the full URL</string>
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
<string name="instance_info">Information about listed instances</string>
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="about_instances_title">About instances</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
<string name="supported_url_indication_1">2 - You are now in app settings from your device. Tap on \"Set as default\".</string>
<string name="display_indications_1_description">Screenshot showing app settings for the app. You have to Tap on \"Set as default\"</string>
<string name="supported_url_indication_2">2 - Then tap on \"Go to supported URLs\".</string>
<string name="display_indications_2_description">Screenshot showing app settings for the app. You have to Tap on \"Go to supported URLs\"</string>
<string name="supported_url_indication_3">3 - In suggestions make sure to pickup \"Always ask\"</string>
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
<string name="invidious_language_mode_indication">Available locales</string>
<string name="invidious_language_mode_title">UI Language</string>
<string name="pref_invidious_head1">Site-wide parameters</string>
<string name="pref_invidious_head2">Player parameters</string>
<string name="invidious_annotations_mode_title">Annotations</string>
<string name="invidious_annotations_mode_indication">Show legacy annotations, provided by the Internet Archive</string>
<string name="invidious_autoplay_mode_indication">Automatically play video on load</string>
<string name="invidious_autoplay_mode_title">Autoplay</string>
<string name="invidious_continue_mode_title">Continue</string>
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
<string name="invidious_quality_mode_title">Quality</string>
<string name="invidious_quality_mode_indication">Default player quality</string>
<string name="invidious_loop_mode_title">Loop</string>
<string name="invidious_volume_mode_title">Volume</string>
<string name="invidious_volume_mode_indication">Default player volume, can be any whole number between 0 and 100</string>
<string name="invidious_loop_mode_indication">Loop player by default</string>
<string name="invidious_volume_mode_value">Volume value</string>
<string name="invidious_volume_mode_value_indication">Override the volume with this value</string>
<string name="pref_invidious_head3">Player Style</string>
<string name="invidious_player_style_mode_title">Appearance</string>
<string name="invidious_player_style_mode_indication">Invidious, the default one. YouTube, using a centered play button and always visible video control bar</string>
<string name="help">Help</string>
<string name="invidious_help_title">Setting options</string>
<string name="invidious_help_ignore"><b>Ignore:</b> This is the default action for all¹ parameters. This means UntrackMe will not do anything about the parameter</string>
<string name="invidious_help_remove"><b>Remove:</b> UntrackMe will remove the parameter from URL, if it exists</string>
<string name="invidious_help_other">If you select other values for a parameter, they will be added to the URL. If the parameter already exists, its value will be changed to your choice</string>
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string name="action_settings">تنظیمات</string>
<string name="action_about">درباره</string>
<string name="developer">توسعه‌دهنده</string>
<string name="donations">اعانه</string>
<string name="about_the_app">دربارهٔ کاره</string>
<string name="source_code">کد مبدأ</string>
<string name="issue_tracker">ردیاب مشکل</string>
<string name="license">پروانه</string>
<string name="about_vesrion">ارائه %1$s</string>
<string name="custom_nitter">نمونهٔ سفارشی نیتر</string>
<string name="save">ذخیره</string>
<string name="close">بستن</string>
<string name="instances_saved">نمونه‌های سفارشی ذخیره شدند!</string>
<string name="custom_invidious">نمونهٔ سفارشی این‌ویدیوس</string>
<string name="no_apps">بدون برنامهٔ پیش‌گزیده</string>
<string name="Donate">اعانه</string>
<string name="warning">هشدار</string>
<string name="error">خطا</string>
<string name="valid">معتبر</string>
<string name="icon_of_the_app">نقشک کاره</string>
<string name="open_with">گشودن با</string>
<string name="redirect_gm_to_osm">هدایت نقشهٔ گوگل به اوپن‌استریت‌مپ</string>
<string name="custom_osm">نام میزبان سفارشی اوپن‌استریت‌مپ</string>
<string name="redirect_youtube_to_invidious">هدایت یوتوب به این‌ویدیوس</string>
<string name="redirect_twitter_to_nitter">هدایت توییتر به نیتر</string>
<string name="redirect_instagram_to_bibliogram">هدایت اینستاگرم به بیبلیوگرم</string>
<string name="redirect_reddit_to_teddit">هدایت ردیت به تدیت</string>
<string name="redirect_medium_to_scriberip">Redirect Medium to Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirect Wikipedia to Wikiless</string>
<string name="custom_bibliogram">نمونهٔ سفارشی بیبلیوگرم</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">نمونهٔ سفارشی تدیت</string>
<string name="redirect_gm_to_geo_uri">هدایت نقشهٔ گوگل به نشانی جغرافیایی</string>
<string name="configure">پیکربندی</string>
<string name="display_supported_links">نمایش پیوندهای پشتیبانی‌شده</string>
<string name="use_geo_uri">استفاده از نشانی جغرافیایی</string>
<string name="how_to">راهنما</string>
<string name="shortened_detected">نشانی کوتاه</string>
<string name="shortener_services">خدمات کوتاه‌کننده</string>
<string name="open">گشودن</string>
<string name="dismiss">رد کردن</string>
<string name="resolving_shortened">باز کردن نشانی کوتاه، لطفاً شکیبایی کنید…</string>
<string name="try_to_redirect">%1$s \n\n به \n\n<b>%2$s</b> هدایتتان می‌کند</string>
<string name="try_to_redirect_again">سپس به \n\n<b>%1$s</b> هدایتتان خواهد کرد</string>
<string name="the_app_failed_shortened">کاره نتوانست نشانی کامل را به دست آورد</string>
<string name="invidious_instances">نمونه‌های این‌ویدیوس</string>
<string name="nitter_instances">نمونه‌های نیتر</string>
<string name="bibliogram_instances">نمونه‌های بیبلیوگرم</string>
<string name="teddit_instances">نمونه‌های تدیت</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">تأخیر</string>
<string name="error_message_internet">اتصال اینترنتیتان را بررسی کنید</string>
<string name="instance_label">نمونه:</string>
<string name="expand_instance_details">گسترش جزییات نمونه</string>
<string name="cloudflare">این نمونه از کلودفلر استفاده می‌کند</string>
<string name="instance_info">اطلاعات نمونه‌های فهرست‌شده</string>
<string name="about_instances">فهرست نمونه‌ها از \n\n <a href="%1$s">%2$s</a>\n\n می‌آید. می‌توانید با افزودن یا برداشتن نمونه‌ها در آن مشارکت کنید.</string>
<string name="about_instances_title">دربارهٔ نمونه‌ها</string>
<string name="use_built_in_player">استفاده از پخش‌کنندهٔ داخلی</string>
<string name="share">هم‌رسانی</string>
<string name="download">بارگیری</string>
<string name="share_with">هم‌رسانی با</string>
<string name="check_apps">بررسی کاره‌ها</string>
<string name="select_instances">گزینش نمونه‌ها</string>
<string name="continue_with">ادامه دادن با…</string>
<string name="just_once">همین یک بار</string>
<string name="always">همیشه</string>
<string name="default_app_indication">%1$s به عنوان برنامهٔ پیش‌فرض انتخاب شده. \n شما می‌توانید از قسمت تنظیمات برنامه آن را تغییر بدهید.</string>
<string name="indication_error_title">مشکلی در پیکربندی برنامه وجود دارد. برای درست کردنش لطفاً این سرنخ‌ها را دنبال کنید.</string>
<string name="open_configure">دکمهٔ «پیکربندی» را در قسمت بالا بزنید.</string>
<string name="supported_url_indication_1">اکنون در قسمت تنظیمات دستگاهتان هستید. روی «تنظیم به عنوان پیش‌فرض» بزنید.</string>
<string name="display_indications_1_description">این اسکرین‌شات بخش تنظیمات برنامه‌ها را نشان می‌دهد. باید روی «تنظیم به عنوان پیش‌فرض» بزنید</string>
<string name="supported_url_indication_2">سپس روی «برو به نشانی‌های پشتیبانی‌شده» بزنید.</string>
<string name="display_indications_2_description">این اسکرین‌شات بخش تنظیمات برنامه‌ها را نشان می‌دهد. باید روی «برو به نشانی‌های پشتیبانی‌شده» بزنید</string>
<string name="supported_url_indication_3">در بخش پیشنهادها، حواستان باشد که گزینهٔ «همیشه بپرس» را انتخاب کنید</string>
<string name="display_indications_3_description">این اسکرین‌شات تنظیمات مربوط به نحوهٔ باز کردن نشانی‌ها را در برنامه نشان می‌دهد</string>
<string name="default_apps">برنامه‌های پیش‌فرض</string>
<string name="remove_from_default_app">از برنامه‌های پیش‌فرض حذف کن</string>
<string name="delete">پاک کردن</string>
<string name="cancel">لغو کردن</string>
<string name="delete_app_from_default">%1$s از برنامه‌های پیش‌فرض حذف شود؟</string>
<string name="copy_done">کپی شد</string>
<string name="no_apps_set_as_default">هیچ برنامه‌ای به عنوان پیش‌فرض انتخاب نشده!</string>
<string name="custom_settings_for_invidious">تنظیمات سفارشی برای اینویدیوس</string>
<string name="invidious_settings">تنظیمات اینویدیوس</string>
<string name="invidious_dark_mode_title">تِم</string>
<string name="invidious_dark_mode_indication">پیکربندی تم پیش‌فرض بدون تنظیم کوکی‌ها</string>
<string name="invidious_thin_mode_title">حالت Thin</string>
<string name="invidious_thin_mode_indication">عناصر HTML، CSS، JS و ویدئو را بار کن (تصاویر را غیرفعال می‌کند)</string>
<string name="invidious_language_mode_indication">زبان‌های موجود</string>
<string name="invidious_language_mode_title">زبان رابط کاربری</string>
<string name="pref_invidious_head1">پارامترهای حاکم بر سرتاسر سایت</string>
<string name="pref_invidious_head2">پارامترهای پخش‌کننده</string>
<string name="invidious_annotations_mode_title">حاشیه‌ها</string>
<string name="invidious_annotations_mode_indication">نشان دادن حاشیه‌های قدیمی، که Internet Archive فراهم کرده</string>
<string name="invidious_autoplay_mode_indication">ویدئو را پس از بار شدن به صورت خودکار پخش کن</string>
<string name="invidious_autoplay_mode_title">پخش خودکار</string>
<string name="invidious_continue_mode_title">ادامه دادن</string>
<string name="invidious_continue_mode_indication">وقتی که پخش این ویدئو تمام شد، به صورت خودکار سراغ ویدئوی مرتبط بعدی برو (مشابه ویژگی پخش خودکار یوتیوب)</string>
<string name="invidious_listen_mode_title">شنیدن</string>
<string name="invidious_listen_mode_indication">تنها بخش صوتی ویدئو را پخش کن</string>
<string name="invidious_local_mode_title">محلی</string>
<string name="invidious_local_mode_indication">ویدئو استریم‌ها را از پروکسی رد کن</string>
<string name="invidious_subtitles_mode_title">زیرنویس‌ها</string>
<string name="invidious_subtitles_mode_indication">فهرست کدهای زبانی ISO 6391</string>
<string name="invidious_quality_mode_title">کيفيت</string>
<string name="invidious_quality_mode_indication">کیفیت پیش‌فرض پخش‌کننده</string>
<string name="invidious_loop_mode_title">تکرار</string>
<string name="invidious_volume_mode_title">ولوم</string>
<string name="invidious_volume_mode_indication">ولوم پیش‌فرض پخش‌کننده، هر عدد صحیحی بین ۰ تا ۱۰۰ می‌تواند باشد</string>
<string name="invidious_loop_mode_indication">تکرار پخش‌کننده به صورت پیش‌فرض</string>
<string name="invidious_volume_mode_value">مقدار ولوم</string>
<string name="invidious_volume_mode_value_indication">ولوم را با این مقدار جایگزین کن</string>
<string name="pref_invidious_head3">مدل پخش‌کننده</string>
<string name="invidious_player_style_mode_title">ظاهر</string>
<string name="invidious_player_style_mode_indication">اینویدیوس مدل پیش‌فرض است. مدل یوتیوب یک دکمهٔ پخش در مرکز و یک نوار کنترل دارد که همیشه مرئی است</string>
<string name="help">راهنما</string>
<string name="invidious_help_title">گزینه‌های تنظیمات</string>
<string name="invidious_help_ignore"><b>نادیده گرفتن:</b> این عمل پیش‌فرض برای همهٔ (۱) پارامترها است. یعنی آن‌ترک‌می در مورد آن پارامتر کاری نمی‌کند</string>
<string name="invidious_help_remove"><b>حذف:</b> آن‌ترک‌می آن پارامتر را، اگر وجود داشته باشد، از نشانی حذف می‌کند</string>
<string name="invidious_help_other">اگر شما مقداری برای یک پارامتر تعیین کنید، آن پارامتر به نشانی افزوده می‌شود. اگر آن پارامتر از قبل وجود داشته باشد، مقدارش به آنچه شما انتخاب کرده‌اید، تغییر می‌کند</string>
<string name="invidious_help_explanations">[1] پارامتر «محلی» برای حفظ بهتر حریم خصوصی به صورت پیش‌فرض روی «صحیح» تنظیم شده است</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Dark theme</item>
<item>Light theme</item>
<item>نادیده بگیر</item>
<item>حذف کن</item>
<item>تم تاریک</item>
<item>تم روشن</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Enabled</item>
<item>Disabled</item>
<item>نادیده بگیر</item>
<item>حذف کن</item>
<item>فعال</item>
<item>غیر فعال</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
<item>English</item>
<item>Esperanto</item>
<item>Spanish</item>
<item>Basque</item>
<item>French</item>
<item>Icelandic</item>
<item>Italian</item>
<item>Norwegian Bokmål</item>
<item>Dutch</item>
<item>Polish</item>
<item>Russian</item>
<item>Ukrainian</item>
<item>Chinese</item>
<item>نادیده بگیر</item>
<item>حذف کن</item>
<item>عربی</item>
<item>آلمانی</item>
<item>یونانی</item>
<item>انگلیسی</item>
<item>اسپرانتو</item>
<item>اسپانیایی</item>
<item>باسکی</item>
<item>فرانسوی</item>
<item>ایسلندی</item>
<item>ایتالیایی</item>
<item>نروژی بوکمل</item>
<item>هلندی</item>
<item>لهستانی</item>
<item>روسی</item>
<item>اوکراینی</item>
<item>چینی</item>
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Show annotations</item>
<item>Hide annotations</item>
<item>نادیده گرفتن</item>
<item>حذف کردن</item>
<item>حاشیه‌ها را نشان بده</item>
<item>حاشیه‌ها را پنهان کن</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>نادیده بگیر</item>
<item>حذف کن</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
<item>۷۲۰پ</item>
<item>۴۸۰پ</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Custom</item>
<item>نادیده بگیر</item>
<item>حذف کن</item>
<item>سفارشی</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Invidious</item>
<item>Youtube</item>
<item>نادیده بگیر</item>
<item>حذف کن</item>
<item>اینویدیوس</item>
<item>یوتیوب</item>
</string-array>
</resources>

View File

@ -19,7 +19,7 @@
<string name="Donate">Lahjoita</string>
<string name="warning">Varoitus</string>
<string name="error">Virhe</string>
<string name="valid">Valid</string>
<string name="valid">Kelvollinen</string>
<string name="icon_of_the_app">Sovelluksen kuvake</string>
<string name="open_with">Open with</string>
<string name="redirect_gm_to_osm">Uudelleenohjaa Google Maps OpenStreetMapiin</string>
@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">Uudelleenohjaa YouTube Invidiousiin</string>
<string name="redirect_twitter_to_nitter">Uudelleenohjaa Twitter Nitteriin</string>
<string name="redirect_instagram_to_bibliogram">Uudelleenohjaa Instagram Bibliogrammiin</string>
<string name="redirect_reddit_to_teddit">Uudelleenohjaa Reddit Tedditiin</string>
<string name="redirect_medium_to_scriberip">Redirect Medium to Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirect Wikipedia to Wikiless</string>
<string name="custom_bibliogram">Mukautettu Bibliogram instanssi</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">Mukautettu Teddit instanssi</string>
<string name="redirect_gm_to_geo_uri">Uudelleenohjaa Google Maps Geo URI:ihin</string>
<string name="configure">Konfiguroi</string>
<string name="display_supported_links">Näytä tuetut linkit</string>
@ -39,18 +45,21 @@
<string name="dismiss">Hylkää</string>
<string name="resolving_shortened">Selvitetään lyhennettyä URL-osoitetta, ole hyvä ja odota…</string>
<string name="try_to_redirect">%1$s \n\nuudelleenohjaa sinut kohteeseen:\n\n<b>%2$s</b></string>
<string name="try_to_redirect_again">Then it will redirect you to\n\n<b>%1$s</b></string>
<string name="try_to_redirect_again">Sitten se ohjaa sinut kohteeseen:\n\n<b>%1$s</b></string>
<string name="the_app_failed_shortened">Sovellus ei onnistunut hakemaan koko URL-osoitetta</string>
<string name="invidious_instances">Invidious instanssit</string>
<string name="nitter_instances">Nitter instanssit</string>
<string name="bibliogram_instances">Bibliogram instanssit</string>
<string name="teddit_instances">Teddit instanssit</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">Latenssi</string>
<string name="error_message_internet">Tarkista internetyhteytesi</string>
<string name="instance_label">Instanssi:</string>
<string name="expand_instance_details">Laajenna instanssin tiedot</string>
<string name="cloudflare">Tämä instanssi käyttää Cloudflarea</string>
<string name="instance_info">Information about listed instances</string>
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="instance_info">Tietoa luetteloiduista instansseista</string>
<string name="about_instances">Luettelo instansseista tulee\n\n <a href="%1$s">%2$s</a>\n\nVoit osallistua tähän luetteloon lisäämällä tai poistamalla instansseja.</string>
<string name="about_instances_title">Tietoja instansseista</string>
<string name="use_built_in_player">Käytä sisäänrakennettua toistinta</string>
<string name="share">Jaa</string>
@ -61,61 +70,62 @@
<string name="continue_with">Jatka sovelluksella…</string>
<string name="just_once">Vain kerran</string>
<string name="always">Aina</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
<string name="supported_url_indication_1">2 - You are now in app settings from your device. Tap on \"Set as default\".</string>
<string name="display_indications_1_description">Screenshot showing app settings for the app. You have to Tap on \"Set as default\"</string>
<string name="supported_url_indication_2">2 - Then tap on \"Go to supported URLs\".</string>
<string name="display_indications_2_description">Screenshot showing app settings for the app. You have to Tap on \"Go to supported URLs\"</string>
<string name="supported_url_indication_3">3 - In suggestions make sure to pickup \"Always ask\"</string>
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_app_indication">%1$s on asetettu oletussovellukseksi.\nVoit poistaa tämän toiminnon sovelluksen asetuksista.</string>
<string name="indication_error_title">Sovelluksen konfiguraatiossa on jotain vikaa. Ole hyvä ja seuraa näitä ohjeita korjataksesi ongelman.</string>
<string name="open_configure">1 - Napauta yllä olevaa \"KONFIGUROI\"-painiketta.</string>
<string name="supported_url_indication_1">2 - Olet nyt laitteesi sovellusasetuksissa. Napauta \"Avaa oletuksena\".</string>
<string name="display_indications_1_description">Kuvakaappaus, joka näyttää sovelluksen asetukset. Sinun täytyy napauttaa \"Avaa oletuksena\"</string>
<string name="supported_url_indication_2">2 - Napauta sitten \"Avaa tuetut linkit\".</string>
<string name="display_indications_2_description">Kuvakaappaus, joka näyttää sovelluksen asetukset. Sinun täytyy napauttaa \"Avaa tuetut linkit\"</string>
<string name="supported_url_indication_3">3 - Varmista ehdotuksista, että valitset \"Kysy aina\"</string>
<string name="display_indications_3_description">Kuvakaappaus, joka näyttää sovelluksen asetukset määrittääksesi käyttäytymisen URL-osoitteiden avaamiseksi</string>
<string name="default_apps">Oletussovellukset</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="remove_from_default_app">Poista oletussovelluksista</string>
<string name="delete">Poista</string>
<string name="cancel">Peruuta</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="delete_app_from_default">Poista %1$s oletussovelluksista?</string>
<string name="copy_done">Kopioitu</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="no_apps_set_as_default">Sovelluksia ei ole asetettu oletuksiksi!</string>
<string name="custom_settings_for_invidious">Mukautetut asetukset Invidious:ille</string>
<string name="invidious_settings">Invidioussin asetukset</string>
<string name="invidious_dark_mode_title">Teema</string>
<string name="invidious_dark_mode_indication">Määritä oletusteema asettamatta evästeitä</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
<string name="invidious_thin_mode_title">Ohut tila</string>
<string name="invidious_thin_mode_indication">Lataa HTML-, CSS-, JS- ja videoelementit (poistaa kuvat käytöstä)</string>
<string name="invidious_language_mode_indication">Käytettävissä olevat kielet</string>
<string name="invidious_language_mode_title">Ulkoasun kieli</string>
<string name="pref_invidious_head1">Sivuston laajuiset parametrit</string>
<string name="pref_invidious_head2">Toistimen parametrit</string>
<string name="invidious_annotations_mode_title">Annotations</string>
<string name="invidious_annotations_mode_indication">Show legacy annotations, provided by the Internet Archive</string>
<string name="invidious_autoplay_mode_indication">Automatically play video on load</string>
<string name="invidious_autoplay_mode_title">Autoplay</string>
<string name="invidious_annotations_mode_title">Huomautukset</string>
<string name="invidious_annotations_mode_indication">Näytä vanhat huomautukset, jotka on toimitettu Internet Archivesta</string>
<string name="invidious_autoplay_mode_indication">Toista video automaattisesti ladattaessa</string>
<string name="invidious_autoplay_mode_title">Automaattinen toisto</string>
<string name="invidious_continue_mode_title">Jatka</string>
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_continue_mode_indication">Kun video on valmis, siirry automaattisesti seuraavaan aiheeseen liittyvään videoon (samanlainen kuin YouTuben Automaattinen toisto ominaisuus)</string>
<string name="invidious_listen_mode_title">Kuuntele</string>
<string name="invidious_listen_mode_indication">Toista vain ääni videosta</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
<string name="invidious_quality_mode_title">Quality</string>
<string name="invidious_subtitles_mode_title">Tekstitys</string>
<string name="invidious_subtitles_mode_indication">Luettelo ISO 6391 -standardin kielikoodeista</string>
<string name="invidious_quality_mode_title">Laatu</string>
<string name="invidious_quality_mode_indication">Toistimen oletuslaatu</string>
<string name="invidious_loop_mode_title">Loop</string>
<string name="invidious_volume_mode_title">Volume</string>
<string name="invidious_volume_mode_indication">Default player volume, can be any whole number between 0 and 100</string>
<string name="invidious_loop_mode_indication">Loop player by default</string>
<string name="invidious_volume_mode_value">Volume value</string>
<string name="invidious_volume_mode_value_indication">Override the volume with this value</string>
<string name="invidious_loop_mode_title">Jatkuva toisto</string>
<string name="invidious_volume_mode_title">Äänenvoimakkuus</string>
<string name="invidious_volume_mode_indication">Toistimen oletusäänenvoimakkuus voi olla mikä tahansa kokonaisluku 0 ja 100 väliltä</string>
<string name="invidious_loop_mode_indication">Toista video jatkuvasti uudelleen</string>
<string name="invidious_volume_mode_value">Äänenvoimakkuuden arvo</string>
<string name="invidious_volume_mode_value_indication">Ohita äänenvoimakkuus tällä arvolla</string>
<string name="pref_invidious_head3">Toistimen tyyli</string>
<string name="invidious_player_style_mode_title">Appearance</string>
<string name="invidious_player_style_mode_indication">Invidious, the default one. YouTube, using a centered play button and always visible video control bar</string>
<string name="help">Help</string>
<string name="invidious_help_title">Setting options</string>
<string name="invidious_help_ignore"><b>Ignore:</b> This is the default action for all¹ parameters. This means UntrackMe will not do anything about the parameter</string>
<string name="invidious_help_remove"><b>Remove:</b> UntrackMe will remove the parameter from URL, if it exists</string>
<string name="invidious_help_other">If you select other values for a parameter, they will be added to the URL. If the parameter already exists, its value will be changed to your choice</string>
<string name="invidious_player_style_mode_title">Ulkoasu</string>
<string name="invidious_player_style_mode_indication">Invidious on oletus. YouTuben tyyli käyttää keskitettyä toistopainiketta ja aina näkyvissä olevaa videon ohjauspalkkia</string>
<string name="help">Ohje</string>
<string name="invidious_help_title">Asetukset</string>
<string name="invidious_help_ignore"><b>Ohita:</b> Tämä on oletus toiminto kaikille¹ parametreille. Tämä tarkoittaa, että UntrackMe ei tee mitään parametrille</string>
<string name="invidious_help_remove"><b>Poista:</b> UntrackMe poistaa parametrin URL-osoitteesta, jos se on olemassa</string>
<string name="invidious_help_other">Jos valitset parametrille muita arvoja, ne lisätään URL-osoitteeseen. Jos parametri on jo olemassa, sen arvo muutetaan valintasi mukaan</string>
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>Ohita</item>
<item>Poista</item>
@ -125,50 +135,50 @@
<string-array name="invidious_enable">
<item>Ohita</item>
<item>Poista</item>
<item>Enabled</item>
<item>Disabled</item>
<item>Käytössä</item>
<item>Ei käytössä</item>
</string-array>
<string-array name="invidious_language">
<item>Ohita</item>
<item>Remove</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
<item>English</item>
<item>Esperanto</item>
<item>Spanish</item>
<item>Basque</item>
<item>French</item>
<item>Icelandic</item>
<item>Italian</item>
<item>Norwegian Bokmål</item>
<item>Dutch</item>
<item>Polish</item>
<item>Russian</item>
<item>Ukrainian</item>
<item>Chinese</item>
<item>Poista</item>
<item>arabia</item>
<item>saksa</item>
<item>kreikka</item>
<item>englanti</item>
<item>esperanto</item>
<item>espanja</item>
<item>baski</item>
<item>ranska</item>
<item>islanti</item>
<item>italia</item>
<item>kirjanorja</item>
<item>hollanti</item>
<item>puola</item>
<item>venäjä</item>
<item>ukraina</item>
<item>kiina</item>
</string-array>
<string-array name="invidious_annotations">
<item>Ohita</item>
<item>Remove</item>
<item>Show annotations</item>
<item>Hide annotations</item>
<item>Poista</item>
<item>Näytä huomautukset</item>
<item>Piilota huomautukset</item>
</string-array>
<string-array name="invidious_quality">
<item>Ohita</item>
<item>Remove</item>
<item>Poista</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ohita</item>
<item>Remove</item>
<item>Custom</item>
<item>Poista</item>
<item>Mukautettu</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ohita</item>
<item>Remove</item>
<item>Poista</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">Rediriger YouTube vers Invidious</string>
<string name="redirect_twitter_to_nitter">Rediriger Twitter vers Nitter</string>
<string name="redirect_instagram_to_bibliogram">Rediriger Instagram vers Bibliogram</string>
<string name="redirect_reddit_to_teddit">Rediriger Reddit vers Teddit</string>
<string name="redirect_medium_to_scriberip">Rediriger Medium vers Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Rediriger Wikipedia vers Wikiless</string>
<string name="custom_bibliogram">Instance Bibliogram personnalisée</string>
<string name="custom_scriberip">Instance Scribe.rip personnalisée</string>
<string name="custom_wikiless">Instance Wikiless personnalisée</string>
<string name="custom_teddit">Instance Teddit personnalisée</string>
<string name="redirect_gm_to_geo_uri">Rediriger Google Map vers Geo URI</string>
<string name="configure">Configurer</string>
<string name="display_supported_links">Afficher les liens pris en charge</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Instances Invidious</string>
<string name="nitter_instances">Instances Nitter</string>
<string name="bibliogram_instances">Instances Bibliogram</string>
<string name="teddit_instances">Instances Teddit</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">Latence</string>
<string name="error_message_internet">Vérifiez votre connexion Internet</string>
<string name="instance_label">Instance :</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Supprimer:</b> UntrackMe supprimera le paramètre de l\'URL, s\'il existe</string>
<string name="invidious_help_other">Si vous sélectionnez d\'autres valeurs pour un paramètre, elles seront ajoutées à l\'URL. Si le paramètre existe déjà, sa valeur sera changée selon votre choix</string>
<string name="invidious_help_explanations">[1] Le paramètre \'local\' est défini à \'Actif\' par défaut pour une meilleure confidentialité</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>Ignorer</item>
<item>Retirer</item>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">Redireccionar YouTube a Invidious</string>
<string name="redirect_twitter_to_nitter">Redireccionar Twitter a Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redireccionar Instagram a Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirixir Reddit a Teddit</string>
<string name="redirect_medium_to_scriberip">Redirixir Medium a Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirixir Wikipedia a Wikiless</string>
<string name="custom_bibliogram">Instancia Bibliogram personalizada</string>
<string name="custom_scriberip">Instancia Scribe.rip personalizada</string>
<string name="custom_wikiless">Instancia Wikiless personalizada</string>
<string name="custom_teddit">Instancia Teddit personalizada</string>
<string name="redirect_gm_to_geo_uri">Redireccionar Google Map a Geo URI</string>
<string name="configure">Configurar</string>
<string name="display_supported_links">Mostrar ligazóns soportadas</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Instancias Invidious</string>
<string name="nitter_instances">Instancias Nitter</string>
<string name="bibliogram_instances">Instancias Bibliogram</string>
<string name="teddit_instances">Instancias Teddit</string>
<string name="scribe_instances">Instancias Scribe</string>
<string name="wikiless_instances">Instancias Wikiless</string>
<string name="latency">Latencia</string>
<string name="error_message_internet">Comproba a conexión a internet</string>
<string name="instance_label">Instancia:</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Eliminar:</b> UntrackMe eliminará o parámetro do URL, se existe</string>
<string name="invidious_help_other">Se escolles outros valores para o parámetro, serán engadidos ao URL. Se o parámetro xa existe, o seu valor será cambiado pola túa escolla</string>
<string name="invidious_help_explanations">[1] parámetro \'local\' establécese a \'true\' por omisión para mellor privacidade</string>
<string name="copy_url">Copiar URL ao portapapeis</string>
<string-array name="invidious_theme">
<item>Ignorar</item>
<item>Eliminar</item>

View File

@ -27,7 +27,9 @@
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,6 +46,7 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>

View File

@ -1,33 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Settings</string>
<string name="action_about">About</string>
<string name="developer">Developer</string>
<string name="action_settings">सैटिंग्स</string>
<string name="action_about">के बारे में</string>
<string name="developer">डैवलपर</string>
<string name="donations">Donations</string>
<string name="about_the_app">About the app</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="license">License</string>
<string name="about_vesrion">Release %1$s</string>
<string name="license">लाइसेंस</string>
<string name="about_vesrion">रिलीज़ %1$s</string>
<string name="custom_nitter">Custom Nitter instance</string>
<string name="save">Save</string>
<string name="close">Close</string>
<string name="save">सहेजें</string>
<string name="close">बंद करें</string>
<string name="instances_saved">Custom instances have been saved!</string>
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
<string name="Donate">Donate</string>
<string name="warning">Warning</string>
<string name="warning">चेतावनी</string>
<string name="error">Error</string>
<string name="valid">Valid</string>
<string name="icon_of_the_app">Icon of the app</string>
<string name="open_with">Open with</string>
<string name="open_with">के साथ खोलें</string>
<string name="redirect_gm_to_osm">Redirect Google Map to OpenStreetMap</string>
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,23 +46,24 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
<string name="instance_label">इंस्टंस:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
<string name="instance_info">Information about listed instances</string>
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="about_instances_title">About instances</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="share">शेयर करें</string>
<string name="download">डाउन्लोड</string>
<string name="share_with">के साथ सांझे</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">हमेशा</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,14 +75,14 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">मिटाएं</string>
<string name="cancel">रद्द करें</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_title">रूपरंग</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
@ -95,7 +98,7 @@
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_title">स्थानीय</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>हटाएं</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>हटाएं</item>
<item>Enabled</item>
<item>Disabled</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>हटाएं</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>हटाएं</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>हटाएं</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>हटाएं</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>हटाएं</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -1,33 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Settings</string>
<string name="action_about">About</string>
<string name="developer">Developer</string>
<string name="action_settings">Beállítások</string>
<string name="action_about">Névjegy</string>
<string name="developer">Fejlesztő</string>
<string name="donations">Donations</string>
<string name="about_the_app">About the app</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="license">License</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">Az alkalmazás névjegye</string>
<string name="source_code">Forráskód</string>
<string name="issue_tracker">Hibakövető</string>
<string name="license">Licensz</string>
<string name="about_vesrion">Verzió: %1$s</string>
<string name="custom_nitter">Custom Nitter instance</string>
<string name="save">Save</string>
<string name="close">Close</string>
<string name="save">Mentés</string>
<string name="close">Bezárás</string>
<string name="instances_saved">Custom instances have been saved!</string>
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
<string name="Donate">Donate</string>
<string name="warning">Warning</string>
<string name="warning">Figyelmeztetés</string>
<string name="error">Error</string>
<string name="valid">Valid</string>
<string name="icon_of_the_app">Icon of the app</string>
<string name="open_with">Open with</string>
<string name="open_with">Megnyitás a következővel:</string>
<string name="redirect_gm_to_osm">Redirect Google Map to OpenStreetMap</string>
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,23 +46,24 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
<string name="instance_label">Szerver:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
<string name="instance_info">Information about listed instances</string>
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="about_instances_title">About instances</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="share">Megosztás</string>
<string name="download">Letöltés</string>
<string name="share_with">Megosztás a következővel:</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">Mindig</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,14 +75,14 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">Törlés</string>
<string name="cancel">Mégsem</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_title">Téma</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
@ -95,7 +98,7 @@
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_title">Helyi</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Eltávolítás</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Eltávolítás</item>
<item>Enabled</item>
<item>Disabled</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Eltávolítás</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Eltávolítás</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Eltávolítás</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Eltávolítás</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Eltávolítás</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -27,7 +27,9 @@
<string name="redirect_youtube_to_invidious">Mengarahkan YouTube untuk menyakitkan hati</string>
<string name="redirect_twitter_to_nitter">Mengarahkan Twitter untuk Nitter</string>
<string name="redirect_instagram_to_bibliogram">Mengarahkan Instagram untuk Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram contoh</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Custom Bibliogram contoh</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,6 +46,7 @@
<string name="invidious_instances">Contoh menyakitkan hati</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Periksa koneksi Internet anda</string>
<string name="instance_label">Contoh:</string>
@ -53,14 +56,14 @@
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="about_instances_title">Tentang contoh</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="share">Bagikan</string>
<string name="download">Unduh</string>
<string name="share_with">Bagikan dengan</string>
<string name="check_apps">Periksa aplikasi</string>
<string name="select_instances">Pilih contoh</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">Selalu</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,8 +75,8 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">Hapus</string>
<string name="cancel">Batal</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Menghapus</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Menghapus</item>
<item>Enabled</item>
<item>Disabled</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Menghapus</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Menghapus</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Menghapus</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Menghapus</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Menghapus</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">Reindirizza YouTube a Invidious</string>
<string name="redirect_twitter_to_nitter">Reindirizza Twitter a Nitter</string>
<string name="redirect_instagram_to_bibliogram">Reindirizza Instagram a Bibliogram</string>
<string name="redirect_reddit_to_teddit">Reindirizza Reddit a Teddit</string>
<string name="redirect_medium_to_scriberip">Reindirizza Medium a Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Reindirizza Wikipedia a Wikiless</string>
<string name="custom_bibliogram">Istanza Bibliogram personalizzata</string>
<string name="custom_scriberip">Istanza Scribe.rip personalizzata</string>
<string name="custom_wikiless">Istanza Wikiless personalizzata</string>
<string name="custom_teddit">Altra istanza Nitter</string>
<string name="redirect_gm_to_geo_uri">Reindirizza Google Maps a Geo URI</string>
<string name="configure">Configura</string>
<string name="display_supported_links">Mostra link supportati</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Istanze Invidious</string>
<string name="nitter_instances">Istanze Nitter</string>
<string name="bibliogram_instances">Istanze Bibliogram</string>
<string name="teddit_instances">Istanze di Teddit</string>
<string name="scribe_instances">Istanze Scribe</string>
<string name="wikiless_instances">Istanze Wikiless</string>
<string name="latency">Latenza</string>
<string name="error_message_internet">Controlla la tua connessione Internet</string>
<string name="instance_label">Istanza:</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Rimuovi:</b> UntrackMe rimuoverà il parametro dall\'URL, se esiste</string>
<string name="invidious_help_other">Se selezioni altri valori per un parametro, saranno aggiunti all\'URL. Se il parametro esiste già, il suo valore sarà cambiato con la tua scelta</string>
<string name="invidious_help_explanations">[1] Il parametro \'local\' è impostato su \'true\' per impostazione predefinita per una migliore privacy</string>
<string name="copy_url">Copia URL negli Appunti</string>
<string-array name="invidious_theme">
<item>Ignora</item>
<item>Rimuovi</item>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">YouTubeをInvidiousにリダイレクトする</string>
<string name="redirect_twitter_to_nitter">TwitterをNitterにリダイレクトする</string>
<string name="redirect_instagram_to_bibliogram">InstagramをBibliogramにリダイレクトする</string>
<string name="redirect_reddit_to_teddit">RedditをTedditにリダイレクトする</string>
<string name="redirect_medium_to_scriberip">MediumをScribe.ripにリダイレクトする</string>
<string name="redirect_wikipedia_to_wikiless">WikipediaをWikilessにリダイレクトする</string>
<string name="custom_bibliogram">カスタムBibliogramインスタンス</string>
<string name="custom_scriberip">カスタムScribe.ripインスタンス</string>
<string name="custom_wikiless">カスタムWikilessインスタンス</string>
<string name="custom_teddit">カスタムTedditインスタンス</string>
<string name="redirect_gm_to_geo_uri">Google マップをGeo URIにリダイレクトする</string>
<string name="configure">設定</string>
<string name="display_supported_links">サポートされているリンクを表示する</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Invidiousインスタンス</string>
<string name="nitter_instances">Nitterインスタンス</string>
<string name="bibliogram_instances">Bibliogramインスタンス</string>
<string name="teddit_instances">Tedditインスタンス</string>
<string name="scribe_instances">Scribe インスタンス</string>
<string name="wikiless_instances">Wikiless インスタンス</string>
<string name="latency">レイテンシ</string>
<string name="error_message_internet">インターネット接続を確認してください</string>
<string name="instance_label">インスタンス:</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>削除:</b> UntrackMeはURLからパラメータを削除します。</string>
<string name="invidious_help_other">パラメータに他の値を選択すると、それらはURLに追加されます。 パラメータがすでに存在する場合、その値は選択したものに変更されます。</string>
<string name="invidious_help_explanations">[1] プライバシー保護のため、デフォルトでは \'local\' パラメータは \'true\' に設定されています</string>
<string name="copy_url">URLをクリップボードにコピー</string>
<string-array name="invidious_theme">
<item>無視</item>
<item>削除</item>

View File

@ -27,7 +27,9 @@
<string name="redirect_youtube_to_invidious">ಯೂಟ್ಯೂಬನ್ನು ಇನ್ವಿಡಿಯೋಸ್ ಗೆ ರವಾನಿಸು</string>
<string name="redirect_twitter_to_nitter">ಟ್ವಿಟ್ಟರ್ ಅನ್ನು ನಿಟ್ಟರ್ ಗೆ ರವಾನಿಸು</string>
<string name="redirect_instagram_to_bibliogram">ಇನ್ಸ್ಟಾಗ್ರಾಂ ಅನ್ನು ಬಿಬ್ಲಿಯೊಗ್ರಾಂ ಗೆ ರವಾನಿಸು</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">ಬೇರೆ ಬಿಬ್ಲಿಯೋಗ್ರಾಂ ನಿದರ್ಶನ</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">ಗೂಗಲ್ ನಕ್ಷೆಯನ್ನು ಭೂ ಸಂಪನ್ಮೂಲ ಗುರುತಿಗೆ (Geo URI) ರವಾನಿಸು</string>
<string name="configure">ಜೋಡಿಸು</string>
<string name="display_supported_links">ಬೆಂಬಲಿತ ಲಿಂಕ್‌ಗಳ ಪ್ರದರ್ಶನ</string>
@ -44,6 +46,7 @@
<string name="invidious_instances">ಇನ್ವಿಡಿಯೋಸ್ ನಿದರ್ಶನಗಳು</string>
<string name="nitter_instances">ನಿಟ್ಟರ್ ನಿದರ್ಶನಗಳು</string>
<string name="bibliogram_instances">ಬಿಬ್ಲಿಯೊಗ್ರಾಂ ನಿದರ್ಶನಗಳು</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">ವಿಳಂಬ</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>

View File

@ -1,33 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Settings</string>
<string name="action_about">About</string>
<string name="developer">Developer</string>
<string name="action_settings">설정</string>
<string name="action_about">정보</string>
<string name="developer">개발자</string>
<string name="donations">Donations</string>
<string name="about_the_app">About the app</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="license">License</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_vesrion">릴리즈 %1$s</string>
<string name="custom_nitter">Custom Nitter instance</string>
<string name="save">Save</string>
<string name="close">Close</string>
<string name="save">저장</string>
<string name="close">닫기</string>
<string name="instances_saved">Custom instances have been saved!</string>
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
<string name="Donate">Donate</string>
<string name="warning">Warning</string>
<string name="warning">경고</string>
<string name="error">Error</string>
<string name="valid">Valid</string>
<string name="icon_of_the_app">Icon of the app</string>
<string name="open_with">Open with</string>
<string name="open_with">다음으로 열기</string>
<string name="redirect_gm_to_osm">Redirect Google Map to OpenStreetMap</string>
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,23 +46,24 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
<string name="instance_label">인스턴스:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
<string name="instance_info">Information about listed instances</string>
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="about_instances_title">About instances</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="share">공유</string>
<string name="download">다운로드</string>
<string name="share_with">공유</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">항상</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,14 +75,14 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">삭제</string>
<string name="cancel">취소</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_title">테마</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>삭제</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>삭제</item>
<item>Enabled</item>
<item>Disabled</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>삭제</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>삭제</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>삭제</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>삭제</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>삭제</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -0,0 +1,185 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Sazkarî</string>
<string name="action_about">Derbar</string>
<string name="developer">Pêşdebir</string>
<string name="donations">Bexşandin</string>
<string name="about_the_app">Derbarê sepanê de</string>
<string name="source_code">Çavkaniya Kodê</string>
<string name="issue_tracker">Şopênerê pirsgirêkê</string>
<string name="license">Lîsans</string>
<string name="about_vesrion">Goherto %1$s</string>
<string name="custom_nitter">Mînaka Nitter a kesanekirî</string>
<string name="save">Tomar bike</string>
<string name="close">Bigire</string>
<string name="instances_saved">Mînaka kesanekirî hate tomarkirin!</string>
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
<string name="Donate">Bexş bike</string>
<string name="warning">Hişyarî</string>
<string name="error">Çewtî</string>
<string name="valid">Derbasdar</string>
<string name="icon_of_the_app">Îkona sepanê</string>
<string name="open_with">Veke bi</string>
<string name="redirect_gm_to_osm">Redirect Google Map to OpenStreetMap</string>
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="redirect_medium_to_scriberip">Redirect Medium to Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirect Wikipedia to Wikiless</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
<string name="use_geo_uri">Use geo URI</string>
<string name="how_to">Çawa</string>
<string name="shortened_detected">Shortened URL</string>
<string name="shortener_services">Shortener services</string>
<string name="open">Veke</string>
<string name="dismiss">Dismiss</string>
<string name="resolving_shortened">Resolving shortened URL, please wait…</string>
<string name="try_to_redirect">%1$s \n\nwill redirect you to\n\n<b>%2$s</b></string>
<string name="try_to_redirect_again">Then it will redirect you to\n\n<b>%1$s</b></string>
<string name="the_app_failed_shortened">The app didn\'t manage to retrieve the full URL</string>
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
<string name="instance_info">Information about listed instances</string>
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="about_instances_title">About instances</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Parve bike</string>
<string name="download">Daxe</string>
<string name="share_with">Parve bike</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Bidomîne bi…</string>
<string name="just_once">Tenê carekê</string>
<string name="always">Her dem</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
<string name="supported_url_indication_1">2 - You are now in app settings from your device. Tap on \"Set as default\".</string>
<string name="display_indications_1_description">Screenshot showing app settings for the app. You have to Tap on \"Set as default\"</string>
<string name="supported_url_indication_2">2 - Paşê li ser \"Biçe URL ên piştgirî\" bitikîne.</string>
<string name="display_indications_2_description">Screenshot showing app settings for the app. You have to Tap on \"Go to supported URLs\"</string>
<string name="supported_url_indication_3">3 - In suggestions make sure to pickup \"Always ask\"</string>
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Sepanên berdest</string>
<string name="remove_from_default_app">Ji sepanên berdest rake</string>
<string name="delete">Jê bibe</string>
<string name="cancel">Dev jê berde</string>
<string name="delete_app_from_default">%1$s ji sepanên berdest jê bibe?</string>
<string name="copy_done">Hate jêgirtin</string>
<string name="no_apps_set_as_default">Tu sepan nehatine sazkirin wekî berdest!</string>
<string name="custom_settings_for_invidious">Sazkariyên kesanekirî bo Invidious</string>
<string name="invidious_settings">Sazkariyên Invidious</string>
<string name="invidious_dark_mode_title">Rûkar</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Moda tenik</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
<string name="invidious_language_mode_indication">Available locales</string>
<string name="invidious_language_mode_title">Zimanê navrûyê bikarhêner</string>
<string name="pref_invidious_head1">Site-wide parameters</string>
<string name="pref_invidious_head2">Player parameters</string>
<string name="invidious_annotations_mode_title">Annotations</string>
<string name="invidious_annotations_mode_indication">Show legacy annotations, provided by the Internet Archive</string>
<string name="invidious_autoplay_mode_indication">Automatically play video on load</string>
<string name="invidious_autoplay_mode_title">Autoplay</string>
<string name="invidious_continue_mode_title">Bidomîne</string>
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Guhdar bike</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Herêmî</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Jêrnivîs</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
<string name="invidious_quality_mode_title">Quality</string>
<string name="invidious_quality_mode_indication">Kalîteya lêdera berdest</string>
<string name="invidious_loop_mode_title">Gilover</string>
<string name="invidious_volume_mode_title">Deng</string>
<string name="invidious_volume_mode_indication">Default player volume, can be any whole number between 0 and 100</string>
<string name="invidious_loop_mode_indication">Loop player by default</string>
<string name="invidious_volume_mode_value">Nirxa dengê</string>
<string name="invidious_volume_mode_value_indication">Override the volume with this value</string>
<string name="pref_invidious_head3">Player Style</string>
<string name="invidious_player_style_mode_title">Xuyang</string>
<string name="invidious_player_style_mode_indication">Invidious, the default one. YouTube, using a centered play button and always visible video control bar</string>
<string name="help">Alîkarî</string>
<string name="invidious_help_title">Vebijêrkên sazkariyê</string>
<string name="invidious_help_ignore"><b>Ignore:</b> This is the default action for all¹ parameters. This means UntrackMe will not do anything about the parameter</string>
<string name="invidious_help_remove"><b>Remove:</b> UntrackMe will remove the parameter from URL, if it exists</string>
<string name="invidious_help_other">If you select other values for a parameter, they will be added to the URL. If the parameter already exists, its value will be changed to your choice</string>
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>Paşguh bike</item>
<item>Rake</item>
<item>Rûkara tarî</item>
<item>Rûkara ronî</item>
</string-array>
<string-array name="invidious_enable">
<item>Paşguh bike</item>
<item>Rake</item>
<item>Çalak e</item>
<item>Neçalak e</item>
</string-array>
<string-array name="invidious_language">
<item>Paşguh bike</item>
<item>Rake</item>
<item>Erebî</item>
<item>Elmanî</item>
<item>Yunanî</item>
<item>Îngilîzî</item>
<item>Espêranto</item>
<item>Spanî</item>
<item>Baskî</item>
<item>Fransî</item>
<item>Îzlandî</item>
<item>Italî</item>
<item>Norwecî Bokmål</item>
<item>Holandî</item>
<item>Polandî</item>
<item>Rûsî</item>
<item>Ukraynî</item>
<item>Çînî</item>
</string-array>
<string-array name="invidious_annotations">
<item>Paşguh bike</item>
<item>Rake</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Paşguh bike</item>
<item>Rake</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Paşguh bike</item>
<item>Rake</item>
<item>Kesanekirî</item>
</string-array>
<string-array name="invidious_player_style">
<item>Paşguh bike</item>
<item>Rake</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>
</resources>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">YouTube omleiden naar Invidious</string>
<string name="redirect_twitter_to_nitter">Twitter omleiden naar Nitter</string>
<string name="redirect_instagram_to_bibliogram">Instagram omleiden naar Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="redirect_medium_to_scriberip">Redirect Medium to Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirect Wikipedia to Wikiless</string>
<string name="custom_bibliogram">Aangepaste Bibliogram-exemplaar</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Google Map omleiden naar Geo URI</string>
<string name="configure">Configureren</string>
<string name="display_supported_links">Toon ondersteunde links</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Ongewenste gevallen</string>
<string name="nitter_instances">Nitter instanties</string>
<string name="bibliogram_instances">Bibliografische voorbeelden</string>
<string name="teddit_instances">Teddit instances</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">Latentie</string>
<string name="error_message_internet">Controleer uw internetverbinding</string>
<string name="instance_label">Instantie:</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Verwijderen:</b> UntrackMe verwijdert de parameter van de URL, als deze bestaat</string>
<string name="invidious_help_other">Als u andere waarden voor een parameter selecteert, worden deze toegevoegd aan de URL. Als de parameter al bestaat, zal de waarde worden aangepast worden aan uw keuze</string>
<string name="invidious_help_explanations">[1] \'lokale\' parameter is standaard op \'waar\' ingesteld voor betere privacy</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>Negeren</item>
<item>Verwijderen</item>

View File

@ -27,7 +27,9 @@
<string name="redirect_youtube_to_invidious">Omdiriger YouTube til Invidious</string>
<string name="redirect_twitter_to_nitter">Omdirigere Twitter til Nitter</string>
<string name="redirect_instagram_to_bibliogram">Omdiriger Instagram til Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Tilpasset bibliogram-forekomst</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Omdirigere Google Map til Geo URI</string>
<string name="configure">Konfigurer</string>
<string name="display_supported_links">Vis støttede linker</string>
@ -44,6 +46,7 @@
<string name="invidious_instances">Invidiøse forekomster</string>
<string name="nitter_instances">Ritter instanser</string>
<string name="bibliogram_instances">Instanser i Bibliogram</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latens</string>
<string name="error_message_internet">Sjekk Internett-tilkoblingen din</string>
<string name="instance_label">Instans:</string>
@ -53,14 +56,14 @@
<string name="about_instances">Listen over eksempler kommer fra\n\n <a href="%1$s">%2$s</a>\n\nDu kan bidra til denne listen ved å legge til eller fjerne instanser.</string>
<string name="about_instances_title">Om instanser</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="share">Del</string>
<string name="download">Last ned</string>
<string name="share_with">Del med</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">Alltid</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,14 +75,14 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">Slett</string>
<string name="cancel">Avbryt</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_title">Tema</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
@ -95,7 +98,7 @@
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_title">Lokale</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>Enabled</item>
<item>Disabled</item>
<item>Deaktivert</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Fjern</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -1,18 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Settings</string>
<string name="action_about">About</string>
<string name="developer">Developer</string>
<string name="action_settings">Paramètres</string>
<string name="action_about">A prepaus</string>
<string name="developer">Desvolopaire</string>
<string name="donations">Donations</string>
<string name="about_the_app">About the app</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="license">License</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">A prepaus de la mapa</string>
<string name="source_code">Còdi font</string>
<string name="issue_tracker">Seguiment de bug</string>
<string name="license">Licéncia</string>
<string name="about_vesrion">Version %1$s</string>
<string name="custom_nitter">Custom Nitter instance</string>
<string name="save">Save</string>
<string name="close">Close</string>
<string name="close">Tancar</string>
<string name="instances_saved">Custom instances have been saved!</string>
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
@ -27,7 +27,9 @@
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,6 +46,7 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
@ -73,7 +76,7 @@
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="cancel">Anullar</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">Przekieruj YouTube do Invidious</string>
<string name="redirect_twitter_to_nitter">Przekieruj Twitter do Nitter</string>
<string name="redirect_instagram_to_bibliogram">Przekieruj Instagram do Bibliogram</string>
<string name="redirect_reddit_to_teddit">Przekieruj Reddit do Teddit</string>
<string name="redirect_medium_to_scriberip">Przekieruj Medium do Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Przekieruj Wikipedię do Wikiless</string>
<string name="custom_bibliogram">Własna instancja Bibliogram</string>
<string name="custom_scriberip">Własna instancja Scribe.rip</string>
<string name="custom_wikiless">Własna instancja Wikiless</string>
<string name="custom_teddit">Własna instancja Teddit</string>
<string name="redirect_gm_to_geo_uri">Przekieruj Mapy Google do Geo URI</string>
<string name="configure">Skonfiguruj</string>
<string name="display_supported_links">Wyświetl obsługiwane linki</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Instancje Invidious</string>
<string name="nitter_instances">Instancje Nitter</string>
<string name="bibliogram_instances">Instancje Bibliogram</string>
<string name="teddit_instances">Instancje Teddit</string>
<string name="scribe_instances">Instancje Scribe</string>
<string name="wikiless_instances">Instancje Wikiless</string>
<string name="latency">Opóźnienie</string>
<string name="error_message_internet">Sprawdź połączenie z internetem</string>
<string name="instance_label">Instancja:</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Usuń:</b> UntrackMe usunie parametr z adresu URL, jeśli istnieje</string>
<string name="invidious_help_other">Jeśli wybierzesz inne wartości dla parametru, zostaną one dodane do adresu URL. Jeśli parametr już istnieje, jego wartość zostanie zmieniona na Twój wybór</string>
<string name="invidious_help_explanations">[1] Parametr \'local\' jest domyślnie ustawiony na \'true\' dla lepszej ochrony prywatności</string>
<string name="copy_url">Kopiuj Adres URL Do Schowka</string>
<string-array name="invidious_theme">
<item>Ignoruj</item>
<item>Usuń</item>

View File

@ -15,10 +15,10 @@
<string name="close">Fechar</string>
<string name="instances_saved">Instâncias personalizadas foram salvas!</string>
<string name="custom_invidious">Instância Invidious personalizada</string>
<string name="no_apps">Nenhum aplicativo default</string>
<string name="no_apps">Nenhum aplicativo por padrão</string>
<string name="Donate">Doar</string>
<string name="warning">Warning</string>
<string name="error">Error</string>
<string name="warning">Aviso</string>
<string name="error">Erro</string>
<string name="valid">Válido</string>
<string name="icon_of_the_app">Ícone do app</string>
<string name="open_with">Abrir com</string>
@ -27,23 +27,32 @@
<string name="redirect_youtube_to_invidious">Redirecionar YouTube para Invidious</string>
<string name="redirect_twitter_to_nitter">Redirecionar Twitter para Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirecionar o Instagram para a Bibliogram</string>
<string name="custom_bibliogram">Instância Bibliogram personalizada</string>
<string name="redirect_gm_to_geo_uri">Redirecionar Google Map para Geo URI</string>
<string name="redirect_reddit_to_teddit">Redirecionar Reddit para Teddit</string>
<string name="redirect_medium_to_scriberip">Redirect Medium to Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirect Wikipedia to Wikiless</string>
<string name="custom_bibliogram">Instância personalizada do Bibliogram</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">Instância personalizada do Teddit</string>
<string name="redirect_gm_to_geo_uri">Redirecionar Google Maps para Geo URI</string>
<string name="configure">Configurar</string>
<string name="display_supported_links">Exibir links aceitos</string>
<string name="use_geo_uri">Use geo URI</string>
<string name="how_to">Como</string>
<string name="how_to">Instruções</string>
<string name="shortened_detected">URL encurtada</string>
<string name="shortener_services">Shortener services</string>
<string name="open">Abertas</string>
<string name="shortener_services">Serviços de encurtamento</string>
<string name="open">Abrir</string>
<string name="dismiss">Descartar</string>
<string name="resolving_shortened">Resolvendo URL encurtada, por favor aguarde…</string>
<string name="try_to_redirect">%1$s \n\nwill redirect you to\n\n<b>%2$s</b></string>
<string name="try_to_redirect">%1$s \n\nirá te redirecionar para\n\n<b>%2$s</b></string>
<string name="try_to_redirect_again">Então ele vai te redirecionar para\n\n<b>%1$s</b></string>
<string name="the_app_failed_shortened">O app não conseguiu recuperar o URL completo</string>
<string name="invidious_instances">Instâncias Invidious</string>
<string name="nitter_instances">Instâncias Nitter</string>
<string name="the_app_failed_shortened">O app não conseguiu obter o URL completo</string>
<string name="invidious_instances">Instâncias do Invidious</string>
<string name="nitter_instances">Instâncias do Nitter</string>
<string name="bibliogram_instances">Instâncias Bibliogram</string>
<string name="teddit_instances">Instâncias do Teddit</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">Latência</string>
<string name="error_message_internet">Verifique sua conexão com a Internet</string>
<string name="instance_label">Instância:</string>
@ -52,123 +61,124 @@
<string name="instance_info">Informações sobre instâncias listadas</string>
<string name="about_instances">A lista de instâncias vem de\n\n <a href="%1$s">%2$s</a>\n\nVocê pode contribuir para esta lista adicionando ou removendo instâncias.</string>
<string name="about_instances_title">Sobre instâncias</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
<string name="supported_url_indication_1">2 - You are now in app settings from your device. Tap on \"Set as default\".</string>
<string name="display_indications_1_description">Screenshot showing app settings for the app. You have to Tap on \"Set as default\"</string>
<string name="supported_url_indication_2">2 - Then tap on \"Go to supported URLs\".</string>
<string name="display_indications_2_description">Screenshot showing app settings for the app. You have to Tap on \"Go to supported URLs\"</string>
<string name="supported_url_indication_3">3 - In suggestions make sure to pickup \"Always ask\"</string>
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
<string name="invidious_language_mode_indication">Available locales</string>
<string name="invidious_language_mode_title">UI Language</string>
<string name="pref_invidious_head1">Site-wide parameters</string>
<string name="pref_invidious_head2">Player parameters</string>
<string name="invidious_annotations_mode_title">Annotations</string>
<string name="invidious_annotations_mode_indication">Show legacy annotations, provided by the Internet Archive</string>
<string name="invidious_autoplay_mode_indication">Automatically play video on load</string>
<string name="invidious_autoplay_mode_title">Autoplay</string>
<string name="invidious_continue_mode_title">Continue</string>
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="use_built_in_player">Usar o reprodutor interno</string>
<string name="share">Compartilhar</string>
<string name="download">Baixar</string>
<string name="share_with">Compartilhar com</string>
<string name="check_apps">Verificar apps</string>
<string name="select_instances">Escolher instâncias</string>
<string name="continue_with">Continuar com</string>
<string name="just_once">Só uma vez</string>
<string name="always">Sempre</string>
<string name="default_app_indication">%1$s foi definido como aplicativo padrão.\nVocê pode alterar isso nas configurações do app.</string>
<string name="indication_error_title">Há algo errado com a configuração do aplicativo. Por favor, siga estas indicações para corrigir esse problema.</string>
<string name="open_configure">1 - Toque no botão \"CONFIGURAR\" acima.</string>
<string name="supported_url_indication_1">2 - Agora você está nas configurações do app do seu dispositivo. Toque em \"Definir como padrão\".</string>
<string name="display_indications_1_description">Captura de tela mostrando as informações do aplicativo. Você precisa tocar em \"Definir como padrão\"</string>
<string name="supported_url_indication_2">2 - Em seguida, toque em \"Abrir links compatíveis\".</string>
<string name="display_indications_2_description">Captura de tela mostrando as informações do app. Você precisa tocar em \"Abrir links compatíveis\"</string>
<string name="supported_url_indication_3">3 - Nas opções, escolha \"Perguntar sempre\"</string>
<string name="display_indications_3_description">Captura de tela mostrando configurações de aplicativo para definir como abrir links</string>
<string name="default_apps">Apps padrão</string>
<string name="remove_from_default_app">Remover dos aplicativos padrão</string>
<string name="delete">Remover</string>
<string name="cancel">Cancelar</string>
<string name="delete_app_from_default">Remover %1$s dos aplicativos padrão?</string>
<string name="copy_done">Copiado</string>
<string name="no_apps_set_as_default">Nenhum app definido como padrão!</string>
<string name="custom_settings_for_invidious">Opções personalizadas para Invidious</string>
<string name="invidious_settings">Opções do Invidious</string>
<string name="invidious_dark_mode_title">Tema</string>
<string name="invidious_dark_mode_indication">Configurar o tema padrão sem utilizar cookies</string>
<string name="invidious_thin_mode_title">Modo leve</string>
<string name="invidious_thin_mode_indication">Carregar elementos HTML, CSS, JS e vídeo (desativa imagens)</string>
<string name="invidious_language_mode_indication">Idiomas disponíveis</string>
<string name="invidious_language_mode_title">Idioma da interface</string>
<string name="pref_invidious_head1">Parâmetros em todo site</string>
<string name="pref_invidious_head2">Parâmetros do reprodutor</string>
<string name="invidious_annotations_mode_title">Anotações</string>
<string name="invidious_annotations_mode_indication">Mostrar anotações antigas, fornecidas pelo Internet Archive</string>
<string name="invidious_autoplay_mode_indication">Reproduzir vídeo automaticamente ao carregar</string>
<string name="invidious_autoplay_mode_title">Reprodução automática</string>
<string name="invidious_continue_mode_title">Continuar</string>
<string name="invidious_continue_mode_indication">Após um vídeo acabar, abrir automaticamente o próximo vídeo relacionado (semelhante à reprodução automática do YouTube)</string>
<string name="invidious_listen_mode_title">Ouvir</string>
<string name="invidious_listen_mode_indication">Reproduzir apenas o áudio do vídeo</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
<string name="invidious_quality_mode_title">Quality</string>
<string name="invidious_quality_mode_indication">Default player quality</string>
<string name="invidious_loop_mode_title">Loop</string>
<string name="invidious_subtitles_mode_title">Legendas</string>
<string name="invidious_subtitles_mode_indication">Lista de códigos de idioma ISO 639-1</string>
<string name="invidious_quality_mode_title">Qualidade</string>
<string name="invidious_quality_mode_indication">Qualidade de vídeo padrão</string>
<string name="invidious_loop_mode_title">Repetir</string>
<string name="invidious_volume_mode_title">Volume</string>
<string name="invidious_volume_mode_indication">Default player volume, can be any whole number between 0 and 100</string>
<string name="invidious_loop_mode_indication">Loop player by default</string>
<string name="invidious_volume_mode_value">Volume value</string>
<string name="invidious_volume_mode_value_indication">Override the volume with this value</string>
<string name="pref_invidious_head3">Player Style</string>
<string name="invidious_player_style_mode_title">Appearance</string>
<string name="invidious_player_style_mode_indication">Invidious, the default one. YouTube, using a centered play button and always visible video control bar</string>
<string name="help">Help</string>
<string name="invidious_help_title">Setting options</string>
<string name="invidious_help_ignore"><b>Ignore:</b> This is the default action for all¹ parameters. This means UntrackMe will not do anything about the parameter</string>
<string name="invidious_help_remove"><b>Remove:</b> UntrackMe will remove the parameter from URL, if it exists</string>
<string name="invidious_help_other">If you select other values for a parameter, they will be added to the URL. If the parameter already exists, its value will be changed to your choice</string>
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string name="invidious_volume_mode_indication">Volume padrão do reprodutor, entre 0 e 100</string>
<string name="invidious_loop_mode_indication">Repetir por padrão</string>
<string name="invidious_volume_mode_value">Valor do volume</string>
<string name="invidious_volume_mode_value_indication">Substituir o volume com este valor</string>
<string name="pref_invidious_head3">Estilo do Reprodutor</string>
<string name="invidious_player_style_mode_title">Aparência</string>
<string name="invidious_player_style_mode_indication">Invidious, o padrão. YouTube, usando um botão play centralizado e controles de reprodução sempre visíveis</string>
<string name="help">Ajuda</string>
<string name="invidious_help_title">Definindo opções</string>
<string name="invidious_help_ignore"><b>Ignorar:</b> Esta é a ação padrão para todos os parâmetros. Isso significa que UntrackMe não fará nada sobre o parâmetro</string>
<string name="invidious_help_remove"><b>Remover:</b> O UntrackMe irá remover o parâmetro da URL, se ele existir</string>
<string name="invidious_help_other">Se você selecionar outros valores para um parâmetro, eles serão adicionados à URL. Se o parâmetro já existir, seu valor será alterado para sua escolha</string>
<string name="invidious_help_explanations">[1] O parâmetro \'local\' está definido como \'true\' por padrão para melhor privacidade</string>
<string name="copy_url">Copiar URL para a Área de Transferência</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Dark theme</item>
<item>Light theme</item>
<item>Ignorar</item>
<item>Excluir</item>
<item>Tema escuro</item>
<item>Tema claro</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Enabled</item>
<item>Disabled</item>
<item>Ignorar</item>
<item>Excluir</item>
<item>Habilitado</item>
<item>Desativado</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
<item>English</item>
<item>Ignorar</item>
<item>Excluir</item>
<item>Árabe</item>
<item>Alemão</item>
<item>Grego</item>
<item>Inglês</item>
<item>Esperanto</item>
<item>Spanish</item>
<item>Basque</item>
<item>French</item>
<item>Icelandic</item>
<item>Italian</item>
<item>Norwegian Bokmål</item>
<item>Dutch</item>
<item>Polish</item>
<item>Russian</item>
<item>Ukrainian</item>
<item>Chinese</item>
<item>Espanhol</item>
<item>Basco</item>
<item>Francês</item>
<item>Islandês</item>
<item>Italiano</item>
<item>Norueguês Bokmahl</item>
<item>Holandês</item>
<item>Polonês</item>
<item>Russo</item>
<item>Ucraniano</item>
<item>Chinês</item>
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Show annotations</item>
<item>Hide annotations</item>
<item>Ignorar</item>
<item>Excluir</item>
<item>Mostrar anotações</item>
<item>Ocultar anotações</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Ignorar</item>
<item>Excluir</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Custom</item>
<item>Ignorar</item>
<item>Excluir</item>
<item>Personalizado</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Ignorar</item>
<item>Excluir</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">Redirecionar YouTube para Invidious</string>
<string name="redirect_twitter_to_nitter">Redirecionar Twitter para Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirecionar o Instagram para a Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="redirect_medium_to_scriberip">Redirect Medium to Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirect Wikipedia to Wikiless</string>
<string name="custom_bibliogram">Instância Bibliograma personalizada</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirecionar Google Map para o Geo-URI</string>
<string name="configure">Configurar</string>
<string name="display_supported_links">Mostrar links suportados</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Instâncias Invidious</string>
<string name="nitter_instances">Instâncias de Nitter</string>
<string name="bibliogram_instances">Instâncias Bibliogram</string>
<string name="teddit_instances">Teddit instances</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">Latência</string>
<string name="error_message_internet">Verifique a sua ligação à internet</string>
<string name="instance_label">Instância:</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Remover:</b> O UntrackMe irá remover o parâmetro da URL, se ele existir</string>
<string name="invidious_help_other">Se você selecionar outros valores para um parâmetro, eles serão adicionados à URL. Se o parâmetro já existir, seu valor será alterado à sua escolha</string>
<string name="invidious_help_explanations">[1] O parâmetro \'local\' está definido como \'true\' por padrão para melhor privacidade</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>Ignorar</item>
<item>Remover</item>

View File

@ -1,33 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Settings</string>
<string name="action_about">About</string>
<string name="developer">Developer</string>
<string name="action_settings">Setări</string>
<string name="action_about">Despre</string>
<string name="developer">Programator</string>
<string name="donations">Donations</string>
<string name="about_the_app">About the app</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="license">License</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_vesrion">Lansare %1$s</string>
<string name="custom_nitter">Custom Nitter instance</string>
<string name="save">Save</string>
<string name="close">Close</string>
<string name="save">Salvează</string>
<string name="close">Închide</string>
<string name="instances_saved">Custom instances have been saved!</string>
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
<string name="Donate">Donate</string>
<string name="warning">Warning</string>
<string name="warning">Atenționare</string>
<string name="error">Error</string>
<string name="valid">Valid</string>
<string name="icon_of_the_app">Icon of the app</string>
<string name="open_with">Open with</string>
<string name="open_with">Deschide cu</string>
<string name="redirect_gm_to_osm">Redirect Google Map to OpenStreetMap</string>
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,23 +46,24 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
<string name="instance_label">Instanță:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
<string name="instance_info">Information about listed instances</string>
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="about_instances_title">About instances</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="share">Distribuie</string>
<string name="download">Descărcați</string>
<string name="share_with">Distribuie cu</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">Întotdeauna</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,8 +75,8 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">Șterge</string>
<string name="cancel">Anulare</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Elimină</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Elimină</item>
<item>Enabled</item>
<item>Disabled</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Elimină</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Elimină</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Elimină</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Elimină</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Elimină</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">Перенаправлять YouTube на Invidious</string>
<string name="redirect_twitter_to_nitter">Перенаправлять Twitter на Nitter</string>
<string name="redirect_instagram_to_bibliogram">Перенаправлять Instagram на Bibliogram</string>
<string name="redirect_reddit_to_teddit">Перенаправить Reddit на Teddit</string>
<string name="redirect_medium_to_scriberip">Redirect Medium to Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirect Wikipedia to Wikiless</string>
<string name="custom_bibliogram">Пользовательский сервер Bibliogram</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">Пользовательский сервер Teddit</string>
<string name="redirect_gm_to_geo_uri">Перенаправлять Google Карты на Geo URI</string>
<string name="configure">Настроить</string>
<string name="display_supported_links">Показать поддерживаемые ссылки</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Сервера Invidious</string>
<string name="nitter_instances">Сервера Nitter</string>
<string name="bibliogram_instances">Сервера Bibliogram</string>
<string name="teddit_instances">Сервера Teddit</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">Задержка</string>
<string name="error_message_internet">Проверьте подключение к Интернету</string>
<string name="instance_label">Сервер:</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Удалить:</b> UntrackMe удалит параметр из URL, если он существует</string>
<string name="invidious_help_other">Если вы выбирете другие значения параметра, они будут добавлены в URL. Если параметр уже существует, его значение будет изменено на ваше</string>
<string name="invidious_help_explanations">[1] параметр \'local\' по умолчанию имеет значение \'true\' для большей конфиденциальности</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>Игнорировать</item>
<item>Удалить</item>

View File

@ -0,0 +1,185 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Impostatziones</string>
<string name="action_about">Informatziones</string>
<string name="developer">Isvilupadore</string>
<string name="donations">Donatziones</string>
<string name="about_the_app">Informatziones in subra de s\'aplicatzione</string>
<string name="source_code">Còdighe de orìgine</string>
<string name="issue_tracker">Sinnaladore de problemas</string>
<string name="license">Litzèntzia</string>
<string name="about_vesrion">Versione %1$s</string>
<string name="custom_nitter">Istàntzia personalizada de Nitter</string>
<string name="save">Sarva</string>
<string name="close">Serra</string>
<string name="instances_saved">Sas istàntzias personalizadas sunt istadas sarvadas!</string>
<string name="custom_invidious">Istàntzia personalizada de Invidious</string>
<string name="no_apps">Peruna aplicatzione predefinida</string>
<string name="Donate">Dona</string>
<string name="warning">Avisu</string>
<string name="error">Faddina</string>
<string name="valid">Vàlidu</string>
<string name="icon_of_the_app">Icona de s\'aplicatzione</string>
<string name="open_with">Aberi cun</string>
<string name="redirect_gm_to_osm">Torra a indiritzare Google Maps cara a OpenStreetMap</string>
<string name="custom_osm">Nùmene de istrangiadore (host) de OSM personalizadu</string>
<string name="redirect_youtube_to_invidious">Torra a indiritzare YouTube cara a Invidious</string>
<string name="redirect_twitter_to_nitter">Torra a indiritzare Twitter cara a Nitter</string>
<string name="redirect_instagram_to_bibliogram">Torra a indiritzare Instagram cara a Bibliogram</string>
<string name="redirect_reddit_to_teddit">Torra a indiritzare Reddit cara a Teddit</string>
<string name="redirect_medium_to_scriberip">Torra a indiritzare Medium cara a Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Torra a indiritzare Wikipedia cara a Wikiless</string>
<string name="custom_bibliogram">Istàntzia personalizada de Bibliogram</string>
<string name="custom_scriberip">Istàntzia personalizada de Scribe.rip</string>
<string name="custom_wikiless">Istàntzia personalizada de Wikiless</string>
<string name="custom_teddit">Istàntzia personalizada de Teddit</string>
<string name="redirect_gm_to_geo_uri">Torra a indiritzare Google Map cara a Geo URI</string>
<string name="configure">Cunfigura</string>
<string name="display_supported_links">Ammustra sos ligàmenes suportados</string>
<string name="use_geo_uri">Imprea geo URI</string>
<string name="how_to">Comente fàghere</string>
<string name="shortened_detected">URL incurtzadu</string>
<string name="shortener_services">Servìtzios de incurtzadura</string>
<string name="open">Aberi</string>
<string name="dismiss">Iscarta</string>
<string name="resolving_shortened">Risolvende s\'URL incurtzadu. Iseta…</string>
<string name="try_to_redirect">%1$s \n\nt\'at a torrare a indiritzare cara a\n\n<b>%2$s</b></string>
<string name="try_to_redirect_again">E a pustis t\'at a torrare a indiritzare cara a\n\n<b>%1$s</b></string>
<string name="the_app_failed_shortened">Custa aplicatzione no est resèssida a recuperare s\'URL intreu</string>
<string name="invidious_instances">Istàntzias de Invidious</string>
<string name="nitter_instances">Istàntzias de Nitter</string>
<string name="bibliogram_instances">Istàntzias de Bibliogram</string>
<string name="teddit_instances">Istàntzias de Teddit</string>
<string name="scribe_instances">Istàntzias de Scribe</string>
<string name="wikiless_instances">Istàntzias de Wikiless</string>
<string name="latency">Latèntzia</string>
<string name="error_message_internet">Verìfica sa connessione a ìnternet tua</string>
<string name="instance_label">Istàntzia:</string>
<string name="expand_instance_details">Ismànnia sos detàllios de s\'istàntzia</string>
<string name="cloudflare">Custa istàntzia impreat Cloudflare</string>
<string name="instance_info">Informatziones in subra de sas istàntzias allistadas</string>
<string name="about_instances">Sa lista de sas istàntzias benit dae\n\n <a href="%1$s">%2$s</a>\n\nPodes contribuire a custa lista annanghende o boghende istàntzias.</string>
<string name="about_instances_title">Informatziones in subra de sas istàntzias</string>
<string name="use_built_in_player">Imprea su riproduidore integradu</string>
<string name="share">Cumpartzi</string>
<string name="download">Iscàrriga</string>
<string name="share_with">Cumpartzi cun</string>
<string name="check_apps">Verìfica sas aplicatziones</string>
<string name="select_instances">Ischerta sas istàntzias</string>
<string name="continue_with">Sighi cun…</string>
<string name="just_once">Una borta ebbia</string>
<string name="always">Semper</string>
<string name="default_app_indication">%1$s est istada impostada comente aplicatzione predefinida.\n Podes bogare custu cumportamentu dae sas impostatziones de s\'aplicatzione.</string>
<string name="indication_error_title">B\'at carchi cosa de isballiadu cun sa cunfiguratzione de s\'aplicatzione. Sighi custas indicatziones pro risòlvere su problema.</string>
<string name="open_configure">1 - Incarca in su butone \"CUNFIGURA\" in subra.</string>
<string name="supported_url_indication_1">2 - Como ses in sas impostatziones de s\'aplicatzione dae su dispositivu tuo. Incarca in \"Imposta comente predefinida\".</string>
<string name="display_indications_1_description">Ischermada chi ammustrat sas impostatziones pro s\'aplicatzione. Depes incarcare in \"Imposta comente predefinida\"</string>
<string name="supported_url_indication_2">2 - A pustis incarca in \"Bae a sos URL suportados\".</string>
<string name="display_indications_2_description">Ischermada chi ammustrat sas impostatziones pro s\'aplicatzione. Depes incarcare in \"Bae a sos URL suportados\"</string>
<string name="supported_url_indication_3">3 - In sos impòsitos assegura·ti de isseberare \"Pedi semper\"</string>
<string name="display_indications_3_description">Ischermada chi ammustrat sas impostatziones de s\'aplicatzione pro definire su cumportamentu pro s\'abertura de sos URL</string>
<string name="default_apps">Aplicatziones predefinidas</string>
<string name="remove_from_default_app">Boga dae sas aplicatziones predefinidas</string>
<string name="delete">Iscantzella</string>
<string name="cancel">Annulla</string>
<string name="delete_app_from_default">Iscantzellare %1$s dae sas aplicatziones predefinidas?</string>
<string name="copy_done">Copiadu</string>
<string name="no_apps_set_as_default">Peruna aplicatzione impostada comente predefinida!</string>
<string name="custom_settings_for_invidious">Impostatziones personalizadas pro Invidious</string>
<string name="invidious_settings">Impostatziones de Invidious</string>
<string name="invidious_dark_mode_title">Tema</string>
<string name="invidious_dark_mode_indication">Cunfigura su tema predefinidu chene impostare sos testimòngios</string>
<string name="invidious_thin_mode_title">Modalidade sùtile</string>
<string name="invidious_thin_mode_indication">Càrriga elementos HTML, CSS, JS e vìdeos (disabìlitat sas immàgines)</string>
<string name="invidious_language_mode_indication">Limbas a disponimentu</string>
<string name="invidious_language_mode_title">Limba de interfache de s\'utente</string>
<string name="pref_invidious_head1">Paràmetros pro totu su situ</string>
<string name="pref_invidious_head2">Paràmetros de su riproduidore</string>
<string name="invidious_annotations_mode_title">Annotatziones</string>
<string name="invidious_annotations_mode_indication">Ammustra sas annotatziones betzas, frunidas dae s\'Internet Archive</string>
<string name="invidious_autoplay_mode_indication">Riprodui automaticamente su vìdeu a su carrigamentu</string>
<string name="invidious_autoplay_mode_title">Riprodutzione automàtica</string>
<string name="invidious_continue_mode_title">Sighi</string>
<string name="invidious_continue_mode_indication">Cando su vìdeu est agabbadu bae automaticamente a su vìdeu ligadu chi benit (in manera simigiante a sa funtzionalidade de riprodutzione automàtica de YouTube)</string>
<string name="invidious_listen_mode_title">Ascurta</string>
<string name="invidious_listen_mode_indication">Riprodui petzi sa parte sonora de su vìdeu</string>
<string name="invidious_local_mode_title">Locale</string>
<string name="invidious_local_mode_indication">Faghe colare sos flussos de sos vìdeos in su serbidore intermediàriu (proxy)</string>
<string name="invidious_subtitles_mode_title">Sutatìtulos</string>
<string name="invidious_subtitles_mode_indication">Lista de còdighes linguìsticos ISO 639-1</string>
<string name="invidious_quality_mode_title">Calidade</string>
<string name="invidious_quality_mode_indication">Calidade predefinida de su riproduidore</string>
<string name="invidious_loop_mode_title">Ripetitzione</string>
<string name="invidious_volume_mode_title">Volume</string>
<string name="invidious_volume_mode_indication">Su volume predefinidu de su riproduidore. Podet èssere cale si siat nùmeru intre 0 e 100</string>
<string name="invidious_loop_mode_indication">Repite comente impostatzione predefinida</string>
<string name="invidious_volume_mode_value">Valore de su volume</string>
<string name="invidious_volume_mode_value_indication">Subraiscrie su volume cun custu valore</string>
<string name="pref_invidious_head3">Istile de su riproduidore</string>
<string name="invidious_player_style_mode_title">Aparèntzia</string>
<string name="invidious_player_style_mode_indication">Invidious, su predefinidu. YouTube, impreende unu butone de riprodutzione tzentradu e una barra de controllu de su vìdeu semper visìbile</string>
<string name="help">Agiudu</string>
<string name="invidious_help_title">Optziones de impostatzione</string>
<string name="invidious_help_ignore"><b>Ignora:</b> Custa est s\'atzione predefinida pro totu¹ sos paràmetros. Custu cheret nàrrere chi UntrackMe no at a fàghere nudda pro su chi pertocat a su paràmetru</string>
<string name="invidious_help_remove"><b>Boga:</b> UntrackMe at a bogare su paràmetru dae s\'URL, si esistit</string>
<string name="invidious_help_other">Si ischertas àteros valores pro unu paràmetru s\'ant a annànghere a s\'URL. Si su paràmetru esistit giai su valore suo s\'at a cambiare cun s\'issèberu tuo</string>
<string name="invidious_help_explanations">[1] su paràmetru \'local\' est impostadu comente \'true\' in sas impostatziones predefinidas pro una riservadesa prus manna</string>
<string name="copy_url">Còpia s\'URL in punta de billete</string>
<string-array name="invidious_theme">
<item>Ignora</item>
<item>Boga</item>
<item>Tema iscuru</item>
<item>Tema craru</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignora</item>
<item>Boga</item>
<item>Abilitadu</item>
<item>Disabilitadu</item>
</string-array>
<string-array name="invidious_language">
<item>Ignora</item>
<item>Boga</item>
<item>Àrabu</item>
<item>Tedescu</item>
<item>Grecu</item>
<item>Inglesu</item>
<item>Esperanto</item>
<item>Ispagnolu</item>
<item>Bascu</item>
<item>Frantzesu</item>
<item>Islandesu</item>
<item>Italianu</item>
<item>Norvegesu Bokmål</item>
<item>Olandesu</item>
<item>Polacu</item>
<item>Russu</item>
<item>Ucrainu</item>
<item>Tzinesu</item>
</string-array>
<string-array name="invidious_annotations">
<item>Ignora</item>
<item>Boga</item>
<item>Ammustra sas annotatziones</item>
<item>Cua sas annotatziones</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignora</item>
<item>Boga</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignora</item>
<item>Boga</item>
<item>Personalizadu</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignora</item>
<item>Boga</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>
</resources>

View File

@ -1,33 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Settings</string>
<string name="action_about">About</string>
<string name="developer">Developer</string>
<string name="action_settings">Подешавања</string>
<string name="action_about">О програму</string>
<string name="developer">Програмер</string>
<string name="donations">Donations</string>
<string name="about_the_app">About the app</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="license">License</string>
<string name="about_vesrion">Release %1$s</string>
<string name="license">Лиценца</string>
<string name="about_vesrion">Издање %1$s</string>
<string name="custom_nitter">Custom Nitter instance</string>
<string name="save">Save</string>
<string name="close">Close</string>
<string name="save">Сачувај</string>
<string name="close">Затвори</string>
<string name="instances_saved">Custom instances have been saved!</string>
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
<string name="Donate">Donate</string>
<string name="warning">Warning</string>
<string name="warning">Упозорење</string>
<string name="error">Error</string>
<string name="valid">Valid</string>
<string name="icon_of_the_app">Icon of the app</string>
<string name="open_with">Open with</string>
<string name="open_with">Отворите помоћу</string>
<string name="redirect_gm_to_osm">Redirect Google Map to OpenStreetMap</string>
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,23 +46,24 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
<string name="instance_label">Инстанца:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
<string name="instance_info">Information about listed instances</string>
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="about_instances_title">About instances</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="share">Подели</string>
<string name="download">Преузми</string>
<string name="share_with">Поделите са</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">Увек</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,14 +75,14 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">Обриши</string>
<string name="cancel">Поништи</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_title">Тема</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
@ -95,7 +98,7 @@
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_title">Локално</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Уклони</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Уклони</item>
<item>Enabled</item>
<item>Disabled</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Уклони</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Уклони</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Уклони</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Уклони</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Уклони</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -27,7 +27,9 @@
<string name="redirect_youtube_to_invidious">Omdirigera YouTube till Ovidious</string>
<string name="redirect_twitter_to_nitter">Omdirigera Twitter till Nitter</string>
<string name="redirect_instagram_to_bibliogram">Omdirigera Twitter till Nitter</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Anpassad Bibliogram instans</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Omdirigera Google Map till Geo URI</string>
<string name="configure">Konfigurera</string>
<string name="display_supported_links">Visa länkar som stöds</string>
@ -44,6 +46,7 @@
<string name="invidious_instances">Olivliga instanser</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instanser</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latens</string>
<string name="error_message_internet">Kontrollera din internetanslutning</string>
<string name="instance_label">Instans:</string>
@ -60,7 +63,7 @@
<string name="select_instances">Välj instanser</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">Alltid</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,14 +75,14 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">Ta bort</string>
<string name="cancel">Avbryt</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_title">Tema</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
@ -95,7 +98,7 @@
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_title">Lokal</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Ta bort</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Ta bort</item>
<item>Enabled</item>
<item>Disabled</item>
<item>Inaktiverad</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Ta bort</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Ta bort</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Ta bort</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Ta bort</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Ta bort</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -27,7 +27,9 @@
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,6 +46,7 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>

View File

@ -1,33 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Settings</string>
<string name="action_about">About</string>
<string name="developer">Developer</string>
<string name="action_settings">Ayarlar</string>
<string name="action_about">Hakkında</string>
<string name="developer">Geliştirici</string>
<string name="donations">Donations</string>
<string name="about_the_app">About the app</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="license">License</string>
<string name="about_vesrion">Release %1$s</string>
<string name="license">Lisans</string>
<string name="about_vesrion">Sürüm %1$s</string>
<string name="custom_nitter">Custom Nitter instance</string>
<string name="save">Save</string>
<string name="close">Close</string>
<string name="save">Kaydet</string>
<string name="close">Kapat</string>
<string name="instances_saved">Custom instances have been saved!</string>
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
<string name="Donate">Donate</string>
<string name="warning">Warning</string>
<string name="warning">Uyarı</string>
<string name="error">Error</string>
<string name="valid">Valid</string>
<string name="icon_of_the_app">Icon of the app</string>
<string name="open_with">Open with</string>
<string name="open_with">Birlikte aç</string>
<string name="redirect_gm_to_osm">Redirect Google Map to OpenStreetMap</string>
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,23 +46,24 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
<string name="instance_label">Sunucu:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
<string name="instance_info">Information about listed instances</string>
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="about_instances_title">About instances</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="share">Paylaş</string>
<string name="download">İndir</string>
<string name="share_with">Şununla paylaş</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">Her zaman</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,14 +75,14 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">Sil</string>
<string name="cancel">Iptal</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_title">Tema</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
@ -95,7 +98,7 @@
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_title">Yerel</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Kaldır</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Kaldır</item>
<item>Enabled</item>
<item>Disabled</item>
<item>Devre dışı bırakıldı</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Kaldır</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Kaldır</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Kaldır</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Kaldır</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Kaldır</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -1,175 +1,197 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Settings</string>
<string name="action_about">About</string>
<string name="developer">Developer</string>
<string name="donations">Donations</string>
<string name="about_the_app">About the app</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="license">License</string>
<string name="about_vesrion">Release %1$s</string>
<string name="custom_nitter">Custom Nitter instance</string>
<string name="save">Save</string>
<string name="close">Close</string>
<string name="instances_saved">Custom instances have been saved!</string>
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
<string name="Donate">Donate</string>
<string name="warning">Warning</string>
<string name="error">Error</string>
<string name="valid">Valid</string>
<string name="icon_of_the_app">Icon of the app</string>
<string name="open_with">Open with</string>
<string name="redirect_gm_to_osm">Redirect Google Map to OpenStreetMap</string>
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
<string name="use_geo_uri">Use geo URI</string>
<string name="how_to">How-to</string>
<string name="shortened_detected">Shortened URL</string>
<string name="shortener_services">Shortener services</string>
<string name="open">Open</string>
<string name="dismiss">Dismiss</string>
<string name="resolving_shortened">Resolving shortened URL, please wait…</string>
<string name="try_to_redirect">%1$s \n\nwill redirect you to\n\n<b>%2$s</b></string>
<string name="try_to_redirect_again">Then it will redirect you to\n\n<b>%1$s</b></string>
<string name="the_app_failed_shortened">The app didn\'t manage to retrieve the full URL</string>
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
<string name="instance_info">Information about listed instances</string>
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="about_instances_title">About instances</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
<string name="supported_url_indication_1">2 - You are now in app settings from your device. Tap on \"Set as default\".</string>
<string name="display_indications_1_description">Screenshot showing app settings for the app. You have to Tap on \"Set as default\"</string>
<string name="supported_url_indication_2">2 - Then tap on \"Go to supported URLs\".</string>
<string name="display_indications_2_description">Screenshot showing app settings for the app. You have to Tap on \"Go to supported URLs\"</string>
<string name="supported_url_indication_3">3 - In suggestions make sure to pickup \"Always ask\"</string>
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
<string name="custom_settings_for_invidious">Custom settings for Invidious</string>
<string name="invidious_settings">Invidious settings</string>
<string name="invidious_dark_mode_title">Theme</string>
<string name="invidious_dark_mode_indication">Configure default theme without setting cookies</string>
<string name="invidious_thin_mode_title">Thin mode</string>
<string name="invidious_thin_mode_indication">Load HTML, CSS, JS and video elements (disables images)</string>
<string name="invidious_language_mode_indication">Available locales</string>
<string name="invidious_language_mode_title">UI Language</string>
<string name="pref_invidious_head1">Site-wide parameters</string>
<string name="pref_invidious_head2">Player parameters</string>
<string name="invidious_annotations_mode_title">Annotations</string>
<string name="invidious_annotations_mode_indication">Show legacy annotations, provided by the Internet Archive</string>
<string name="invidious_autoplay_mode_indication">Automatically play video on load</string>
<string name="invidious_autoplay_mode_title">Autoplay</string>
<string name="invidious_continue_mode_title">Continue</string>
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
<string name="invidious_quality_mode_title">Quality</string>
<string name="invidious_quality_mode_indication">Default player quality</string>
<string name="invidious_loop_mode_title">Loop</string>
<string name="invidious_volume_mode_title">Volume</string>
<string name="invidious_volume_mode_indication">Default player volume, can be any whole number between 0 and 100</string>
<string name="invidious_loop_mode_indication">Loop player by default</string>
<string name="invidious_volume_mode_value">Volume value</string>
<string name="invidious_volume_mode_value_indication">Override the volume with this value</string>
<string name="pref_invidious_head3">Player Style</string>
<string name="invidious_player_style_mode_title">Appearance</string>
<string name="invidious_player_style_mode_indication">Invidious, the default one. YouTube, using a centered play button and always visible video control bar</string>
<string name="help">Help</string>
<string name="invidious_help_title">Setting options</string>
<string name="invidious_help_ignore"><b>Ignore:</b> This is the default action for all¹ parameters. This means UntrackMe will not do anything about the parameter</string>
<string name="invidious_help_remove"><b>Remove:</b> UntrackMe will remove the parameter from URL, if it exists</string>
<string name="invidious_help_other">If you select other values for a parameter, they will be added to the URL. If the parameter already exists, its value will be changed to your choice</string>
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<!-- Ukrainian -->
<string name="action_settings">Параметри</string>
<string name="action_about">Про застосунок</string>
<string name="developer">Розробник</string>
<string name="donations">Пожертви</string>
<string name="about_the_app">Про застосунок</string>
<string name="source_code">Джерело</string>
<string name="issue_tracker">Підтримка</string>
<string name="license">Ліцензія</string>
<string name="about_vesrion">Випуск %1$s</string>
<string name="custom_nitter">Ваша адреса Nitter</string>
<string name="save">Зберегти</string>
<string name="close">Закрити</string>
<string name="instances_saved">Користувацькі сервери збережено</string>
<string name="custom_invidious">Ваша адреса Invidious</string>
<string name="no_apps">Нема усталеного застосунку</string>
<string name="Donate">Кава</string>
<string name="wiki">Вікі</string>
<string name="warning">Застереження</string>
<string name="error">Помилка</string>
<string name="valid">Чинно</string>
<string name="icon_of_the_app">Піктограма застосунку</string>
<string name="open_with">Відкрити в </string>
<string name="redirect_gm_to_osm">OpenStreetMap замість Google Maps</string>
<string name="custom_osm">Ваша адреса OSM</string>
<string name="redirect_youtube_to_invidious">Invidious замість YouTube</string>
<string name="redirect_twitter_to_nitter">Nitter замість Twitter</string>
<string name="redirect_tiktok_to_proxitok">ProxiTok замість TikTok</string>
<string name="redirect_instagram_to_bibliogram">Bibliogram замість Instagram</string>
<string name="redirect_reddit_to_teddit">Teddit замість Reddit</string>
<string name="redirect_medium_to_scriberip">Scribe.rip замість Medium</string>
<string name="redirect_wikipedia_to_wikiless">Wikiless замість Wikipedia</string>
<string name="custom_bibliogram">Ваша адреса Bibliogram</string>
<string name="custom_scriberip">Ваша адреса Scribe.rip</string>
<string name="custom_wikiless">Ваша адреса Wikiless</string>
<string name="custom_teddit">Ваша адреса Teddit</string>
<string name="custom_proxitok">Ваша адреса ProxiTok</string>
<string name="redirect_gm_to_geo_uri">Geo URI замість Google Maps</string>
<string name="configure">Параметри</string>
<string name="display_supported_links">Показати підтримувані посилання</string>
<string name="use_geo_uri">Використовувати Geo URI</string>
<string name="how_to">Інструкція</string>
<string name="shortened_detected">Адресу сховано</string>
<string name="shortener_services">Ховання адрес</string>
<string name="open">Відкрити</string>
<string name="dismiss">Скасувати</string>
<string name="resolving_shortened">Отримання повної URL-адреси…</string>
<string name="try_to_redirect">%1$s \n\nспрямує вас до\n\n<b>%2$s</b></string>
<string name="try_to_redirect_again">Й тоді переспрямує до\n\n<b>%1$s</b></string>
<string name="the_app_failed_shortened">Не вдалось отримати повну URL-адресу</string>
<string name="invidious_instances">Сервери Invidious</string>
<string name="nitter_instances">Сервери Nitter</string>
<string name="bibliogram_instances">Сервери Bibliogram</string>
<string name="teddit_instances">Сервери Teddit</string>
<string name="scribe_instances">Сервери Scribe</string>
<string name="wikiless_instances">Сервери Wikiless</string>
<string name="proxitok_instances">Сервери ProxiTok</string>
<string name="latency">Швидкість</string>
<string name="error_message_internet">Перевірте інтернет-з\'єднання</string>
<string name="instance_label">Сервер:</string>
<string name="expand_instance_details">Докладніше про сервер</string>
<string name="cloudflare">Цей сервер використовує Cloudflare</string>
<string name="instance_info">Дані про перелічені сервери</string>
<string name="about_instances">Перелік серверів узято з\n\n <a href="%1$s">%2$s</a>\n\nВдоскональте його, додавши чи вилучивши сервери.</string>
<string name="about_instances_title">Про сервери</string>
<string name="use_built_in_player">Вбудоване відтворення</string>
<string name="share">Поширити</string>
<string name="download">Завантажити</string>
<string name="share_with">Поширити через</string>
<string name="check_apps">Перевірка застосунків</string>
<string name="select_instances">Про сервери</string>
<string name="continue_with">Оберіть застосунок</string>
<string name="just_once">Лише зараз</string>
<string name="always">Усталено</string>
<string name="default_app_indication">%1$s обрано як усталений застосунок.\nЦю властивість можна вилучити в параметрах UntrackMe.</string>
<string name="indication_error_title">Щось не так із конфігурацією застосунку. Будь ласка, виконайте наступні кроки, щоб це виправити.</string>
<string name="open_configure">1. Торкніть кнопку «Параметри» вгорі.</string>
<string name="supported_url_indication_1">2. Ви потрапите в системні параметри застосунку. Торкніть «Відкривати за умовчанням».</string>
<string name="display_indications_1_description">Знімок системних параметрів застосунку. Тут слід торкнути «Відкривати за умовчанням»</string>
<string name="supported_url_indication_2">2. Торкніть «Відкривати підтримувані посилання».</string>
<string name="display_indications_2_description">Знімок системних параметрів застосунку. Тут слід торкнути «Відкривати підтримувані посилання»</string>
<string name="supported_url_indication_3">3. У пропозиціях завжди обирайте «Щоразу запитувати»</string>
<string name="display_indications_3_description">Знімок системних параметрів застосунку, де слід налаштувати поведінку відкриття посилань</string>
<string name="default_apps">Усталені застосунки</string>
<string name="remove_from_default_app">Вилучити з усталених застосунків</string>
<string name="delete">Вилучити</string>
<string name="cancel">Скасувати</string>
<string name="delete_app_from_default">Вилучити %1$s з усталених застосунків?</string>
<string name="copy_done">Скопійовано</string>
<string name="no_apps_set_as_default">Усталеного поки нема</string>
<string name="custom_settings_for_invidious">Власні параметри Invidious</string>
<string name="invidious_settings">Параметри Invidious</string>
<string name="invidious_dark_mode_title">Тема</string>
<string name="invidious_dark_mode_indication">Налаштувати тему без кук</string>
<string name="invidious_thin_mode_title">Легкий режим</string>
<string name="invidious_thin_mode_indication">HTML, CSS, JS та відео, але не зображення</string>
<string name="invidious_language_mode_indication">Доступні мови</string>
<string name="invidious_language_mode_title">Мова інтерфейсу</string>
<string name="pref_invidious_head1">Сайт</string>
<string name="pref_invidious_head2">Відтворення</string>
<string name="invidious_annotations_mode_title">Анотації</string>
<string name="invidious_annotations_mode_indication">Показувати застарілі анотації, завантажуючи їх із Internet Archive</string>
<string name="invidious_autoplay_mode_indication">Одразу відтворювати відео</string>
<string name="invidious_autoplay_mode_title">Самовідтворення</string>
<string name="invidious_continue_mode_title">Безперервність</string>
<string name="invidious_continue_mode_indication">По завершенню відео, автоматично переходити до наступного</string>
<string name="invidious_listen_mode_title">Музичний режим</string>
<string name="invidious_listen_mode_indication">Відтворювати лише звукову доріжку відео</string>
<string name="invidious_local_mode_title">Опосередкованість</string>
<string name="invidious_local_mode_indication">Спрямовувати відеопотоки через проксі</string>
<string name="invidious_subtitles_mode_title">Субтитри</string>
<string name="invidious_subtitles_mode_indication">Перелік мов ISO 6391</string>
<string name="invidious_quality_mode_title">Якість</string>
<string name="invidious_quality_mode_indication">Формат відео</string>
<string name="invidious_loop_mode_title">Цикл</string>
<string name="invidious_volume_mode_title">Гучність</string>
<string name="invidious_volume_mode_indication">Довільне ціле число від 0 до 100</string>
<string name="invidious_loop_mode_indication">Повторювати відтворення</string>
<string name="invidious_volume_mode_value">Значення гучності</string>
<string name="invidious_volume_mode_value_indication">Гучність буде замінено цим значенням</string>
<string name="pref_invidious_head3">Стиль</string>
<string name="invidious_player_style_mode_title">Оформлення</string>
<string name="invidious_player_style_mode_indication">Invidious — усталена тема. YouTube — кнопку відтворення центровано, а панель керування завжди видно</string>
<string name="help">Довідка</string>
<string name="invidious_help_title">Значення параметрів</string>
<string name="invidious_help_ignore"><b>Пропустити:</b> UntrackMe залишатиме параметр у посиланнях як є. Усталене значення всіх¹ параметрів</string>
<string name="invidious_help_remove"><b>Вилучити:</b> UntrackMe вилучатиме параметр із посилання за наявності</string>
<string name="invidious_help_other">Якщо ви оберете інше значення параметру, його буде додано до посилання. Якщо параметр уже є, ваше значення його замінить</string>
<string name="invidious_help_explanations">[1] Крім параметру «Опосередкованість», усталено ввімкненого задля захисту приватності</string>
<string name="copy_url">Скопіювати URL-адресу в буфер</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Dark theme</item>
<item>Light theme</item>
<item>Пропустити</item>
<item>Вилучити</item>
<item>Тьмяна тема</item>
<item>Світла тема</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Enabled</item>
<item>Disabled</item>
<item>Пропустити</item>
<item>Вилучити</item>
<item>Увімкнути</item>
<item>Вимкнути</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
<item>English</item>
<item>Esperanto</item>
<item>Spanish</item>
<item>Basque</item>
<item>French</item>
<item>Icelandic</item>
<item>Italian</item>
<item>Norwegian Bokmål</item>
<item>Dutch</item>
<item>Polish</item>
<item>Russian</item>
<item>Ukrainian</item>
<item>Chinese</item>
<item>Пропустити</item>
<item>Вилучити</item>
<item>Арабська</item>
<item>Німецька</item>
<item>Грецька</item>
<item>Англійська</item>
<item>Есперанто</item>
<item>Іспанська</item>
<item>Баскська</item>
<item>Французька</item>
<item>Ісландська</item>
<item>Італійська</item>
<item>Букмол (норвезька)</item>
<item>Нідерландська</item>
<item>Польська</item>
<item>Мертва</item>
<item>Українська</item>
<item>Китайська</item>
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Show annotations</item>
<item>Hide annotations</item>
<item>Пропустити</item>
<item>Вилучити</item>
<item>Показати анотації</item>
<item>Сховати анотації</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Пропустити</item>
<item>Вилучити</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Custom</item>
<item>Пропустити</item>
<item>Вилучити</item>
<item>Налаштувати</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Пропустити</item>
<item>Вилучити</item>
<item>Invidious</item>
<item>Youtube</item>
<item>YouTube</item>
</string-array>
</resources>

View File

@ -19,24 +19,30 @@
<string name="Donate">عطیہ کریں</string>
<string name="warning">انتباہ</string>
<string name="error">خرابی</string>
<string name="valid">Valid</string>
<string name="icon_of_the_app">Icon of the app</string>
<string name="open_with">Open with</string>
<string name="redirect_gm_to_osm">Redirect Google Map to OpenStreetMap</string>
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="valid">درست</string>
<string name="icon_of_the_app">ایپ کی آئیکن</string>
<string name="open_with">کے ساتھ کھولیں</string>
<string name="redirect_gm_to_osm">گوگل میپ کو اوپن اسٹریٹ میپ میں ری ڈائریکٹ کریں</string>
<string name="custom_osm">حسب منشا OSM hostname</string>
<string name="redirect_youtube_to_invidious">یوٹیوب کو Invidious میں ری ڈائریکٹ کریں</string>
<string name="redirect_twitter_to_nitter">ٹوئیٹر کو Nitter میں ری ڈائریکٹ کریں</string>
<string name="redirect_instagram_to_bibliogram">انسٹاگرام کو بیبلیوگرام کی طرف منتقل کریں</string>
<string name="redirect_reddit_to_teddit">ریڈڈیٹ کو ٹیڈیٹ کی طرف منتقل کریں</string>
<string name="redirect_medium_to_scriberip">میڈئیم کو Scribe.rip کی طرف منتقل کریں</string>
<string name="redirect_wikipedia_to_wikiless">ویکیپیڈیا کو ویکی لیس کی طرف منتقل کریں</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
<string name="display_supported_links">معاون لنکس دکھائیں</string>
<string name="use_geo_uri">Use geo URI</string>
<string name="how_to">How-to</string>
<string name="how_to">کس طرح</string>
<string name="shortened_detected">Shortened URL</string>
<string name="shortener_services">Shortener services</string>
<string name="open">Open</string>
<string name="dismiss">Dismiss</string>
<string name="open">کھولیں</string>
<string name="dismiss">منسوخ</string>
<string name="resolving_shortened">Resolving shortened URL, please wait…</string>
<string name="try_to_redirect">%1$s \n\nwill redirect you to\n\n<b>%2$s</b></string>
<string name="try_to_redirect_again">Then it will redirect you to\n\n<b>%1$s</b></string>
@ -44,8 +50,11 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="error_message_internet">اپنے انٹرنیٹ کنکشن کی جانچ کریں</string>
<string name="instance_label">Instance:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
@ -54,13 +63,13 @@
<string name="about_instances_title">About instances</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="download">ڈاؤن لوڈ</string>
<string name="share_with">کے ساتھ شئیر</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="just_once">صرف ایک بار</string>
<string name="always">ہمیشہ</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>Remove:</b> UntrackMe will remove the parameter from URL, if it exists</string>
<string name="invidious_help_other">If you select other values for a parameter, they will be added to the URL. If the parameter already exists, its value will be changed to your choice</string>
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>

View File

@ -1,33 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Settings</string>
<string name="action_about">About</string>
<string name="developer">Developer</string>
<string name="action_settings">Cài đặt</string>
<string name="action_about">Trong khoảng</string>
<string name="developer">Nhà phát triển</string>
<string name="donations">Donations</string>
<string name="about_the_app">About the app</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="license">License</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_vesrion">Phát hành %1$s</string>
<string name="custom_nitter">Custom Nitter instance</string>
<string name="save">Save</string>
<string name="close">Close</string>
<string name="save">Lưu</string>
<string name="close">Gần</string>
<string name="instances_saved">Custom instances have been saved!</string>
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
<string name="Donate">Donate</string>
<string name="warning">Warning</string>
<string name="warning">Cảnh báo</string>
<string name="error">Error</string>
<string name="valid">Valid</string>
<string name="icon_of_the_app">Icon of the app</string>
<string name="open_with">Open with</string>
<string name="open_with">Mở với</string>
<string name="redirect_gm_to_osm">Redirect Google Map to OpenStreetMap</string>
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,23 +46,24 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
<string name="instance_label">Ví dụ:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
<string name="instance_info">Information about listed instances</string>
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="about_instances_title">About instances</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="share">Chia sẻ</string>
<string name="download">Tải về</string>
<string name="share_with">Chia sẽ với</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">Luôn luôn</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,8 +75,8 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">Xóa bỏ</string>
<string name="cancel">Hủy</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>Tẩy</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>Tẩy</item>
<item>Enabled</item>
<item>Disabled</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>Tẩy</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>Tẩy</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>Tẩy</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Tẩy</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Tẩy</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -27,7 +27,13 @@
<string name="redirect_youtube_to_invidious">重定向YouTube到Invidious</string>
<string name="redirect_twitter_to_nitter">重定向Twitter到Nitter</string>
<string name="redirect_instagram_to_bibliogram">重定向Instagram到Bibliogram</string>
<string name="redirect_reddit_to_teddit">重定向 Reddit 到 Teddit</string>
<string name="redirect_medium_to_scriberip">重定向 Medium 到 Screibe.rip</string>
<string name="redirect_wikipedia_to_wikiless">将维基百科重定向至 Wikiless</string>
<string name="custom_bibliogram">自定义Bibliogram实例</string>
<string name="custom_scriberip">自定义 Scribe.rip 实例</string>
<string name="custom_wikiless">自定义Wikiless 实例</string>
<string name="custom_teddit">自定义 Teddit 实例</string>
<string name="redirect_gm_to_geo_uri">重定向谷歌地图到 Geo URI</string>
<string name="configure">配置</string>
<string name="display_supported_links">显示支持的链接</string>
@ -44,6 +50,9 @@
<string name="invidious_instances">Invidious实例</string>
<string name="nitter_instances">Nitter实例</string>
<string name="bibliogram_instances">Bibliogram实例</string>
<string name="teddit_instances">Teddit 实例</string>
<string name="scribe_instances">Scribe 实例</string>
<string name="wikiless_instances">Wikiless 实例</string>
<string name="latency">网络延迟</string>
<string name="error_message_internet">检查您的互联网连接</string>
<string name="instance_label">实例:</string>
@ -116,6 +125,7 @@
<string name="invidious_help_remove"><b>删除:</b>UntrackMe将从URL中删除该参数如果存在</string>
<string name="invidious_help_other">如果您为一个参数选择其他值它们将被添加到URL。如果这个参数已经存在其值将更改为您选择的值</string>
<string name="invidious_help_explanations">[1] 默认情况下,“ local”参数设置为“ true”以获得更好的隐私</string>
<string name="copy_url">复制 URL 到剪贴板</string>
<string-array name="invidious_theme">
<item>忽略</item>
<item>移除</item>

View File

@ -1,33 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Some local values -->
<string name="action_settings">Settings</string>
<string name="action_about">About</string>
<string name="developer">Developer</string>
<string name="action_settings">設定</string>
<string name="action_about">關於</string>
<string name="developer">開發者</string>
<string name="donations">Donations</string>
<string name="about_the_app">About the app</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="license">License</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">關於應用程式</string>
<string name="source_code">原始碼</string>
<string name="issue_tracker">議題追蹤程式</string>
<string name="license">授權條款</string>
<string name="about_vesrion">釋出 %1$s</string>
<string name="custom_nitter">Custom Nitter instance</string>
<string name="save">Save</string>
<string name="close">Close</string>
<string name="save">儲存</string>
<string name="close">關閉</string>
<string name="instances_saved">Custom instances have been saved!</string>
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
<string name="Donate">Donate</string>
<string name="warning">Warning</string>
<string name="warning">警告</string>
<string name="error">Error</string>
<string name="valid">Valid</string>
<string name="icon_of_the_app">Icon of the app</string>
<string name="open_with">Open with</string>
<string name="open_with">選擇開啟工具</string>
<string name="redirect_gm_to_osm">Redirect Google Map to OpenStreetMap</string>
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -44,23 +46,24 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
<string name="instance_label">站台:</string>
<string name="expand_instance_details">Expand instance details</string>
<string name="cloudflare">This instance uses Cloudflare</string>
<string name="instance_info">Information about listed instances</string>
<string name="about_instances">The list of instances comes from\n\n <a href="%1$s">%2$s</a>\n\nYou can contribute to this list by adding or removing instances.</string>
<string name="about_instances_title">About instances</string>
<string name="use_built_in_player">Use the built-in player</string>
<string name="share">Share</string>
<string name="download">Download</string>
<string name="share_with">Share with</string>
<string name="share">分享</string>
<string name="download">下載</string>
<string name="share_with">分享給</string>
<string name="check_apps">Check apps</string>
<string name="select_instances">Select instances</string>
<string name="continue_with">Continue with…</string>
<string name="just_once">Just once</string>
<string name="always">Always</string>
<string name="always">總是</string>
<string name="default_app_indication">%1$s has been set as a default app.\nYou can remove this behavior from the app settings.</string>
<string name="indication_error_title">There is something wrong with the configuration of the app. Please, follow these indications to fix that issue.</string>
<string name="open_configure">1 - Tap on the \"CONFIGURE\" button above.</string>
@ -72,8 +75,8 @@
<string name="display_indications_3_description">Screenshot showing app settings to define the behavior for opening URLs</string>
<string name="default_apps">Default apps</string>
<string name="remove_from_default_app">Remove from default apps</string>
<string name="delete">Delete</string>
<string name="cancel">Cancel</string>
<string name="delete">刪除</string>
<string name="cancel">取消</string>
<string name="delete_app_from_default">Delete %1$s from default apps?</string>
<string name="copy_done">Copied</string>
<string name="no_apps_set_as_default">No apps set as default!</string>
@ -95,7 +98,7 @@
<string name="invidious_continue_mode_indication">When video is done, automatically go to the next related video (similar to YouTubes Autoplay feature)</string>
<string name="invidious_listen_mode_title">Listen</string>
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_title">本機</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
@ -118,19 +121,19 @@
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>
<item>移除</item>
<item>Dark theme</item>
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
<item>移除</item>
<item>Enabled</item>
<item>Disabled</item>
<item>已停用</item>
</string-array>
<string-array name="invidious_language">
<item>Ignore</item>
<item>Remove</item>
<item>移除</item>
<item>Arabic</item>
<item>German</item>
<item>Greek</item>
@ -150,25 +153,25 @@
</string-array>
<string-array name="invidious_annotations">
<item>Ignore</item>
<item>Remove</item>
<item>移除</item>
<item>Show annotations</item>
<item>Hide annotations</item>
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>移除</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>移除</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>移除</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>

View File

@ -35,6 +35,7 @@
<string name="custom_invidious">Custom Invidious instance</string>
<string name="no_apps">No applications by default</string>
<string name="Donate">Donate</string>
<string name="wiki">Wiki</string>
<string name="warning">Warning</string>
<string name="error">Error</string>
<string name="valid">Valid</string>
@ -44,8 +45,16 @@
<string name="custom_osm">Custom OSM hostname</string>
<string name="redirect_youtube_to_invidious">Redirect YouTube to Invidious</string>
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_tiktok_to_proxitok">Redirect TikTok to ProxiTok</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="redirect_medium_to_scriberip">Redirect Medium to Scribe.rip</string>
<string name="redirect_wikipedia_to_wikiless">Redirect Wikipedia to Wikiless</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_wikiless">Custom Wikiless instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="custom_proxitok">Custom ProxiTok instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>
<string name="display_supported_links">Display supported links</string>
@ -62,6 +71,10 @@
<string name="invidious_instances">Invidious instances</string>
<string name="nitter_instances">Nitter instances</string>
<string name="bibliogram_instances">Bibliogram instances</string>
<string name="teddit_instances">Teddit instances</string>
<string name="scribe_instances">Scribe instances</string>
<string name="wikiless_instances">Wikiless instances</string>
<string name="proxitok_instances">ProxiTok instances</string>
<string name="latency">Latency</string>
<string name="error_message_internet">Check your Internet connection</string>
<string name="instance_label">Instance:</string>
@ -135,6 +148,7 @@
<string name="invidious_help_remove"><b>Remove:</b> UntrackMe will remove the parameter from URL, if it exists</string>
<string name="invidious_help_other">If you select other values for a parameter, they will be added to the URL. If the parameter already exists, its value will be changed to your choice</string>
<string name="invidious_help_explanations">[1] \'local\' parameter is set to \'true\' by default for better privacy</string>
<string name="copy_url">Copy URL To Clipboard</string>
<string-array name="invidious_theme">
<item>Ignore</item>
<item>Remove</item>

View File

@ -1,4 +1,4 @@
<resources>
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat">
@ -10,6 +10,8 @@
<item name="android:colorBackground">@color/colorPrimaryDark</item>
<item name="android:textColor">@color/textColor</item>
<item name="alertDialogTheme">@style/AppThemeDialog</item>
<item name="android:navigationBarColor" tools:targetApi="lollipop">@color/colorPrimary
</item>
</style>
<!-- Base application theme. -->

View File

@ -3,11 +3,11 @@
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.1'
classpath 'com.android.tools.build:gradle:4.2.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@ -17,7 +17,7 @@ buildscript {
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}

View File

@ -8,31 +8,17 @@ files:
zh-CN: zh-rCN
pt-PT: pt-rPT
pt-BR: pt-rBR
- source: /app/src/fullLinks/play/listings/en-US/full-description.txt
translation: /app/src/fullLinks/play/listings/%two_letters_code%/%original_file_name%
#update_option: update_without_changes
- source: /src/fullLinks/fastlane/metadata/android/en-US/full_description.txt
translation: >-
/src/fullLinks/fastlane/metadata/android/%two_letters_code%/%original_file_name%
languages_mapping:
two_letters_code:
zh-TW: zh-rTW
zh-CN: zh-rCN
- source: /app/src/fullLinks/play/listings/en-US/full-description.txt
translation: /app/src/lite/play/listings/%two_letters_code%/%original_file_name%
#update_option: update_without_changes
- source: /src/fullLinks/fastlane/metadata/android/en-US/short_description.txt
translation: >-
/src/fullLinks/fastlane/metadata/android/%two_letters_code%/%original_file_name%
languages_mapping:
two_letters_code:
zh-TW: zh-rTW
zh-CN: zh-rCN
- source: /app/src/fullLinks/play/listings/en-US/short-description.txt
translation: /app/src/fullLinks/play/listings/%two_letters_code%/%original_file_name%
#update_option: update_without_changes
languages_mapping:
two_letters_code:
zh-TW: zh-rTW
zh-CN: zh-rCN
- source: /app/src/fullLinks/play/listings/en-US/short-description.txt
translation: /app/src/lite/play/listings/%two_letters_code%/%original_file_name%
#update_option: update_without_changes
languages_mapping:
two_letters_code:
zh-TW: zh-rTW
zh-CN: zh-rCN

View File

@ -1,20 +1,16 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
## For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
#Fri May 07 08:38:41 CEST 2021
org.gradle.jvmargs=-Xmx2048M -Dkotlin.daemon.jvm.options\="-Xmx2048M"
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true

View File

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

View File

@ -28,4 +28,22 @@
ما هو الببليوغرام:
واجهة أمامية بديلة مجانية ومفتوحة المصدر إلى إنستغرام
مشروع Github https://github.com/cloudrac3r/bibliogram
مشروع Github https://github.com/cloudrac3r/bibliogram
ما هو Teddit:
واجهة ريديت الأمامية بديلة و حرة و مفتوحة المصدر تركز على الخصوصية.
مشروع Github https://github.com/teddit-net/teddit
ما هو سكريبي:
طرف أمامي بديل لـMedium
المصادر: https://git.sr.ht/~edwardloveall/scribe
ما هو الويكيليس:
واجهة أمامية بديلة لويكيبيديا مفتوحة المصدر تركز على الخصوصية.
مشروع: https://codeberg.org/orenom/Wikiless

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