Compare commits

...

116 Commits

Author SHA1 Message Date
karl.hudgell
c5fa250331 new icons and settings. 2021-06-23 09:09:07 +01:00
karl.hudgell
a51588ddd2 get working for bobStore 2021-06-22 19:33:08 +01:00
Hans-Christoph Steiner
b066c40176 Merge branch 'immersive-status-bar' into 'master'
Use transparent status bar color

Closes #2203

See merge request fdroid/fdroidclient!1029
2021-06-17 06:38:02 +00:00
proletarius101
bbc2c6b35a Use transparent status bar color 2021-06-17 06:37:31 +00:00
Hans-Christoph Steiner
42b0b576d1
Merge 'Use_ActivityCompat_recreate' into 'master'
* Use_ActivityCompat_recreate:
  resync gradle verification metadata
  Use ActivityCompat.recreate().

fdroid/fdroidclient!1028
2021-06-16 14:37:07 +02:00
Hans-Christoph Steiner
39f680bb24
resync gradle verification metadata 2021-06-16 14:35:10 +02:00
Isira Seneviratne
19ffd2b491 Use ActivityCompat.recreate(). 2021-06-16 12:29:32 +00:00
Hans-Christoph Steiner
a8efa1ac07 Merge branch 'mainline' into 'master'
Read additional_repos.xml from /product as well

See merge request fdroid/fdroidclient!1026
2021-06-16 12:26:29 +00:00
Chirayu Desai
240b7af585 Read additional_repos.xml from /product as well
Change-Id: Id4a99204e4be467f4e3b1d6684eeb86a19a614f2
2021-06-16 11:55:29 +00:00
Hans-Christoph Steiner
345915cdf4 Merge branch '2126-scroll-search' into 'master'
Scroll to first item when search term changes

Closes #2126

See merge request fdroid/fdroidclient!1027
2021-06-16 09:32:49 +00:00
mueller-ma
d7fb1e0044 Scroll to first item when search term changes
Fixes #2126
2021-06-16 09:32:07 +00:00
Hans-Christoph Steiner
0d8018b10e Merge branch 'Replace_AsyncTask_with_RxJava_3' into 'master'
Replace AsyncTask implementations with RxJava 3.

See merge request fdroid/fdroidclient!947
2021-06-15 09:36:55 +00:00
Hans-Christoph Steiner
d9b443429d bump to latest io.reactivex.rxjava3:rxjava 2021-06-15 11:04:22 +02:00
Hans-Christoph Steiner
e698f4f8a3
revert unneeded/unrelated changes 2021-06-15 10:55:22 +02:00
Hans-Christoph Steiner
c27e1a697e
format imports using default Android Studio 4.1.2 settings 2021-06-15 10:55:20 +02:00
Isira Seneviratne
d549fb905d
fix checkstyle LineLength 2021-06-15 10:55:17 +02:00
Isira Seneviratne
c758cb60d9 Fix checkstyle issues. 2021-06-15 08:51:16 +00:00
Isira Seneviratne
eab5ef59b9 Use RxJava instead of AsyncTask to handle updates. 2021-06-15 08:51:16 +00:00
Isira Seneviratne
c0a699e21e Handle server swapping using RxJava instead of AsyncTask. 2021-06-15 08:51:16 +00:00
Isira Seneviratne
242662d02a Create new repos using RxJava instead of AsyncTask. 2021-06-15 08:51:16 +00:00
Isira Seneviratne
e1ca1552f7 Generate a QR bitmap using RxJava instead of AsyncTask. 2021-06-15 08:51:16 +00:00
Isira Seneviratne
93a160b40d Use RxJava 3 types in InstalledAppProviderService. 2021-06-15 08:51:16 +00:00
Isira Seneviratne
5fad229dbe Update RxJava to version 3. 2021-06-15 08:51:16 +00:00
Hans-Christoph Steiner
43a809490c use synchronized for methods that override synchronized methods 2021-06-14 16:36:42 +02:00
Hans-Christoph Steiner
a02ba42cf9
version code 1013001 2021-06-02 22:55:24 +02:00
Hans-Christoph Steiner
3ca9d47aae
update CHANGELOG 2021-06-02 22:55:22 +02:00
Hans-Christoph Steiner
c3e81e0f45
document constant that is used externally
refs #2147
2021-06-02 22:55:20 +02:00
Hans-Christoph Steiner
c7fd1f186b
Android Studio Ctrl-Alt-L code formatting 2021-06-02 22:55:18 +02:00
Hans-Christoph Steiner
ed2b119f33
update PGP key for new expiration date
closes admin#220
closes fdroidclient#2093
2021-06-02 22:55:14 +02:00
Hans-Christoph Steiner
465e92f8bc Merge branch 'TLSv1.2-min' into 'master'
bump netcipher to 2.2.0-alpha to get TorServices and TLSv1.2 min

See merge request fdroid/fdroidclient!1023
2021-06-02 20:33:33 +00:00
Hans-Christoph Steiner
09c7b21fd8
bump netcipher to 2.2.0-alpha to get TorServices and TLSv1.2 min
NetCipher provides the interface for starting Tor on demand.  It also
provides the mechanism to upgrade the TLS settings to the best possible,
based on what each device is capable of.
2021-06-02 22:02:29 +02:00
Hans-Christoph Steiner
6671683d08
fix format strings 2021-06-02 22:02:27 +02:00
Hans-Christoph Steiner
9e6d931e3b
fix lint Typo: "internett" is usually capitalized as "Internett"
sed -i 's,internett,Internett,g' app/src/main/res/values-nb/strings.xml
2021-06-02 22:02:20 +02:00
Kristoffer Grundström
64c349e39a Translated using Weblate: Swedish (sv) by Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Currently translated at 99.7% (467 of 468 strings)

Co-authored-by: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/sv/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Klemen Skerbiš
bea8b77538 Translated using Weblate: Slovenian (sl) by Klemen Skerbiš <klemen.skerbis1@gmail.com>
Currently translated at 96.7% (453 of 468 strings)

Co-authored-by: Klemen Skerbiš <klemen.skerbis1@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/sl/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Слободан Симић(Slobodan Simić)
480e98144d Translated using Weblate: Serbian (sr) by Слободан Симић(Slobodan Simić) <slsimic@gmail.com>
Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Serbian (sr) by Слободан Симић(Slobodan Simić) <slsimic@gmail.com>

Currently translated at 13.8% (5 of 36 strings)

Translated using Weblate: Serbian (sr) by Слободан Симић(Slobodan Simić) <slsimic@gmail.com>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Слободан Симић(Slobodan Simić) <slsimic@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/sr/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/sr/
Translation: F-Droid/F-Droid
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
Roman Leo
7037bc3e9c Translated using Weblate: German (de) by Roman Leo <roman.leo@gmx.de>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Roman Leo <roman.leo@gmx.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/de/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Software In Interlingua
4e241f9b1b Added translation using Weblate: Interlingua (ia) by Software In Interlingua <softinterlingua@gmail.com>
Co-authored-by: Software In Interlingua <softinterlingua@gmail.com>
2021-06-02 20:05:42 +02:00
GnuPGを使うべきだ
79ea0a08c3 Translated using Weblate: Japanese (ja) by GnuPGを使うべきだ <dieeeazpnnqbpddh@cock.email>
Currently translated at 97.0% (454 of 468 strings)

Co-authored-by: GnuPGを使うべきだ <dieeeazpnnqbpddh@cock.email>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/ja/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
vancha
e02b8cd80e Translated using Weblate: Frisian (fy) by vancha <tjipke@tutanota.com>
Currently translated at 21.5% (101 of 468 strings)

Added translation using Weblate: Frisian (fy) by vancha <tjipke@tutanota.com>

Co-authored-by: vancha <tjipke@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/fy/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Translator
ba56933e87 Translated using Weblate: Hindi (hi) by Translator <pahatih716@to200.com>
Currently translated at 99.3% (465 of 468 strings)

Co-authored-by: Translator <pahatih716@to200.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/hi/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Myeongjin Lee
45ad90bfbc Translated using Weblate: Korean (ko) by Myeongjin Lee <aranet100@gmail.com>
Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Korean (ko) by Myeongjin Lee <aranet100@gmail.com>

Currently translated at 97.6% (457 of 468 strings)

Co-authored-by: Myeongjin Lee <aranet100@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/ko/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
random r
35f6e25d18 Translated using Weblate: Italian (it) by random r <epsilin@yopmail.com>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: random r <epsilin@yopmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/it/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Besnik Bleta
b031cf3d07 Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/sq/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
moar pics
3821b9e6d6 Translated using Weblate: Albanian (sq) by moar pics <m0arpicsss@gmail.com>
Currently translated at 99.5% (466 of 468 strings)

Co-authored-by: moar pics <m0arpicsss@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/sq/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Jonas Matisen
21354b76ff Translated using Weblate: Norwegian Bokmål (nb) by Jonas Matisen <hdsumo@protonmail.ch>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Jonas Matisen <hdsumo@protonmail.ch>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/nb_NO/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
nautilusx
602c203495 Translated using Weblate: German (de) by nautilusx <translate@disroot.org>
Currently translated at 100.0% (36 of 36 strings)

Translated using Weblate: German (de) by nautilusx <translate@disroot.org>

Currently translated at 100.0% (36 of 36 strings)

Co-authored-by: nautilusx <translate@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/de/
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
Watson15683
0ead57926c Translated using Weblate: German (de) by Watson15683 <peter.parker2@tutanota.com>
Currently translated at 100.0% (36 of 36 strings)

Co-authored-by: Watson15683 <peter.parker2@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/de/
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
Keunes
002b01823e Translated using Weblate: Dutch (nl) by Keunes <koen.glotzbach@gmail.com>
Currently translated at 99.7% (467 of 468 strings)

Co-authored-by: Keunes <koen.glotzbach@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/nl/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Karl Ove Hufthammer
45ed83501e Translated using Weblate: Norwegian Nynorsk (nn) by Karl Ove Hufthammer <karl@huftis.org>
Currently translated at 100.0% (36 of 36 strings)

Translated using Weblate: Norwegian Nynorsk (nn) by Karl Ove Hufthammer <karl@huftis.org>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Karl Ove Hufthammer <karl@huftis.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/nn/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/nn/
Translation: F-Droid/F-Droid
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
WaldiS
2c69c5ccf3 Translated using Weblate: Polish (pl) by WaldiS <sto@tutanota.de>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: WaldiS <sto@tutanota.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/pl/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Manuela Silva
e52b8a27d6 Translated using Weblate: Portuguese (Portugal) (pt-rPT) by Manuela Silva <mmsrs@sky.com>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Manuela Silva <mmsrs@sky.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/pt_PT/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Nicolas Mariniello
2dc8deca59 Translated using Weblate: Italian (it) by Nicolas Mariniello <seldon1000@tutanota.com>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Nicolas Mariniello <seldon1000@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/it/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
J. Lavoie
25392dd8bd Translated using Weblate: English (United Kingdom) (en-rGB) by J. Lavoie <j.lavoie@net-c.ca>
Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Italian (it) by J. Lavoie <j.lavoie@net-c.ca>

Currently translated at 99.7% (467 of 468 strings)

Translated using Weblate: French (fr) by J. Lavoie <j.lavoie@net-c.ca>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: J. Lavoie <j.lavoie@net-c.ca>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/en_GB/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/fr/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/it/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Oymate
60a8eccb5f Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>
Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Bengali (Bangladesh) (bn-rBD) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 94.2% (441 of 468 strings)

Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 87.6% (410 of 468 strings)

Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 82.9% (388 of 468 strings)

Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 76.9% (360 of 468 strings)

Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 64.3% (301 of 468 strings)

Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 57.4% (269 of 468 strings)

Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 51.7% (242 of 468 strings)

Translated using Weblate: Bengali (Bangladesh) (bn-rBD) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 29.4% (138 of 468 strings)

Translated using Weblate: Bengali (bn) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 48.0% (225 of 468 strings)

Translated using Weblate: Bengali (Bangladesh) (bn-rBD) by Oymate <dhruboadittya96@gmail.com>

Currently translated at 29.0% (136 of 468 strings)

Co-authored-by: Oymate <dhruboadittya96@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/bn/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/bn_BD/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Priit Jõerüüt
6cf9e9d105 Translated using Weblate: Estonian (et) by Priit Jõerüüt <hwlate@joeruut.com>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/et/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Francesc Sanjuán farré
5489f0a089 Translated using Weblate: Catalan (ca) by Francesc Sanjuán farré <fran@franer.systems>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Francesc Sanjuán farré <fran@franer.systems>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/ca/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Rafael Ruiz
cc12359ba6 Translated using Weblate: Catalan (ca) by Rafael Ruiz <rafael.ruiz@upc.edu>
Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Catalan (ca) by Rafael Ruiz <rafael.ruiz@upc.edu>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Rafael Ruiz <rafael.ruiz@upc.edu>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/ca/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Milo Ivir
173aa6792a Translated using Weblate: Croatian (hr) by Milo Ivir <mail@milotype.de>
Currently translated at 92.7% (434 of 468 strings)

Co-authored-by: Milo Ivir <mail@milotype.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/hr/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Ranjith Kumar
72c0c6f4a6 Translated using Weblate: Tamil (ta) by Ranjith Kumar <sranjith096@gmail.com>
Currently translated at 36.1% (169 of 468 strings)

Co-authored-by: Ranjith Kumar <sranjith096@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/ta/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
whenwesober
5e8948b534 Translated using Weblate: Indonesian (id) by whenwesober <naomi16i_1298q@cikuh.com>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: whenwesober <naomi16i_1298q@cikuh.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/id/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
ssantos
19b7b57b43 Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>
Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>

Currently translated at 100.0% (36 of 36 strings)

Translated using Weblate: Portuguese (pt) by ssantos <ssantos@web.de>

Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Portuguese (Portugal) (pt-PT) by ssantos <ssantos@web.de>

Currently translated at 100.0% (36 of 36 strings)

Translated using Weblate: Portuguese (Portugal) (pt-rPT) by ssantos <ssantos@web.de>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/pt/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/pt_PT/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/pt/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/pt_PT/
Translation: F-Droid/F-Droid
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
Andrey
ae37d587d4 Translated using Weblate: Russian (ru) by Andrey <andrey@mailbox.org>
Currently translated at 100.0% (36 of 36 strings)

Translated using Weblate: Russian (ru) by Andrey <andrey@mailbox.org>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Andrey <andrey@mailbox.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/ru/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/ru/
Translation: F-Droid/F-Droid
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
Licaon Kter
0f635d6e80 Translated using Weblate: Romanian (ro) by Licaon Kter <licaon.kter@protonmail.com>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Licaon Kter <licaon.kter@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/ro/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Wellington Terumi Uemura
eeb5f5f2ec Translated using Weblate: Portuguese (Brazil) (pt-rBR) by Wellington Terumi Uemura <wellingtonuemura@gmail.com>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Wellington Terumi Uemura <wellingtonuemura@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/pt_BR/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
alefvanoon
4342d87b37 Translated using Weblate: Persian (fa) by alefvanoon <alefvanoon@tuta.io>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: alefvanoon <alefvanoon@tuta.io>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/fa/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Sina Carnelious
27ddf42897 Translated using Weblate: Persian (fa) by Sina Carnelious <sinacarnelious@protonmail.com>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Sina Carnelious <sinacarnelious@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/fa/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
C. Rüdinger
b642b14d5a Translated using Weblate: German (de) by C. Rüdinger <Mail-an-CR@web.de>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: C. Rüdinger <Mail-an-CR@web.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/de/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
zeritti
b2a9854e1a Translated using Weblate: Czech (cs) by zeritti <woodenmo@posteo.de>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: zeritti <woodenmo@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/cs/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Rex_sa
9d738f0d9d Translated using Weblate: Arabic (ar) by Rex_sa <rex.sa@pm.me>
Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Arabic (ar) by Rex_sa <rex.sa@pm.me>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Rex_sa <rex.sa@pm.me>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/ar/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
André Marcelo Alvarenga
d32d866393 Translated using Weblate: Portuguese (Brazil) (pt-rBR) by André Marcelo Alvarenga <andrealvarenga@gmx.net>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: André Marcelo Alvarenga <andrealvarenga@gmx.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/pt_BR/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Athanasios Plastiras
f09434869e Translated using Weblate: Greek (el) by Athanasios Plastiras <admin@plastiras.org>
Currently translated at 99.7% (467 of 468 strings)

Co-authored-by: Athanasios Plastiras <admin@plastiras.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/el/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Jeff Huang
f12f6694c4 Translated using Weblate: Chinese (Traditional) (zh-rTW) by Jeff Huang <s8321414@gmail.com>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Jeff Huang <s8321414@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/zh_Hant/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Eric
6a3d989778 Translated using Weblate: Chinese (Simplified) (zh-CN) by Eric <spice2wolf@gmail.com>
Currently translated at 100.0% (36 of 36 strings)

Translated using Weblate: Chinese (Simplified) (zh-rCN) by Eric <spice2wolf@gmail.com>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Eric <spice2wolf@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/zh_Hans/
Translation: F-Droid/F-Droid
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
bruh
de1b05d307 Translated using Weblate: Vietnamese (vi) by bruh <quangtrung02hn16@gmail.com>
Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Vietnamese (vi) by bruh <quangtrung02hn16@gmail.com>

Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Vietnamese (vi) by bruh <quangtrung02hn16@gmail.com>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: bruh <quangtrung02hn16@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/vi/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Ihor Hordiichuk
16ab3672cd Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>
Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>

Currently translated at 100.0% (36 of 36 strings)

Translated using Weblate: Ukrainian (uk) by Ihor Hordiichuk <igor_ck@outlook.com>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/uk/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/uk/
Translation: F-Droid/F-Droid
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
Oğuz Ersen
108b9e4bf4 Translated using Weblate: Turkish (tr) by Oğuz Ersen <oguzersen@protonmail.com>
Currently translated at 100.0% (36 of 36 strings)

Translated using Weblate: Turkish (tr) by Oğuz Ersen <oguzersen@protonmail.com>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/tr/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/tr/
Translation: F-Droid/F-Droid
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
Ajeje Brazorf
82d1fe8815 Translated using Weblate: Sardinian (sc) by Ajeje Brazorf <lmelonimamo@yahoo.it>
Currently translated at 5.5% (2 of 36 strings)

Translated using Weblate: Sardinian (sc) by Ajeje Brazorf <lmelonimamo@yahoo.it>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Ajeje Brazorf <lmelonimamo@yahoo.it>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/sc/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/sc/
Translation: F-Droid/F-Droid
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
S3aBreeze
ecc017845d Translated using Weblate: Russian (ru) by S3aBreeze <paperwork@evilcorp.ltd>
Currently translated at 100.0% (36 of 36 strings)

Translated using Weblate: Russian (ru) by S3aBreeze <paperwork@evilcorp.ltd>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: S3aBreeze <paperwork@evilcorp.ltd>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/ru/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/ru/
Translation: F-Droid/F-Droid
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
Wellington Terumi Uemura
6b2157fc1c Translated using Weblate: Portuguese (Brazil) (pt-rBR) by Wellington Terumi Uemura <wellingtonuemura@gmail.com>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Wellington Terumi Uemura <wellingtonuemura@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/pt_BR/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Yaron Shahrabani
b8b4da7ac9 Translated using Weblate: Hebrew (he) by Yaron Shahrabani <sh.yaron@gmail.com>
Currently translated at 100.0% (36 of 36 strings)

Translated using Weblate: Hebrew (he) by Yaron Shahrabani <sh.yaron@gmail.com>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/he/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/he/
Translation: F-Droid/F-Droid
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
Deleted User
0b3edc812c Translated using Weblate: French (fr) by Deleted User <noreply+26956@weblate.org>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Deleted User <noreply+26956@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/fr/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Ldm Public
30521f00cd Translated using Weblate: French (fr) by Ldm Public <ldmpub@gmail.com>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Ldm Public <ldmpub@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/fr/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Kkai
4eea2cb4e1 Translated using Weblate: Spanish (es) by Kkai <kaieltroll@gmail.com>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Kkai <kaieltroll@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/es/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
☆Verdulo
aa2537eb6d Translated using Weblate: Esperanto (eo) by ☆Verdulo <tomek@disroot.org>
Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: Esperanto (eo) by ☆Verdulo <tomek@disroot.org>

Currently translated at 100.0% (36 of 36 strings)

Translated using Weblate: Esperanto (eo) by ☆Verdulo <tomek@disroot.org>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: ☆Verdulo <tomek@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid-metadata/eo/
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/eo/
Translation: F-Droid/F-Droid
Translation: F-Droid/F-Droid metadata
2021-06-02 20:05:42 +02:00
Hans-Christoph Steiner
1747a0a737 Translated using Weblate: German (de) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: Hans-Christoph Steiner <hans@guardianproject.info>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/de/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
VfBFan
60c41783cc Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>
Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>

Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>

Currently translated at 100.0% (468 of 468 strings)

Translated using Weblate: German (de) by VfBFan <drop0815@posteo.de>

Currently translated at 100.0% (468 of 468 strings)

Co-authored-by: VfBFan <drop0815@posteo.de>
Translate-URL: https://hosted.weblate.org/projects/f-droid/f-droid/de/
Translation: F-Droid/F-Droid
2021-06-02 20:05:42 +02:00
Chirayu Desai
3d53b22e37 Merge branch 'master' into 'master'
Fix Trichrome Library installation status mismatch

Closes #2184

See merge request fdroid/fdroidclient!1002
2021-06-02 18:05:23 +00:00
Hans-Christoph Steiner
719a599c41 Merge branch 'theme_screenshot_placeholder' into 'master'
theme the screenshot placeholder

Closes #2127

See merge request fdroid/fdroidclient!1007
2021-06-02 16:32:52 +00:00
Conny Duck
10111b2beb theme the screenshot placeholder 2021-06-02 16:32:51 +00:00
Hans-Christoph Steiner
1fd3b308e9 Merge branch 'remove_mainactivity_saved_state' into 'master'
remove unneeded saved state handling in MainActivity

See merge request fdroid/fdroidclient!1017
2021-06-02 12:33:01 +00:00
Konrad Pozniak
ee5c2b6632 remove unneeded saved state handling in MainActivity 2021-06-02 10:24:26 +00:00
Hans-Christoph Steiner
6155bdbe20 Merge branch 'crane-shape-theming' into 'master'
Consistent round shape theming by parameters from Crane

See merge request fdroid/fdroidclient!1013
2021-06-02 10:21:14 +00:00
proletarius101
8ffbd0b44d Consistent round shape theming by parameters from Crane 2021-06-02 10:21:14 +00:00
Hans-Christoph Steiner
a5d678b72e Merge branch 'fix-bottom-navigation-bar-dark-theme-color' into 'master'
Change the bottom navigation bar to the material component one

See merge request fdroid/fdroidclient!1008
2021-05-18 12:39:58 +00:00
proletarius101
e48c49ce0c Change the bottom navigation bar to the material component one 2021-05-18 12:39:58 +00:00
Hans-Christoph Steiner
7993b04cf4 Merge branch 'mdc-text-fields' into 'master'
Migrate to MDC text fields

See merge request fdroid/fdroidclient!1012
2021-05-18 12:01:16 +00:00
proletarius101
ca54511cf6 Migrate to MDC text fields 2021-05-18 12:01:15 +00:00
Hans-Christoph Steiner
fc463810f6 Merge branch 'mdc-switches' into 'master'
Migrate to MDC switches

See merge request fdroid/fdroidclient!1014
2021-05-18 11:37:53 +00:00
proletarius101
a1369cdd67 Migrate to MDC switches 2021-05-18 11:35:52 +00:00
Hans-Christoph Steiner
3178624b4b Merge branch 'mdc-cards' into 'master'
Migrate CardView to MaterialCardView

See merge request fdroid/fdroidclient!1011
2021-05-18 10:53:43 +00:00
proletarius101
2530487483 Migrate CardView to MaterialCardView 2021-05-18 10:53:17 +00:00
Hans-Christoph Steiner
03c16e3f1b Merge branch 'fix-sort-botton-tint' into 'master'
Fix sort button tint

See merge request fdroid/fdroidclient!1010
2021-05-18 10:48:20 +00:00
proletarius101
fee35fe285 Fix sort button tint 2021-05-17 17:34:24 +00:00
Hans-Christoph Steiner
b310032cf5 Merge branch 'fix-pipeline-badge' into 'master'
Fix pipeline badge in README

See merge request fdroid/fdroidclient!1009
2021-05-17 16:55:55 +00:00
Benedikt Brückmann
07aae0674f Fix pipeline badge in README
relates to fdroid/fdroidclient#2173
2021-05-17 11:05:34 +02:00
Hans-Christoph Steiner
cbea1539f8 Merge branch 'fix_opencollective_badge' into 'master'
improve opencollective badge

See merge request fdroid/fdroidclient!1006
2021-05-13 22:02:32 +00:00
Konrad Pozniak
90d514ac6a improve opencollective badge 2021-05-13 21:32:21 +00:00
Hans-Christoph Steiner
97bc77b03a Merge branch 'fix_opencollective_link_not_shown' into 'master'
fix opencollective badge not shown when it is the only donation option

See merge request fdroid/fdroidclient!1005
2021-05-13 21:30:54 +00:00
Konrad Pozniak
02ee182508 fix opencollective badge not shown when it is the only donation option 2021-05-12 20:40:35 +02:00
Hans-Christoph Steiner
6e2b258eee Merge branch 'change-link-icon' into 'master'
Use the Material Design link icon (chain) for links

See merge request fdroid/fdroidclient!1004
2021-05-06 13:11:53 +00:00
proletarius101
5a183d27d1 Use the Material Design link icon for links 2021-05-05 22:21:03 +08:00
Oliver Scott
b52c7ca39a Remove duplicate entries from installed packages list 2021-04-30 13:27:19 +00:00
Oliver Scott
e677d815d4 Sync installed app database with package manager on PACKAGE_CHANGED for shared libraries 2021-04-30 13:27:19 +00:00
Hans-Christoph Steiner
471d2b86c7 Merge branch 'update-material-componnets-library' into 'master'
Update material components library to 1.3.0

See merge request fdroid/fdroidclient!1003
2021-04-28 16:34:47 +00:00
proletarius101
aaf08fea0c Update material components library to 1.3.0 2021-04-28 19:17:05 +08:00
137 changed files with 1989 additions and 3833 deletions

View File

@ -1,3 +1,11 @@
### 1.13-alpha1 (2021-06-02)
* Stop repeated updates of Trichrome Library
* More changes to follow Material Design (@proletarius101)
* Improve OpenCollective badge (@ConnyDuck)
### 1.13-alpha0 (2021-04-22)
* Theme support tied to built-in Android themes (@proletarius101)

View File

@ -1,6 +1,6 @@
# F-Droid Client
[![build status](https://gitlab.com/fdroid/fdroidclient/badges/master/build.svg)](https://gitlab.com/fdroid/fdroidclient/builds)
[![build status](https://gitlab.com/fdroid/fdroidclient/badges/master/pipeline.svg)](https://gitlab.com/fdroid/fdroidclient/-/jobs)
[![Translation status](https://hosted.weblate.org/widgets/f-droid/-/svg-badge.svg)](https://hosted.weblate.org/engage/f-droid/)
Client for [F-Droid](https://f-droid.org), the Free Software repository system

View File

@ -21,16 +21,16 @@ def basicApplicationId = "org.fdroid.basic"
def privilegedExtensionApplicationId = '"org.fdroid.fdroid.privileged"'
android {
compileSdkVersion 29
compileSdkVersion 30
defaultConfig {
versionCode 1013000
versionCode 1013001
versionName getVersionName()
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
minSdkVersion 22
minSdkVersion 24
//noinspection ExpiredTargetSdkVersion
targetSdkVersion 25
targetSdkVersion 28
/*
The Android Testing Support Library collects analytics to continuously improve the testing
experience. More specifically, it uploads a hash of the package name of the application
@ -142,10 +142,9 @@ android {
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'androidx.preference:preference:1.1.1'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
@ -153,18 +152,19 @@ dependencies {
implementation 'androidx.palette:palette:1.0.0'
implementation 'androidx.work:work-runtime:2.4.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
implementation 'com.google.zxing:core:3.3.3'
implementation 'info.guardianproject.netcipher:netcipher:2.0.0-beta1'
implementation 'info.guardianproject.netcipher:netcipher:2.2.0-alpha'
implementation 'info.guardianproject.panic:panic:1.0'
implementation 'commons-io:commons-io:2.6'
implementation 'commons-net:commons-net:3.6'
implementation 'ch.acra:acra:4.9.1'
implementation 'io.reactivex:rxjava:1.1.0'
implementation 'com.hannesdorfmann:adapterdelegates3:3.0.1'
implementation 'com.ashokvarma.android:bottom-navigation-bar:2.0.5'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.9'
implementation 'com.fasterxml.jackson.core:jackson-core:2.11.1'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.11.1'

View File

@ -31,13 +31,6 @@
public *;
}
# The rxjava library depends on sun.misc.Unsafe, which is unavailable on Android
# The rxjava team is aware of this, and mention in the docs that they only use
# the unsafe functionality if the platform supports it.
# - https://github.com/ReactiveX/RxJava/issues/1415#issuecomment-48390883
# - https://github.com/ReactiveX/RxJava/blob/1.x/src/main/java/rx/internal/util/unsafe/UnsafeAccess.java#L23
-dontwarn rx.internal.util.**
-keepattributes *Annotation*,EnclosingMethod,Signature
-keepnames class com.fasterxml.jackson.** { *; }
-dontwarn com.fasterxml.jackson.databind.ext.**

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -28,7 +28,7 @@ import org.fdroid.fdroid.nearby.peers.Peer;
import java.util.ArrayList;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.SwitchCompat;
import com.google.android.material.switchmaterial.SwitchMaterial;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import cc.mvdan.accesspoint.WifiApControl;
@ -79,7 +79,7 @@ public class StartSwapView extends SwapView {
@Nullable /* Emulators typically don't have bluetooth adapters */
private final BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
private SwitchCompat bluetoothSwitch;
private SwitchMaterial bluetoothSwitch;
private TextView viewBluetoothId;
private TextView textBluetoothVisible;
private TextView viewWifiId;
@ -175,7 +175,7 @@ public class StartSwapView extends SwapView {
textBluetoothVisible = findViewById(R.id.bluetooth_visible);
bluetoothSwitch = (SwitchCompat) findViewById(R.id.switch_bluetooth);
bluetoothSwitch = (SwitchMaterial) findViewById(R.id.switch_bluetooth);
bluetoothSwitch.setOnCheckedChangeListener(onBluetoothSwitchToggled);
bluetoothSwitch.setChecked(SwapService.getBluetoothVisibleUserPreference());
bluetoothSwitch.setEnabled(true);

View File

@ -1,6 +1,5 @@
package org.fdroid.fdroid.nearby;
import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
@ -13,11 +12,17 @@ import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.IBinder;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.core.app.ServiceCompat;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.NotificationHelper;
import org.fdroid.fdroid.Preferences;
@ -30,7 +35,6 @@ import org.fdroid.fdroid.data.Schema;
import org.fdroid.fdroid.nearby.peers.Peer;
import org.fdroid.fdroid.net.Downloader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
@ -41,13 +45,11 @@ import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.core.app.ServiceCompat;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import cc.mvdan.accesspoint.WifiApControl;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Completable;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
/**
* Central service which manages all of the different moving parts of swap which are required
@ -109,46 +111,6 @@ public class SwapService extends Service {
UpdateService.updateRepoNow(this, peer.getRepoAddress());
}
@SuppressLint("StaticFieldLeak")
private void askServerToSwapWithUs(final Repo repo) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... args) {
String swapBackUri = Utils.getLocalRepoUri(FDroidApp.repo).toString();
HttpURLConnection conn = null;
try {
URL url = new URL(repo.address.replace("/fdroid/repo", "/request-swap"));
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream outputStream = conn.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(outputStream);
writer.write("repo=" + swapBackUri);
writer.flush();
writer.close();
outputStream.close();
int responseCode = conn.getResponseCode();
Utils.debugLog(TAG, "Asking server at " + repo.address + " to swap with us in return (by " +
"POSTing to \"/request-swap\" with repo \"" + swapBackUri + "\"): " + responseCode);
} catch (IOException e) {
Log.e(TAG, "Error while asking server to swap with us", e);
Intent intent = new Intent(Downloader.ACTION_INTERRUPTED);
intent.setData(Uri.parse(repo.address));
intent.putExtra(Downloader.EXTRA_ERROR_MESSAGE, e.getLocalizedMessage());
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
} finally {
if (conn != null) {
conn.disconnect();
}
}
return null;
}
}.execute();
}
private Repo ensureRepoExists(@NonNull Peer peer) {
// TODO: newRepoConfig.getParsedUri() will include a fingerprint, which may not match with
// the repos address in the database. Not sure on best behaviour in this situation.
@ -342,12 +304,15 @@ public class SwapService extends Service {
@Nullable
private Timer timer;
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
public class Binder extends android.os.Binder {
public SwapService getService() {
return SwapService.this;
}
}
@Override
public void onCreate() {
super.onCreate();
startForeground(NOTIFICATION, createNotification());
@ -397,6 +362,45 @@ public class SwapService extends Service {
BonjourManager.setVisible(this, getWifiVisibleUserPreference() || getHotspotActivatedUserPreference());
}
private void askServerToSwapWithUs(final Repo repo) {
compositeDisposable.add(
Completable.fromAction(() -> {
String swapBackUri = Utils.getLocalRepoUri(FDroidApp.repo).toString();
HttpURLConnection conn = null;
try {
URL url = new URL(repo.address.replace("/fdroid/repo", "/request-swap"));
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
try (OutputStream outputStream = conn.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(outputStream)) {
writer.write("repo=" + swapBackUri);
writer.flush();
}
int responseCode = conn.getResponseCode();
Utils.debugLog(TAG, "Asking server at " + repo.address + " to swap with us in return (by " +
"POSTing to \"/request-swap\" with repo \"" + swapBackUri + "\"): " + responseCode);
} finally {
if (conn != null) {
conn.disconnect();
}
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(e -> {
Intent intent = new Intent(Downloader.ACTION_INTERRUPTED);
intent.setData(Uri.parse(repo.address));
intent.putExtra(Downloader.EXTRA_ERROR_MESSAGE, e.getLocalizedMessage());
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
})
.subscribe()
);
}
/**
* This is for setting things up for when the {@code SwapService} was
* started by the user clicking on the initial start button. The things
@ -420,6 +424,8 @@ public class SwapService extends Service {
@Override
public void onDestroy() {
compositeDisposable.dispose();
Utils.debugLog(TAG, "Destroying service, will disable swapping if required, and unregister listeners.");
Preferences.get().unregisterLocalRepoHttpsListeners(httpsEnabledListener);
localBroadcastManager.unregisterReceiver(onWifiChange);

View File

@ -34,7 +34,18 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.switchmaterial.SwitchMaterial;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
@ -54,7 +65,6 @@ import org.fdroid.fdroid.net.BluetoothDownloader;
import org.fdroid.fdroid.net.Downloader;
import org.fdroid.fdroid.net.HttpDownloader;
import org.fdroid.fdroid.qr.CameraCharacteristicsChecker;
import org.fdroid.fdroid.qr.QrGenAsyncTask;
import org.fdroid.fdroid.views.main.MainActivity;
import java.util.Date;
@ -65,17 +75,8 @@ import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.SwitchCompat;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import cc.mvdan.accesspoint.WifiApControl;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
import static org.fdroid.fdroid.views.main.MainActivity.ACTION_REQUEST_SWAP;
@ -118,6 +119,8 @@ public class SwapWorkflowActivity extends AppCompatActivity {
@LayoutRes
private int currentSwapViewLayoutRes = STEP_INTRO;
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
public static void requestSwap(Context context, String repo) {
requestSwap(context, Uri.parse(repo));
}
@ -235,6 +238,7 @@ public class SwapWorkflowActivity extends AppCompatActivity {
@Override
protected void onDestroy() {
compositeDisposable.dispose();
localBroadcastManager.unregisterReceiver(downloaderInterruptedReceiver);
unbindService(serviceConnection);
super.onDestroy();
@ -775,7 +779,7 @@ public class SwapWorkflowActivity extends AppCompatActivity {
private final BroadcastReceiver bluetoothScanModeChanged = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
SwitchCompat bluetoothSwitch = container.findViewById(R.id.switch_bluetooth);
SwitchMaterial bluetoothSwitch = container.findViewById(R.id.switch_bluetooth);
TextView textBluetoothVisible = container.findViewById(R.id.bluetooth_visible);
if (bluetoothSwitch == null || textBluetoothVisible == null
|| !BluetoothManager.ACTION_STATUS.equals(intent.getAction())) {
@ -929,18 +933,23 @@ public class SwapWorkflowActivity extends AppCompatActivity {
ImageView qrImage = container.findViewById(R.id.wifi_qr_code);
if (qrUriString != null && qrImage != null) {
Utils.debugLog(TAG, "Encoded swap URI in QR Code: " + qrUriString);
new QrGenAsyncTask(SwapWorkflowActivity.this, R.id.wifi_qr_code).execute(qrUriString);
// Replace all blacks with the background blue.
qrImage.setColorFilter(new LightingColorFilter(0xffffffff, ContextCompat.getColor(this,
R.color.swap_blue)));
compositeDisposable.add(Utils.generateQrBitmap(this, qrUriString)
.subscribe(qrBitmap -> {
qrImage.setImageBitmap(qrBitmap);
final View qrWarningMessage = container.findViewById(R.id.warning_qr_scanner);
if (CameraCharacteristicsChecker.getInstance(this).hasAutofocus()) {
qrWarningMessage.setVisibility(View.GONE);
} else {
qrWarningMessage.setVisibility(View.VISIBLE);
}
// Replace all blacks with the background blue.
qrImage.setColorFilter(new LightingColorFilter(0xffffffff,
ContextCompat.getColor(this, R.color.swap_blue)));
final View qrWarningMessage = container.findViewById(R.id.warning_qr_scanner);
if (CameraCharacteristicsChecker.getInstance(this).hasAutofocus()) {
qrWarningMessage.setVisibility(View.GONE);
} else {
qrWarningMessage.setVisibility(View.VISIBLE);
}
})
);
}
}
@ -987,7 +996,7 @@ public class SwapWorkflowActivity extends AppCompatActivity {
}
});
SwitchCompat wifiSwitch = findViewById(R.id.switch_wifi);
SwitchMaterial wifiSwitch = findViewById(R.id.switch_wifi);
wifiSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
@ -1111,7 +1120,7 @@ public class SwapWorkflowActivity extends AppCompatActivity {
private final BroadcastReceiver bluetoothStatus = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
SwitchCompat bluetoothSwitch = container.findViewById(R.id.switch_bluetooth);
SwitchMaterial bluetoothSwitch = container.findViewById(R.id.switch_bluetooth);
TextView textBluetoothVisible = container.findViewById(R.id.bluetooth_visible);
TextView textDeviceIdBluetooth = container.findViewById(R.id.device_id_bluetooth);
TextView peopleNearbyText = container.findViewById(R.id.text_people_nearby);

View File

@ -13,6 +13,10 @@ import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import org.apache.commons.net.util.SubnetUtils;
import org.fdroid.fdroid.BuildConfig;
import org.fdroid.fdroid.FDroidApp;
@ -31,10 +35,8 @@ import java.security.cert.Certificate;
import java.util.Enumeration;
import java.util.Locale;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import cc.mvdan.accesspoint.WifiApControl;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
/**
* Handle state changes to the device's wifi, storing the required bits.
@ -70,6 +72,8 @@ public class WifiStateChangeService extends IntentService {
private static int previousWifiState = Integer.MIN_VALUE;
private static int wifiState;
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
public WifiStateChangeService() {
super("WifiStateChangeService");
}
@ -82,6 +86,12 @@ public class WifiStateChangeService extends IntentService {
context.startService(intent);
}
@Override
public void onDestroy() {
compositeDisposable.dispose();
super.onDestroy();
}
@Override
protected void onHandleIntent(Intent intent) {
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_LOWEST);
@ -109,7 +119,7 @@ public class WifiStateChangeService extends IntentService {
}
if (Build.VERSION.SDK_INT < 21 && wifiState == WifiManager.WIFI_STATE_ENABLED) {
UpdateService.scheduleIfStillOnWifi(this);
compositeDisposable.add(UpdateService.scheduleIfStillOnWifi(this).subscribe());
}
}
}

View File

@ -53,7 +53,7 @@
</LinearLayout>
<androidx.appcompat.widget.SwitchCompat
<com.google.android.material.switchmaterial.SwitchMaterial
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
@ -110,7 +110,7 @@
</LinearLayout>
<androidx.appcompat.widget.SwitchCompat
<com.google.android.material.switchmaterial.SwitchMaterial
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/switch_wifi"/>
@ -155,7 +155,7 @@
<Button
android:id="@+id/btn_send_fdroid"
style="@style/Widget.MaterialComponents.Button.TextButton"
style="@style/Widget.App.Button.TextButton"
android:layout_width="wrap_content"
swap:icon="@drawable/ic_fdroid_grey"
android:layout_height="wrap_content"
@ -163,7 +163,7 @@
<Button
android:id="@+id/btn_scan_qr"
style="@style/Widget.MaterialComponents.Button.TextButton"
style="@style/Widget.App.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/swap_scan_qr"

View File

@ -1,22 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<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:ignore="MenuTitle">
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MenuTitle">
<!-- android:title and android:icon are set dynamically in MainActivity -->
<item
app:showAsAction="ifRoom|withText"
android:id="@+id/latest"/>
android:id="@+id/latest"
android:enabled="true"
android:icon="@drawable/ic_latest"
android:orderInCategory="0"
android:title="@string/main_menu__latest_apps"
app:showAsAction="ifRoom|withText" />
<item
app:showAsAction="ifRoom|withText"
android:id="@+id/categories"/>
android:id="@+id/categories"
android:enabled="true"
android:icon="@drawable/ic_categories"
android:orderInCategory="1"
android:title="@string/main_menu__categories"
app:showAsAction="ifRoom|withText" />
<item
app:showAsAction="ifRoom|withText"
android:id="@+id/nearby"/>
android:id="@+id/nearby"
android:enabled="true"
android:icon="@drawable/ic_nearby"
android:orderInCategory="2"
android:title="@string/main_menu__swap_nearby"
app:showAsAction="ifRoom|withText" />
<item
app:showAsAction="ifRoom|withText"
android:id="@+id/updates"/>
android:id="@+id/updates"
android:enabled="true"
android:icon="@drawable/ic_updates"
android:orderInCategory="3"
android:title="@string/main_menu__updates"
app:showAsAction="ifRoom|withText" />
<item
app:showAsAction="ifRoom|withText"
android:id="@+id/settings"/>
android:id="@+id/settings"
android:enabled="true"
android:icon="@drawable/ic_settings"
android:orderInCategory="4"
android:title="@string/menu_settings"
app:showAsAction="ifRoom|withText" />
</menu>

View File

@ -60,7 +60,7 @@
android:description="@string/app_description"
android:fullBackupContent="@xml/backup_rules"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:label="BobStore"
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="true"
android:theme="@style/Theme.App">

View File

@ -160,6 +160,7 @@ public class FDroidApp extends Application implements androidx.work.Configuratio
/**
* Apply pure black background in dark theme setting. Must be called in every activity's
* {@link AppCompatActivity#onCreate()}, before super.onCreate().
*
* @param activity The activity to apply the setting.
*/
public void applyPureBlackBackgroundInDarkTheme(AppCompatActivity activity) {
@ -212,7 +213,8 @@ public class FDroidApp extends Application implements androidx.work.Configuratio
private static int getCurDialogThemeResId() {
switch (curTheme) {
case dark: case night:
case dark:
case night:
return R.style.MinWithDialogBaseThemeDark;
default:
return R.style.MinWithDialogBaseThemeLight;
@ -650,7 +652,7 @@ public class FDroidApp extends Application implements androidx.work.Configuratio
/**
* Put proxy settings (or Tor settings) globally into effect based on whats configured in Preferences.
*
* <p>
* Must be called on App startup and after every proxy configuration change.
*/
public static void configureProxy(Preferences preferences) {

View File

@ -24,7 +24,7 @@ class ProgressBufferedInputStream extends BufferedInputStream {
}
@Override
public int read(@NonNull byte[] buffer, int byteOffset, int byteCount) throws IOException {
public synchronized int read(@NonNull byte[] buffer, int byteOffset, int byteCount) throws IOException {
if (progressListener != null) {
currentBytes += byteCount;
/* don't send every change to keep things efficient. 333333 bytes to keep all

View File

@ -30,7 +30,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Process;
import android.os.SystemClock;
@ -51,15 +50,18 @@ import org.fdroid.fdroid.installer.InstallManagerService;
import org.fdroid.fdroid.net.BluetoothDownloader;
import org.fdroid.fdroid.net.ConnectivityMonitorService;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import androidx.annotation.NonNull;
import androidx.core.app.JobIntentService;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Completable;
import io.reactivex.rxjava3.schedulers.Schedulers;
public class UpdateService extends JobIntentService {
@ -81,6 +83,13 @@ public class UpdateService extends JobIntentService {
public static final int STATUS_ERROR_LOCAL_SMALL = 4;
public static final int STATUS_INFO = 5;
/**
* This number should never change, it is used by ROMs to trigger
* the first background update of F-Droid during setup.
*
* @see <a href="https://gitlab.com/fdroid/fdroidclient/-/issues/2147">Add a way to trigger an index update externally</a>
* @see <a href="https://review.calyxos.org/c/CalyxOS/platform_packages_apps_SetupWizard/+/3461"/>Schedule F-Droid index update on initialization and network connection</a>
*/
private static final int JOB_ID = 0xfedcba;
private static final int NOTIFY_ID_UPDATING = 0;
@ -208,42 +217,30 @@ public class UpdateService extends JobIntentService {
* unlimited networks over metered networks for index updates and auto
* downloads of app updates. Starting with {@code android-21}, this uses
* {@link android.app.job.JobScheduler} instead.
*
* @return a {@link Completable} that schedules the update. If this process is already running,
* a {@code Completable} that completes immediately is returned.
*/
public static void scheduleIfStillOnWifi(Context context) {
@NonNull
public static Completable scheduleIfStillOnWifi(Context context) {
if (Build.VERSION.SDK_INT >= 21) {
throw new IllegalStateException("This should never be used on android-21 or newer!");
}
if (isScheduleIfStillOnWifiRunning || !Preferences.get().isBackgroundDownloadAllowed()) {
return;
return Completable.complete();
}
isScheduleIfStillOnWifiRunning = true;
new StillOnWifiAsyncTask(context).execute();
}
private static final class StillOnWifiAsyncTask extends AsyncTask<Void, Void, Void> {
private final WeakReference<Context> contextWeakReference;
private StillOnWifiAsyncTask(Context context) {
this.contextWeakReference = new WeakReference<>(context);
}
@Override
protected Void doInBackground(Void... voids) {
Context context = contextWeakReference.get();
try {
Thread.sleep(120000);
if (Preferences.get().isBackgroundDownloadAllowed()) {
Utils.debugLog(TAG, "scheduling update because there is good internet");
schedule(context);
}
} catch (Throwable e) { // NOPMD
Utils.debugLog(TAG, e.getMessage());
}
isScheduleIfStillOnWifiRunning = false;
return null;
}
return Completable.timer(2, TimeUnit.MINUTES)
.andThen(Completable.fromAction(() -> {
if (Preferences.get().isBackgroundDownloadAllowed()) {
Utils.debugLog(TAG, "scheduling update because there is good internet");
schedule(context);
}
isScheduleIfStillOnWifiRunning = false;
}))
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread());
}
public static void stopNow(Context context) {

View File

@ -27,6 +27,7 @@ import android.content.pm.Signature;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Build;
@ -44,11 +45,15 @@ import android.text.style.TypefaceSpan;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.Display;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.Toast;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.encode.Contents;
import com.google.zxing.encode.QRCodeEncoder;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
@ -95,7 +100,11 @@ import java.util.regex.Pattern;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.schedulers.Schedulers;
public final class Utils {
@ -483,12 +492,7 @@ public final class Utils {
*/
public static DisplayImageOptions.Builder getDefaultDisplayImageOptionsBuilder() {
if (defaultDisplayImageOptionsBuilder == null) {
defaultDisplayImageOptionsBuilder = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(false)
.bitmapConfig(Bitmap.Config.RGB_565)
.imageScaleType(ImageScaleType.EXACTLY);
defaultDisplayImageOptionsBuilder = createDefaultDisplayImageOptionsBuilder();
}
return defaultDisplayImageOptionsBuilder;
}
@ -500,7 +504,7 @@ public final class Utils {
*/
public static DisplayImageOptions getRepoAppDisplayImageOptions() {
if (repoAppDisplayImageOptions == null) {
repoAppDisplayImageOptions = getDefaultDisplayImageOptionsBuilder()
repoAppDisplayImageOptions = createDefaultDisplayImageOptionsBuilder()
.showImageOnLoading(R.drawable.ic_repo_app_default)
.showImageForEmptyUri(R.drawable.ic_repo_app_default)
.showImageOnFail(R.drawable.ic_repo_app_default)
@ -510,6 +514,15 @@ public final class Utils {
return repoAppDisplayImageOptions;
}
private static DisplayImageOptions.Builder createDefaultDisplayImageOptionsBuilder() {
return new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(false)
.bitmapConfig(Bitmap.Config.RGB_565)
.imageScaleType(ImageScaleType.EXACTLY);
}
/**
* If app has an iconUrl we feed that to UIL, otherwise we ask the PackageManager which will
* return the app's icon directly when the app is installed.
@ -982,6 +995,27 @@ public final class Utils {
}
}
@NonNull
public static Single<Bitmap> generateQrBitmap(@NonNull final AppCompatActivity activity,
@NonNull final String qrData) {
return Single.fromCallable(() -> {
Display display = activity.getWindowManager().getDefaultDisplay();
Point outSize = new Point();
display.getSize(outSize);
final int x = outSize.x;
final int y = outSize.y;
final int qrCodeDimension = Math.min(x, y);
debugLog(TAG, "generating QRCode Bitmap of " + qrCodeDimension + "x" + qrCodeDimension);
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData, null,
Contents.Type.TEXT, BarcodeFormat.QR_CODE.toString(), qrCodeDimension);
return qrCodeEncoder.encodeAsBitmap();
})
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(throwable -> Log.e(TAG, "Could not encode QR as bitmap", throwable));
}
/**
* Keep an instance of this class as an field in an AppCompatActivity for figuring out whether the on
* screen keyboard is currently visible or not.

View File

@ -9,6 +9,8 @@ import org.fdroid.fdroid.R;
import androidx.appcompat.app.AlertDialog;
import com.google.android.material.textfield.TextInputLayout;
public class CrashReportActivity extends BaseCrashReportDialog
implements DialogInterface.OnDismissListener, DialogInterface.OnClickListener {
@ -30,7 +32,8 @@ public class CrashReportActivity extends BaseCrashReportDialog
dialog.setOnDismissListener(this);
dialog.show();
comment = (EditText) dialog.findViewById(android.R.id.input);
TextInputLayout commentLayout = dialog.findViewById(android.R.id.input);
comment = commentLayout.getEditText();
if (savedInstanceState != null) {
comment.setText(savedInstanceState.getString(STATE_COMMENT));
}

View File

@ -322,16 +322,16 @@ public class DBHelper extends SQLiteOpenHelper {
/**
* Look for additional, initial repositories from the device's filesystem.
* These can be added as part of the ROM ({@code /system} or included later
* by vendors/OEMs ({@code /vendor}, {@code /odm}, {@code /oem}). These are
* always added at a lower priority than the repos embedded in the APK via
* These can be added as part of the ROM ({@code /system} or {@code /product}
* or included later by vendors/OEMs ({@code /vendor}, {@code /odm}, {@code /oem}).
* These are always added at a lower priority than the repos embedded in the APK via
* {@code default_repos.xml}.
* <p>
* ROM has the lowest priority, then Vendor, ODM, and OEM.
* ROM (System) has the lowest priority, then Product, Vendor, ODM, and OEM.
*/
private static List<String> loadAdditionalRepos(String packageName) {
List<String> repoItems = new LinkedList<>();
for (String root : Arrays.asList("/system", "/vendor", "/odm", "/oem")) {
for (String root : Arrays.asList("/system", "/product", "/vendor", "/odm", "/oem")) {
File additionalReposFile = new File(root + "/etc/" + packageName + "/additional_repos.xml");
try {
if (additionalReposFile.isFile()) {

View File

@ -23,18 +23,17 @@ import org.fdroid.fdroid.privileged.IPrivilegedService;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.TreeSet;
import java.util.concurrent.TimeUnit;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.JobIntentService;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
import rx.subjects.PublishSubject;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
import io.reactivex.rxjava3.subjects.PublishSubject;
/**
* Handles all updates to {@link InstalledAppProvider}, whether checking the contents
@ -66,13 +65,15 @@ public class InstalledAppProviderService extends JobIntentService {
private static final String EXTRA_PACKAGE_INFO = "org.fdroid.fdroid.data.extra.PACKAGE_INFO";
/**
* This is for notifing the users of this {@link android.content.ContentProvider}
* that the contents has changed. Since {@link Intent}s can come in slow
* This is for notifying the users of this {@link android.content.ContentProvider}
* that the contents have changed. Since {@link Intent}s can come in slow
* or fast, and this can trigger a lot of UI updates, the actual
* notifications are rate limited to one per second.
*/
private PublishSubject<String> packageChangeNotifier;
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
@Override
public void onCreate() {
super.onCreate();
@ -82,17 +83,16 @@ public class InstalledAppProviderService extends JobIntentService {
// only emit an event to the subscriber after it has not received any new events for one second.
// This ensures that we don't constantly ask our lists of apps to update as we iterate over
// the list of installed apps and insert them to the database...
packageChangeNotifier
.subscribeOn(Schedulers.newThread())
.debounce(3, TimeUnit.SECONDS)
.subscribe(new Action1<String>() {
@Override
public void call(String packageName) {
Utils.debugLog(TAG, "Notifying content providers (so they can update the relevant views).");
getContentResolver().notifyChange(AppProvider.getContentUri(), null);
getContentResolver().notifyChange(ApkProvider.getContentUri(), null);
}
});
compositeDisposable.add(
packageChangeNotifier
.subscribeOn(Schedulers.newThread())
.debounce(3, TimeUnit.SECONDS)
.subscribe(packageName -> {
Utils.debugLog(TAG, "Notifying content providers to update relevant views.");
getContentResolver().notifyChange(AppProvider.getContentUri(), null);
getContentResolver().notifyChange(ApkProvider.getContentUri(), null);
})
);
// ...alternatively, this non-debounced version will instantly emit an event about the
// particular package being updated. This is required so that our AppDetails view can update
@ -101,14 +101,18 @@ public class InstalledAppProviderService extends JobIntentService {
// only for changes to specific URIs in the AppProvider. These are triggered when a more
// general notification (e.g. to AppProvider.getContentUri()) is fired, but not when a
// sibling such as AppProvider.getHighestPriorityMetadataUri() is fired.
packageChangeNotifier.subscribeOn(Schedulers.newThread())
.subscribe(new Action1<String>() {
@Override
public void call(String packageName) {
getContentResolver()
.notifyChange(AppProvider.getHighestPriorityMetadataUri(packageName), null);
}
});
compositeDisposable.add(
packageChangeNotifier
.subscribeOn(Schedulers.newThread())
.subscribe(packageName -> getContentResolver()
.notifyChange(AppProvider.getHighestPriorityMetadataUri(packageName), null))
);
}
@Override
public void onDestroy() {
compositeDisposable.dispose();
super.onDestroy();
}
/**
@ -221,13 +225,9 @@ public class InstalledAppProviderService extends JobIntentService {
packageInfoList = context.getPackageManager().getInstalledPackages(PackageManager.GET_SIGNATURES);
}
Map<String, Long> cachedInfo = InstalledAppProvider.Helper.lastUpdateTimes(context);
Collections.sort(packageInfoList, new Comparator<PackageInfo>() {
@Override
public int compare(PackageInfo o1, PackageInfo o2) {
return o1.packageName.compareTo(o2.packageName);
}
});
for (PackageInfo packageInfo : packageInfoList) {
TreeSet<PackageInfo> packageInfoSet = new TreeSet<>((o1, o2) -> o1.packageName.compareTo(o2.packageName));
packageInfoSet.addAll(packageInfoList);
for (PackageInfo packageInfo : packageInfoSet) {
if (cachedInfo.containsKey(packageInfo.packageName)) {
if (packageInfo.lastUpdateTime < 1262300400000L // 2010-01-01 00:00
|| packageInfo.lastUpdateTime > cachedInfo.get(packageInfo.packageName)) {
@ -248,12 +248,7 @@ public class InstalledAppProviderService extends JobIntentService {
public static File getPathToInstalledApk(PackageInfo packageInfo) {
File apk = new File(packageInfo.applicationInfo.publicSourceDir);
if (apk.isDirectory()) {
FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".apk");
}
};
FilenameFilter filter = (dir, name) -> name.endsWith(".apk");
File[] files = apk.listFiles(filter);
if (files == null) {
String msg = packageInfo.packageName + " sourceDir has no APKs: " + apk.getAbsolutePath();

View File

@ -128,6 +128,7 @@ public class FileInstallerActivity extends FragmentActivity {
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_STORAGE:
// If request is cancelled, the result arrays are empty.

View File

@ -256,7 +256,7 @@ public abstract class Downloader {
}
@Override
public void mark(int readlimit) {
public synchronized void mark(int readlimit) {
toWrap.mark(readlimit);
}

View File

@ -1,74 +0,0 @@
package org.fdroid.fdroid.qr;
import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.os.AsyncTask;
import android.util.Log;
import android.view.Display;
import android.widget.ImageView;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.encode.Contents;
import com.google.zxing.encode.QRCodeEncoder;
import org.fdroid.fdroid.Utils;
import androidx.appcompat.app.AppCompatActivity;
public class QrGenAsyncTask extends AsyncTask<String, Void, Void> {
private static final String TAG = "QrGenAsyncTask";
private final AppCompatActivity activity;
private final int viewId;
private Bitmap qrBitmap;
public QrGenAsyncTask(AppCompatActivity activity, int viewId) {
this.activity = activity;
this.viewId = viewId;
}
/*
* The method for getting screen dimens changed, so this uses both the
* deprecated one and the 13+ one, and supports all Android versions.
*/
@SuppressWarnings("deprecation")
@TargetApi(13)
@Override
protected Void doInBackground(String... s) {
String qrData = s[0];
Display display = activity.getWindowManager().getDefaultDisplay();
Point outSize = new Point();
int x, y, qrCodeDimension;
display.getSize(outSize);
x = outSize.x;
y = outSize.y;
if (x < y) {
qrCodeDimension = x;
} else {
qrCodeDimension = y;
}
Utils.debugLog(TAG, "generating QRCode Bitmap of " + qrCodeDimension + "x" + qrCodeDimension);
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData, null,
Contents.Type.TEXT, BarcodeFormat.QR_CODE.toString(), qrCodeDimension);
try {
qrBitmap = qrCodeEncoder.encodeAsBitmap();
} catch (WriterException e) {
Log.e(TAG, "Could not encode QR as bitmap", e);
}
return null;
}
@Override
protected void onPostExecute(Void v) {
ImageView qrCodeImageView = (ImageView) activity.findViewById(viewId);
// If the generation takes too long for whatever reason, then this view, and indeed the entire
// activity may not be around any more.
if (qrCodeImageView != null) {
qrCodeImageView.setImageBitmap(qrBitmap);
}
}
}

View File

@ -3,10 +3,12 @@ package org.fdroid.fdroid.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import org.fdroid.fdroid.data.InstalledAppProviderService;
import org.fdroid.fdroid.installer.PrivilegedInstaller;
/**
* Receive {@link Intent#ACTION_PACKAGE_ADDED} and {@link Intent#ACTION_PACKAGE_REMOVED}
@ -32,6 +34,15 @@ public class PackageManagerReceiver extends BroadcastReceiver {
} else {
InstalledAppProviderService.delete(context, intent.getData());
}
} else if (Intent.ACTION_PACKAGE_CHANGED.equals(action) && Build.VERSION.SDK_INT >= 29 &&
PrivilegedInstaller.isExtensionInstalledCorrectly(context) ==
PrivilegedInstaller.IS_EXTENSION_INSTALLED_YES) {
String[] allowList = new String[]{"org.chromium.chrome"};
for (String allowed : allowList) {
if (allowed.equals(intent.getData().getSchemeSpecificPart())) {
InstalledAppProviderService.compareToPackageManager(context);
}
}
} else {
Log.i(TAG, "unsupported action: " + action + " " + intent);
}

View File

@ -262,7 +262,8 @@ public class AppDetailsRecyclerViewAdapter
uriIsSetAndCanBeOpened(app.getBitcoinUri()) ||
uriIsSetAndCanBeOpened(app.getLitecoinUri()) ||
uriIsSetAndCanBeOpened(app.getFlattrUri()) ||
uriIsSetAndCanBeOpened(app.getLiberapayUri());
uriIsSetAndCanBeOpened(app.getLiberapayUri()) ||
uriIsSetAndCanBeOpened(app.getOpenCollectiveUri());
}
private void notifyVersionViewsChanged() {

View File

@ -19,7 +19,6 @@
package org.fdroid.fdroid.views;
import android.annotation.SuppressLint;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ContentResolver;
@ -32,13 +31,13 @@ import android.database.Cursor;
import android.net.Uri;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.util.Pair;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@ -52,6 +51,7 @@ import android.widget.Toast;
import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textfield.TextInputLayout;
import org.fdroid.fdroid.AddRepoIntentService;
import org.fdroid.fdroid.FDroidApp;
@ -85,6 +85,11 @@ import androidx.core.content.ContextCompat;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.CursorLoader;
import androidx.loader.content.Loader;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
public class ManageReposActivity extends AppCompatActivity
implements LoaderManager.LoaderCallbacks<Cursor>, RepoAdapter.EnabledListener {
@ -106,6 +111,8 @@ public class ManageReposActivity extends AppCompatActivity
*/
private boolean finishAfterAddingRepo;
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
@Override
protected void onCreate(Bundle savedInstanceState) {
FDroidApp fdroidApp = (FDroidApp) getApplication();
@ -153,6 +160,12 @@ public class ManageReposActivity extends AppCompatActivity
});
}
@Override
protected void onDestroy() {
compositeDisposable.dispose();
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
@ -296,8 +309,10 @@ public class ManageReposActivity extends AppCompatActivity
final View view = getLayoutInflater().inflate(R.layout.addrepo, null);
MaterialAlertDialogBuilder addRepoDialogBuilder = new MaterialAlertDialogBuilder(context);
addRepoDialogBuilder.setView(view);
final EditText uriEditText = (EditText) view.findViewById(R.id.edit_uri);
final EditText fingerprintEditText = (EditText) view.findViewById(R.id.edit_fingerprint);
final TextInputLayout uriEditTextLayout = view.findViewById(R.id.edit_uri);
final TextInputLayout fingerprintEditTextLayout = view.findViewById(R.id.edit_fingerprint);
final EditText uriEditText = uriEditTextLayout.getEditText();
final EditText fingerprintEditText = fingerprintEditTextLayout.getEditText();
addRepoDialogBuilder.setTitle(R.string.repo_add_title);
addRepoDialogBuilder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
@ -568,10 +583,8 @@ public class ManageReposActivity extends AppCompatActivity
/**
* Adds a new repo to the database.
*/
@SuppressLint("StaticFieldLeak")
private void prepareToCreateNewRepo(final String originalAddress, final String fingerprint,
final String username, final String password) {
final View addRepoForm = addRepoDialog.findViewById(R.id.add_repo_form);
addRepoForm.setVisibility(View.GONE);
final View positiveButton = addRepoDialog.getButton(AlertDialog.BUTTON_POSITIVE);
@ -583,153 +596,117 @@ public class ManageReposActivity extends AppCompatActivity
final Button skip = addRepoDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
skip.setText(R.string.skip);
final AsyncTask<String, String, String> checker = new AsyncTask<String, String, String>() {
private int statusCode = -1;
private static final int REFRESH_DIALOG = Integer.MAX_VALUE;
@Override
protected String doInBackground(String... params) {
final String originalAddress = params[0];
if (fingerprintRepoMap.containsKey(fingerprint)) {
statusCode = REFRESH_DIALOG;
return originalAddress;
}
if (originalAddress.startsWith(ContentResolver.SCHEME_CONTENT)
|| originalAddress.startsWith(ContentResolver.SCHEME_FILE)) {
// TODO check whether there is read access
return originalAddress;
}
final String[] pathsToCheck = {"", "fdroid/repo", "repo"};
for (final String path : pathsToCheck) {
Utils.debugLog(TAG, "Check for repo at " + originalAddress + " with suffix '" + path + "'");
Uri.Builder builder = Uri.parse(originalAddress).buildUpon().appendEncodedPath(path);
final String addressWithoutIndex = builder.build().toString();
publishProgress(addressWithoutIndex);
if (urlRepoMap.containsKey(addressWithoutIndex)) {
statusCode = REFRESH_DIALOG;
return addressWithoutIndex;
}
final Uri uri = builder.appendPath(IndexUpdater.SIGNED_FILE_NAME).build();
try {
if (checkForRepository(uri)) {
Utils.debugLog(TAG, "Found F-Droid repo at " + addressWithoutIndex);
return addressWithoutIndex;
}
} catch (IOException e) {
Log.e(TAG, "Error while searching for repo at " + addressWithoutIndex, e);
return originalAddress;
}
if (isCancelled()) {
Utils.debugLog(TAG, "Not checking more repo addresses, because process was skipped.");
break;
}
}
return originalAddress;
final int refreshDialog = Integer.MAX_VALUE;
final Disposable disposable = Single.fromCallable(() -> {
int statusCode = -1;
if (fingerprintRepoMap.containsKey(fingerprint)) {
statusCode = refreshDialog;
return Pair.create(statusCode, originalAddress);
}
private boolean checkForRepository(Uri indexUri) throws IOException {
final URL url = new URL(indexUri.toString());
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("HEAD");
statusCode = connection.getResponseCode();
return statusCode == HttpURLConnection.HTTP_UNAUTHORIZED
|| statusCode == HttpURLConnection.HTTP_OK;
if (originalAddress.startsWith(ContentResolver.SCHEME_CONTENT)
|| originalAddress.startsWith(ContentResolver.SCHEME_FILE)) {
// TODO check whether there is read access
return Pair.create(statusCode, originalAddress);
}
@Override
protected void onProgressUpdate(String... values) {
String address = values[0];
textSearching.setText(getString(R.string.repo_searching_address, address));
final String[] pathsToCheck = {"", "fdroid/repo", "repo"};
for (final String path : pathsToCheck) {
Utils.debugLog(TAG, "Check for repo at " + originalAddress + " with suffix '" + path + "'");
Uri.Builder builder = Uri.parse(originalAddress).buildUpon().appendEncodedPath(path);
final String addressWithoutIndex = builder.build().toString();
runOnUiThread(() -> textSearching.setText(getString(R.string.repo_searching_address,
addressWithoutIndex)));
if (urlRepoMap.containsKey(addressWithoutIndex)) {
statusCode = refreshDialog;
return Pair.create(statusCode, addressWithoutIndex);
}
final Uri uri = builder.appendPath(IndexUpdater.SIGNED_FILE_NAME).build();
try {
final URL url = new URL(uri.toString());
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("HEAD");
statusCode = connection.getResponseCode();
if (statusCode == HttpURLConnection.HTTP_UNAUTHORIZED
|| statusCode == HttpURLConnection.HTTP_OK) {
Utils.debugLog(TAG, "Found F-Droid repo at " + addressWithoutIndex);
return Pair.create(statusCode, addressWithoutIndex);
}
} catch (IOException e) {
Log.e(TAG, "Error while searching for repo at " + addressWithoutIndex, e);
return Pair.create(statusCode, originalAddress);
}
}
return Pair.create(statusCode, originalAddress);
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnDispose(() -> Utils.debugLog(TAG,
"Not checking more repo addresses, because process was skipped."))
.subscribe(codeAddressPair -> {
final int statusCode = codeAddressPair.first;
final String newAddress = codeAddressPair.second;
@Override
protected void onPostExecute(final String newAddress) {
if (addRepoDialog.isShowing()) {
if (statusCode == HttpURLConnection.HTTP_UNAUTHORIZED) {
final View view = getLayoutInflater().inflate(R.layout.login, null);
final AlertDialog credentialsDialog = new AlertDialog.Builder(context)
.setView(view).create();
final EditText nameInput = (EditText) view.findViewById(R.id.edit_name);
final EditText passwordInput = (EditText) view.findViewById(R.id.edit_password);
if (addRepoDialog.isShowing()) {
if (username != null) {
nameInput.setText(username);
}
if (password != null) {
passwordInput.setText(password);
}
if (statusCode == HttpURLConnection.HTTP_UNAUTHORIZED) {
final View view = getLayoutInflater().inflate(R.layout.login, null);
final AlertDialog credentialsDialog = new AlertDialog.Builder(context)
.setView(view).create();
final EditText nameInput = (EditText) view.findViewById(R.id.edit_name);
final EditText passwordInput = (EditText) view.findViewById(R.id.edit_password);
if (username != null) {
nameInput.setText(username);
}
if (password != null) {
passwordInput.setText(password);
}
credentialsDialog.setTitle(R.string.login_title);
credentialsDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
getString(R.string.cancel),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
credentialsDialog.setTitle(R.string.login_title);
credentialsDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
getString(R.string.cancel), (dialog, which) -> {
dialog.dismiss();
// cancel parent dialog, don't add repo
addRepoDialog.cancel();
}
});
});
credentialsDialog.setButton(DialogInterface.BUTTON_POSITIVE,
getString(R.string.ok),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
createNewRepo(newAddress, fingerprint,
nameInput.getText().toString(),
passwordInput.getText().toString());
}
});
credentialsDialog.setButton(DialogInterface.BUTTON_POSITIVE,
getString(R.string.ok),
(dialog, which) -> createNewRepo(newAddress, fingerprint,
nameInput.getText().toString(),
passwordInput.getText().toString()));
credentialsDialog.show();
} else if (statusCode == REFRESH_DIALOG) {
addRepoForm.setVisibility(View.VISIBLE);
positiveButton.setVisibility(View.VISIBLE);
textSearching.setText("");
skip.setText(R.string.cancel);
skip.setOnClickListener(null);
validateRepoDetails(newAddress, fingerprint);
} else {
// create repo without username/password
createNewRepo(newAddress, fingerprint);
credentialsDialog.show();
} else if (statusCode == refreshDialog) {
addRepoForm.setVisibility(View.VISIBLE);
positiveButton.setVisibility(View.VISIBLE);
textSearching.setText("");
skip.setText(R.string.cancel);
skip.setOnClickListener(null);
validateRepoDetails(newAddress, fingerprint);
} else {
// create repo without username/password
createNewRepo(newAddress, fingerprint);
}
}
}
}
};
});
compositeDisposable.add(disposable);
skip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Still proceed with adding the repo, just don't bother searching for
// a better alternative than the one provided.
// The reason for this is that if they are not connected to the internet,
// or their internet is playing up, then you'd have to wait for several
// connection timeouts before being able to proceed.
createNewRepo(originalAddress, fingerprint);
checker.cancel(false);
}
skip.setOnClickListener(v -> {
// Still proceed with adding the repo, just don't bother searching for
// a better alternative than the one provided.
// The reason for this is that if they are not connected to the internet,
// or their internet is playing up, then you'd have to wait for several
// connection timeouts before being able to proceed.
createNewRepo(originalAddress, fingerprint);
disposable.dispose();
});
checker.execute(originalAddress);
}
/**

View File

@ -53,6 +53,7 @@ import org.fdroid.fdroid.work.CleanCacheWorker;
import org.fdroid.fdroid.work.FDroidMetricsWorker;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.preference.CheckBoxPreference;
import androidx.preference.EditTextPreference;
import androidx.preference.ListPreference;
@ -291,7 +292,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat
AppCompatActivity activity = (AppCompatActivity) getActivity();
// Theme will be applied upon activity creation
if (activity != null) {
activity.recreate();
ActivityCompat.recreate(activity);
}
}
break;

View File

@ -23,10 +23,12 @@ import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.textfield.TextInputLayout;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.NfcHelper;
@ -37,7 +39,6 @@ import org.fdroid.fdroid.Utils;
import org.fdroid.fdroid.data.Repo;
import org.fdroid.fdroid.data.RepoProvider;
import org.fdroid.fdroid.data.Schema.RepoTable;
import org.fdroid.fdroid.qr.QrGenAsyncTask;
import java.util.Arrays;
import java.util.HashSet;
@ -51,6 +52,7 @@ import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import io.reactivex.rxjava3.disposables.Disposable;
public class RepoDetailsActivity extends AppCompatActivity {
private static final String TAG = "RepoDetailsActivity";
@ -90,6 +92,8 @@ public class RepoDetailsActivity extends AppCompatActivity {
private MirrorAdapter adapterToNotify;
private Disposable disposable;
/**
* Help function to make switching between two view states easier.
* Perhaps there is a better way to do this. I recall that using Adobe
@ -140,7 +144,19 @@ public class RepoDetailsActivity extends AppCompatActivity {
Uri uri = Uri.parse(repo.address);
uri = uri.buildUpon().appendQueryParameter("fingerprint", repo.fingerprint).build();
String qrUriString = uri.toString();
new QrGenAsyncTask(this, R.id.qr_code).execute(qrUriString);
disposable = Utils.generateQrBitmap(this, qrUriString)
.subscribe(bitmap -> {
final ImageView qrCode = findViewById(R.id.qr_code);
if (qrCode != null) {
qrCode.setImageBitmap(bitmap);
}
});
}
@Override
protected void onDestroy() {
disposable.dispose();
super.onDestroy();
}
@TargetApi(14)
@ -424,8 +440,10 @@ public class RepoDetailsActivity extends AppCompatActivity {
public void showChangePasswordDialog(final View parentView) {
final View view = getLayoutInflater().inflate(R.layout.login, null);
final AlertDialog credentialsDialog = new AlertDialog.Builder(this).setView(view).create();
final EditText nameInput = view.findViewById(R.id.edit_name);
final EditText passwordInput = view.findViewById(R.id.edit_password);
final TextInputLayout nameInputLayout = view.findViewById(R.id.edit_name);
final TextInputLayout passwordInputLayout = view.findViewById(R.id.edit_password);
final EditText nameInput = nameInputLayout.getEditText();
final EditText passwordInput = passwordInputLayout.getEditText();
nameInput.setText(repo.username);
passwordInput.requestFocus();

View File

@ -3,6 +3,7 @@ package org.fdroid.fdroid.views;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@ -22,6 +23,7 @@ import org.fdroid.fdroid.data.AppProvider;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
@ -132,10 +134,14 @@ public class ScreenShotsActivity extends AppCompatActivity {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
Drawable screenShotPlaceholder = ContextCompat.getDrawable(
inflater.getContext(),
R.drawable.screenshot_placeholder
);
DisplayImageOptions displayImageOptions = Utils.getDefaultDisplayImageOptionsBuilder()
.showImageOnFail(R.drawable.screenshot_placeholder)
.showImageOnLoading(R.drawable.screenshot_placeholder)
.showImageForEmptyUri(R.drawable.screenshot_placeholder)
.showImageOnFail(screenShotPlaceholder)
.showImageOnLoading(screenShotPlaceholder)
.showImageForEmptyUri(screenShotPlaceholder)
.build();
View rootView = inflater.inflate(R.layout.activity_screenshots_page, container, false);

View File

@ -1,6 +1,7 @@
package org.fdroid.fdroid.views;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -14,6 +15,7 @@ import org.fdroid.fdroid.Utils;
import org.fdroid.fdroid.data.App;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
/**
@ -29,10 +31,12 @@ class ScreenShotsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.V
this.listener = listener;
screenshots = app.getAllScreenshots(context);
Drawable screenShotPlaceholder = ContextCompat.getDrawable(context, R.drawable.screenshot_placeholder);
displayImageOptions = Utils.getDefaultDisplayImageOptionsBuilder()
.showImageOnFail(R.drawable.screenshot_placeholder)
.showImageOnLoading(R.drawable.screenshot_placeholder)
.showImageForEmptyUri(R.drawable.screenshot_placeholder)
.showImageOnFail(screenShotPlaceholder)
.showImageOnLoading(screenShotPlaceholder)
.showImageForEmptyUri(screenShotPlaceholder)
.build();
}

View File

@ -126,10 +126,8 @@ public class AppListActivity extends AppCompatActivity implements LoaderManager.
sortImage = (ImageView) findViewById(R.id.sort);
final Drawable lastUpdated = DrawableCompat.wrap(ContextCompat.getDrawable(this,
R.drawable.ic_last_updated)).mutate();
DrawableCompat.setTint(lastUpdated, FDroidApp.isAppThemeLight() ? Color.BLACK : Color.WHITE);
final Drawable words = DrawableCompat.wrap(ContextCompat.getDrawable(AppListActivity.this,
R.drawable.ic_sort)).mutate();
DrawableCompat.setTint(words, FDroidApp.isAppThemeLight() ? Color.BLACK : Color.WHITE);
sortImage.setImageDrawable(SortClause.WORDS.equals(sortClauseSelected) ? words : lastUpdated);
sortImage.setOnClickListener(new View.OnClickListener() {
@Override
@ -268,6 +266,7 @@ public class AppListActivity extends AppCompatActivity implements LoaderManager.
public void onSearchTermsChanged(@Nullable String category, @NonNull String searchTerms) {
this.category = category;
this.searchTerms = searchTerms;
appView.scrollToPosition(0);
getSupportLoaderManager().restartLoader(0, null, this);
if (TextUtils.isEmpty(searchTerms)) {
removeSavedSearchSettings(this, SEARCH_TERMS_KEY);

View File

@ -31,20 +31,22 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.ashokvarma.bottomnavigation.BottomNavigationBar;
import com.ashokvarma.bottomnavigation.BottomNavigationItem;
import com.ashokvarma.bottomnavigation.TextBadgeItem;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.badge.BadgeDrawable;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import org.fdroid.fdroid.AppUpdateStatusManager;
import org.fdroid.fdroid.AppUpdateStatusManager.AppUpdateStatus;
import org.fdroid.fdroid.BuildConfig;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.NfcHelper;
import org.fdroid.fdroid.Preferences;
@ -61,17 +63,6 @@ import org.fdroid.fdroid.views.AppDetailsActivity;
import org.fdroid.fdroid.views.ManageReposActivity;
import org.fdroid.fdroid.views.apps.AppListActivity;
import java.lang.reflect.Field;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
/**
* Main view shown to users upon starting F-Droid.
* <p>
@ -86,7 +77,7 @@ import androidx.recyclerview.widget.RecyclerView;
* When switching from one screen to the next, we stay within this activity. The new screen will
* get inflated (if required)
*/
public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener {
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@ -103,13 +94,10 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB
private static final String ACTION_ADD_REPO = "org.fdroid.fdroid.MainActivity.ACTION_ADD_REPO";
public static final String ACTION_REQUEST_SWAP = "requestSwap";
private static final String STATE_SELECTED_MENU_ID = "selectedMenuId";
private RecyclerView pager;
private MainViewAdapter adapter;
private BottomNavigationBar bottomNavigation;
private int selectedMenuId;
private TextBadgeItem updatesBadge;
private BottomNavigationView bottomNavigation;
private BadgeDrawable updatesBadge;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@ -134,88 +122,35 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB
pager.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
}
updatesBadge = new TextBadgeItem().hide(false);
bottomNavigation = (BottomNavigationView) findViewById(R.id.bottom_navigation);
bottomNavigation.setOnNavigationItemSelectedListener(item -> {
pager.scrollToPosition(item.getOrder());
bottomNavigation = (BottomNavigationBar) findViewById(R.id.bottom_navigation);
bottomNavigation
.addItem(new BottomNavigationItem(R.drawable.ic_latest, R.string.main_menu__latest_apps));
if (BuildConfig.FLAVOR.startsWith("full")) {
bottomNavigation
.addItem(new BottomNavigationItem(R.drawable.ic_categories, R.string.main_menu__categories))
.addItem(new BottomNavigationItem(R.drawable.ic_nearby, R.string.main_menu__swap_nearby));
bottomNavigation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (bottomNavigation.getCurrentSelectedPosition() == 2) {
NearbyViewBinder.updateUsbOtg(MainActivity.this);
}
}
});
}
bottomNavigation.setTabSelectedListener(this)
.setBarBackgroundColor(getBottomNavigationBackgroundColorResId())
.setInActiveColor(R.color.bottom_nav_items)
.setActiveColor(R.color.bottom_nav_active)
.setMode(BottomNavigationBar.MODE_FIXED)
.addItem(new BottomNavigationItem(R.drawable.ic_updates, R.string.main_menu__updates)
.setBadgeItem(updatesBadge))
.addItem(new BottomNavigationItem(R.drawable.ic_settings, R.string.menu_settings))
.setAnimationDuration(0)
.initialise();
// turn off animation, scaling, and truncate labels in the middle
final LinearLayout linearLayout = bottomNavigation.findViewById(R.id.bottom_navigation_bar_item_container);
final int childCount = linearLayout.getChildCount();
for (int i = 0; i < childCount; i++) {
final View fixedBottomNavigationTab = linearLayout.getChildAt(i);
try {
Field labelScale = fixedBottomNavigationTab.getClass().getDeclaredField("labelScale");
labelScale.setAccessible(true);
labelScale.set(fixedBottomNavigationTab, 1.0f);
} catch (IllegalAccessException | NoSuchFieldException | IllegalArgumentException e) {
e.printStackTrace();
if (item.getItemId() == 2) {
NearbyViewBinder.updateUsbOtg(MainActivity.this);
}
final View container = fixedBottomNavigationTab.findViewById(R.id.fixed_bottom_navigation_container);
container.setPadding(
2,
container.getPaddingTop(),
2,
container.getPaddingBottom()
);
return true;
final TextView title = fixedBottomNavigationTab.findViewById(R.id.fixed_bottom_navigation_title);
title.setEllipsize(TextUtils.TruncateAt.MIDDLE);
title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);
}
});
updatesBadge = bottomNavigation.getOrCreateBadge(R.id.updates);
updatesBadge.setVisible(false);
IntentFilter updateableAppsFilter = new IntentFilter(AppUpdateStatusManager.BROADCAST_APPSTATUS_LIST_CHANGED);
updateableAppsFilter.addAction(AppUpdateStatusManager.BROADCAST_APPSTATUS_CHANGED);
updateableAppsFilter.addAction(AppUpdateStatusManager.BROADCAST_APPSTATUS_REMOVED);
LocalBroadcastManager.getInstance(this).registerReceiver(onUpdateableAppsChanged, updateableAppsFilter);
if (savedInstanceState != null) {
selectedMenuId = savedInstanceState.getInt(STATE_SELECTED_MENU_ID, (int) adapter.getItemId(0));
} else {
selectedMenuId = (int) adapter.getItemId(0);
}
setSelectedMenuInNav();
initialRepoUpdateIfRequired();
Intent intent = getIntent();
handleSearchOrAppViewIntent(intent);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt(STATE_SELECTED_MENU_ID, selectedMenuId);
super.onSaveInstanceState(outState);
}
private void setSelectedMenuInNav() {
bottomNavigation.selectTab(adapter.adapterPositionFromItemId(selectedMenuId));
private void setSelectedMenuInNav(int menuId) {
int position = adapter.adapterPositionFromItemId(menuId);
pager.scrollToPosition(position);
bottomNavigation.setSelectedItemId(position);
}
private void initialRepoUpdateIfRequired() {
@ -233,19 +168,13 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB
if (getIntent().hasExtra(EXTRA_VIEW_UPDATES)) {
getIntent().removeExtra(EXTRA_VIEW_UPDATES);
pager.scrollToPosition(adapter.adapterPositionFromItemId(R.id.updates));
selectedMenuId = R.id.updates;
setSelectedMenuInNav();
setSelectedMenuInNav(R.id.updates);
} else if (getIntent().hasExtra(EXTRA_VIEW_NEARBY)) {
getIntent().removeExtra(EXTRA_VIEW_NEARBY);
pager.scrollToPosition(adapter.adapterPositionFromItemId(R.id.nearby));
selectedMenuId = R.id.nearby;
setSelectedMenuInNav();
setSelectedMenuInNav(R.id.nearby);
} else if (getIntent().hasExtra(EXTRA_VIEW_SETTINGS)) {
getIntent().removeExtra(EXTRA_VIEW_SETTINGS);
pager.scrollToPosition(adapter.adapterPositionFromItemId(R.id.settings));
selectedMenuId = R.id.settings;
setSelectedMenuInNav();
setSelectedMenuInNav(R.id.settings);
}
// AppDetailsActivity and RepoDetailsActivity set different NFC actions, so reset here
@ -292,22 +221,6 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB
}
}
@Override
public void onTabSelected(int position) {
pager.scrollToPosition(position);
selectedMenuId = (int) adapter.getItemId(position);
}
@Override
public void onTabUnselected(int position) {
}
@Override
public void onTabReselected(int position) {
}
/**
* Since any app could send this {@link Intent}, and the search terms are
* fed into a SQL query, the data must be strictly sanitized to avoid
@ -455,20 +368,14 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB
private void refreshUpdatesBadge(int canUpdateCount) {
if (canUpdateCount == 0) {
updatesBadge.hide(true);
updatesBadge.setVisible(false);
updatesBadge.clearNumber();
} else {
updatesBadge.setText(Integer.toString(canUpdateCount));
updatesBadge.show(true);
updatesBadge.setNumber(canUpdateCount);
updatesBadge.setVisible(true);
}
}
private int getBottomNavigationBackgroundColorResId() {
if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
return R.color.fdroid_night;
}
return R.color.fdroid_blue;
}
private static class NonScrollingHorizontalLayoutManager extends LinearLayoutManager {
NonScrollingHorizontalLayoutManager(Context context) {
super(context, LinearLayoutManager.HORIZONTAL, false);

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/white" android:state_checked="true" />
<item android:color="@android:color/white" android:state_pressed="true" />
<item android:color="#B8D4F0" />
</selector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -1,38 +1,58 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="300dp"
android:height="50dp"
android:viewportWidth="300"
android:viewportHeight="50">
<path
android:pathData="M25.806,0.226L275.806,0.226A24,24 0,0 1,299.806 24.226L299.806,24.226A24,24 0,0 1,275.806 48.226L25.806,48.226A24,24 0,0 1,1.806 24.226L1.806,24.226A24,24 0,0 1,25.806 0.226z"
android:fillType="evenOdd">
<aapt:attr name="android:fillColor">
<gradient
android:startY="2.1030872"
android:startX="150.80646"
android:endY="48.225807"
android:endX="150.80646"
android:type="linear">
<item
android:offset="0"
android:color="#FF7ACFFF" />
<item
android:offset="1"
android:color="#FF4CBEFF" />
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M275.806,24.226m-22,0a22,22 0,1 1,44 0a22,22 0,1 1,-44 0"
android:fillColor="#ffffff"
android:fillType="evenOdd" />
<path
android:pathData="M287.316,16.252C288.886,18.516 289.806,21.262 289.806,24.226c0,2.963 -0.92,5.71 -2.49,7.974L283.688,28.573C284.401,27.283 284.806,25.803 284.806,24.226 284.806,22.649 284.401,21.168 283.688,19.879l3.627,-3.627zM283.78,12.717 L280.153,16.345C278.863,15.631 277.383,15.226 275.806,15.226c-4.97,0 -9,4.03 -9,9 0,4.97 4.03,9 9,9 1.577,0 3.058,-0.405 4.347,-1.118l3.627,3.627C281.516,37.306 278.77,38.226 275.806,38.226 268.074,38.226 261.806,31.958 261.806,24.226 261.806,16.494 268.074,10.226 275.806,10.226c2.963,0 5.71,0.92 7.974,2.49z"
android:fillColor="#3faff0"
android:fillType="evenOdd" />
<path
android:pathData="M287.316,16.252C288.886,18.516 289.806,21.262 289.806,24.226c0,2.963 -0.92,5.71 -2.49,7.974L283.688,28.573C284.401,27.283 284.806,25.803 284.806,24.226 284.806,22.649 284.401,21.168 283.688,19.879l3.627,-3.627z"
android:fillColor="#b8d5e6"
android:fillType="evenOdd" />
android:width="201.8835dp"
android:height="48dp"
android:viewportWidth="201.8835"
android:viewportHeight="48">
<path
android:pathData="M24,0L177.883,0A24,24 0,0 1,201.883 24L201.883,24A24,24 0,0 1,177.883 48L24,48A24,24 0,0 1,0 24L0,24A24,24 0,0 1,24 0z"
android:fillType="evenOdd">
<aapt:attr name="android:fillColor">
<gradient
android:startY="0.51552"
android:startX="52.883495"
android:endY="48"
android:endX="52.883495"
android:type="linear">
<item android:offset="0" android:color="#FF52BBF8"/>
<item android:offset="1" android:color="#FF2FA8EE"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M177.883,24m-22,0a22,22 0,1 1,44 0a22,22 0,1 1,-44 0"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M189.393,16.026C190.964,18.29 191.883,21.036 191.883,24c0,2.963 -0.92,5.71 -2.49,7.974L185.765,28.347C186.478,27.057 186.883,25.577 186.883,24 186.883,22.423 186.478,20.942 185.765,19.653l3.627,-3.627zM185.857,12.491 L182.23,16.119C180.94,15.405 179.46,15 177.883,15c-4.97,0 -9,4.03 -9,9 0,4.97 4.03,9 9,9 1.577,0 3.058,-0.405 4.347,-1.118l3.627,3.627C183.593,37.08 180.847,38 177.883,38 170.151,38 163.883,31.732 163.883,24 163.883,16.268 170.151,10 177.883,10c2.963,0 5.71,0.92 7.974,2.49z"
android:fillColor="#3faff0"
android:fillType="evenOdd"/>
<path
android:pathData="M189.393,16.026C190.964,18.29 191.883,21.036 191.883,24c0,2.963 -0.92,5.71 -2.49,7.974L185.765,28.347C186.478,27.057 186.883,25.577 186.883,24 186.883,22.423 186.478,20.942 185.765,19.653l3.627,-3.627z"
android:fillColor="#b8d5e6"
android:fillType="evenOdd"/>
<path
android:pathData="M25.912,33.551L25.912,14.462h6.576q2.227,0 3.398,0.273 1.641,0.378 2.799,1.367 1.51,1.276 2.253,3.268 0.755,1.979 0.755,4.531 0,2.174 -0.508,3.854 -0.508,1.68 -1.302,2.786 -0.794,1.094 -1.745,1.732 -0.938,0.625 -2.279,0.951 -1.328,0.326 -3.06,0.326zM28.438,31.298h4.076q1.888,0 2.956,-0.352 1.081,-0.352 1.719,-0.99 0.898,-0.898 1.393,-2.409 0.508,-1.523 0.508,-3.685 0,-2.995 -0.99,-4.596 -0.977,-1.615 -2.383,-2.161 -1.016,-0.391 -3.268,-0.391h-4.01z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="m46.414,24.254q0,-4.753 2.552,-7.435 2.552,-2.695 6.589,-2.695 2.643,0 4.766,1.263 2.122,1.263 3.229,3.529 1.12,2.253 1.12,5.117 0,2.904 -1.172,5.195 -1.172,2.292 -3.32,3.477 -2.148,1.172 -4.635,1.172 -2.695,0 -4.818,-1.302 -2.122,-1.302 -3.216,-3.555 -1.094,-2.253 -1.094,-4.766zM49.018,24.293q0,3.451 1.849,5.443 1.862,1.979 4.661,1.979 2.852,0 4.688,-2.005 1.849,-2.005 1.849,-5.69 0,-2.331 -0.794,-4.063 -0.781,-1.745 -2.305,-2.695 -1.51,-0.964 -3.398,-0.964 -2.682,0 -4.622,1.849 -1.927,1.836 -1.927,6.146z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M69.886,33.551L69.886,14.462h2.591l10.026,14.987L82.503,14.462h2.422v19.089h-2.591L72.308,18.551v15z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="m89.086,33.551 l7.331,-19.089h2.721l7.813,19.089h-2.878l-2.227,-5.781h-7.982l-2.096,5.781zM94.594,25.712h6.471l-1.992,-5.286q-0.911,-2.409 -1.354,-3.958 -0.365,1.836 -1.029,3.646z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M113.873,33.551L113.873,16.715h-6.289v-2.253h15.13v2.253h-6.315v16.836z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M127.37,33.551L127.37,14.462h13.802v2.253h-11.276v5.846h10.56v2.24h-10.56v6.497h11.719v2.253z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M17,7h-3c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h3c1.65,0 3,1.35 3,3s-1.35,3 -3,3h-3c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h3c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5zM8,12c0,0.55 0.45,1 1,1h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L9,11c-0.55,0 -1,0.45 -1,1zM10,15L7,15c-1.65,0 -3,-1.35 -3,-3s1.35,-3 3,-3h3c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L7,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h3c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1z"/>
</vector>

View File

@ -1,33 +1,9 @@
<vector android:height="169dp"
android:viewportHeight="169.33333"
android:viewportWidth="95.25"
android:width="92dp"
xmlns:android="http://schemas.android.com/apk/res/android">
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="80dp"
android:height="140dp"
android:viewportWidth="80"
android:viewportHeight="140">
<path
android:fillAlpha="1"
android:fillColor="#e8e8e8"
android:pathData="M1.75,0L93.5,0A1.75,1.75 0,0 1,95.25 1.75L95.25,167.59A1.75,1.75 0,0 1,93.5 169.33L1.75,169.33A1.75,1.75 0,0 1,0 167.59L0,1.75A1.75,1.75 0,0 1,1.75 0z"
android:strokeAlpha="1"
android:strokeColor="#00000000"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="0.52916664" />
<path
android:fillAlpha="1"
android:fillColor="#ffffff"
android:pathData="M40.77,53.63L54.38,53.63A1.75,1.75 0,0 1,56.13 55.37L56.13,68.98A1.75,1.75 0,0 1,54.38 70.73L40.77,70.73A1.75,1.75 0,0 1,39.03 68.98L39.03,55.37A1.75,1.75 0,0 1,40.77 53.63z"
android:strokeAlpha="1"
android:strokeColor="#00000000"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="0.52916664" />
<path
android:fillAlpha="1"
android:fillColor="#e8e8e8"
android:pathData="m41.01,67.8 l3.21,-4.2 2.46,2.79 3.26,-4.16 4.16,5.58z"
android:strokeAlpha="1"
android:strokeColor="#00000000"
android:strokeLineCap="butt"
android:strokeLineJoin="miter"
android:strokeWidth="0.26458332" />
android:pathData="M47,63L47,77L33,77L33,63h14m0,-2L33,61c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L49,63c0,-1.1 -0.9,-2 -2,-2zM42.14,69.86 L39.14,73.73L37,71.14 34,75h12z"
android:fillColor="?attr/screenshotPlaceholderIconColor"/>
</vector>

View File

@ -1,13 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
<com.google.android.material.card.MaterialCardView 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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/details_activity_padding"
app:cardBackgroundColor="?attr/appDetailsCardBackground"
app:cardCornerRadius="3dp"
app:cardElevation="3dp"
android:animateLayoutChanges="true">
<LinearLayout
@ -262,4 +259,4 @@
android:text="@string/more" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</com.google.android.material.card.MaterialCardView>

View File

@ -8,14 +8,12 @@
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<androidx.cardview.widget.CardView
<com.google.android.material.card.MaterialCardView
android:id="@+id/search_card"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="0dp"
android:layout_marginRight="0dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintEnd_toStartOf="@+id/sort"
@ -68,7 +66,7 @@
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</com.google.android.material.card.MaterialCardView>
<ImageView
android:id="@+id/sort"

View File

@ -1,16 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<com.ashokvarma.bottomnavigation.BottomNavigationBar
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
app:menu="@menu/main_activity_screens"
app:labelVisibilityMode="labeled"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/main_view_pager"

View File

@ -1,11 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/screenshot"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@null"
android:padding="@dimen/layout_horizontal_margin"
tools:src="@drawable/screenshot_placeholder"
android:fitsSystemWindows="true"/>
android:fitsSystemWindows="true">
<ImageView
android:id="@+id/screenshot"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_margin="@dimen/layout_horizontal_margin"
android:adjustViewBounds="true"
android:background="?attr/colorSurface"
android:contentDescription="@null"
android:elevation="4dp"
tools:src="@drawable/screenshot_placeholder" />
</FrameLayout>

View File

@ -3,11 +3,11 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="24dp"
android:paddingStart="24dp"
android:paddingRight="24dp"
android:paddingLeft="24dp"
android:paddingTop="20dp"
android:paddingEnd="24dp"
android:paddingTop="20dp">
android:paddingRight="24dp">
<LinearLayout
android:id="@+id/add_repo_form"
@ -15,32 +15,41 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/repo_add_url" />
<EditText
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/edit_uri"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textUri"
android:maxLines="2"
android:text="@string/https" />
android:layout_margin="4dp"
android:hint="@string/repo_add_url"
android:text="@string/https">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/repo_add_fingerprint" />
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textUri"
android:maxLines="2" />
<EditText
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/edit_fingerprint"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:digits="0123456789ABCDEFabcedf: "
android:inputType="textNoSuggestions"
android:maxLines="3"
android:typeface="monospace" />
android:hint="@string/repo_add_fingerprint"
android:typeface="monospace">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions"
android:maxLines="3" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/overwrite_message"
@ -52,31 +61,31 @@
</LinearLayout>
<TextView
android:padding="10dp"
android:textSize="16sp"
android:id="@+id/text_searching_for_repo"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:textSize="16sp"
tools:text="Searching for repository at\nhttps://www.example.com/fdroid/repo/" />
</RelativeLayout>
<!--
* Copyright (C) 2009 Roberto Jacinto
* roberto.jacinto@caixamagica.pt
*
* 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 2
* of the License, or (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-->
<!--
* Copyright (C) 2009 Roberto Jacinto
* roberto.jacinto@caixamagica.pt
*
* 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 2
* of the License, or (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-->

View File

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
<com.google.android.material.card.MaterialCardView 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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:foreground="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
@ -52,4 +51,4 @@
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</com.google.android.material.card.MaterialCardView>

View File

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
<com.google.android.material.card.MaterialCardView 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"
android:layout_width="match_parent"
android:layout_height="220dp"
android:foreground="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
@ -58,4 +57,4 @@
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</com.google.android.material.card.MaterialCardView>

View File

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
<com.google.android.material.card.MaterialCardView 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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:foreground="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
@ -53,4 +52,4 @@
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</com.google.android.material.card.MaterialCardView>

View File

@ -1,13 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
<com.google.android.material.card.MaterialCardView 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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/details_activity_padding"
app:cardBackgroundColor="?attr/appDetailsCardBackground"
app:cardCornerRadius="3dp"
app:cardElevation="3dp">
android:layout_margin="@dimen/details_activity_padding">
<LinearLayout
android:layout_width="fill_parent"
@ -32,4 +29,4 @@
app:columnCount="2" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</com.google.android.material.card.MaterialCardView>

View File

@ -1,13 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
<com.google.android.material.card.MaterialCardView 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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/details_activity_padding"
app:cardBackgroundColor="?attr/appDetailsCardBackground"
app:cardCornerRadius="3dp"
app:cardElevation="3dp"
android:animateLayoutChanges="true">
<LinearLayout
@ -263,4 +260,4 @@
android:text="@string/more" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</com.google.android.material.card.MaterialCardView>

View File

@ -29,8 +29,8 @@
android:paddingEnd="@dimen/details_activity__collapsable_lists__padding__horizontal"
android:background="?selectableItemBackground"
app:drawableEndCompat="@drawable/ic_expand_more"
app:drawableStartCompat="@drawable/ic_website"
app:drawableLeftCompat="@drawable/ic_website"
app:drawableStartCompat="@drawable/ic_link"
app:drawableLeftCompat="@drawable/ic_link"
app:drawableRightCompat="@drawable/ic_expand_more" />
</FrameLayout>

View File

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="@dimen/details_screenshot_margin"
android:padding="10dp"
app:cardCornerRadius="0dp"
app:cardElevation="3dp">
android:layout_margin="@dimen/details_screenshot_margin">
<ImageView
android:id="@+id/image"
@ -16,4 +12,4 @@
android:minWidth="@dimen/details_screenshot_width"
android:scaleType="centerCrop" />
</androidx.cardview.widget.CardView>
</com.google.android.material.card.MaterialCardView>

View File

@ -1,61 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/name"
tools:text="Business"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBaseline_toBaselineOf="@+id/view_all_button"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:textSize="18sp"
android:textColor="?attr/categoryName"
android:paddingLeft="18dp"
android:paddingStart="18dp"
android:paddingRight="18dp"
android:paddingEnd="18dp"
tools:layout_editor_absoluteX="0dp"
android:focusable="true"
android:focusableInTouchMode="true" />
android:focusableInTouchMode="true"
android:paddingStart="18dp"
android:paddingLeft="18dp"
android:paddingEnd="18dp"
android:paddingRight="18dp"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:textColor="?attr/categoryName"
android:textSize="18sp"
app:layout_constraintBaseline_toBaselineOf="@+id/view_all_button"
app:layout_constraintStart_toStartOf="parent"
tools:layout_editor_absoluteX="0dp"
tools:text="Business" />
<Button
android:id="@+id/view_all_button"
tools:text="View all 10"
style="@style/Widget.App.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:textAllCaps="true"
tools:layout_editor_absoluteX="268dp" />
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="268dp"
tools:text="View all 10" />
<FrameLayout
android:id="@+id/category_background"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="@+id/app_cards"
app:layout_constraintBottom_toBottomOf="@+id/app_cards"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/app_cards"
tools:background="#ffffbbbb" />
<org.fdroid.fdroid.views.apps.FeatureImage
android:id="@+id/category_image"
app:layout_constraintStart_toStartOf="@+id/category_background"
app:layout_constraintEnd_toEndOf="@+id/category_background"
app:layout_constraintTop_toTopOf="@+id/category_background"
app:layout_constraintBottom_toBottomOf="@+id/category_background"
android:layout_width="0dp"
android:layout_height="0dp"
tools:src="@drawable/category_graphics"
android:scaleType="fitStart"
android:importantForAccessibility="no"
tools:ignore="ContentDescription" tools:targetApi="jelly_bean"/>
android:scaleType="fitStart"
app:layout_constraintBottom_toBottomOf="@+id/category_background"
app:layout_constraintEnd_toEndOf="@+id/category_background"
app:layout_constraintStart_toStartOf="@+id/category_background"
app:layout_constraintTop_toTopOf="@+id/category_background"
tools:ignore="ContentDescription"
tools:src="@drawable/category_graphics"
tools:targetApi="jelly_bean" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/app_cards"
@ -63,14 +65,14 @@
android:layout_height="wrap_content"
android:clipToPadding="false"
android:orientation="horizontal"
android:paddingBottom="@dimen/category_preview__app_list__padding__vertical"
android:paddingTop="@dimen/category_preview__app_list__padding__vertical"
android:paddingBottom="@dimen/category_preview__app_list__padding__vertical"
app:layoutManager="LinearLayoutManager"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view_all_button"
tools:listitem="@layout/app_card_normal"/>
tools:listitem="@layout/app_card_normal" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -4,13 +4,13 @@
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="24dp"
android:paddingTop="20dp"
android:paddingRight="24dp"
android:paddingBottom="24dp"
android:paddingTop="20dp">
android:paddingBottom="24dp">
<TextView
android:id="@android:id/text1"
@ -25,13 +25,19 @@
android:layout_marginTop="20dp"
android:text="@string/crash_dialog_comment_prompt" />
<EditText
<com.google.android.material.textfield.TextInputLayout
android:id="@android:id/input"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:layout_marginTop="20dp" />
android:layout_marginTop="20dp">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</ScrollView>

View File

@ -3,40 +3,50 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="24dp"
android:paddingStart="24dp"
android:paddingRight="24dp"
android:paddingLeft="24dp"
android:paddingTop="20dp"
android:paddingEnd="24dp"
android:paddingTop="20dp">
android:paddingRight="24dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/login_name" />
<EditText
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/edit_name"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions"
android:maxLines="1" />
android:layout_margin="4dp"
android:hint="@string/login_name">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/login_password" />
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions"
android:maxLines="1" />
<EditText
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/edit_password"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:maxLines="1" />
android:layout_margin="4dp"
android:hint="@string/login_password">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:maxLines="1" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/overwrite_message"
@ -48,12 +58,12 @@
</LinearLayout>
<TextView
android:padding="10dp"
android:textSize="16sp"
android:id="@+id/text_searching_for_repo"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:textSize="16sp"
tools:text="Searching for repository at\nhttps://www.example.com/fdroid/repo/" />
</RelativeLayout>

View File

@ -56,7 +56,7 @@
</LinearLayout>
<androidx.appcompat.widget.SwitchCompat
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/repo_switch"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<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:ignore="MenuTitle">
<!-- android:title and android:icon are set dynamically in MainActivity -->
<item
android:id="@+id/latest"
android:enabled="true"
android:icon="@drawable/ic_latest"
android:orderInCategory="0"
android:title="@string/main_menu__latest_apps"
app:showAsAction="ifRoom|withText" />
<item
android:id="@+id/updates"
android:enabled="true"
android:icon="@drawable/ic_updates"
android:orderInCategory="1"
android:title="@string/main_menu__updates"
app:showAsAction="ifRoom|withText" />
<item
android:id="@+id/settings"
android:enabled="true"
android:icon="@drawable/ic_settings"
android:orderInCategory="2"
android:title="@string/menu_settings"
app:showAsAction="ifRoom|withText" />
</menu>

View File

@ -358,12 +358,12 @@
<string name="app_list__dismiss_vulnerable_app">تخطي الحساسية</string>
<string name="updates__app_with_known_vulnerability__prompt_uninstall">لقد وجدنا ثغرة في %1$s. نحن نوصي بإلغاء تثبيت هذا التطبيق في الحال.</string>
<string name="updates__app_with_known_vulnerability__prompt_upgrade">لقد وجدنا ثغرة في %1$s. نحن نوصي بالتحديث إلى أحدث إصدار جديد في الحال.</string>
<string name="latest__empty_state__never_updated">حينما يتم تحديث قائمة التطبيقات، التطبيقات الأخيرة سوف تظهر هنا</string>
<string name="latest__empty_state__never_updated">حينما يتم تحديث قائمة البرامج، التطبيقات الأخيرة سوف تظهر هنا</string>
<string name="latest__empty_state__no_enabled_repos">حينما تُفعل مستودع وتتركه يحدث، الطبيقات الأخيرة سوف تظهر هنا</string>
<string name="antifeatures">مضاد الخصائص</string>
<string name="status_inserting_x_apps">حفظ تفاصيل التطبيقات (%1$d/%2$d) من %3$s</string>
<plurals name="notification_summary_more">
<item quantity="zero">لاشيء</item>
<item quantity="zero">لاشيء</item>
<item quantity="one">+%1$d آخر…</item>
<item quantity="two">آخرين…</item>
<item quantity="few">+%1$d أخرى…</item>
@ -481,7 +481,7 @@
<string name="antinosourcesince">لم يعد الكود المصدري متاحا ، ولا توجد تحديثات ممكنة.</string>
<string name="panic_hide_warning_message">في حالة الهلع ، سيؤدي هذا إلى إزالة%1$s من درج التطبيقات. يمكن فقط للكتابة \"%2$d\" في تطبيق المزيف %3$s ويمكن استعادته.</string>
<string name="share_repository">مشاركة المستودع</string>
<string name="send_install_history">إرسال محفوظات التثبيت</string>
<string name="send_install_history">إرسال سجل التثبيت</string>
<string name="send_history_csv">%s تاريخ التثبيت كملف CSV</string>
<string name="updates_disabled_by_settings">جميع التحديثات معطلة عن طريق إعدادات البيانات / واي فاي</string>
<string name="about_forum">منتدى الدعم</string>
@ -548,4 +548,9 @@
<string name="install_history_and_metrics">سجل التثبيت والمقاييس</string>
<string name="send_fdroid_metrics_json">%s تقرير المقاييس كملف JSON</string>
<string name="send_fdroid_metrics_report">إرسال تقرير %s القياسات</string>
<string name="theme_follow_system">اتبع مظهر النظام</string>
<string name="use_pure_black_dark_theme_summary">يوصى به فقط لشاشات OLED.</string>
<string name="use_pure_black_dark_theme">استخدم خلفية سوداء نقية في المظهر داكن</string>
<string name="banner_no_data_or_wifi">لم يتم تمكين البيانات أو WiFi</string>
<string name="banner_no_internet">لا يوجد إنترنت</string>
</resources>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">F-Droid</string>
<string name="updates">আপডেট</string>
<string name="ok">ঠিক আছে</string>
@ -88,7 +88,7 @@
<string name="repo_edit_credentials">পাসওয়ার্ড পাল্টাও</string>
<string name="login_title">অথেনটিকেশন প্রয়োজন</string>
<string name="scan_removable_storage_summary">এসডি কার্ড ও ইউএসবি ড্রাইভে প্যাকেজ রিপো খুজো</string>
<string name="scan_removable_storage_toast">%s স্ক্যান করা হচ্ছ…</string>
<string name="scan_removable_storage_toast">%s স্ক্যান করা হচ্ছ</string>
<string name="send_version_and_uuid_summary">এই অ্যাপ্লিকেশনটির সংস্করণ এবং একটি এলোমেলো, অনন্য আইডি ডাউনলোড করার সময় অন্তর্ভুক্ত করো, যা পরবর্তীতে অ্যাপ্লিকেশনটি পুনরায় চালু করার সময় প্রভাবিত হয়।</string>
<string name="display">দেখাও</string>
<string name="icon">আইকন</string>
@ -122,9 +122,393 @@
<string name="about_version">সংস্করণ</string>
<string name="login_password">পাসওয়ার্ড</string>
<string name="login_name">নাম</string>
<string name="app_details_donate_prompt">%2$s %1$s তৈরী করেছেন। কফি কিনে দিন!</string>
<string name="app_details_donate_prompt">%2$s, %1$s বানিয়েছে। তাদেরকে এক কাপ কফি কিনে দাও!</string>
<string name="app_details__incompatible_mismatched_signature">ইন্সটলড ভার্সন থেকে আলাদা সিগনেচার</string>
<string name="app_details_donate_prompt_unknown_author">ডেভলপারকে %1$s দামের কফি কিনে দিন!</string>
<string name="no_such_app">এ জাতীয় কোনও অ্যাপ পাওয়া যায় নি।</string>
<string name="repo_error_empty_username">ব্যবহারকারীর নাম খালি , শংসাপত্র পরিবর্তন হয়নি</string>
<string name="theme">রঙ</string>
<string name="permissions">অনুমতি</string>
<string name="hiding_calculator">গণন-যন্ত্র</string>
<string name="allow">অনুমোদন</string>
<string name="panic_app_setting_none">কোনোটি না</string>
<string name="privacy">গোপনীয়তা</string>
<string name="proxy">প্রক্সি</string>
<string name="skip">উপেক্ষা</string>
<string name="menu_downgrade">অবনমন</string>
<string name="app_incompatible">অসামঞ্জস্যপূর্ণ</string>
<string name="unverified">অযাচাইকৃত</string>
<string name="unsigned">স্বাক্ষরহীন</string>
<string name="empty_search_available_app_list">সামঞ্জস্যপূর্ণ কোনো অ্যাপ পাওয়া যায়নি।</string>
<string name="empty_can_update_app_list">অভিনন্দন!
\nসব অ্যাপ হালনাগাদকৃত।</string>
<string name="empty_installed_app_list">কোনো অ্যাপ ইন্সটল করা নেই।
\n
\nতোমার কাছে অন্যান্য অ্যাপ আছে, কিন্তু সেগুলো এফ-ড্রয়েডের না। ভাণ্ডারগুলোর হালনাগাদের প্রয়োজনীয়তা এর কারণ হতে পারে অথবা ভাণ্ডারগুলোতে আসলেই হয়তো তোমার অ্যাপগুলো নেই।</string>
<plurals name="button_view_all_apps_in_category">
<item quantity="one">%dটি দেখো</item>
<item quantity="other">%d এর সবগুলো দেখো</item>
</plurals>
<string tools:ignore="UnusedResources" name="category_Writing">লেখা</string>
<string tools:ignore="UnusedResources" name="category_Time">সময়</string>
<string tools:ignore="UnusedResources" name="category_Theming">থিমিং</string>
<string tools:ignore="UnusedResources" name="category_System">ব্যবস্থা</string>
<string tools:ignore="UnusedResources" name="category_Sports_Health">খেলাধুলা ও স্বাস্থ্য</string>
<string tools:ignore="UnusedResources" name="category_Security">নিরাপত্তা</string>
<string tools:ignore="UnusedResources" name="category_Navigation">দিক নির্ণয়</string>
<string name="wifi_ap">হটস্পট</string>
<string name="wifi">ওয়াই-ফাই</string>
<string name="pref_language_default">সিস্টেম ডিফল্ট</string>
<string name="requires_features">%1$s: প্রয়োজন</string>
<string name="not_on_same_wifi">তুমি যে স্থানীয় ভাণ্ডার যুক্ত করেছো সেটা আর তোমার যন্ত্র একই ওয়াইফাইতে নেই! এই নেটওয়ার্ক যোগ দেবার চেষ্টা করো: %s</string>
<string name="share_repository">ভাণ্ডার শেয়ার করো</string>
<string name="repo_searching_address">%1$s এ
\nপ্যাকেজের ভাণ্ডার খোঁজা হচ্ছে</string>
<string name="repo_added">%1$s ভাণ্ডার সংরক্ষণ করা হয়েছে।</string>
<string name="repo_disabled_notification">%1$s নিষ্ক্রিয় করা হয়েছে ।
\n
\nআবার এর থেকে অ্যাপ নামাতে একে পুনঃসক্রিয় করতে হবে।</string>
<string name="repo_confirm_delete_body">একটা ভাণ্ডার মুছা মানে এটার অ্যাপ আর উপলভ্য থাকবে না।
\n
\nদ্র: আগে থেকে ইন্সটল করা অ্যাপ ডিভাইসে থাকবে।</string>
<string name="repo_confirm_delete_title">ভাণ্ডার মুছবে\?</string>
<string name="unknown">অজানা</string>
<string name="repo_not_yet_updated">এই ভাণ্ডার আগে ব্যবহার করা হয়নি। এতে বিদ্যমান অ্যাপ দেখতে এটাকে সক্রিয় করতে হবে।</string>
<string name="unsigned_description">এর অর্থ একটা তালিকার অ্যাপ যাচাই করা যায়নি। অস্বাক্ষরিত সূচী থেকে অ্যাপ নামানোর সময় তোমাকে সাবধান হতে হবে।</string>
<string name="repo_name">নাম</string>
<string name="repo_user_mirrors">ব্যবহারকারী আয়না</string>
<string name="repo_official_mirrors">প্রাতিষ্ঠানিক আয়না(মিরর)</string>
<string name="repo_last_update">শেষ হালনাগাদ</string>
<string name="repo_description">বিবরণ</string>
<string name="repo_fingerprint">স্বাক্ষর চাবির আঙ্গুলছাপ (শা-২৫৬)</string>
<string name="repo_num_apps">অ্যাপ সংখ্যা</string>
<string name="repo_url">ঠিকানা</string>
<string name="repo_details">রিপোসিটরি</string>
<string name="use_pure_black_dark_theme_summary">শুধু ওলেড পর্দার জন্য প্রস্তাব দাও।</string>
<string name="use_pure_black_dark_theme">অন্ধকার রঙে সম্পূর্ণ কালো পটভূমি ব্যবহার করো</string>
<string name="no_handler_app">এমন কোনো অ্যাপ এই মুহূর্তে তোমার কাছে নেই যা %s চালাতে পারবে।</string>
<string name="no_permissions">কোনো অনুমতি নেই</string>
<string name="warning_no_internet">হালনাগাদ করা যাচ্ছে না, তুমি কী ইন্টারনেটের সাথে সংযুক্ত\?</string>
<string name="global_error_updating_repos">হালনাগাদের সময় ত্রুটি: %s</string>
<string name="all_other_repos_fine">অন্যান্য ভাণ্ডার আয়না বানায়নি।</string>
<string name="repos_unchanged">সব ভাণ্ডার হালনাগাদকৃত</string>
<string name="status_inserting_x_apps">%3$s থেকে অ্যাপের তথ্য সংরক্ষণ করা হচ্ছে (%1$d/%2$d)</string>
<string name="status_connecting_to_repo">%1$s
\nএর সাথে যোগাযোগ হচ্ছে</string>
<string name="banner_no_data_or_wifi">তথ্য বা‌ ওয়াইফাই নিষ্ক্রিয়</string>
<string name="banner_no_internet">ইন্টারনেট নেই</string>
<string name="banner_updating_repositories">ভাণ্ডার হালনাগাদরত</string>
<string name="download_404">অনুরোধকৃত নথি পাওয়া যায়নি।</string>
<string name="status_download_unknown_size">%1$s থেকে
\n%2$s
\nডাউনলোডরত</string>
<string name="status_download">%1$s
\nথেকে ডাউনলোডরত
\n%2$s / %3$s (%4$d%%)</string>
<string name="hide_on_long_search_press_summary">অনুসন্ধান বোতামে কিছুক্ষণ ধরে রাখলে অ্যাপ লুকানো হবে</string>
<string name="hide_on_long_search_press_title">অনুসন্ধান বোতাম লুকাও</string>
<string name="hiding_dialog_warning">সতর্কতা: মূল পর্দার একটি শর্টকাটও মুছে যাবে এবং পরে আলাদাভাবে আনতে হবে।</string>
<string name="hiding_dialog_message">তুমি কি আসলেই লঞ্চার থেকে %1$s সরাতে চাও\? শুধু নকল %3$s অ্যাপের মধ্যে %2$d লিখলেই এটা ফিরত আসবে।</string>
<string name="hiding_dialog_title">%s এখন লুকাও</string>
<string name="panic_reset_repos_summary">সহজাত পছন্দে ভাণ্ডারের অবস্থা ফিরিয়ে জোর করো</string>
<string name="panic_reset_repos_title">ভাণ্ডার আগের অবস্থায় নাও</string>
<string name="panic_hide_warning_message">আতঙ্ক/বিপদের সময়, লঞ্চার থেকে %1$s সরানো হবে। শুধু নকল %3$s অ্যাপের মধ্যে %2$d লিখলেই এটা ফিরত আসবে।</string>
<string name="panic_hide_warning_title">কিভাবে ফিরত আনতে হয় মনে রাখবে</string>
<string name="panic_hide_summary">অ্যাপ নিজেকে লুকাবে</string>
<string name="panic_hide_title">%s লুকাও</string>
<string name="panic_add_apps_to_uninstall">আনইন্সটল ও মুছার জন্য অ্যাপ যোগ করো</string>
<string name="panic_apps_to_uninstall">অ্যাপ মুছে ফেলা হবে এবং সব তথ্য মুছা হবে</string>
<string name="panic_will_be_wiped">মুছা হবে(আনইন্সটল) এবং সব তথ্য মুছা হবে</string>
<string name="panic_destructive_actions">ধ্বংসাত্মক ক্রিয়া</string>
<string name="panic_exit_summary">এই অ্যাপ বন্ধ করা হবে</string>
<string name="panic_exit_title">অ্যাপ থেকে প্রস্থান</string>
<string name="panic_settings_summary">বিপদের সময়ে করণীয় ক্রিয়া</string>
<string name="panic_settings">বিপদগ্রস্থ বোতামের পছন্দসমূহ</string>
<string name="panic_app_dialog_message">তুমি কি %1$sকে ধ্বংসাত্বক আতঙ্ক বা বিপদ সংকেত বোতাম চালু করার ক্ষমতা দেওয়ার ব্যাপারে নিশ্চিত\?</string>
<string name="panic_app_dialog_title">বিপদগ্রস্থ অ্যাপ নিশ্চিত করো</string>
<string name="panic_app_setting_summary">কোনো অ্যাপ নির্দিষ্ট করা হয়নি</string>
<string name="panic_app_unknown_app">একটা অজানা অ্যাপ</string>
<string name="panic_app_setting_title">বিপদগ্রস্থ বোতামের অ্যাপ</string>
<string name="preventScreenshots_summary">স্ক্রিনশট নেওয়া প্রতিরোধ করে আর অ্যাপের বিষয়বস্তু সাম্প্রতিক পর্দা থেকে লুকায়</string>
<string name="preventScreenshots_title">স্ক্রিনশট প্রতিরোধ করো</string>
<string name="enable_proxy_title">HTTP প্রক্সি চালু করো</string>
<string name="useTorSummary">গোপনীয়তা বৃদ্ধির জন্য জোর করে সব তথ্যের গমন টর দিয়ে নাও। অরবট লাগবে</string>
<string name="useTor">টর ব্যবহার করো</string>
<string name="try_again">আবার চেষ্টা করো</string>
<string name="copying_icons">ভাণ্ডারে অ্যাপ আইকন অনুলিপিত হচ্ছে…</string>
<string name="linking_apks">ভাণ্ডারে এপিকে সংযুক্ত করা হচ্ছে…</string>
<string name="writing_index_jar">স্বাক্ষরিত সূচী নথি লেখা হচ্ছে (index.jar)…</string>
<string name="adding_apks_format">ভাণ্ডারে %s যোগ করা হচ্ছে…</string>
<string name="deleting_repo">বর্তমান ভাণ্ডার মুছা হচ্ছে…</string>
<string name="touch_to_configure_local_repo">বিস্তারিত দেখতে টিপ দাও এবং অন্যদের সাথে অ্যাপ বিনিময়ের অনুমতি দাও।</string>
<string name="local_repo_running">এফ-ড্রয়েড অদলবদলের জন্য প্রস্তুত</string>
<string name="local_repo">স্থানীয় ভাণ্ডার</string>
<string name="force_touch_apps_on">কঠিনন্ত্র(হার্ডওয়্যার) সমর্থন ছাড়া টাচপর্দা লাগে এমন অ্যাপ দেখাও</string>
<string name="force_touch_apps">স্পর্শপর্দা(টাচস্ক্রিন) অ্যাপ রাখো</string>
<string name="show_anti_feature_apps_on">যেসব অ্যাপের অপবৈশিষ্ট্য লাগে তা দেখাও</string>
<string name="show_anti_feature_apps">অপবৈশিষ্ট্যের অ্যাপ রাখো</string>
<string name="show_incompat_versions_on">এই যন্ত্রের সাথে অসামঞ্জস্যপূর্ণ অ্যাপ সংস্করণ দেখাও</string>
<string name="show_incompat_versions">মিলহীন সংস্করণ রাখো</string>
<string name="appcompatibility">অ্যাপ সামঞ্জস্যতা</string>
<string name="search_hint">অ্যাপ খুঁজো</string>
<string name="expert_on">অতিরিক্ত তথ্য দেখাও ও অতিরিক্ত পছন্দসমূহ সক্রিয় করো</string>
<string name="expert">বিশেষজ্ঞ অবস্থা</string>
<string name="antinosourcesince">উৎস কোড এখন অনুপভ্য, হালনাগাদ সম্ভব নয়।</string>
<string name="antiknownvulnlist">এই অ্যাপের একটি জানা নিরাপত্তা দুর্বলতা রয়েছে</string>
<string name="antidisabledalgorithmlist">এই অ্যাপের নিরাপত্তা স্বাক্ষর খুব দুর্বল</string>
<string name="antinonfreeassetslist">এই অ্যাপে অ-মুক্ত উপাদান আছে</string>
<string name="antiupstreamnonfreelist">উজানের কোড সম্পূর্ণরূপে মুক্ত না</string>
<string name="antinonfreedeplist">এই অ্যাপ অন্যান্য অ-মুক্ত অ্যাপের উপর নির্ভর করে</string>
<string name="antinonfreenetlist">এই অ্যাপ অ-মুক্ত নেটওয়ার্ক সেবা নিতে উৎসাহিত করে</string>
<string name="antinonfreeadlist">এই অ্যাপ অ-মুক্ত অ্যাড-অন ব্যবহারে উৎসাহিত করে</string>
<string name="antitracklist">এই অ্যাপটি আপনার কার্যকলাপ ট্র্যাক করে এবং বলে দেয়</string>
<string name="antiadslist">এই অ্যাপে বিজ্ঞাপন আছে</string>
<string name="antifeatureswarning">এই অ্যাপে অপছন্দনীয় কিছু বৈশিষ্ট্য আছে।</string>
<string name="details_new_in_version">সংস্করণ %s এ নতুন</string>
<string name="preference_category__my_apps">আমার অ্যাপ</string>
<string name="categories__empty_state__no_categories">দেখানোর জন্য কোনো বিভাগ নেই</string>
<string name="latest__empty_state__no_enabled_repos">ভাণ্ডার সক্রিয় করে হালনাগাদ করলে, সর্বশেষ অ্যাপ এখানে দেখাবে</string>
<string name="latest__empty_state__never_updated">তোমার অ্যাপের তালিকা হালনাগাদ হলে, হালনাগাদকৃত অ্যাপ এখানে দেখানো হবে</string>
<string name="latest__empty_state__no_recent_apps">সাম্প্রতিক অ্যাপ পাওয়া যায়নি</string>
<string name="menu_show_install_history">ইন্সটল ইতিহাস দেখাও</string>
<string name="menu_show_fdroid_metrics_report">পরিসংখ্যান প্রতিবেদন দেখাও</string>
<string name="menu_opencollective">ওপেনকালেক্টিভ</string>
<string name="menu_source">উৎস কোড</string>
<string name="menu_license">অনুমতিপত্র: %s</string>
<string name="menu_email">ই-মেইল লেখক</string>
<string name="menu_ignore_this">এই হালনাগাদ উপেক্ষা</string>
<string name="menu_ignore_all">সব হালনাগাদ উপেক্ষা</string>
<string name="menu_select_for_wipe">মুছার জন্য নির্বাচন</string>
<string name="menu_add_repo">নতুন রিপোসিটরি</string>
<string name="repositories_summary">অ্যাপের জন্য আরো উৎস যোগ করো</string>
<string name="repo_provider">ভাণ্ডার: %s</string>
<string name="malformed_repo_uri">বিকৃত ভাণ্ডার ইউআরআই উপেক্ষা করা হলো: %s</string>
<string name="invalid_url">এটা একটি সঠিক সংযোগ নয়।</string>
<string name="bad_fingerprint">সমস্যাপূর্ণ আঙ্গুলের ছাপ</string>
<string name="repo_exists_add_mirror">এটা %1$s এর অনুলিপি, আয়না হিসেবে যুক্ত করবে\?</string>
<string name="repo_delete_to_overwrite">প্রথমে %1$s মুছো যাতে চাবিগুলোর(কি) মধ্যে অসামঞ্জস্যতা না হয়।</string>
<string name="repo_exists_and_enabled">%1$s আগে থেকেই শুরু ও সক্রিয়।</string>
<string name="repo_exists_enable">%1$s আগে থেকেই তৈরি, নিশ্চিত করো যে এটা আবার সক্রিয় করতে চাও।</string>
<string name="repo_exists_add_fingerprint">%1$s আগে থেকেই তৈরি, এতে নতুন গুরুত্বপূর্ণ তথ্য যোগ করবে।</string>
<string name="repo_add_fingerprint">আঙ্গুলের ছাপ (ঐচ্ছিক)</string>
<string name="repo_add_url">ভাণ্ডার ঠিকানা</string>
<string name="choose_bt_send">ব্লুটুথ দিয়ে পাঠানোর পদ্ধতি নির্বাচন করো</string>
<string name="bluetooth_activity_not_found">ব্লুটুথ দিয়ে পাঠানোর কোনো উপায় পাওয়া যায়নি, একটা নির্বাচন করো!</string>
<string name="sort_search">অনুসন্ধান সাজাও</string>
<string name="clear_search">অনুসন্ধান পরিষ্কার করো</string>
<string name="add_key">চাবি যোগ করো</string>
<string name="repo_add_mirror">আয়না(মিরর) যোগ করো</string>
<string name="repo_add_title">নতুন ভাণ্ডার যোগ করো</string>
<string name="updates_disabled_by_settings">তথ্য/ওয়াইফাই পছন্দ দিয়ে হালনাগাদ নিষ্ক্রিয়</string>
<plurals name="updates__download_updates_for_apps">
<item quantity="one">%1$dটি অ্যাপের জন্য হালনাগাদ নামাও।</item>
<item quantity="other">%1$dটি অ্যাপের জন্য হালনাগাদ নামাও।</item>
</plurals>
<string name="updates__show_updateable_apps">অ্যাপ দেখাও</string>
<string name="updates__hide_updateable_apps">অ্যাপ লুকাও</string>
<string name="update_all">সব হালনাগাদ</string>
<string name="updates__app_with_known_vulnerability__prompt_upgrade">%1$s এ একটি অনিরাপত্তা পাওয়া গেছে। এই‌ মুহূর্তেই অ্যাপটি হালনাগাদের প্রস্তাব দিচ্ছি।</string>
<string name="updates__app_with_known_vulnerability__prompt_uninstall">%1$s এ একটি অনিরাপত্তা পাওয়া গেছে। এই‌ মুহূর্তেই অ্যাপটি মুছে ফেলার প্রস্তাব দিচ্ছি।</string>
<string name="installed_app__updates_ignored_for_suggested_version">%1$s সংস্করণের জন্য হালনাগাদ উপেক্ষাকৃত</string>
<string name="installed_app__updates_ignored">হালনাগাদ উপেক্ষাকৃত</string>
<string name="send_installed_apps_csv">সিএসভি নথি হিসেবে এফ-ড্রয়েড কর্তৃক ইন্সটলকৃত অ্যাপ</string>
<string name="send_installed_apps">ইন্সটলকৃত অ্যাপ শেয়ার করো</string>
<string name="installed_apps__activity_title">ইন্সটলকৃত অ্যাপ</string>
<string name="app_list__dismiss_downloading_app">ডাউনলোড বাতিলকৃত</string>
<string name="app_list__dismiss_vulnerable_app">ক্ষতির সম্ভাবনা উপেক্ষাকৃত</string>
<string name="app_list__dismiss_app_update">হালনাগাদ উপেক্ষাকৃত</string>
<string name="app_list_download_ready">ডাউনলোডকৃত, ইন্সটল করতে প্রস্তুত</string>
<string name="app_list__name__successfully_installed">%1$s ইন্সটলকৃত</string>
<string name="app_list__name__downloading_in_progress">%1$s ডাউনলোড করা হচ্ছে</string>
<string name="app_size">আকার: %1$s</string>
<string name="app_repository">ভাণ্ডার: %1$s</string>
<string name="app_permission_storage">স্টোরেজে ইন্সটল করতে এফ-ড্রয়েডের স্টোরেজ অনুমতি লাগবে। ইনস্টল চালিয়ে যেতে পরের পর্দায় এটার অনুমতি দিও।</string>
<string name="app_installed_media">%s এ ফাইল ইন্সটলকৃত</string>
<string name="app__tts__cancel_download">ডাউনলোড বাতিল করো</string>
<string name="added_on">%s এ যোগকৃত</string>
<string name="app_recommended_version_installed">সংস্করণ %1$s (প্রস্তাবিত)</string>
<string name="app_version_x_installed">সংস্করণ %1$s</string>
<string name="app_version_x_available">%1$s সংস্করণ আছে</string>
<string name="app_inst_unknown_source">ইন্সটলকৃত (অজানা উৎস থেকে)</string>
<string name="app_inst_known_source">(%s থেকে) ইন্সটলকৃত</string>
<string name="app_not_installed">ইন্সটল হয়নি</string>
<string name="about_source">উৎস কোড</string>
<string name="about_forum">সহায়তা সভা</string>
<string name="about_title">এফ-ড্রয়েড সম্পর্কে</string>
<string name="app_details__no_versions__explain_incompatible_signatures">ইন্সটলকৃত সংস্করণ অন্য কোনো সংস্করণের সাথে অসামঞ্জস্যপূর্ণ। এই অ্যাপ মুছলে তোমাকে অন্যান্য সামঞ্জস্যপূর্ণ সংস্করণ দেখতে ও ইন্সটল করতে দিবে। গুগল প্লে বা অন্য জায়গা থেকে অ্যাপ ইন্সটল করলে বেশিরভাগ সময় এমন হয়, বিশেষত অন্য অনুমতিপত্র দিয়ে স্বাক্ষর করা হলে।</string>
<string name="app_details__no_versions__none_compatible_with_device">এই যন্ত্রের সাথে সামঞ্জস্যপূর্ণ কোনো সংস্করণ নেই</string>
<string name="app_details__no_versions__no_compatible_signatures">এই স্বাক্ষরের সাথে সামঞ্জস্যপূর্ণ কোনো সংস্করণ নেই</string>
<string name="app_details__no_versions__show_incompat_versions">তবুও সামঞ্জস্যপূর্ণ সংস্করণ দেখাতে, %1$s পছন্দ সক্রিয় করো।</string>
<string name="app_details">অ্যাপের বিবরণ</string>
<string name="toast_metrics_in_install_history">ইন্সটল ইতিহাস পাঠকে %s পরিসংখ্যান প্রতিবেদন পড়া যায়</string>
<string name="send_to_fdroid_metrics_summary">সাপ্তাহিক এফ-ড্রয়েড পরিসংখ্যানের অব্যক্তিগত তথ্য পাঠাও (ইন্সটল ইতিহাস রাখতে হবে)</string>
<string name="send_to_fdroid_metrics">ব্যবহারের তথ্য পাঠাও</string>
<string name="fdroid_metrics_report">%s পরিসংখ্যানের প্ররিবেদন</string>
<string name="install_history_and_metrics">ইন্সটল ইতিহাস ও পরিসংখ্যান</string>
<string name="send_fdroid_metrics_json">জেসন নথি হিসেবে %s পরিসংখ্যান প্রতিবেদন</string>
<string name="send_fdroid_metrics_report">%s পরিসংখ্যান প্রতিবেদন পাঠাও</string>
<plurals name="details_last_update_years">
<item quantity="one">%1$d বছর আগে হালনাগাদকৃত</item>
<item quantity="other">%1$d বছর আগে হালনাগাদকৃত</item>
</plurals>
<plurals name="details_last_update_months">
<item quantity="one">%1$d মাস আগে হালনাগাদকৃত</item>
<item quantity="other">%1$d মাস আগে হালনাগাদকৃত</item>
</plurals>
<plurals name="details_last_update_weeks">
<item quantity="one">%1$d সপ্তাহ আগে হালনাগাদকৃত</item>
<item quantity="other">%1$d সপ্তাহ আগে হালনাগাদকৃত</item>
</plurals>
<plurals name="details_last_update_days">
<item quantity="one">%1$d দিন আগে হালনাগাদকৃত</item>
<item quantity="other">%1$d দিন আগে হালনাগাদকৃত</item>
</plurals>
<string name="app_list__dismiss_installing_app">ইন্সটল বাতিলকৃত</string>
<string name="undo">পূর্বাবস্থা</string>
<string name="warning_scaning_qr_code">তোমার ক্যামেরায় মনে হয় স্বয়ংক্রিয়-মনোযোগ নেই, এতে সংকেতের পাঠোদ্ধার কঠিন হতে পারে।</string>
<string name="details_last_updated_today">আজকে হালনাগাদকৃত</string>
<plurals name="tts_view_all_in_category">
<item quantity="one">%2$s বিভাগের %1$d অ্যাপটি দেখো</item>
<item quantity="other">%2$s বিভাগের %1$d সব অ্যাপ দেখো</item>
</plurals>
<string name="tts_category_name">%1$s বিভাগ</string>
<string name="notification_channel_updates_description">অ্যাপ ও ভাণ্ডার হালনাগাদের বিজ্ঞপ্তি দেখাবে।</string>
<string name="notification_channel_updates_title">হালনাগাদ</string>
<string name="notification_channel_swaps_description">পি২পি অ্যাপ অদলবদলের বিজ্ঞপ্তি দেখাও।</string>
<string name="notification_channel_swaps_title">টানা</string>
<string name="notification_channel_installs_description">অ্যাপ ইন্সটলের বিজ্ঞপ্তি দেখাও।</string>
<string name="notification_channel_installs_title">ইনস্টলকৃত</string>
<string name="notification_action_install">ইনস্টল</string>
<string name="notification_action_cancel">বাতিল</string>
<string name="notification_action_update">হালনাগাদ</string>
<string name="notification_title_summary_install_error">ইন্সটল ব্যর্থ</string>
<string name="notification_title_summary_installed">সফলভাবে ইন্সটলকৃত</string>
<string name="notification_title_summary_installing">ইনস্টলরত</string>
<string name="notification_title_summary_ready_to_install_update">হালনাগাদ ইনস্টল করতে প্রস্তুত</string>
<string name="notification_title_summary_ready_to_install">ইনস্টল করতে প্রস্তুত</string>
<string name="notification_title_summary_downloading_update">হালনাগাদ ডাউনলোডরত…</string>
<string name="notification_title_summary_downloading">ডাউনলোডরত…</string>
<string name="notification_title_summary_update_available">হালনাগাদ আছে</string>
<plurals name="notification_summary_installed">
<item quantity="one">%1$dটি অ্যাপ ইন্সটলকৃত</item>
<item quantity="other">%1$dটি অ্যাপ ইন্সটলকৃত</item>
</plurals>
<plurals name="notification_summary_updates">
<item quantity="one">%1$dটি হালনাগাদ আছে</item>
<item quantity="other">%1$dটি হালনাগাদ আছে</item>
</plurals>
<string name="notification_content_single_installed">সফলভাবে ইন্সটলকৃত</string>
<string name="notification_content_single_installing">\"%1$s\" ইন্সটল করা হচ্ছে…</string>
<string name="notification_content_single_downloading_update">\"%1$s\" এর হালনাগাদ ডাউনলোড করা হচ্ছে…</string>
<string name="notification_content_single_downloading">\"%1$s\" ডাউনলোডরত…</string>
<string name="notification_title_single_install_error">ইনস্টল ব্যর্থ</string>
<string name="notification_title_single_ready_to_install_update">হালনাগাদ ইনস্টল করতে প্রস্তুত</string>
<string name="notification_title_single_ready_to_install">ইনস্টল করতে প্রস্তুত</string>
<string name="notification_title_single_update_available">হালনাগাদ আছে</string>
<plurals name="notification_summary_more">
<item quantity="one">আরো +%1$dটি…</item>
<item quantity="other">আরো +%1$dটি…</item>
</plurals>
<string name="crash_dialog_comment_prompt">এখানে তুমি অতিরিক্ত তথ্য ও মন্তব্য দিতে পারো:</string>
<string name="crash_dialog_text">একটা অপ্রত্যাশিত ত্রুটির কারণে অ্যাপ থামাতে হয়েছে। সমস্যাটা ঠিক করতে বিস্তারিত তথ্য ইমেইল করে পাঠাবে কি\?</string>
<string name="crash_dialog_title">এফ-ড্রয়েড থেমে‌ গেছে</string>
<string name="theme_follow_system">ব্যবস্থা অনুসরণ</string>
<string name="keep_forever">সর্বদা</string>
<string name="keep_year">১ বছর</string>
<string name="keep_month">১ মাস</string>
<string name="keep_week">১ সপ্তাহ</string>
<string name="keep_day">১ দিন</string>
<string name="keep_hour">১ ঘণ্টা</string>
<string name="interval_2w">প্রতি ২ সপ্তাহে হালনাগাদ আছে কিনা দেখো</string>
<string name="interval_1w">সাপ্তাহিক হালনাগাদ আছে কিনা দেখো</string>
<string name="interval_1d">দৈনিক হালনাগাদ আছে কিনা দেখো</string>
<string name="interval_12h">প্রতি ১২ ঘণ্টায় হালনাগাদ আছে কিনা দেখো</string>
<string name="interval_4h">প্রতি ঘণ্টায় হালনাগাদ আছে কিনা দেখো</string>
<string name="interval_1h">প্রতি ঘণ্টায় হালনাগাদ আছে কিনা দেখো</string>
<string name="interval_never">কোনো স্বয়ংক্রিয় অ্যাপ হালনাগাদ নেই</string>
<string name="uninstalling">আনইনস্টলরত…</string>
<string name="installing">ইন্সটলরত…</string>
<string name="app__tts__downloading_progress">ডাউনলোডরত, %1$d%% সম্পূর্ণ</string>
<string name="downloading">ডাউনলোডরত…</string>
<string name="perms_description_app">%1$s দ্বারা সরবরাহকৃত।</string>
<string name="perms_new_perm_prefix">নতুন:</string>
<string name="uninstall_error_notify_title">%s এর ইন্সটল সরাতে ত্রুটি</string>
<string name="install_error_notify_title">%s ইন্সটল করতে ত্রুটি</string>
<string name="download_pending">ডাউনলোড শুরুর জন্য অপেক্ষারত…</string>
<string name="download_error">ডাউনলোড ব্যর্থ!</string>
<string name="uninstall_confirm">অ্যাপটি মুছতে চাও\?</string>
<string name="uninstall_update_confirm">এই অ্যাপটিকে কি কারখানা সংস্করণ দিয়ে প্রতিস্থাপিত করবে\? সব তথ্য এতে মুছে যাবে।</string>
<string name="perm_costs_money">এতে তোমার টাকা খরচ হতে পারে</string>
<string name="allPerms">সব</string>
<string name="newPerms">নতুন</string>
<string name="install_confirm_update_system_no_perms">ডিভাইসে আগে থেকে বিদ্যমান এই অ্যাপটি হালনাগাদ করবে\? তোমার বিদ্যমান তথ্য মুছে যাবে না। এতে কোনো বিশেষ অনুমতি লাগবে না।</string>
<string name="install_confirm_update_no_perms">ডিভাইসে আগে থেকে বিদ্যমান এই অ্যাপটি হালনাগাদ করবে\? তোমার বিদ্যমান তথ্য মুছে যাবে না। এতে কোনো বিশেষ অনুমতি লাগবে না।</string>
<string name="install_confirm_update_system">ডিভাইসে আগে থেকে বিদ্যমান এই অ্যাপটি হালনাগাদ করবে\? তোমার বিদ্যমান তথ্য মুছে যাবে না। হালনাগাদকৃত অ্যাপ যেসব অনুমতি পাবে তা নিম্নরূপ:</string>
<string name="install_confirm_update">বিদ্যমান অ্যাপের জন্য এই হালনাগাদটি কি ইন্সটল করবে\? তোমার তথ্য মুছবে না। হালনাগাদকৃত অ্যাপ যেসব অনুমতি পাবে তা নিম্নরূপ:</string>
<string name="install_confirm">অনুমতি লাগবে</string>
<string name="swap_toast_closing_nearby_after_timeout">অলস পরে থাকায় কাছাকাছি বন্ধ করা হয়েছে ।</string>
<string name="swap_toast_could_not_enable_hotspot">ওয়াইফাই হটস্পট চালু করা যায়নি!</string>
<string name="swap_toast_hotspot_enabled">ওয়াইফাই হটস্পট চালু</string>
<string name="swap_toast_invalid_url">অদলবদলের জন্য ভুল সংযোগ: %1$s</string>
<string name="swap_toast_find_removeable_storage">এসডি কার্ড বা ইউএসবি নির্বাচন করো</string>
<string name="swap_toast_not_removable_storage">নির্বাচিত ভুক্তির সাথে কোনো স্টোরেজ যন্ত্র মিলেনি, আবার চেষ্টা করো।</string>
<string name="swap_toast_using_path">%1$s ব্যবহার করে</string>
<string name="not_visible_nearby_description">কাছাকাছি ডিভাইসের সাথে বিনিময় করার আগে তোমার ডিভাইস দৃশ্যমান করো।</string>
<string name="not_visible_nearby">কাছাকাছি নিষ্ক্রিয়</string>
<string name="swap_connection_misc_error">যুক্ত করার সময় একটা সমস্যা হয়েছে, তাই বিনিময় করা যাচ্ছে না।</string>
<string name="loading">প্রক্রিয়ারত…</string>
<string name="use_bluetooth">ব্লুটুথ ব্যবহার করো</string>
<string name="swap_qr_isnt_for_swap">যে কিউআর কোডের পাঠোদ্ধার করেছো সেটা বিনিময় সংকেত মনে হচ্ছে না।</string>
<string name="swap_confirm">অদলবদল নিশ্চিতকরণ</string>
<string name="swap_connecting">যুক্ত হচ্ছে</string>
<string name="swap_no_peers_nearby">বিনিময়ের জন্য কাছাকাছি কাউকে পাওয়া যায়নি।</string>
<string name="swap_cant_find_peers">তোমার উদ্দীষ্ট ব্যক্তিকে পাচ্ছ না\?</string>
<string name="swap_wifi_device_name">যন্ত্রের নাম</string>
<string name="swap_not_visible_wifi">ওয়াইফাই দিয়ে দৃশ্যমান না</string>
<string name="swap_stopping_wifi">ওয়াইফাই থামানো হচ্ছে…</string>
<string name="swap_setting_up_wifi">ওয়াইফাই শুরু হচ্ছে…</string>
<string name="swap_visible_wifi">ওয়াইফাই দিয়ে দৃশ্যমান</string>
<string name="swap_not_visible_bluetooth">ব্লুটুথ দিয়ে দৃশ্যমান না</string>
<string name="swap_error_cannot_start_bluetooth">ব্লুটুথ শুরু করা যাচ্ছে না!</string>
<string name="swap_setting_up_bluetooth">ব্লুটুথ শুরু হচ্ছে…</string>
<string name="swap_visible_bluetooth">ব্লুটুথ দিয়ে দেখা যায়</string>
<string name="disabled">নিষ্ক্রিয়</string>
<string name="swap_stopping">থামছে…</string>
<string name="swap_starting">শুরু হচ্ছে…</string>
<string name="swap_intro">কাছাকাছি মানুষের সাথে যুক্ত হও ও অ্যাপ বিনিময় করো।</string>
<string name="swap_nearby">কাছাকাছি অদলবদল</string>
<string name="swap_scanning_for_peers">কাছাকাছি মানুষের জন্য অনুসন্ধান হচ্ছে…</string>
<string name="swap_people_nearby">কাছাকাছি লোকজন</string>
<string name="swap_scan_qr">কিউআর কোড খুঁজো</string>
<string name="swap_choose_apps">অ্যাপ নির্বাচন</string>
<string name="swap_scan_or_type_url">একজন সংকেতের পাঠোদ্ধার করবে অথবা সংষোগটি নিজের পরিব্রাজক(ব্রাউজারে) লিখবে।</string>
<string name="swap_dont_show_again">আবার দেখাবে না</string>
<string name="swap_confirm_connect">এখনই %1$s থেকে অ্যাপ আনতে চাও\?</string>
<string name="swap_welcome">এফ-ড্রয়েডে স্বাগতম!</string>
<string name="open_qr_code_scanner">কিউআর স্ক্যানার খুলো</string>
<string name="swap_switch_to_wifi">ওয়াইফাই নেটওয়ার্কে যেতে টিপ দাও</string>
<string name="swap_view_available_networks">উপলভ্য নেটওয়ার্ক খুলতে টিপ দাও</string>
<string name="swap_stopping_hotspot">হটস্পট থামসনো হচ্ছে…</string>
<string name="swap_setting_up_hotspot">হটস্পট শুরু হচ্ছে…</string>
<string name="swap_hidden_wifi_ssid">(লুকোনো)</string>
<string name="swap_blank_wifi_ssid">(খালি)</string>
<string name="swap_visible_hotspot">হটস্পট দিয়ে দৃশ্যমান</string>
<string name="swap_active_hotspot">%1$s (তোমার হটস্পট)</string>
<string name="swap_no_wifi_network">কোনো নেটওয়ার্ক নেই</string>
<string name="swap_success">আদলবদল সফল!</string>
<string name="swap">অ্যাপ অদলবদল</string>
<string name="swap_join_this_hotspot">তোমার হটস্পটে যুক্ত হতে বন্ধুকে সাহায্য করো</string>
<string name="swap_join_same_wifi_desc">নিশ্চিত করো একই ওয়াইফাইয়ে আছো, যাতে ওয়াইফাই দিয়ে বিনিময় করতে পারো। একই নেটওয়ার্কে তোমাদের প্রবেশ না পারলে, একটা হটস্পট বানাতে পারো।</string>
<string name="swap_join_same_wifi">তোমার বন্ধুর সাথে একই ওয়াইফাইতে যোগ দাও</string>
<string name="swap_nfc_description">তোমার বন্ধুর এফ-ড্রয়েড ও এনএফসি থাকলে তোমাদের ডিভাইস দুইটা পরস্পরের সাথে স্পর্শ করাও।</string>
<string name="swap_nfc_title">অদলবদলের জন্য টিপো</string>
<string name="nearby_splash__request_permission">চেষ্টা করো</string>
<string name="nearby_splash__document_tree">ভাণ্ডার ও আয়নার জন্য ইউএসবি ওটিজি অনুসন্ধান করো।</string>
<string name="nearby_splash__read_external_storage">ভাণ্ডার ও আয়না এসডি কার্ডে খুঁজো।</string>
<string name="nearby_splash__both_parties_need_fdroid">কাছাকাছি ব্যবহার করতে উভয় পক্ষের %1$s লাগবে।</string>
<string name="nearby_splash__find_people_button">কাছা</string>
<string name="nearby_splash__download_apps_from_people_nearby">ইন্টারনেট নেই\? কাছের কারো কাছ থেকে অ্যাপ নাও!</string>
<string name="system_install_denied_permissions">এই এক্সটেনশনকে বিশেষ অনুমতি দেওয়া হয়নি। অনুগ্রহ করে একটি সমস্যার প্রতিবেদন বানাও।</string>
<string name="uninstall_error_unknown">অজানা সমস্যার জন্য মুছতে ব্যর্থ</string>
<string name="install_error_unknown">অজানা সমস্যার জন্য ইন্সটল করতে ব্যর্থ</string>
</resources>

View File

@ -60,8 +60,8 @@
<item quantity="other">%1$dটি হালনাগাদ আছে</item>
</plurals>
<plurals name="notification_summary_installed">
<item quantity="one">%1$dটি অ্যাপ ইন্সটল করা হলো</item>
<item quantity="other">%1$dটি অ্যাপ ইন্সটল করা হলো</item>
<item quantity="one">%1$dটি অ্যাপ ইন্সটলকৃত</item>
<item quantity="other">%1$dটি অ্যাপ ইন্সটলকৃত</item>
</plurals>
<string name="notification_title_summary_update_available">হালনাগাদ আছে</string>
<string name="notification_title_summary_downloading">ডাউনলোডরত…</string>
@ -122,7 +122,7 @@
<string name="repo_edit_credentials">পাসওয়ার্ড পাল্টাও</string>
<string name="login_title">অথেনটিকেশন প্রয়োজন</string>
<string name="scan_removable_storage_summary">এসডি কার্ড ও ইউএসবি ড্রাইভে প্যাকেজ রিপো খুজো</string>
<string name="scan_removable_storage_toast">%s স্ক্যান করা হচ্ছ…</string>
<string name="scan_removable_storage_toast">%s স্ক্যান করা হচ্ছ</string>
<string name="scan_removable_storage_title">অপসারণযোগ্য স্টোরেজ স্ক্যান করো</string>
<string name="local_repo_https_on">স্থানীয় রিপোর জন্য এনক্রিপটেড HTTPS:// সংযোগ ব্যবহার করো</string>
<string name="local_repo_name_summary">তোমার স্থানীয় রিপোর বিজ্ঞাপিত শিরোনাম: %s</string>
@ -222,4 +222,293 @@
<string name="undo">পূর্বাবস্থা</string>
<string name="notification_channel_updates_title">হালনাগাদ</string>
<string tools:ignore="UnusedResources" name="category_System">ব্যবস্থা</string>
<string name="preference_category__my_apps">আমার অ্যাপ</string>
<string name="menu_source">উৎস কোড</string>
<string name="menu_license">অনুমতিপত্র: %s</string>
<string name="menu_email">ই-মেইল লেখক</string>
<string name="repo_provider">ভাণ্ডার: %s</string>
<string name="bad_fingerprint">সমস্যাপূর্ণ আঙ্গুলের ছাপ</string>
<string name="repo_add_fingerprint">আঙ্গুলের ছাপ (ঐচ্ছিক)</string>
<string name="repo_add_url">ভাণ্ডার ঠিকানা</string>
<string name="notification_channel_swaps_title">টানা</string>
<string name="swap_success">আদলবদল সফল!</string>
<string name="swap">অ্যাপ অদলবদল</string>
<string name="nearby_splash__request_permission">চেষ্টা করো</string>
<plurals name="button_view_all_apps_in_category">
<item quantity="one">%dটি দেখো</item>
<item quantity="other">%d এর সবগুলো দেখো</item>
</plurals>
<string name="requires_features">%1$s: প্রয়োজন</string>
<string name="share_repository">ভাণ্ডার শেয়ার করো</string>
<string name="repo_confirm_delete_title">ভাণ্ডার মুছবে\?</string>
<string name="repo_user_mirrors">ব্যবহারকারী আয়না</string>
<string name="repo_official_mirrors">প্রাতিষ্ঠানিক আয়না(মিরর)</string>
<string name="no_permissions">কোনো অনুমতি নেই</string>
<string name="panic_reset_repos_title">ভাণ্ডার আগের অবস্থায় নাও</string>
<string name="panic_hide_title">%s লুকাও</string>
<string name="panic_destructive_actions">ধ্বংসাত্মক ক্রিয়া</string>
<string name="panic_exit_title">অ্যাপ থেকে প্রস্থান</string>
<string name="preventScreenshots_title">স্ক্রিনশট প্রতিরোধ করো</string>
<string name="useTor">টর ব্যবহার করো</string>
<string name="try_again">আবার চেষ্টা করো</string>
<string name="local_repo">স্থানীয় ভাণ্ডার</string>
<string name="appcompatibility">অ্যাপ সামঞ্জস্যতা</string>
<string name="expert">বিশেষজ্ঞ অবস্থা</string>
<string name="app_version_x_available">%1$s সংস্করণ আছে</string>
<string name="app_inst_known_source">(%s থেকে) ইন্সটলকৃত</string>
<string name="banner_no_internet">ইন্টারনেট নেই</string>
<string name="banner_updating_repositories">ভাণ্ডার হালনাগাদরত</string>
<string name="theme_follow_system">ব্যবস্থা অনুসরণ</string>
<string name="app_list__dismiss_installing_app">ইন্সটল বাতিলকৃত</string>
<string name="details_last_updated_today">আজকে হালনাগাদকৃত</string>
<string name="tts_category_name">%1$s বিভাগ</string>
<string name="notification_title_summary_install_error">ইন্সটল ব্যর্থ</string>
<string name="notification_title_summary_installed">সফলভাবে ইন্সটলকৃত</string>
<string name="notification_title_single_update_available">হালনাগাদ আছে</string>
<plurals name="notification_summary_more">
<item quantity="one">আরো +%1$dটি…</item>
<item quantity="other">আরো +%1$dটি…</item>
</plurals>
<string name="keep_year">১ বছর</string>
<string name="keep_month">১ মাস</string>
<string name="keep_week">১ সপ্তাহ</string>
<string name="keep_day">১ দিন</string>
<string name="keep_hour">১ ঘণ্টা</string>
<string name="download_error">ডাউনলোড ব্যর্থ!</string>
<string name="swap_toast_using_path">%1$s ব্যবহার করে</string>
<string name="use_bluetooth">ব্লুটুথ ব্যবহার করো</string>
<string name="swap_confirm">অদলবদল নিশ্চিতকরণ</string>
<string name="swap_wifi_device_name">যন্ত্রের নাম</string>
<string name="swap_stopping_wifi">ওয়াইফাই থামানো হচ্ছে…</string>
<string name="swap_nearby">কাছাকাছি অদলবদল</string>
<string name="swap_people_nearby">কাছাকাছি লোকজন</string>
<string name="swap_choose_apps">অ্যাপ নির্বাচন</string>
<string name="swap_stopping_hotspot">হটস্পট থামসনো হচ্ছে…</string>
<string name="swap_setting_up_wifi">ওয়াইফাই শুরু হচ্ছে…</string>
<string name="swap_visible_wifi">ওয়াইফাই দিয়ে দৃশ্যমান</string>
<string name="swap_error_cannot_start_bluetooth">ব্লুটুথ শুরু করা যাচ্ছে না!</string>
<string name="swap_setting_up_bluetooth">ব্লুটুথ শুরু হচ্ছে…</string>
<string name="swap_visible_bluetooth">ব্লুটুথ দিয়ে দেখা যায়</string>
<string name="swap_scan_qr">কিউআর কোড খুঁজো</string>
<string name="open_qr_code_scanner">কিউআর স্ক্যানার খুলো</string>
<string name="swap_setting_up_hotspot">হটস্পট শুরু হচ্ছে…</string>
<string name="swap_visible_hotspot">হটস্পট দিয়ে দৃশ্যমান</string>
<string name="swap_active_hotspot">%1$s (তোমার হটস্পট)</string>
<string name="swap_no_wifi_network">কোনো নেটওয়ার্ক নেই</string>
<string name="nearby_splash__find_people_button">কাছা</string>
<string tools:ignore="UnusedResources" name="category_Sports_Health">খেলাধুলা ও স্বাস্থ্য</string>
<string name="repo_num_apps">অ্যাপ সংখ্যা</string>
<string name="status_connecting_to_repo">%1$s
\nএর সাথে যোগাযোগ হচ্ছে</string>
<string name="hiding_dialog_title">%s এখন লুকাও</string>
<string name="panic_settings">বিপদগ্রস্থ বোতামের পছন্দসমূহ</string>
<string name="panic_app_dialog_title">বিপদগ্রস্থ অ্যাপ নিশ্চিত করো</string>
<string name="panic_app_unknown_app">একটা অজানা অ্যাপ</string>
<string name="panic_app_setting_title">বিপদগ্রস্থ বোতামের অ্যাপ</string>
<string name="enable_proxy_title">HTTP প্রক্সি চালু করো</string>
<string name="deleting_repo">বর্তমান ভাণ্ডার মুছা হচ্ছে…</string>
<string name="force_touch_apps">স্পর্শপর্দা(টাচস্ক্রিন) অ্যাপ রাখো</string>
<string name="show_anti_feature_apps">অপবৈশিষ্ট্যের অ্যাপ রাখো</string>
<string name="show_incompat_versions">মিলহীন সংস্করণ রাখো</string>
<string name="menu_ignore_this">এই হালনাগাদ উপেক্ষা</string>
<string name="menu_ignore_all">সব হালনাগাদ উপেক্ষা</string>
<string name="menu_select_for_wipe">মুছার জন্য নির্বাচন</string>
<string name="repo_add_title">নতুন ভাণ্ডার যোগ করো</string>
<string name="send_installed_apps">ইন্সটলকৃত অ্যাপ শেয়ার করো</string>
<string name="added_on">%s এ যোগকৃত</string>
<string name="app_recommended_version_installed">সংস্করণ %1$s (প্রস্তাবিত)</string>
<string name="panic_exit_summary">এই অ্যাপ বন্ধ করা হবে</string>
<string name="panic_app_setting_summary">কোনো অ্যাপ নির্দিষ্ট করা হয়নি</string>
<string name="linking_apks">ভাণ্ডারে এপিকে সংযুক্ত করা হচ্ছে…</string>
<string name="writing_index_jar">স্বাক্ষরিত সূচী নথি লেখা হচ্ছে (index.jar)…</string>
<string name="local_repo_running">এফ-ড্রয়েড অদলবদলের জন্য প্রস্তুত</string>
<string name="show_anti_feature_apps_on">যেসব অ্যাপের অপবৈশিষ্ট্য লাগে তা দেখাও</string>
<string name="antinonfreeassetslist">এই অ্যাপে অ-মুক্ত উপাদান আছে</string>
<string name="antinonfreeadlist">এই অ্যাপ অ-মুক্ত অ্যাড-অন ব্যবহারে উৎসাহিত করে</string>
<string name="repositories_summary">অ্যাপের জন্য আরো উৎস যোগ করো</string>
<string name="malformed_repo_uri">বিকৃত ভাণ্ডার ইউআরআই উপেক্ষা করা হলো: %s</string>
<plurals name="updates__download_updates_for_apps">
<item quantity="one">%1$dটি অ্যাপের জন্য হালনাগাদ নামাও।</item>
<item quantity="other">%1$dটি অ্যাপের জন্য হালনাগাদ নামাও।</item>
</plurals>
<string name="installed_app__updates_ignored_for_suggested_version">%1$s সংস্করণের জন্য হালনাগাদ উপেক্ষাকৃত</string>
<string name="app_details__no_versions__none_compatible_with_device">এই যন্ত্রের সাথে সামঞ্জস্যপূর্ণ কোনো সংস্করণ নেই</string>
<string name="app_details__no_versions__no_compatible_signatures">এই স্বাক্ষরের সাথে সামঞ্জস্যপূর্ণ কোনো সংস্করণ নেই</string>
<string name="app_details__incompatible_mismatched_signature">ইন্সটলকৃত সংস্করণ থেকে আলাদা স্বাক্ষর</string>
<string name="repo_error_empty_username">খালি নাম, যাচাইকরণ তথ্য পাল্টানো হয়নি</string>
<string name="send_fdroid_metrics_report">%s পরিসংখ্যান প্রতিবেদন পাঠাও</string>
<plurals name="details_last_update_years">
<item quantity="one">%1$d বছর আগে হালনাগাদকৃত</item>
<item quantity="other">%1$d বছর আগে হালনাগাদকৃত</item>
</plurals>
<plurals name="details_last_update_months">
<item quantity="one">%1$d মাস আগে হালনাগাদকৃত</item>
<item quantity="other">%1$d মাস আগে হালনাগাদকৃত</item>
</plurals>
<plurals name="details_last_update_weeks">
<item quantity="one">%1$d সপ্তাহ আগে হালনাগাদকৃত</item>
<item quantity="other">%1$d সপ্তাহ আগে হালনাগাদকৃত</item>
</plurals>
<plurals name="details_last_update_days">
<item quantity="one">%1$d দিন আগে হালনাগাদকৃত</item>
<item quantity="other">%1$d দিন আগে হালনাগাদকৃত</item>
</plurals>
<string name="notification_channel_installs_description">অ্যাপ ইন্সটলের বিজ্ঞপ্তি দেখাও।</string>
<string name="interval_1w">সাপ্তাহিক হালনাগাদ আছে কিনা দেখো</string>
<string name="interval_1d">দৈনিক হালনাগাদ আছে কিনা দেখো</string>
<string name="interval_1h">প্রতি ঘণ্টায় হালনাগাদ আছে কিনা দেখো</string>
<string name="interval_never">কোনো স্বয়ংক্রিয় অ্যাপ হালনাগাদ নেই</string>
<string name="download_pending">ডাউনলোড শুরুর জন্য অপেক্ষারত…</string>
<string name="swap_not_visible_wifi">ওয়াইফাই দিয়ে দৃশ্যমান না</string>
<string name="swap_not_visible_bluetooth">ব্লুটুথ দিয়ে দৃশ্যমান না</string>
<string name="empty_search_available_app_list">সামঞ্জস্যপূর্ণ কোনো অ্যাপ পাওয়া যায়নি।</string>
<string name="repo_added">%1$s ভাণ্ডার সংরক্ষণ করা হয়েছে।</string>
<string name="global_error_updating_repos">হালনাগাদের সময় ত্রুটি: %s</string>
<string name="status_download_unknown_size">%1$s থেকে
\n%2$s
\nডাউনলোডরত</string>
<string name="install_history_and_metrics">ইন্সটল ইতিহাস ও পরিসংখ্যান</string>
<string name="panic_hide_warning_title">কিভাবে ফিরত আনতে হয় মনে রাখবে</string>
<string name="panic_hide_summary">অ্যাপ নিজেকে লুকাবে</string>
<string name="adding_apks_format">ভাণ্ডারে %s যোগ করা হচ্ছে…</string>
<string name="antiadslist">এই অ্যাপে বিজ্ঞাপন আছে</string>
<string name="details_new_in_version">সংস্করণ %s এ নতুন</string>
<string name="categories__empty_state__no_categories">দেখানোর জন্য কোনো বিভাগ নেই</string>
<string name="latest__empty_state__no_recent_apps">সাম্প্রতিক অ্যাপ পাওয়া যায়নি</string>
<string name="choose_bt_send">ব্লুটুথ দিয়ে পাঠানোর পদ্ধতি নির্বাচন করো</string>
<string name="app_list_download_ready">ডাউনলোডকৃত, ইন্সটল করতে প্রস্তুত</string>
<string name="app_installed_media">%s এ ফাইল ইন্সটলকৃত</string>
<string name="app_inst_unknown_source">ইন্সটলকৃত (অজানা উৎস থেকে)</string>
<string name="no_such_app">এইরকম কোনো অ্যাপ পাওয়া যায়নি।</string>
<string name="menu_show_install_history">ইন্সটল ইতিহাস দেখাও</string>
<string name="not_visible_nearby">কাছাকাছি নিষ্ক্রিয়</string>
<string name="menu_show_fdroid_metrics_report">পরিসংখ্যান প্রতিবেদন দেখাও</string>
<string name="send_to_fdroid_metrics">ব্যবহারের তথ্য পাঠাও</string>
<string name="fdroid_metrics_report">%s পরিসংখ্যানের প্ররিবেদন</string>
<string name="crash_dialog_title">এফ-ড্রয়েড থেমে‌ গেছে</string>
<string name="app__tts__downloading_progress">ডাউনলোডরত, %1$d%% সম্পূর্ণ</string>
<string name="perms_description_app">%1$s দ্বারা সরবরাহকৃত।</string>
<string name="uninstall_error_notify_title">%s এর ইন্সটল সরাতে ত্রুটি</string>
<string name="install_error_notify_title">%s ইন্সটল করতে ত্রুটি</string>
<string name="install_confirm">অনুমতি লাগবে</string>
<string name="swap_toast_hotspot_enabled">ওয়াইফাই হটস্পট চালু</string>
<string name="swap_nfc_title">অদলবদলের জন্য টিপো</string>
<string name="empty_installed_app_list">কোনো অ্যাপ ইন্সটল করা নেই।
\n
\nতোমার কাছে অন্যান্য অ্যাপ আছে, কিন্তু সেগুলো এফ-ড্রয়েডের না। ভাণ্ডারগুলোর হালনাগাদের প্রয়োজনীয়তা এর কারণ হতে পারে অথবা ভাণ্ডারগুলোতে আসলেই হয়তো তোমার অ্যাপগুলো নেই।</string>
<string name="app_details__no_versions__explain_incompatible_signatures">ইন্সটলকৃত সংস্করণ অন্য কোনো সংস্করণের সাথে অসামঞ্জস্যপূর্ণ। এই অ্যাপ মুছলে তোমাকে অন্যান্য সামঞ্জস্যপূর্ণ সংস্করণ দেখতে ও ইন্সটল করতে দিবে। গুগল প্লে বা অন্য জায়গা থেকে অ্যাপ ইন্সটল করলে বেশিরভাগ সময় এমন হয়, বিশেষত অন্য অনুমতিপত্র দিয়ে স্বাক্ষর করা হলে।</string>
<string name="interval_2w">প্রতি ২ সপ্তাহে হালনাগাদ আছে কিনা দেখো</string>
<string name="interval_12h">প্রতি ১২ ঘণ্টায় হালনাগাদ আছে কিনা দেখো</string>
<string name="interval_4h">প্রতি ঘণ্টায় হালনাগাদ আছে কিনা দেখো</string>
<string name="swap_toast_closing_nearby_after_timeout">অলস পরে থাকায় কাছাকাছি বন্ধ করা হয়েছে ।</string>
<string name="swap_cant_find_peers">তোমার উদ্দীষ্ট ব্যক্তিকে পাচ্ছ না\?</string>
<string name="swap_join_this_hotspot">তোমার হটস্পটে যুক্ত হতে বন্ধুকে সাহায্য করো</string>
<string name="repo_searching_address">%1$s এ
\nপ্যাকেজের ভাণ্ডার খোঁজা হচ্ছে</string>
<string name="repo_fingerprint">স্বাক্ষর চাবির আঙ্গুলছাপ (শা-২৫৬)</string>
<string name="all_other_repos_fine">অন্যান্য ভাণ্ডার আয়না বানায়নি।</string>
<string name="repos_unchanged">সব ভাণ্ডার হালনাগাদকৃত</string>
<string name="status_inserting_x_apps">%3$s থেকে অ্যাপের তথ্য সংরক্ষণ করা হচ্ছে (%1$d/%2$d)</string>
<string name="download_404">অনুরোধকৃত নথি পাওয়া যায়নি।</string>
<string name="copying_icons">ভাণ্ডারে অ্যাপ আইকন অনুলিপিত হচ্ছে…</string>
<string name="antinonfreenetlist">এই অ্যাপ অ-মুক্ত নেটওয়ার্ক সেবা নিতে উৎসাহিত করে</string>
<string name="invalid_url">এটা একটি সঠিক সংযোগ নয়।</string>
<string name="repo_exists_and_enabled">%1$s আগে থেকেই শুরু ও সক্রিয়।</string>
<string name="updates_disabled_by_settings">তথ্য/ওয়াইফাই পছন্দ দিয়ে হালনাগাদ নিষ্ক্রিয়</string>
<string name="banner_no_data_or_wifi">তথ্য বা‌ ওয়াইফাই নিষ্ক্রিয়</string>
<string name="use_pure_black_dark_theme_summary">শুধু ওলেড পর্দার জন্য প্রস্তাব দাও।</string>
<string name="swap_toast_invalid_url">অদলবদলের জন্য ভুল সংযোগ: %1$s</string>
<string name="swap_view_available_networks">উপলভ্য নেটওয়ার্ক খুলতে টিপ দাও</string>
<string name="notification_channel_swaps_description">পি২পি অ্যাপ অদলবদলের বিজ্ঞপ্তি দেখাও।</string>
<string name="perm_costs_money">এতে তোমার টাকা খরচ হতে পারে</string>
<string name="swap_toast_could_not_enable_hotspot">ওয়াইফাই হটস্পট চালু করা যায়নি!</string>
<string name="swap_switch_to_wifi">ওয়াইফাই নেটওয়ার্কে যেতে টিপ দাও</string>
<string name="swap_join_same_wifi">তোমার বন্ধুর সাথে একই ওয়াইফাইতে যোগ দাও</string>
<string name="nearby_splash__document_tree">ভাণ্ডার ও আয়নার জন্য ইউএসবি ওটিজি অনুসন্ধান করো।</string>
<string name="app_details__no_versions__show_incompat_versions">তবুও সামঞ্জস্যপূর্ণ সংস্করণ দেখাতে, %1$s পছন্দ সক্রিয় করো।</string>
<string name="app_details_donate_prompt">%2$s, %1$s বানিয়েছে। তাদেরকে এক কাপ কফি কিনে দাও!</string>
<string name="send_to_fdroid_metrics_summary">সাপ্তাহিক এফ-ড্রয়েড পরিসংখ্যানের অব্যক্তিগত তথ্য পাঠাও (ইন্সটল ইতিহাস রাখতে হবে)</string>
<string name="not_on_same_wifi">তুমি যে স্থানীয় ভাণ্ডার যুক্ত করেছো সেটা আর তোমার যন্ত্র একই ওয়াইফাইতে নেই! এই নেটওয়ার্ক যোগ দেবার চেষ্টা করো: %s</string>
<string name="nearby_splash__read_external_storage">ভাণ্ডার ও আয়না এসডি কার্ডে খুঁজো।</string>
<string name="nearby_splash__both_parties_need_fdroid">কাছাকাছি ব্যবহার করতে উভয় পক্ষের %1$s লাগবে।</string>
<string name="empty_can_update_app_list">অভিনন্দন!
\nসব অ্যাপ হালনাগাদকৃত।</string>
<string name="status_download">%1$s
\nথেকে ডাউনলোডরত
\n%2$s / %3$s (%4$d%%)</string>
<string name="panic_reset_repos_summary">সহজাত পছন্দে ভাণ্ডারের অবস্থা ফিরিয়ে জোর করো</string>
<string name="panic_add_apps_to_uninstall">আনইন্সটল ও মুছার জন্য অ্যাপ যোগ করো</string>
<string name="panic_will_be_wiped">মুছা হবে(আনইন্সটল) এবং সব তথ্য মুছা হবে</string>
<string name="expert_on">অতিরিক্ত তথ্য দেখাও ও অতিরিক্ত পছন্দসমূহ সক্রিয় করো</string>
<string name="antiknownvulnlist">এই অ্যাপের একটি জানা নিরাপত্তা দুর্বলতা রয়েছে</string>
<string name="antidisabledalgorithmlist">এই অ্যাপের নিরাপত্তা স্বাক্ষর খুব দুর্বল</string>
<string name="antinonfreedeplist">এই অ্যাপ অন্যান্য অ-মুক্ত অ্যাপের উপর নির্ভর করে</string>
<string name="bluetooth_activity_not_found">ব্লুটুথ দিয়ে পাঠানোর কোনো উপায় পাওয়া যায়নি, একটা নির্বাচন করো!</string>
<string name="send_installed_apps_csv">সিএসভি নথি হিসেবে এফ-ড্রয়েড কর্তৃক ইন্সটলকৃত অ্যাপ</string>
<string name="app_details_donate_prompt_unknown_author">%1$s এর তৈরিকারকদের এক কাপ কফি কিনে দাও!</string>
<string name="send_fdroid_metrics_json">জেসন নথি হিসেবে %s পরিসংখ্যান প্রতিবেদন</string>
<string name="notification_channel_updates_description">অ্যাপ ও ভাণ্ডার হালনাগাদের বিজ্ঞপ্তি দেখাবে।</string>
<string name="install_confirm_update_system_no_perms">ডিভাইসে আগে থেকে বিদ্যমান এই অ্যাপটি হালনাগাদ করবে\? তোমার বিদ্যমান তথ্য মুছে যাবে না। এতে কোনো বিশেষ অনুমতি লাগবে না।</string>
<string name="install_confirm_update_no_perms">ডিভাইসে আগে থেকে বিদ্যমান এই অ্যাপটি হালনাগাদ করবে\? তোমার বিদ্যমান তথ্য মুছে যাবে না। এতে কোনো বিশেষ অনুমতি লাগবে না।</string>
<string name="install_confirm_update_system">ডিভাইসে আগে থেকে বিদ্যমান এই অ্যাপটি হালনাগাদ করবে\? তোমার বিদ্যমান তথ্য মুছে যাবে না। হালনাগাদকৃত অ্যাপ যেসব অনুমতি পাবে তা নিম্নরূপ:</string>
<string name="install_confirm_update">বিদ্যমান অ্যাপের জন্য এই হালনাগাদটি কি ইন্সটল করবে\? তোমার তথ্য মুছবে না। হালনাগাদকৃত অ্যাপ যেসব অনুমতি পাবে তা নিম্নরূপ:</string>
<string name="swap_join_same_wifi_desc">নিশ্চিত করো একই ওয়াইফাইয়ে আছো, যাতে ওয়াইফাই দিয়ে বিনিময় করতে পারো। একই নেটওয়ার্কে তোমাদের প্রবেশ না পারলে, একটা হটস্পট বানাতে পারো।</string>
<string name="force_touch_apps_on">কঠিনন্ত্র(হার্ডওয়্যার) সমর্থন ছাড়া টাচপর্দা লাগে এমন অ্যাপ দেখাও</string>
<string name="show_incompat_versions_on">এই যন্ত্রের সাথে অসামঞ্জস্যপূর্ণ অ্যাপ সংস্করণ দেখাও</string>
<string name="antinosourcesince">উৎস কোড এখন অনুপভ্য, হালনাগাদ সম্ভব নয়।</string>
<string name="latest__empty_state__no_enabled_repos">ভাণ্ডার সক্রিয় করে হালনাগাদ করলে, সর্বশেষ অ্যাপ এখানে দেখাবে</string>
<string name="swap_intro">কাছাকাছি মানুষের সাথে যুক্ত হও ও অ্যাপ বিনিময় করো।</string>
<string name="nearby_splash__download_apps_from_people_nearby">ইন্টারনেট নেই\? কাছের কারো কাছ থেকে অ্যাপ নাও!</string>
<string name="install_error_unknown">অজানা সমস্যার জন্য ইন্সটল করতে ব্যর্থ</string>
<string name="uninstall_error_unknown">অজানা সমস্যার জন্য মুছতে ব্যর্থ</string>
<string name="antiupstreamnonfreelist">উজানের কোড সম্পূর্ণরূপে মুক্ত না</string>
<string name="swap_toast_find_removeable_storage">এসডি কার্ড বা ইউএসবি নির্বাচন করো</string>
<string name="latest__empty_state__never_updated">তোমার অ্যাপের তালিকা হালনাগাদ হলে, হালনাগাদকৃত অ্যাপ এখানে দেখানো হবে</string>
<string name="repo_exists_add_mirror">এটা %1$s এর অনুলিপি, আয়না হিসেবে যুক্ত করবে\?</string>
<string name="repo_delete_to_overwrite">প্রথমে %1$s মুছো যাতে চাবিগুলোর(কি) মধ্যে অসামঞ্জস্যতা না হয়।</string>
<string name="repo_exists_enable">%1$s আগে থেকেই তৈরি, নিশ্চিত করো যে এটা আবার সক্রিয় করতে চাও।</string>
<string name="repo_exists_add_fingerprint">%1$s আগে থেকেই তৈরি, এতে নতুন গুরুত্বপূর্ণ তথ্য যোগ করবে।</string>
<string name="antifeatureswarning">এই অ্যাপে অপছন্দনীয় কিছু বৈশিষ্ট্য আছে।</string>
<string name="use_pure_black_dark_theme">অন্ধকার রঙে সম্পূর্ণ কালো পটভূমি ব্যবহার করো</string>
<plurals name="tts_view_all_in_category">
<item quantity="one">%2$s বিভাগের %1$d অ্যাপটি দেখো</item>
<item quantity="other">%2$s বিভাগের %1$d সব অ্যাপ দেখো</item>
</plurals>
<string name="uninstall_confirm">অ্যাপটি মুছতে চাও\?</string>
<string name="updates__app_with_known_vulnerability__prompt_upgrade">%1$s এ একটি অনিরাপত্তা পাওয়া গেছে। এই‌ মুহূর্তেই অ্যাপটি হালনাগাদের প্রস্তাব দিচ্ছি।</string>
<string name="updates__app_with_known_vulnerability__prompt_uninstall">%1$s এ একটি অনিরাপত্তা পাওয়া গেছে। এই‌ মুহূর্তেই অ্যাপটি মুছে ফেলার প্রস্তাব দিচ্ছি।</string>
<string name="app_permission_storage">স্টোরেজে ইন্সটল করতে এফ-ড্রয়েডের স্টোরেজ অনুমতি লাগবে। ইনস্টল চালিয়ে যেতে পরের পর্দায় এটার অনুমতি দিও।</string>
<string name="toast_metrics_in_install_history">ইন্সটল ইতিহাস পাঠকে %s পরিসংখ্যান প্রতিবেদন পড়া যায়</string>
<string name="hiding_dialog_warning">সতর্কতা: মূল পর্দার একটি শর্টকাটও মুছে যাবে এবং পরে আলাদাভাবে আনতে হবে।</string>
<string name="panic_apps_to_uninstall">অ্যাপ মুছে ফেলা হবে এবং সব তথ্য মুছা হবে</string>
<string name="panic_settings_summary">বিপদের সময়ে করণীয় ক্রিয়া</string>
<string name="crash_dialog_text">একটা অপ্রত্যাশিত ত্রুটির কারণে অ্যাপ থামাতে হয়েছে। সমস্যাটা ঠিক করতে বিস্তারিত তথ্য ইমেইল করে পাঠাবে কি\?</string>
<string name="warning_scaning_qr_code">তোমার ক্যামেরায় মনে হয় স্বয়ংক্রিয়-মনোযোগ নেই, এতে সংকেতের পাঠোদ্ধার কঠিন হতে পারে।</string>
<string name="crash_dialog_comment_prompt">এখানে তুমি অতিরিক্ত তথ্য ও মন্তব্য দিতে পারো:</string>
<string name="uninstall_update_confirm">এই অ্যাপটিকে কি কারখানা সংস্করণ দিয়ে প্রতিস্থাপিত করবে\? সব তথ্য এতে মুছে যাবে।</string>
<string name="swap_toast_not_removable_storage">নির্বাচিত ভুক্তির সাথে কোনো স্টোরেজ যন্ত্র মিলেনি, আবার চেষ্টা করো।</string>
<string name="swap_no_peers_nearby">বিনিময়ের জন্য কাছাকাছি কাউকে পাওয়া যায়নি।</string>
<string name="swap_scan_or_type_url">একজন সংকেতের পাঠোদ্ধার করবে অথবা সংষোগটি নিজের পরিব্রাজক(ব্রাউজারে) লিখবে।</string>
<string name="swap_nfc_description">তোমার বন্ধুর এফ-ড্রয়েড ও এনএফসি থাকলে তোমাদের ডিভাইস দুইটা পরস্পরের সাথে স্পর্শ করাও।</string>
<string name="system_install_denied_permissions">এই এক্সটেনশনকে বিশেষ অনুমতি দেওয়া হয়নি। অনুগ্রহ করে একটি সমস্যার প্রতিবেদন বানাও।</string>
<string name="repo_disabled_notification">%1$s নিষ্ক্রিয় করা হয়েছে ।
\n
\nআবার এর থেকে অ্যাপ নামাতে একে পুনঃসক্রিয় করতে হবে।</string>
<string name="repo_not_yet_updated">এই ভাণ্ডার আগে ব্যবহার করা হয়নি। এতে বিদ্যমান অ্যাপ দেখতে এটাকে সক্রিয় করতে হবে।</string>
<string name="panic_app_dialog_message">তুমি কি %1$sকে ধ্বংসাত্বক আতঙ্ক বা বিপদ সংকেত বোতাম চালু করার ক্ষমতা দেওয়ার ব্যাপারে নিশ্চিত\?</string>
<string name="swap_qr_isnt_for_swap">যে কিউআর কোডের পাঠোদ্ধার করেছো সেটা বিনিময় সংকেত মনে হচ্ছে না।</string>
<string name="swap_connection_misc_error">যুক্ত করার সময় একটা সমস্যা হয়েছে, তাই বিনিময় করা যাচ্ছে না।</string>
<string name="no_handler_app">এমন কোনো অ্যাপ এই মুহূর্তে তোমার কাছে নেই যা %s চালাতে পারবে।</string>
<string name="not_visible_nearby_description">কাছাকাছি ডিভাইসের সাথে বিনিময় করার আগে তোমার ডিভাইস দৃশ্যমান করো।</string>
<string name="swap_confirm_connect">এখনই %1$s থেকে অ্যাপ আনতে চাও\?</string>
<string name="hide_on_long_search_press_summary">অনুসন্ধান বোতামে কিছুক্ষণ ধরে রাখলে অ্যাপ লুকানো হবে</string>
<string name="preventScreenshots_summary">স্ক্রিনশট নেওয়া প্রতিরোধ করে আর অ্যাপের বিষয়বস্তু সাম্প্রতিক পর্দা থেকে লুকায়</string>
<string name="useTorSummary">গোপনীয়তা বৃদ্ধির জন্য জোর করে সব তথ্যের গমন টর দিয়ে নাও। অরবট লাগবে</string>
<string name="touch_to_configure_local_repo">বিস্তারিত দেখতে টিপ দাও এবং অন্যদের সাথে অ্যাপ বিনিময়ের অনুমতি দাও।</string>
<string name="unsigned_description">এর অর্থ একটা তালিকার অ্যাপ যাচাই করা যায়নি। অস্বাক্ষরিত সূচী থেকে অ্যাপ নামানোর সময় তোমাকে সাবধান হতে হবে।</string>
<string name="repo_confirm_delete_body">একটা ভাণ্ডার মুছা মানে এটার অ্যাপ আর উপলভ্য থাকবে না।
\n
\nদ্র: আগে থেকে ইন্সটল করা অ্যাপ ডিভাইসে থাকবে।</string>
<string name="hiding_dialog_message">তুমি কি আসলেই লঞ্চার থেকে %1$s সরাতে চাও\? শুধু নকল %3$s অ্যাপের মধ্যে %2$d লিখলেই এটা ফিরত আসবে।</string>
<string name="panic_hide_warning_message">আতঙ্ক/বিপদের সময়, লঞ্চার থেকে %1$s সরানো হবে। শুধু নকল %3$s অ্যাপের মধ্যে %2$d লিখলেই এটা ফিরত আসবে।</string>
</resources>

View File

@ -30,7 +30,7 @@
<string name="no">No</string>
<string name="repo_add_title">Afegeix un nou dipòsit</string>
<string name="repo_add_add">Afegeix</string>
<string name="cancel">Cancel·la</string>
<string name="cancel">Cancel·lar</string>
<string name="enable">Permès</string>
<string name="add_key">Afegeix clau</string>
<string name="overwrite">Sobreescriu</string>
@ -154,7 +154,7 @@
<string name="menu_bitcoin">Bitcoin</string>
<string name="menu_litecoin">Litecoin</string>
<string name="menu_flattr">Flattr</string>
<string name="banner_updating_repositories">Actualitzant els dipòsits</string>
<string name="banner_updating_repositories">Actualitzant respositoris</string>
<string name="more">Més</string>
<string name="less">Menys</string>
<string name="permissions">Permisos</string>
@ -425,10 +425,10 @@
<string name="repo_exists_add_mirror">Això és una còpia de %1$s, voleu afegir-la com a rèplica?</string>
<string name="antidisabledalgorithmlist">La signatura de seguretat de l\'aplicació és feble</string>
<string name="antiknownvulnlist">Aquesta aplicació té un problema de seguretat conegut</string>
<string name="show_anti_feature_apps">Inclou aplicacions amb característiques indesitjades</string>
<string name="show_anti_feature_apps_on">Mostra aplicacions que requereixen característiques indesitjades</string>
<string name="show_anti_feature_apps">Inclou aplicacions amb funcionalitats indesitjades</string>
<string name="show_anti_feature_apps_on">Mostra aplicacions que requereixen funcionalitats indesitjades</string>
<string name="force_touch_apps">Inclou aplicacions per pantalla tàctil</string>
<string name="force_touch_apps_on">Mostra les aplicacions que requereixen pantalla tàctil, independent del maquinari que tinc</string>
<string name="force_touch_apps_on">Mostra les aplicacions que requereixen pantalla tàctil, independent del maquinari que tingui</string>
<string name="hiding_dialog_warning">Alerta: s\'eliminarà qualsevol icona de la pantalla d\'inici i caldrà tornar a afegir-la manualment.</string>
<string name="hide_on_long_search_press_summary">Si manteniu premut el botó de cerca l\'aplicació s\'amagarà</string>
<string name="repo_official_mirrors">Rèpliques oficials</string>
@ -466,13 +466,13 @@
<string name="menu_open">Obrir</string>
<string name="menu_downgrade">Revertir versió</string>
<string name="scan_removable_storage_title">Escaneja l\'emmagatzematge extraïble</string>
<string name="scan_removable_storage_toast">S\'està escanejant %s…</string>
<string name="scan_removable_storage_toast">Escanejant %s…</string>
<string name="scan_removable_storage_summary">Cerca dipòsits de paquets en emmagatzematge extraïble com ara targetes SD i memòries USB</string>
<string name="app_repository">Dipòsit: %1$s</string>
<string name="main_menu__updates">Actualitzacions</string>
<string name="nearby_splash__read_external_storage">Cerca a la memòria SD repositoris d\'intercanvi.</string>
<string name="nearby_splash__request_permission">Prova-ho</string>
<string name="not_visible_nearby">Al voltant no habilitat</string>
<string name="not_visible_nearby">Proximitat no habilitada</string>
<string name="not_visible_nearby_description">Abans d\'intercanviar amb dispositius propers, feu el vostre dispositiu visible.</string>
<string name="swap_toast_using_path">Utilitzant %1$s</string>
<string name="swap_toast_not_removable_storage">Aquesta tria no concorda amb cap dispositiu d\'emmagatzematge extraïble, torneu-ho a provar!</string>
@ -505,4 +505,18 @@
<string name="notification_channel_installs_description">Mostra les notificacions d\'instal·lació d\'aplicacions.</string>
<string name="notification_channel_installs_title">Instal·lacions</string>
<string name="notification_channel_swaps_title">Intercanvis</string>
<string name="theme_follow_system">Seguir el sistema</string>
<string name="use_pure_black_dark_theme_summary">Recomanat només per a pantalles OLED.</string>
<string name="use_pure_black_dark_theme">Utilitzar fons negre pur en el tema fosc</string>
<string name="banner_no_data_or_wifi">Dades/WiFi desactivats</string>
<string name="banner_no_internet">Sense Internet</string>
<string name="menu_show_install_history">Mostra l\'historial d\'instal·lacions</string>
<string name="menu_show_fdroid_metrics_report">Mostra l\'informe de mètriques</string>
<string name="toast_metrics_in_install_history">L\'informe mètriques %s es pot visualitzar al visor de l\'historial d\'instal·lacions</string>
<string name="send_to_fdroid_metrics_summary">Envia setmanalment dades anònimes a les mètriques F-Droid (requereix mantenir historial dinstal·lacions)</string>
<string name="send_to_fdroid_metrics">Enviar dades d\'ús</string>
<string name="fdroid_metrics_report">Informe de mètriques %s</string>
<string name="install_history_and_metrics">Instal·la l\'històric i les mètriques</string>
<string name="send_fdroid_metrics_json">Informe de mètriques %s como a fitxer JSON</string>
<string name="send_fdroid_metrics_report">Envia informe de mètriques %s</string>
</resources>

View File

@ -145,7 +145,7 @@
<string name="menu_litecoin">Litecoin</string>
<string name="menu_flattr">Flattr</string>
<string name="status_download_unknown_size">Stahování\n%2$s z\n%1$s</string>
<string name="banner_updating_repositories">Aktualizace repozitářů</string>
<string name="banner_updating_repositories">Aktualizuji repozitáře</string>
<string name="status_processing_xml_percent">Zpracovávání %2$s / %3$s (%4$d%%) z %1$s</string>
<string name="all_other_repos_fine">Žádné jiné repozitáře nenahlásily chyby.</string>
<string name="permissions">Oprávnění</string>
@ -513,4 +513,18 @@
<string name="notification_channel_installs_title">Instalace</string>
<string name="notification_channel_swaps_description">Zobrazí oznámení o P2P směnách aplikací.</string>
<string name="notification_channel_swaps_title">Směny</string>
<string name="theme_follow_system">Podle systému</string>
<string name="use_pure_black_dark_theme_summary">Doporučeno jen pro OLED-obrazovky.</string>
<string name="use_pure_black_dark_theme">Použít čistě černé pozadí s tmavým motivem</string>
<string name="banner_no_data_or_wifi">Datové spojení nebo WLAN nejsou aktivní</string>
<string name="banner_no_internet">Nemáme spojení</string>
<string name="menu_show_install_history">Zobrazit průběh instalací</string>
<string name="menu_show_fdroid_metrics_report">Zobrazit hlášení metrik</string>
<string name="toast_metrics_in_install_history">Hlášení metrik %s lze prohlédnout v náhledu průběhu instalací</string>
<string name="send_to_fdroid_metrics_summary">Odesílá anonymizovaná data týdně pro metriky F-Droid (vyžaduje uchování průběhu instalací)</string>
<string name="send_to_fdroid_metrics">Odeslat data o používání</string>
<string name="fdroid_metrics_report">%s Hlášení metrik</string>
<string name="install_history_and_metrics">Průběh instalací a metriky</string>
<string name="send_fdroid_metrics_json">%s hlášení metrik jako JSON soubor</string>
<string name="send_fdroid_metrics_report">Odeslat hlášení metrik %s</string>
</resources>

View File

@ -51,18 +51,18 @@
<string name="menu_ignore_this">Dieses Update ignorieren</string>
<string name="menu_website">Internetseite</string>
<string name="menu_issues">Probleme</string>
<string name="menu_source">Quelltext</string>
<string name="menu_source">Quellcode</string>
<string name="menu_upgrade">Aktualisieren</string>
<string name="details_notinstalled">Nicht installiert</string>
<string name="antiadslist">Diese App enthält Werbung</string>
<string name="antitracklist">Diese App verfolgt und versendet Ihre Aktivitäten</string>
<string name="antinonfreeadlist">Diese Anwendung bewirbt nicht-quelloffene Erweiterungen</string>
<string name="antinonfreenetlist">Diese Anwendung bewirbt nicht-quelloffene Netzwerkdienste</string>
<string name="antinonfreedeplist">Diese Anwendung hängt von nicht-quelloffenen Anwendungen ab</string>
<string name="antinonfreeadlist">Diese App bewirbt nicht-quelloffene Erweiterungen</string>
<string name="antinonfreenetlist">Diese App bewirbt nicht-quelloffene Netzwerkdienste</string>
<string name="antinonfreedeplist">Diese App ist abhängig von anderen nicht-quelloffenen Apps</string>
<string name="antiupstreamnonfreelist">Der Originalcode ist nicht völlig quelloffen</string>
<string name="display">Anzeige</string>
<string name="expert">Expertenmodus</string>
<string name="expert_on">Zusätzliche Informationen anzeigen und zusätzliche Einstellungen aktivieren</string>
<string name="expert_on">Zusätzliche Informationen anzeigen und dazugehörige Einstellungen aktivieren</string>
<string name="search_hint">Apps suchen</string>
<string name="appcompatibility">Kompatibilität der App</string>
<string name="show_incompat_versions">Inkompatible Versionen einbeziehen</string>
@ -157,7 +157,7 @@
<string name="uninstall_error_unknown">Deinstallation wegen unbekanntem Fehler fehlgeschlagen</string>
<string name="app_name">F-Droid</string>
<string name="unstable_updates">Instabile Aktualisierungen</string>
<string name="unstable_updates_summary">Aktualisierungen für instabile Version vorschlagen</string>
<string name="unstable_updates_summary">Aktualisierungen für instabile Versionen vorschlagen</string>
<string name="menu_changelog">Änderungen</string>
<string name="category_Connectivity">Verbindung</string>
<string name="category_Sports_Health">Sport / Gesundheit</string>
@ -248,7 +248,7 @@
<string name="empty_search_available_app_list">Keine passenden Apps verfügbar.</string>
<string name="crash_dialog_title">F-Droid ist abgestürzt</string>
<string name="crash_dialog_comment_prompt">Sie können zusätzliche Informationen und Kommentare hier einfügen:</string>
<string name="antinonfreeassetslist">Diese Anwendung enthält nicht-quelloffene Bestandteile</string>
<string name="antinonfreeassetslist">Diese App enthält nicht-quelloffene Bestandteile</string>
<string name="crash_dialog_text">Die App wurde durch einen unerwarteten Fehler beendet. Möchten Sie die Details als E-Mail versenden, um eine Fehlerbehebung zu unterstützen\?</string>
<string name="menu_email">E-Mail an Autor</string>
<string name="repo_provider">Paketquelle: %s</string>
@ -271,7 +271,7 @@
<string name="update_auto_install">Automatisch installieren</string>
<string name="update_auto_install_summary">App-Aktualisierungen im Hintergrund herunterladen und installieren</string>
<string name="keep_install_history">Installationsverlauf aufbewahren</string>
<string name="keep_install_history_summary">Ein Protokoll zu allen Installationen und Deinstallationen in einem privaten Speicher anlegen</string>
<string name="keep_install_history_summary">Speichern Sie ein Protokoll aller Installationen und Deinstallationen in einem privaten Speicher</string>
<string name="warning_no_internet">Aktualisierung kann nicht durchgeführt werden! Besteht eine Internetverbindung?</string>
<string name="versions">Versionen</string>
<string name="app_details_donate_prompt_unknown_author">Den Entwicklern von %1$s einen Kaffee spendieren!</string>
@ -299,7 +299,7 @@
<string name="app_version_x_available">Version %1$s verfügbar</string>
<string name="app_version_x_installed">Version %1$s</string>
<string name="clear_search">Suche löschen</string>
<string name="main_menu__latest_apps">Neueste</string>
<string name="main_menu__latest_apps">Neues</string>
<string name="main_menu__categories">Kategorien</string>
<string name="main_menu__updates">Aufgaben</string>
<string name="main_menu__swap_nearby">Umfeld</string>
@ -327,7 +327,7 @@
<item quantity="other">Aktualisierungen für %1$d Apps herunterladen.</item>
</plurals>
<string name="details_new_in_version">Neu in Version %s</string>
<string name="antifeatureswarning">Diese Anwendung besitzt Merkmale, die möglicherweise unerwünscht sind.</string>
<string name="antifeatureswarning">Diese App besitzt Merkmale, die möglicherweise unerwünscht sind.</string>
<string name="antifeatures">Unerwünschte Merkmale</string>
<string name="details_last_updated_today">Heute aktualisiert</string>
<plurals name="details_last_update_days">
@ -340,19 +340,19 @@
</plurals>
<string name="app_list__name__successfully_installed">%1$s installiert</string>
<string name="nearby_splash__download_apps_from_people_nearby">Kein Internet\? Apps von Menschen in Ihrer Umgebung erhalten!</string>
<string name="nearby_splash__find_people_button">Menschen in Ihrer Nähe suchen</string>
<string name="nearby_splash__find_people_button">In Ihrer Nähe suchen</string>
<string name="nearby_splash__both_parties_need_fdroid">Beide benötigen %1$s, um den Direkttausch zu verwenden.</string>
<string name="latest__empty_state__no_recent_apps">Keine kürzlich aktualisierten Apps gefunden</string>
<string name="latest__empty_state__never_updated">Sobald Ihre Anwendungsliste aktualisiert wurde, sollten die neuesten Anwendungen hier angezeigt werden.</string>
<string name="latest__empty_state__no_enabled_repos">Sobald Sie eine Paketquelle aktiviert haben und diese aktualisiert wurde, sollten die neuesten Anwendungen hier angezeigt werden.</string>
<string name="latest__empty_state__never_updated">Sobald Ihre App-Liste aktualisiert wurde, sollten die neuesten Apps hier angezeigt werden</string>
<string name="latest__empty_state__no_enabled_repos">Sobald Sie eine Paketquelle aktiviert haben und diese aktualisiert wurde, sollten die neuesten Apps hier angezeigt werden</string>
<string name="categories__empty_state__no_categories">Keine Kategorien zum Anzeigen</string>
<string name="menu_video">Video</string>
<string name="app__tts__cancel_download">Herunterladen abbrechen</string>
<string name="app__tts__downloading_progress">Herunterladen, %1$d%% abgeschlossen</string>
<string name="menu_license">Lizenz: %s</string>
<plurals name="notification_summary_more">
<item quantity="one">+%1$d weitere </item>
<item quantity="other">+%1$d weitere </item>
<item quantity="one">+%1$d weitere…</item>
<item quantity="other">+%1$d weitere…</item>
</plurals>
<plurals name="notification_summary_updates">
<item quantity="one">%1$d Aktualisierung</item>
@ -377,7 +377,7 @@
<string name="by_author_format">von %s</string>
<string name="download_404">Die angeforderte Datei wurde nicht gefunden.</string>
<string name="force_old_index">Altes Index-Format erzwingen</string>
<string name="force_old_index_summary">Bei Fehlern oder Kompatibilitätsproblemen den XML-App-Index verwenden.</string>
<string name="force_old_index_summary">Bei Fehlern oder Kompatibilitätsproblemen den XML-App-Index verwenden</string>
<string name="app_list_download_ready">Heruntergeladen und bereit zur Installation</string>
<string name="app_installed_media">Datei wurde nach %s installiert</string>
<string name="app_permission_storage">F-Droid benötigt Zugriffsrechte auf den Speicher, um es dort zu installieren. Bitte beim nächsten Bildschirm bestätigen, um mit der Installation fortzufahren.</string>
@ -448,12 +448,12 @@
<string name="hide_all_notifications">Alle Benachrichtigungen ausblenden</string>
<string name="install_history">Installationsverlauf</string>
<string name="install_history_summary">Das private Protokoll zu allen Installationen und Deinstallationen ansehen</string>
<string name="send_version_and_uuid">Version und UUID an Server verschicken</string>
<string name="send_version_and_uuid">Version und UUID an Server senden</string>
<string name="prompt_to_send_crash_reports">Auf Nachfrage Absturzbericht senden</string>
<string name="hide_all_notifications_summary">Anzeigen zu Aktivitäten in der Statusleiste und den Benachrichtigungen generell vermeiden.</string>
<string name="send_version_and_uuid_summary">Diese App-Version und eine zufällige, einmalige ID beim Herunterladen einschließen, hat Auswirkungen auf den nächsten App-Start.</string>
<string name="share_repository">Paketquelle teilen</string>
<string name="allow_push_requests">Paketquellen erlauben, Apps zu installieren/deinstallieren</string>
<string name="allow_push_requests">Paketquellen App-Installationen erlauben</string>
<string name="allow_push_requests_summary">Paketquellen-Metadaten können Push-Anfragen zur Installation oder Deinstallation von Apps enthalten</string>
<string name="antinosourcesince">Der Quelltext ist nicht mehr erhältlich, keine Aktualisierungen möglich.</string>
<string name="send_install_history">Installationsverlauf senden</string>
@ -501,12 +501,12 @@
<string name="menu_opencollective">OpenCollective</string>
<string name="notification_channel_swaps_title">Tauschen</string>
<string name="notification_channel_installs_description">Zeigt Benachrichtigungen zur App-Installation an.</string>
<string name="notification_channel_updates_description">Zeigt Benachrichtigungen über App- und Repository-Aktualisierungen an.</string>
<string name="notification_channel_updates_description">Zeigt Benachrichtigungen über App- und Paketquellen-Aktualisierungen an.</string>
<string name="notification_channel_updates_title">Aktualisierungen</string>
<string name="notification_channel_swaps_description">Zeigt Benachrichtigungen zum Austausch von Apps via P2P an.</string>
<string name="notification_channel_installs_title">Installationen</string>
<string name="toast_metrics_in_install_history">Der %s Metrikenbericht ist sichtbar in der Ansicht des Installationsverlaufes</string>
<string name="send_to_fdroid_metrics_summary">Sendet anonymisierte Daten wöchtenlich zu F-Droid Metriken (erfordert das Behalten des Installationsverlaufes)</string>
<string name="send_to_fdroid_metrics_summary">Sendet anonymisierte Daten wöchentlich zu F-Droid Metriken (erfordert das Behalten des Installationsverlaufes)</string>
<string name="send_to_fdroid_metrics">Nutzungsdaten senden</string>
<string name="fdroid_metrics_report">%s Metrikenbericht</string>
<string name="install_history_and_metrics">Installationsverlauf und Metriken</string>
@ -517,4 +517,6 @@
<string name="use_pure_black_dark_theme_summary">Nur für OLED-Bildschirme empfohlen.</string>
<string name="theme_follow_system">Systemdefiniert</string>
<string name="use_pure_black_dark_theme">Rein schwarzen Hintergrund im dunklen Thema verwenden</string>
<string name="banner_no_data_or_wifi">Keine Daten oder WLAN aktiviert</string>
<string name="banner_no_internet">Kein Internet</string>
</resources>

View File

@ -521,4 +521,9 @@
<string name="send_fdroid_metrics_json">Αναφορά διαγνωστικών %s ως αρχείο JSON</string>
<string name="send_fdroid_metrics_report">Αποστολή αναφοράς διαγνωστικών %s</string>
<string name="send_to_fdroid_metrics">Αποστολή δεδομένων χρήσης</string>
<string name="theme_follow_system">Ίδιο με του συστήματος</string>
<string name="use_pure_black_dark_theme_summary">Συνιστάται μόνο για οθόνες OLED.</string>
<string name="use_pure_black_dark_theme">Χρήση τελείως μαύρου φόντου στο σκούρο θέμα</string>
<string name="banner_no_data_or_wifi">Δεν έχουν ενεργοποιηθεί δεδομένα ή WiFi</string>
<string name="banner_no_internet">Χωρίς σύνδεση στο διαδίκτυο</string>
</resources>

View File

@ -56,9 +56,9 @@
<item quantity="other">%1$d Updates</item>
</plurals>
<string name="notification_content_single_installed">Successfully installed</string>
<string name="notification_content_single_installing">Installing \"%1$s\"</string>
<string name="notification_content_single_downloading_update">Downloading update for \"%1$s\"</string>
<string name="notification_content_single_downloading">Downloading \"%1$s\"</string>
<string name="notification_content_single_installing">Installing %1$s</string>
<string name="notification_content_single_downloading_update">Downloading update for %1$s</string>
<string name="notification_content_single_downloading">Downloading %1$s</string>
<string name="notification_title_single_install_error">Install Failed</string>
<string name="notification_title_single_ready_to_install_update">Update ready to install</string>
<string name="notification_title_single_ready_to_install">Ready to install</string>
@ -217,12 +217,12 @@
<string name="hide_on_long_search_press_summary">Long pressing the search button will hide the app</string>
<string name="hide_on_long_search_press_title">Hide with search button</string>
<string name="hiding_dialog_warning">Warning: Any app shortcut on the home screen will also be removed and needs to be re-added manually.</string>
<string name="hiding_dialog_message">Are you sure you want to remove %1$s from the launcher\? Only typing \"%2$d\" in the fake %3$s app can restore it.</string>
<string name="hiding_dialog_message">Are you sure you want to remove %1$s from the launcher\? Only typing %2$d in the fake %3$s app can restore it.</string>
<string name="hiding_dialog_title">Hide %s Now</string>
<string name="hiding_calculator">Calculator</string>
<string name="panic_reset_repos_summary">Force the repo setup back to defaults</string>
<string name="panic_reset_repos_title">Reset repos</string>
<string name="panic_hide_warning_message">In a panic event, this will remove %1$s from the launcher. Only typing \"%2$d\" in the fake %3$s app can restore it.</string>
<string name="panic_hide_warning_message">In a panic event, this will remove %1$s from the launcher. Only typing %2$d in the fake %3$s app can restore it.</string>
<string name="panic_hide_warning_title">Remember how to restore</string>
<string name="panic_hide_summary">App will hide itself</string>
<string name="panic_hide_title">Hide %s</string>
@ -374,7 +374,7 @@
<string name="app_details__no_versions__explain_incompatible_signatures">The installed version is not compatible with any available versions. Uninstalling the app will enable you to view and install compatible versions. This often occurs with apps installed via Google Play or other sources, if they are signed by a different certificate.</string>
<string name="app_details__no_versions__none_compatible_with_device">No versions compatible with device</string>
<string name="app_details__no_versions__no_compatible_signatures">No versions with compatible signature</string>
<string name="app_details__no_versions__show_incompat_versions">To show incompatible versions here anyway, enable the \"%1$s\" setting.</string>
<string name="app_details__no_versions__show_incompat_versions">To show incompatible versions here anyway, enable the %1$s setting.</string>
<string name="app_details__incompatible_mismatched_signature">Different signature to installed version</string>
<string name="app_details_donate_prompt">%1$s is created by %2$s. Buy them a coffee!</string>
<string name="app_details_donate_prompt_unknown_author">Buy the developers of %1$s a coffee!</string>
@ -509,4 +509,6 @@
<string name="install_history_and_metrics">Install history and metrics</string>
<string name="send_fdroid_metrics_json">%s metrics report as JSON file</string>
<string name="send_fdroid_metrics_report">Send %s metrics report</string>
<string name="banner_no_data_or_wifi">No Data or Wi-Fi enabled</string>
<string name="banner_no_internet">No Internet</string>
</resources>

View File

@ -94,7 +94,7 @@
<string name="cache_downloaded">Kaŝmemorigi apk-dosierojn</string>
<string name="unstable_updates_summary">Proponi ĝisdatigojn al nestabilaj versioj</string>
<string name="system_installer">Privilegia aldonaĵo</string>
<string name="system_installer_on">Uzi privilegian aldonaĵon por instali, ĝisdatigi kaj forigi pakaĵojn</string>
<string name="system_installer_on">Uzi la privilegian aldonaĵon por instali, ĝisdatigi kaj forigi pakaĵojn</string>
<string name="local_repo_name">Nomo de via loka deponejo</string>
<string name="local_repo_name_summary">La anoncata nomo de via loka deponejo: %s</string>
<string name="local_repo_https_on">Uzi ĉifritan HTTPS:// konekton por loka deponejo</string>
@ -521,4 +521,6 @@
<string name="theme_follow_system">Sistema</string>
<string name="use_pure_black_dark_theme_summary">Konsilinda nur por ekranoj OLED.</string>
<string name="use_pure_black_dark_theme">Uzi komplete nigran fonon por malhela etoso</string>
<string name="banner_no_data_or_wifi">Neniu interreta konekto aktiva</string>
<string name="banner_no_internet">Sen interreto</string>
</resources>

View File

@ -6,7 +6,7 @@
<string name="delete">Eliminar</string>
<string name="enable_nfc_send">Habilitar envío NFC…</string>
<string name="cache_downloaded">Mantener las aplicaciones en caché</string>
<string name="updates">Avisos</string>
<string name="updates">Actualizaciones</string>
<string name="other">Otros</string>
<string name="update_interval">Intervalo de actualización automática</string>
<string name="notify">Mostrar actualizaciones disponibles</string>
@ -508,12 +508,17 @@
<string name="notification_channel_installs_description">Muestra notificaciones de instalación de aplicaciones.</string>
<string name="notification_channel_installs_title">Instalaciones</string>
<string name="menu_show_install_history">Mostrar historial de instalación</string>
<string name="menu_show_fdroid_metrics_report">Mostrar el informe de métricas</string>
<string name="toast_metrics_in_install_history">El informe %s se puede ver en el visor del historial de instalaciones</string>
<string name="send_to_fdroid_metrics_summary">Enviar estadísticas anónimas a F-Droid Metrics (necesita que se mantenga el historial de instalación)</string>
<string name="send_to_fdroid_metrics">Enviar estadísticas de uso</string>
<string name="menu_show_fdroid_metrics_report">Mostrar reporte de métricas</string>
<string name="toast_metrics_in_install_history">El reporte de métricas %s se puede visualizar en el visor del historial de instalaciones</string>
<string name="send_to_fdroid_metrics_summary">Enviar información anónima semanalmente a métricas F-Droid(requiere historial de instalación Keep)</string>
<string name="send_to_fdroid_metrics">Enviar información de uso</string>
<string name="fdroid_metrics_report">%s Reporte de métricas</string>
<string name="install_history_and_metrics">Instalar historial y métricas</string>
<string name="send_fdroid_metrics_json">%s reporte de métricas como un archivo JSON</string>
<string name="send_fdroid_metrics_report">Enviar %s informe de métricas</string>
<string name="send_fdroid_metrics_report">Enviar reporte de métricas %s</string>
<string name="theme_follow_system">Usar el del sistema</string>
<string name="use_pure_black_dark_theme_summary">Recomendado sólo para pantallas OLED.</string>
<string name="use_pure_black_dark_theme">Usar un fondo negro puro en el tema oscuro</string>
<string name="banner_no_data_or_wifi">Sin datos o WiFi activados</string>
<string name="banner_no_internet">Sin Internet</string>
</resources>

View File

@ -70,7 +70,7 @@
<string name="adding_apks_format">%s lisatakse hoidlasse…</string>
<string name="linking_apks">APK faile lingitakse hoidlasse…</string>
<string name="copying_icons">Rakenduste ikoone kopeeritakse hoidlasse…</string>
<string name="banner_updating_repositories">Hoidlaid värskendatakse</string>
<string name="banner_updating_repositories">Värskendan hoidlaid</string>
<string name="repos_unchanged">Kõik hoidlad on kaasajastaud</string>
<string name="all_other_repos_fine">Kõik ülejäänud hoidlad vigu ei põhjustanud.</string>
<string name="repo_details">Hoidla</string>
@ -520,4 +520,6 @@
<string name="theme_follow_system">Kasuta üldist teemat</string>
<string name="use_pure_black_dark_theme_summary">Soovitame kasutamiseks vaid OLED-ekraanidel.</string>
<string name="use_pure_black_dark_theme">Tumedas teemas kasuta musta tausta</string>
<string name="banner_no_data_or_wifi">3G, 4G või WiFi pole kasutusel</string>
<string name="banner_no_internet">Internetiühendus puudub</string>
</resources>

View File

@ -25,11 +25,11 @@
<string name="choose_bt_send">گزینش روش ارسال بلوتوث</string>
<string name="repo_add_url">نشانی مخزن</string>
<string name="repo_add_fingerprint">اثر انگشت (اختیاری)</string>
<string name="menu_manage">مخزنها</string>
<string name="menu_manage">مخازن</string>
<string name="menu_search">جست‌وجو</string>
<string name="menu_share">هم‌رسانی</string>
<string name="menu_install">نصب</string>
<string name="menu_uninstall">حذف نصب</string>
<string name="menu_uninstall">لغو نصب</string>
<string name="menu_issues">اشکال‌ها</string>
<string name="menu_source">کد منبع</string>
<string name="details_notinstalled">نصب نشده</string>
@ -118,7 +118,7 @@
<string name="proxy_port">درگاه پروکسی</string>
<string name="proxy_port_summary">شمارهٔ درگاه پروکسی (مثلاً 8118)</string>
<string name="status_download_unknown_size">در حال بارگیری\n%2$s از\n%1$s</string>
<string name="banner_updating_repositories">در حال به‌روز رسانی مخزنها</string>
<string name="banner_updating_repositories">در حال به‌روزرسانی مخازن</string>
<string name="status_processing_xml_percent">در حال پردازش %2$s / %3$s (%4$d%%) از %1$s</string>
<string name="status_inserting_apps">در حال ذخیرهٔ جزئیات برنامه</string>
<string name="repos_unchanged">تمام مخزن‌ها به‌روز هستند</string>
@ -285,7 +285,7 @@
<string name="clear_search">پاک‌سازی جست‌وجو</string>
<string name="repositories_summary">افزودن منابع اضافی برای برنامه ها</string>
<string name="menu_video">ویدیو</string>
<string name="main_menu__latest_apps">جدیدترین</string>
<string name="main_menu__latest_apps">آخرین</string>
<string name="main_menu__categories">دسته‌ها</string>
<string name="main_menu__swap_nearby">اطراف</string>
<string name="latest__empty_state__no_recent_apps">هیچ برنامهٔ اخیری پیدا نشد</string>
@ -504,4 +504,6 @@
<string name="theme_follow_system">از سیستم تبعیت کن</string>
<string name="use_pure_black_dark_theme_summary">فقط برای صفحه های OLED توصیه می شود.</string>
<string name="use_pure_black_dark_theme">از زمینه سیاه خالص در تم تاریک استفاده کن</string>
<string name="banner_no_data_or_wifi">اتصال وای‌فای یا داده‌ها فعال نیست</string>
<string name="banner_no_internet">بدون اینترنت</string>
</resources>

View File

@ -126,7 +126,7 @@
<string name="category_Internet">Internet</string>
<string name="category_Multimedia">Multimédia</string>
<string name="category_Navigation">Navigation</string>
<string name="category_Phone_SMS">Téléphone et textos</string>
<string name="category_Phone_SMS">Téléphone et SMS</string>
<string name="category_Reading">Lecture</string>
<string name="category_Science_Education">Science et éducation</string>
<string name="category_Security">Sécurité</string>
@ -210,10 +210,10 @@
<string name="swap_intro">Connectez-vous et échangez des applis avec des personnes autour de vous.</string>
<string name="swap_visible_bluetooth">Visible en Bluetooth</string>
<string name="swap_setting_up_bluetooth">Activation du Bluetooth…</string>
<string name="swap_not_visible_bluetooth">Non visible par le Bluetooth</string>
<string name="swap_visible_wifi">Visible par le Wi-Fi</string>
<string name="swap_not_visible_bluetooth">Non visible en Bluetooth</string>
<string name="swap_visible_wifi">Visible en Wi-Fi</string>
<string name="swap_setting_up_wifi">Mise en place du Wi-Fi…</string>
<string name="swap_not_visible_wifi">Non visible par le Wi-Fi</string>
<string name="swap_not_visible_wifi">Non visible en Wi-Fi</string>
<string name="swap_wifi_device_name">Nom de lappareil</string>
<string name="swap_send_fdroid">Envoyer F-Droid</string>
<string name="swap_no_peers_nearby">Aucune personne n\'a été trouvée à proximité.</string>
@ -246,7 +246,7 @@
<string name="repo_error_empty_username">Nom d\'utilisateur vide, aucune modification effectuée</string>
<string name="about_license">Licence</string>
<string name="empty_search_available_app_list">Aucune application correspondante disponible.</string>
<string name="status_inserting_apps">Enregistrement des détails des applis</string>
<string name="status_inserting_apps">Enregistrement des détails de l\'appli</string>
<string name="crash_dialog_title">F-Droid sest arrêté de manière inattendue</string>
<string name="crash_dialog_comment_prompt">Vous pouvez ajouter des informations supplémentaires :</string>
<string name="crash_dialog_text">Une erreur inattendue sest produite entraînant larrêt de lappli. Souhaitez envoyer les détails par courriel afin daider à corriger la situation\?</string>
@ -288,14 +288,14 @@
<string name="notification_content_single_downloading_update">Téléchargement de la mise à jour de « %1$s »…</string>
<string name="notification_content_single_installing">Installation de « %1$s »…</string>
<string name="notification_content_single_installed">Installation réussie</string>
<string name="notification_title_summary_update_available">Une mise à jour est proposée</string>
<string name="notification_title_summary_update_available">Une mise à jour est disponible</string>
<string name="notification_title_summary_downloading">Téléchargement…</string>
<string name="notification_title_summary_downloading_update">Téléchargement de la mise à jour…</string>
<string name="notification_title_summary_ready_to_install">Prêt pour installation</string>
<string name="notification_title_summary_ready_to_install_update">Mise à jour prête pour installation</string>
<string name="notification_title_summary_installing">Installation</string>
<string name="notification_title_summary_installed">Installé avec succès</string>
<string name="notification_title_summary_install_error">Échec dinstallation</string>
<string name="notification_title_summary_install_error">Linstallation a échoué</string>
<string name="notification_action_update">Mettre à jour</string>
<string name="notification_action_cancel">Annuler</string>
<string name="notification_action_install">Installer</string>
@ -520,4 +520,6 @@
<string name="theme_follow_system">Suivre le système</string>
<string name="use_pure_black_dark_theme_summary">Recommandé uniquement pour les écrans OLED.</string>
<string name="use_pure_black_dark_theme">Utiliser un fond noir pur pour le thème sombre</string>
<string name="banner_no_data_or_wifi">Pas de Données ou Wi-Fi actif</string>
<string name="banner_no_internet">Aucune connexion Internet</string>
</resources>

View File

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="notification_channel_updates_title">Fernijingen</string>
<string name="keep_forever">Ivich</string>
<string name="keep_year">1 Jier</string>
<string name="keep_month">1 Moanne</string>
<string name="keep_week">1 Wike</string>
<string name="keep_day">1 Dei</string>
<string name="keep_hour">1 Oere</string>
<string name="perms_new_perm_prefix">Nij:</string>
<string name="swap_visible_wifi">Sichtber via Wi-Fi</string>
<string name="open_qr_code_scanner">QR Scanner Iepenje</string>
<string name="repo_name">Namme</string>
<string name="theme">Tema</string>
<string name="allow">Tastean</string>
<string name="menu_opencollective">OpenCollective</string>
<string name="menu_liberapay">Liberapay</string>
<string name="menu_flattr">Flattr</string>
<string name="menu_litecoin">Litecoin</string>
<string name="menu_bitcoin">Bitcoin</string>
<string name="next">Fierder</string>
<string name="overwrite">Oerskrieuwe</string>
<string name="versions">Ferzjes</string>
<string name="update_all">Alles fernije</string>
<string name="app_version_x_installed">Ferzje %1$s</string>
<string name="app_version_x_available">Ferzje %1$s beskikber</string>
<string name="app_not_installed">Net Ynstallearre</string>
<string name="app_new">Nij</string>
<string name="app_installed">Ynstallearre</string>
<string name="app_suggested">Rekommandaasje</string>
<string name="about_license">Lisinsje</string>
<string name="about_source">Boarne koade</string>
<string name="about_version">Ferzje</string>
<string name="app_details_donate_prompt">%1$s is troch %2$s makke. Keapje harren in kofje!</string>
<string name="app_details_donate_prompt_unknown_author">Keapje de ûntwikkelders fan %1$s in kofje!</string>
<string name="repo_edit_credentials">Wachtwurd Feroarje</string>
<string name="login_password">Wachtwurd</string>
<string name="login_name">Brûkersnamme</string>
<string name="notify">Beskikbere fernijingen sjen litte</string>
<string name="notification_title_summary_install_error">Ynstallaasje Mislearre</string>
<string name="notification_title_single_update_available">Fernijing Beskikber</string>
<string tools:ignore="UnusedResources" name="category_System">Systeem</string>
<string tools:ignore="UnusedResources" name="category_Sports_Health">Sport &amp; Sûnens</string>
<string name="wifi">Wi-Fi</string>
<string name="less">Minder</string>
<string name="more">Mear</string>
<string name="updates__tts__download_app">Downloade</string>
<string name="app_list__name__successfully_installed">%1$s is ynstalleare</string>
<string name="about_title">Oer F-Droid</string>
<string name="notification_action_cancel">Ôfbrekke</string>
<string name="notification_action_update">Fernije</string>
<string name="newPerms">Nij</string>
<string name="swap_dont_show_again">Nea wer sjen litte</string>
<string name="swap_welcome">Wolkom by F-Droid!</string>
<string tools:ignore="UnusedResources" name="category_Writing">Skrieuwe</string>
<string tools:ignore="UnusedResources" name="category_Time">Tiid</string>
<string tools:ignore="UnusedResources" name="category_Security">Befeiliging</string>
<string tools:ignore="UnusedResources" name="category_Science_Education">Wittenskip &amp; Edukaasje</string>
<string tools:ignore="UnusedResources" name="category_Reading">Lêze</string>
<string tools:ignore="UnusedResources" name="category_Phone_SMS">Telefoan &amp; SMS</string>
<string tools:ignore="UnusedResources" name="category_Navigation">Navigaasje</string>
<string tools:ignore="UnusedResources" name="category_Money">Jild</string>
<string tools:ignore="UnusedResources" name="category_Internet">Internet</string>
<string tools:ignore="UnusedResources" name="category_Graphics">Grafysk</string>
<string tools:ignore="UnusedResources" name="category_Games">Spultsjes</string>
<string tools:ignore="UnusedResources" name="category_Development">Ûntwikkeling</string>
<string name="skip">Oerslaan</string>
<string name="details_notinstalled">Net ynstalleare</string>
<string name="main_menu__swap_nearby">Tichteby</string>
<string name="main_menu__latest_apps">Nijste</string>
<string name="menu_upgrade">Fernije</string>
<string name="menu_install">Ynstalleare</string>
<string name="menu_share">Diele</string>
<string name="menu_launch">Iepenje</string>
<string name="menu_search">Sykje</string>
<string name="menu_settings">Ynstellings</string>
<string name="cancel">Ôfbrekke</string>
<string name="back">Werom</string>
<string name="yes">Ja</string>
<string name="details_new_in_version">Nij yn ferzje %s</string>
<string name="menu_translation">Oersetting</string>
<string name="menu_source">Boarne Koade</string>
<string name="menu_license">Lisinsje: %s</string>
<string name="menu_video">Fideo</string>
<string name="menu_website">Webstee</string>
<string name="menu_open">Iepenje</string>
<string name="app__install_downloaded_update">Fernijing</string>
<string name="about_site">Webstee</string>
<string name="update_auto_install">Fernijingen automatysk ynstallearje</string>
<string name="over_wifi">Oer Wi-Fi</string>
<string name="other">Oars</string>
<string name="send_to_fdroid_metrics">Brûkersdata ferstjoere</string>
<string name="keep_install_history">Ynstallaasje skiednis bewarje</string>
<string name="install_history">Ynstallaasje skiednis</string>
<string name="hide_all_notifications">Alle notifikaasjes besidebergje</string>
<string name="delete">Fuortsmite</string>
<string name="by_author_format">troch %s</string>
<string name="version">Ferzje</string>
<string name="app_details">App Details</string>
<string name="notification_action_install">Ynstallearje</string>
<string name="no">Nee</string>
<string name="ok">OK</string>
<string name="updates">Fernijingen</string>
<string name="app_name">F-Droid</string>
</resources>

View File

@ -529,4 +529,6 @@
<string name="theme_follow_system">כמו המערכת</string>
<string name="use_pure_black_dark_theme_summary">מומלץ למסכי OLED בלבד.</string>
<string name="use_pure_black_dark_theme">להשתמש ברקע שחור טהור בערכת עיצוב כהה</string>
<string name="banner_no_data_or_wifi">הרשתות האלחוטית והסלולרית מושבתות</string>
<string name="banner_no_internet">אין אינטרנט</string>
</resources>

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="delete">मिटाएं</string>
<string name="enable_nfc_send">NFC द्वारा भेजे …</string>
<string name="enable_nfc_send">NFC द्वारा भेजे को सक्षम करें</string>
<string name="version">संस्करण</string>
<string name="updates">सॉफ़्ट्वेर अपडेट</string>
<string name="updates">अपडेट</string>
<string name="unstable_updates">अस्थिर अद्यतन</string>
<string name="unstable_updates_summary">अस्थिर अद्यतन को सुझाव दें</string>
<string name="other">अन्य</string>
@ -18,7 +18,7 @@
<string name="login_password">पासवर्ड</string>
<string name="repo_edit_credentials">पासवर्ड बदले</string>
<string name="repo_error_empty_username">खाली उपयोगकर्ता नाम, साख नहीं बदली</string>
<string name="app_details">ऐप् विवरण</string>
<string name="app_details">ऐप् विवरण</string>
<string name="no_such_app">कोई ऐसा एप्लिकेशन नहीं मिला |</string>
<string name="about_title">F-Droid के बारे में</string>
<string name="about_version">संस्करण</string>
@ -37,9 +37,9 @@
<string name="repo_add_title">नया कोष जोड़े</string>
<string name="repo_add_add">जोड़े</string>
<string name="links">संधियां</string>
<string name="more">अधिक</string>
<string name="more">ज़्यादा (अधिक)</string>
<string name="less">कम</string>
<string name="back">पीछे जाए</string>
<string name="back">पीछे</string>
<string name="cancel">रद्द करें</string>
<string name="enable">सक्षम करे</string>
<string name="add_key">कुंजी जोड़े</string>
@ -47,10 +47,10 @@
<string name="theme_light">रोशनी</string>
<string name="theme_dark">अंधेरा</string>
<string name="crash_dialog_title">F-Droid क्रैश हो गया है</string>
<string name="crash_dialog_text">एक अप्रत्याशित त्रुटि के कारन एप्लीकेशन बंद हो गयी है| क्या ईमेल भेज कर इस समाधान को सुलझाने में मदद करना चाहते हैं\?</string>
<string name="crash_dialog_text">एक अप्रत्याशित त्रुटि के कारण एप्लीकेशन बंद हो गयी है| क्या आप ईमेल पर डिटेलस भेज कर इस मुद्दे को सुलझाने में मदद करना चाहते हैं\?</string>
<string name="crash_dialog_comment_prompt">आप अन्य जानकारी और टिप्पणियाँ यहाँ लिख सकते हैं:</string>
<string name="app_name">एफ-ड्रॉइड</string>
<string name="installIncompatible">सा ज्ञात होता है की ऐप्लिकेशन आपके डिवाइस के लिए अनुकुल नहीं है| क्या आप इसे फिर भी स्थापित करना चाहते हैं\?</string>
<string name="installIncompatible">ऐप्लिकेशन आपके डिवाइस के लिए अनुकुल नहीं है, क्या आप इसे फिर भी स्थापित करना चाहते हैं\?</string>
<string name="interval_1w">साप्ताहिक अपडेट के लिए जाँच करें</string>
<string name="interval_2w">हर 2 सप्ताह में अपडेट की जाँच करें</string>
<string name="interval_4h">हर चार घंटे में अपडेट चेक करे</string>
@ -93,9 +93,9 @@
<string name="swap_view_available_networks">उपलब्ध नेटवर्क्स को खोलने के लिए स्पर्श करें</string>
<string name="swap_switch_to_wifi">वाई-फाई नेटवर्क बदलने के लिए स्पर्श करे</string>
<string name="open_qr_code_scanner">QR स्कैनर खोले</string>
<string name="swap_welcome">F-Droid मं आपका स्वागत है!</string>
<string name="swap_welcome">F-Droid मं आपका स्वागत है!</string>
<string name="swap_confirm_connect">क्या आप अभी %1$s से ऐप्स लेना चाहते हैं\?</string>
<string name="swap_dont_show_again">इसे फिर से नहीं दिखाएँ</string>
<string name="swap_dont_show_again">इसे फिर से न दिखाएँ</string>
<string name="swap_scan_or_type_url">एक व्यक्ति को ये कोड स्कैन करना होगा या यूआरएल को ब्राउज़र मैं टाइप करना होगा|</string>
<string name="swap_choose_apps">ऐप्स चुने</string>
<string name="swap_scan_qr">QR कोड स्कैन करें</string>
@ -114,17 +114,17 @@
<string name="choose_bt_send">Bluetooth से भेजने का तरीका चुने</string>
<string name="repo_add_url">रिपॉजिटरी पता</string>
<string name="repo_add_fingerprint">अंगुली की छाप(वैकल्पिक)</string>
<string name="pref_language_default">सिस्टम पूर्वनिर्धारित विकल्प</string>
<string name="pref_language_default">सिस्टम पूर्वनिर्धारित</string>
<string name="SignatureMismatch">नया संस्करण किसी दूसरी \'की\' से साईन किया हुआ है। इस नये संस्करण को स्थापित करने के लिए पुराने वाले को अस्थापित करें। कृपया फिर से कोशिश करें। (याद रखें कि अस्थापित करने के बाद ऐप्लिकेशन डेटा नष्ट हो जायेगा)</string>
<string name="keep_install_history">स्थापना इतिहास देखें</string>
<string name="keep_install_history_summary">सभी स्थापनाओं और अस्थापनाओं के लॉग को F-Droid में रखें</string>
<string name="menu_settings">सेटिंग</string>
<string name="menu_settings">सेटिंग</string>
<string name="menu_search">खोज</string>
<string name="menu_share">साझा करें</string>
<string name="main_menu__latest_apps">नवीनतम</string>
<string name="main_menu__categories">श्रेणियां</string>
<string name="main_menu__categories">श्रेणियां (कैटगरीज़)</string>
<string name="skip">छोड़ें</string>
<string name="pref_language">भाषा</string>
<string name="pref_language">भाषा (लैन्गवेज)</string>
<string name="category_Games">गेम्स</string>
<string name="category_Internet">इंटरनेट</string>
<string name="category_Money">धन</string>
@ -134,40 +134,40 @@
<string name="category_Writing">लेखन</string>
<string name="notification_action_update">अद्यतन (अपडेट)</string>
<string name="notification_action_cancel">रद्द करें</string>
<string name="app_list__name__downloading_in_progress">%1$s को डाउनलोड किया जा रहा है</string>
<string name="warning_no_internet">अद्यतन नही हो सकता। क्या आप इंटरनेट से जुड़े हैं?</string>
<string name="app_list__name__downloading_in_progress">%1$s डाउनलोड किया जा रहा है</string>
<string name="warning_no_internet">अद्यतन नही हो पा रहा। क्या आप इंटरनेट से जुड़े हैं\?</string>
<string name="unverified">असत्यापित</string>
<string name="repo_last_update">अंतिम अद्यतन</string>
<string name="wifi">वाई-फ़ाई</string>
<string name="category_Sports_Health">खेल-कूद एवं स्वास्थ्य</string>
<string name="notification_title_single_update_available">अद्यतन उपलब्ध</string>
<string name="notification_title_summary_install_error">इनस्टॉल असफल</string>
<string name="notification_title_single_update_available">अद्यतन उपलब्ध है</string>
<string name="notification_title_summary_install_error">इनस्टॉल असफल</string>
<string name="by_author_format">%s के द्वारा</string>
<string name="hide_all_notifications">सभी अधिसूचनाएं छुपाएं</string>
<string name="menu_manage">ेपोसिटोरीए</string>
<string name="menu_add_repo">नई रिपॉजिटरी</string>
<string name="menu_manage">िपॉज़िटॉरिज़</string>
<string name="menu_add_repo">नई रिपॉजटरी</string>
<string name="menu_launch">खोलें</string>
<string name="menu_install">इंस्टॉल करें</string>
<string name="menu_uninstall">अनइंस्टल करें</string>
<string name="menu_uninstall">अनइंस्टल करें</string>
<string name="menu_upgrade">अपडेट</string>
<string name="main_menu__swap_nearby">आस–पास</string>
<string name="preference_manage_installed_apps">इंस्टॉल किए गए ऐप्स का प्रबंधन करें</string>
<string name="preference_manage_installed_apps">इंस्टॉल किए गए ऐप्स को प्रबंधित करें</string>
<string name="details_notinstalled">इनस्टॉल नहीं है</string>
<string name="next">आगे</string>
<string name="category_Connectivity">संपर्क</string>
<string name="category_Connectivity">कनेक्टिविटी</string>
<string name="category_Development">विकास</string>
<string name="category_Graphics">ग्राफिक्स</string>
<string name="category_Multimedia">मल्टीमीडिया</string>
<string name="category_Phone_SMS">फ़ोन तथा एस-एम-एस</string>
<string name="category_Science_Education">विज्ञान और शिक्षा</string>
<string name="category_Time">समय</string>
<string name="notification_action_install">इनस्टॉल करें</string>
<string name="app_list__name__successfully_installed">%1$s इनस्टॉल हो गया</string>
<string name="category_Time">समय</string>
<string name="notification_action_install">इनस्टॉल करें</string>
<string name="app_list__name__successfully_installed">%1$s इन्स्टॉलड</string>
<string name="updates__tts__download_app">डाउनलोड</string>
<string name="antitracklist">यह ऐप आपकी गतिविधि पर नज़र रखता है और रिपोर्ट करता है</string>
<string name="unsigned">अहस्ताक्षरित</string>
<string name="repo_details">रिपॉजिटरी</string>
<string name="not_on_same_wifi">आपका डिवाइस आपके द्वारा जोडे गये स्थानीय रेपो के वाई-फाई पर नहीं है! इस नेटवर्क में शामिल होने का प्रयास करें: %s</string>
<string name="repo_details">रिपॉजिटरी</string>
<string name="not_on_same_wifi">आपका डिवाइस उसी वाई-फाई पर नहीं है जो स्थानीय रेपो आपने जोड़ा है! इस नेटवर्क में शामिल होने का प्रयास करें %s</string>
<string name="category_System">सिस्टम</string>
<string name="prompt_to_send_crash_reports">दुर्घटनाओं की रिपोर्ट भेजने की अनुमति मांगें</string>
<string name="prompt_to_send_crash_reports_summary">क्रैश के बारे में डेटा इकट्ठा करें और उन्हें डेवलपर को भेजने के लिए पूछे</string>

View File

@ -488,4 +488,5 @@
<string name="app_details__no_versions__show_incompat_versions">Za prikaz nekompatibilnih verzija omogućite postavku \"%1$s\".</string>
<string name="scan_removable_storage_summary">Traži repozitorije paketa na prijenosnoj pohrani kao što su SD kartice i USB pohrana</string>
<string name="allow_push_requests_summary">Metapodaci repozitorija mogu uključivati push zahtjeve za instaliranje ili deinstaliranje aplikacija</string>
<string name="theme_follow_system">Slijedi sustav</string>
</resources>

View File

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

View File

@ -102,7 +102,7 @@
<string name="status_download_unknown_size">Mengunduh
\n%2$s dari
\n%1$s</string>
<string name="banner_updating_repositories">Memperbarui repositori</string>
<string name="banner_updating_repositories">Memperbarui repostori</string>
<string name="status_processing_xml_percent">Memproses %2$s / %3$s (%4$d%%) dari %1$s</string>
<string name="status_connecting_to_repo">Menghubungkan ke
\n%1$s</string>
@ -501,4 +501,6 @@
<string name="theme_follow_system">Ikuti sistem</string>
<string name="use_pure_black_dark_theme_summary">Direkomendasikan hanya untuk layar OLED.</string>
<string name="use_pure_black_dark_theme">Gunakan latar belakang hitam murni dalam tema gelap</string>
<string name="banner_no_data_or_wifi">Data atau WiFi tdkaktif</string>
<string name="banner_no_internet">Tnp Intnet</string>
</resources>

View File

@ -331,7 +331,7 @@
<string name="installed_apps__activity_title">App Installate</string>
<string name="installed_app__updates_ignored">Aggiornamenti ignorati</string>
<string name="installed_app__updates_ignored_for_suggested_version">Aggiornamenti ignorati per Versione %1$s</string>
<string name="update_all">Aggiorna tutti</string>
<string name="update_all">Aggiorna tutte</string>
<string name="updates__hide_updateable_apps">Nascondi applicazioni</string>
<string name="updates__show_updateable_apps">Mostra applicazioni</string>
<plurals name="updates__download_updates_for_apps">
@ -524,4 +524,6 @@
<string name="use_pure_black_dark_theme">Utilizzare lo sfondo nero puro nel tema scuro</string>
<string name="use_pure_black_dark_theme_summary">Raccomandato solo per schermi OLED.</string>
<string name="theme_follow_system">Segui il sistema</string>
<string name="banner_no_data_or_wifi">Nessun dato o Wi-Fi abilitato</string>
<string name="banner_no_internet">Nessuna connessione</string>
</resources>

View File

@ -486,4 +486,5 @@
<string name="notification_channel_swaps_title">入れ替え</string>
<string name="notification_channel_installs_description">アプリのインストール通知を表示します。</string>
<string name="notification_channel_installs_title">インストール</string>
<string name="send_to_fdroid_metrics">使用データを送信</string>
</resources>

View File

@ -434,7 +434,7 @@
<string name="send_version_and_uuid_summary">이 앱의 버전과 임의의, 고유한 ID를 포함하며, 다음에 앱을 다시 시작하면 영향을 받습니다.</string>
<string name="share_repository">저장소 공유</string>
<string name="send_install_history">설치 내역 보내기</string>
<string name="send_history_csv">설치 내역을 CSV 파일로 %s</string>
<string name="send_history_csv">%s 설치 내역을 CSV 파일로</string>
<string name="allow_push_requests">저장소에 앱을 설치/제거할 수 있도록 하기</string>
<string name="allow_push_requests_summary">저장소 메타데이터에는 설치 또는 제거를 위한 푸시 요청을 포함할 수 있습니다</string>
<string name="updates_disabled_by_settings">모든 업데이트가 데이터/WiFi 설정에 의해 비활성화됨</string>
@ -486,4 +486,18 @@
<string name="notification_channel_installs_description">애플리케이션 설치 과정을 알림으로 표시합니다.</string>
<string name="notification_channel_installs_title">설치</string>
<string name="menu_opencollective">OpenCollective</string>
<string name="theme_follow_system">시스템 따르기</string>
<string name="banner_no_data_or_wifi">활성화된 데이터나 WiFi 없음</string>
<string name="banner_no_internet">인터넷 없음</string>
<string name="menu_show_install_history">설치 내역 보기</string>
<string name="use_pure_black_dark_theme_summary">OLED 화면에만 권장됩니다.</string>
<string name="use_pure_black_dark_theme">어두운 테마에서 순수한 검은 배경 사용</string>
<string name="menu_show_fdroid_metrics_report">메트릭 데이터 보이기</string>
<string name="toast_metrics_in_install_history">%s 메트릭 보고서는 설치 내역 뷰어에서 볼 수 있습니다</string>
<string name="send_to_fdroid_metrics_summary">익명으로 데이터를 매주 F-Droid 메트릭으로 보냅니다 (설치 내역 유지 필요)</string>
<string name="send_to_fdroid_metrics">사용 데이터 보내기</string>
<string name="fdroid_metrics_report">%s 메트릭 보고서</string>
<string name="send_fdroid_metrics_report">%s 메트릭 보고서 보내기</string>
<string name="install_history_and_metrics">설치 내역 및 메트릭</string>
<string name="send_fdroid_metrics_json">%s 메트릭 보고서를 JSON 파일로</string>
</resources>

View File

@ -71,7 +71,7 @@
<string name="local_repo_running">Sirkulering av programmer kan begynne</string>
<string name="touch_to_configure_local_repo">Trykk for å se detaljer og for å tillate andre å sirkulere de programmene du har.</string>
<string name="deleting_repo">Sletter gjeldende pakkebrønn…</string>
<string name="adding_apks_format">Legger til %s til pakkebrønn…</string>
<string name="adding_apks_format">Legger %s til pakkebrønn…</string>
<string name="writing_index_jar">Skriver signert indekseringsfil (index.jar)…</string>
<string name="linking_apks">Lenker APK-er inn i pakkebrønn…</string>
<string name="copying_icons">Kopierer program-miniatyrbilder til pakkebrønnen…</string>
@ -152,7 +152,7 @@
<string name="menu_bitcoin">Bitcoin</string>
<string name="menu_litecoin">Litecoin</string>
<string name="menu_flattr">Flattr</string>
<string name="banner_updating_repositories">Oppdaterer pakkebrønner</string>
<string name="banner_updating_repositories">Oppdaterer arkiver</string>
<string name="status_processing_xml_percent">Behandler %2$s / %3$s (%4$d%%) fra %1$s</string>
<string name="repo_details">Pakkebrønn</string>
<string name="repo_url">Adresse</string>
@ -519,4 +519,9 @@
<string name="install_history_and_metrics">Installasjonshistorikk og bruksdata</string>
<string name="send_fdroid_metrics_json">%s bruksmåledata rapport som JSON-fil</string>
<string name="send_fdroid_metrics_report">Send %s bruksmåledata</string>
<string name="theme_follow_system">Følg systemet</string>
<string name="use_pure_black_dark_theme_summary">Anbefales bare for OLED-skjermer.</string>
<string name="use_pure_black_dark_theme">Bruk ren svart bakgrunn i mørkt tema</string>
<string name="banner_no_data_or_wifi">Ingen data eller WiFi aktivert</string>
<string name="banner_no_internet">Ingen Internett</string>
</resources>

View File

@ -47,6 +47,8 @@
<item name="backButtonDrawable">@drawable/ic_back</item>
<item name="clearButtonDrawable">@drawable/ic_close</item>
<item name="appDetailsAntiFeatureIconColor">#ffffff</item>
<item name="screenshotPlaceholderIconColor">#424242</item>
</style>
<style name="Theme.App.Black" parent="Theme.App">

View File

@ -514,4 +514,6 @@
<string name="theme_follow_system">Volg systeem</string>
<string name="use_pure_black_dark_theme_summary">Alleen aanbevolen voor OLED-schermen.</string>
<string name="use_pure_black_dark_theme">Gebruik puur zwarte achtergrond bij donker thema</string>
<string name="banner_no_data_or_wifi">Data of Wi-Fi niet ingeschakeld</string>
<string name="banner_no_internet">Geen internet</string>
</resources>

View File

@ -506,4 +506,9 @@
<string name="install_history_and_metrics">Installeringslogg og bruksdata</string>
<string name="send_fdroid_metrics_json">Bruksdata for %s som JSON-fil</string>
<string name="send_fdroid_metrics_report">Send bruksdatarapport for %s</string>
<string name="theme_follow_system">Følg systeminnstillingane</string>
<string name="use_pure_black_dark_theme_summary">Berre tilrådd for OLED-skjermar.</string>
<string name="use_pure_black_dark_theme">Bruk heilt svart bakgrunn i mørkt tema</string>
<string name="banner_no_data_or_wifi">Ikkje mobildata/Wi-Fi</string>
<string name="banner_no_internet">Manglar Internett-tilgang</string>
</resources>

View File

@ -132,7 +132,7 @@
<string name="antitracklist">Ta aplikacja śledzi i raportuje Twoją aktywność</string>
<string name="show_incompat_versions_on">Pokazuj aplikacje, które są niekompatybilne z tym urządzeniem</string>
<string name="status_download">Pobieranie\n%2$s / %3$s (%4$d%%) z\n%1$s</string>
<string name="banner_updating_repositories">Aktualizowanie repozytoriów</string>
<string name="banner_updating_repositories">Aktualizacja repozytoriów</string>
<string name="status_processing_xml_percent">Przetwarzanie %2$s / %3$s (%4$d%%) z %1$s</string>
<string name="no_permissions">Brak uprawnień</string>
<string name="unsigned">Brak podpisu</string>
@ -543,4 +543,6 @@
<string name="theme_follow_system">Systemowy</string>
<string name="use_pure_black_dark_theme_summary">Zalecane jedynie dla ekranów OLED.</string>
<string name="use_pure_black_dark_theme">Użyj czarnego tła w ciemnym motywie</string>
<string name="banner_no_data_or_wifi">Brak danych lub WiFi włączone</string>
<string name="banner_no_internet">Brak Internetu</string>
</resources>

View File

@ -152,7 +152,7 @@
<string name="bad_fingerprint">Falha na fingerprint</string>
<string name="invalid_url">Esta não é uma URL válida.</string>
<string name="menu_changelog">Changelog</string>
<string name="banner_updating_repositories">Atualizando repositórios</string>
<string name="banner_updating_repositories">Atualizando os repositórios</string>
<string name="status_processing_xml_percent">Processando %2$s / %3$s (%4$d%%) de %1$s</string>
<string name="pref_language">Idioma</string>
<string name="pref_language_default">Padrão do sistema</string>
@ -530,4 +530,6 @@
<string name="theme_follow_system">O mesmo do sistema</string>
<string name="use_pure_black_dark_theme_summary">Recomendado apenas para telas OLED.</string>
<string name="use_pure_black_dark_theme">Use um fundo preto no tema escuro</string>
<string name="banner_no_data_or_wifi">Dados móveis ou WiFi indisponíveis</string>
<string name="banner_no_internet">Sem Internet</string>
</resources>

View File

@ -73,7 +73,7 @@
<string name="antinonfreenetlist">Esta aplicação promove serviços de rede não livres</string>
<string name="antinonfreedeplist">Esta aplicação depende de aplicações não livres</string>
<string name="antiupstreamnonfreelist">O código-fonte não é totalmente livre</string>
<string name="display">Exibição</string>
<string name="display">Visualização</string>
<string name="expert">Modo avançado</string>
<string name="expert_on">Mostrar informações extra e ativar mais definições</string>
<string name="search_hint">Pesquisar aplicações</string>
@ -305,10 +305,10 @@
<string name="warning_no_internet">Não é possível atualizar. Está ligado à Internet?</string>
<plurals name="button_view_all_apps_in_category">
<item quantity="one">Ver (%d)</item>
<item quantity="other">Ver (%d)</item>
<item quantity="other">Ver todas (%d)</item>
</plurals>
<string name="nearby_splash__download_apps_from_people_nearby">Sem Internet? Obtenha as aplicações através de pessoas perto de si!</string>
<string name="nearby_splash__find_people_button">Procurar pessoas por perto</string>
<string name="nearby_splash__find_people_button">Encontrar pessoas por perto</string>
<string name="nearby_splash__both_parties_need_fdroid">Ambas as partes necessitam de %1$s.</string>
<string name="notification_title_single_update_available">Atualização disponível</string>
<string name="notification_title_single_ready_to_install">Pronta para instalação</string>
@ -426,8 +426,8 @@
<string name="repo_official_mirrors">Servidores espelho oficiais</string>
<string name="repo_user_mirrors">Servidores espelho do utilizador</string>
<string name="warning_scaning_qr_code">Parece que a sua câmara não possui foco automático. Poderá ser difícil digitalizar o código.</string>
<string name="prompt_to_send_crash_reports">Pedir para enviar relatórios de erros</string>
<string name="prompt_to_send_crash_reports_summary">Recolher dados sobre os erros e pedir para os enviar ao programador</string>
<string name="prompt_to_send_crash_reports">Pedir para enviar relatórios de craches</string>
<string name="prompt_to_send_crash_reports_summary">Recolher dados sobre os craches e pedir para os enviar ao programador</string>
<string name="hide_all_notifications">Ocultar todas as notificações</string>
<string name="send_install_history">Enviar histórico de instalações</string>
<string name="install_history">Histórico de instalações</string>
@ -449,7 +449,7 @@
<string name="swap_toast_invalid_url">URL inválido para trocas: %1$s</string>
<string name="swap_toast_hotspot_enabled">Ponto de acesso Wi-Fi ativado</string>
<string name="swap_toast_could_not_enable_hotspot">Não foi possível ativar o ponto de acesso Wi-Fi!</string>
<string name="send_history_csv">Histórico de instalações de %s em ficheiro CSV</string>
<string name="send_history_csv">Histórico de instalações de %s como ficheiro CSV</string>
<string name="send_version_and_uuid_summary">Inclui a versão da aplicação e uma ID aleatória única ao descarregar. Surte efeito após reiniciar a aplicação.</string>
<string name="allow_push_requests_summary">Os meta-dados do repositório podem incluir pedidos \'push\' para instalar ou desinstalar aplicações</string>
<string name="send_installed_apps">Partilhar aplicações instaladas</string>
@ -508,4 +508,9 @@
<string name="install_history_and_metrics">Histórico de instalações e métrica</string>
<string name="send_fdroid_metrics_json">Relatório de métrica %s como ficheiro JSON</string>
<string name="send_fdroid_metrics_report">Enviar relatório de métrica %s</string>
<string name="theme_follow_system">Usar o sistema</string>
<string name="use_pure_black_dark_theme_summary">Recomendado apenas para ecrãs OLED.</string>
<string name="use_pure_black_dark_theme">Usar fundo preto puro no tema escuro</string>
<string name="banner_no_data_or_wifi">Dados móveis/WiFi desativados</string>
<string name="banner_no_internet">Sem Internet</string>
</resources>

View File

@ -58,7 +58,7 @@
<string name="unverified">Não verificada</string>
<string name="repo_details">Repositório</string>
<string name="repo_last_update">Última atualização</string>
<string name="not_on_same_wifi">O seu dispositivo não está ligado à rede Wi-Fi do repositório adicionado! Tente entrar nesta rede: %s</string>
<string name="not_on_same_wifi">O seu aparelho não está ligado à rede Wi-Fi do repositório adicionado! Tente entrar nesta rede: %s</string>
<string name="wifi">Wi-Fi</string>
<string name="category_Sports_Health">Desporto e saúde</string>
<string name="category_System">Sistema</string>
@ -68,7 +68,7 @@
<string name="notification_title_single_update_available">Atualização disponível</string>
<string name="notification_title_summary_install_error">Falha ao instalar</string>
<string name="SignatureMismatch">A nova versão está assinada com uma chave diferente da antiga. Para instalar a nova versão, tem que desinstalar a antiga. Remova a app e tente novamente. (Tenha em atenção que irá apagar todos os dados guardados pela app)</string>
<string name="installIncompatible">A aplicação não é compatível com o seu dispositivo. Deseja tentar a instalação\?</string>
<string name="installIncompatible">A aplicação não é compatível com o seu aparelho. Deseja tentar a instalação\?</string>
<string name="version">Versão</string>
<string name="by_author_format">de %s</string>
<string name="delete">Eliminar</string>
@ -124,7 +124,7 @@
<string name="app_details__incompatible_mismatched_signature">Assinatura diferente da versão instalada</string>
<string name="app_details__no_versions__show_incompat_versions">Para ainda assim mostrar versões incompatíveis, ative a opção \"%1$s\".</string>
<string name="app_details__no_versions__no_compatible_signatures">Não existem versões com uma assinatura compatível</string>
<string name="app_details__no_versions__none_compatible_with_device">Não existem versões compatíveis com o dispositivo</string>
<string name="app_details__no_versions__none_compatible_with_device">Não existem versões compatíveis com o aparelho</string>
<string name="app_details__no_versions__explain_incompatible_signatures">A versão instalada não é compatível com as versões disponíveis. Desinstalar a app permite-o ver e instalar as versões compatíveis. Normalmente, isto ocorre se instalar apps através da Google Play ou de outras fontes, caso tenham sido assinadas com um certificado distinto.</string>
<string name="about_version">Versão</string>
<string name="about_site">Site</string>
@ -232,11 +232,11 @@
<string name="search_hint">Pesquisar aplicações</string>
<string name="appcompatibility">Compatibilidade de aplicações</string>
<string name="show_incompat_versions">Incluir versões incompatíveis</string>
<string name="show_incompat_versions_on">Mostrar versões incompatíveis com o seu dispositivo</string>
<string name="show_incompat_versions_on">Mostrar versões incompatíveis com o seu aparelho</string>
<string name="show_anti_feature_apps">Incluir aplicações com funcionalidades indesejadas</string>
<string name="show_anti_feature_apps_on">Mostrar aplicações que necessitem de funcionalidades indesejadas</string>
<string name="force_touch_apps">Incluir aplicações de ecrã tátil</string>
<string name="force_touch_apps_on">Mostrar aplicações que necessitem de ecrã tátil mesmo que o dispositivo não o permita</string>
<string name="force_touch_apps_on">Mostrar apps que necessitem de ecrã tátil mesmo que o aparelho não o permita</string>
<string name="local_repo">Repositório local</string>
<string name="local_repo_running">F-Droid está pronto para a troca</string>
<string name="touch_to_configure_local_repo">Toque para ver os detalhes e permitir a troca de aplicações.</string>
@ -323,7 +323,7 @@
</plurals>
<string name="empty_installed_app_list">Não existem aplicações instaladas.
\n
\nExistem aplicações no seu dispositivo que não estão disponíveis em F-Droid. Talvez tenha que atualizar os seus repositórios ou então as suas aplicações não existem nos repositórios adicionados.</string>
\nExistem aplicações no seu aparelho que não estão disponíveis em F-Droid. Talvez tenha que atualizar os seus repositórios ou então as suas aplicações não existem nos repositórios adicionados.</string>
<string name="empty_can_update_app_list">Parabéns!
\nAs suas aplicações estão atualizadas.</string>
<string name="empty_search_available_app_list">Não há aplicações correspondentes.</string>
@ -336,7 +336,7 @@
<string name="nearby_splash__read_external_storage">Pesquisar repositórios e espelhos no cartão SD.</string>
<string name="nearby_splash__request_permission">Experimente</string>
<string name="swap_nfc_title">Toque para trocar</string>
<string name="swap_nfc_description">Se a outra pessoa tiver F-Droid instalada e NFC ativo, aproximem os vossos dispositivos.</string>
<string name="swap_nfc_description">Se a outra pessoa tiver F-Droid instalada e NFC ativo, aproximem os vossos aparelhos.</string>
<string name="swap_join_same_wifi">Junte-se à mesma rede Wi-Fi da outra pessoa</string>
<string name="swap_join_same_wifi_desc">Para trocar através de Wi-Fi, certifique-se que estão ambos na mesma rede. Se não estiverem na mesma rede, um de vós pode criar um ponto de acesso (hotspot) Wi-Fi.</string>
<string name="swap_join_this_hotspot">Ajude a outra pessoa a entrar no seu ponto de acesso</string>
@ -362,7 +362,7 @@
<string name="swap_setting_up_wifi">A configurar Wi-Fi…</string>
<string name="swap_stopping_wifi">A parar Wi-Fi…</string>
<string name="swap_not_visible_wifi">Não visível por Wi-Fi</string>
<string name="swap_wifi_device_name">Nome do dispositivo</string>
<string name="swap_wifi_device_name">Nome do aparelho</string>
<string name="swap_cant_find_peers">Não encontra o que procura\?</string>
<string name="swap_no_peers_nearby">Não foram encontradas pessoas na sua vizinhança.</string>
<string name="swap_connecting">A ligar</string>
@ -372,7 +372,7 @@
<string name="loading">A carregar…</string>
<string name="swap_connection_misc_error">Ocorreu um erro ao estabelecer a ligação e não será possível a troca!</string>
<string name="not_visible_nearby">Proximidade não ativada</string>
<string name="not_visible_nearby_description">Antes de trocar com dispositivos próximos, torne o seu visível.</string>
<string name="not_visible_nearby_description">Antes de trocar com aparelho próximos, torne o seu visível.</string>
<string name="swap_toast_using_path">A utilizar %1$s</string>
<string name="swap_toast_not_removable_storage">A escolha não coincide com um armazenamento amovível, tente novamente!</string>
<string name="swap_toast_find_removeable_storage">Escolha o seu cartão SD ou USB</string>
@ -509,4 +509,6 @@
<string name="theme_follow_system">Usar o sistema</string>
<string name="use_pure_black_dark_theme_summary">Recomendado apenas para ecrãs OLED.</string>
<string name="use_pure_black_dark_theme">Usar fundo preto puro no tema escuro</string>
<string name="banner_no_data_or_wifi">Dados móveis/WiFi desativados</string>
<string name="banner_no_internet">Sem Internet</string>
</resources>

View File

@ -148,7 +148,7 @@
<string name="status_download">Descărcare
\n%2$s / %3$s (%4$d%%) din
\n%1$s</string>
<string name="banner_updating_repositories">Actualizare depozit</string>
<string name="banner_updating_repositories">Actualizare depozite</string>
<string name="status_connecting_to_repo">Conectare la\n%1$s</string>
<string name="global_error_updating_repos">Eroare la actualizare: %s</string>
<string name="permissions">Permisiuni</string>
@ -520,4 +520,6 @@
<string name="theme_follow_system">Folosește tema sistemului</string>
<string name="use_pure_black_dark_theme_summary">Recomandat numai pentru ecrane OLED.</string>
<string name="use_pure_black_dark_theme">Utilizați un fundal negru pur în tema întunecată</string>
<string name="banner_no_data_or_wifi">Nu sunt activate date mobile sau Wi-Fi</string>
<string name="banner_no_internet">Fără internet</string>
</resources>

View File

@ -530,4 +530,6 @@
<string name="theme_follow_system">Как в системе</string>
<string name="use_pure_black_dark_theme_summary">Рекомендуется только для экранов OLED.</string>
<string name="use_pure_black_dark_theme">Использовать абсолютно черный фон в темной теме</string>
<string name="banner_no_data_or_wifi">Передача данных или WiFi отключены</string>
<string name="banner_no_internet">Нет интернета</string>
</resources>

View File

@ -537,4 +537,6 @@
<string name="theme_follow_system">Sighi su sistema</string>
<string name="use_pure_black_dark_theme_summary">Racumandadu pro sos ischermos OLED.</string>
<string name="use_pure_black_dark_theme">Imprea un\'isfundu nieddu de su totu in su tema iscuru</string>
<string name="banner_no_data_or_wifi">Peruna connessione mòbile o Wifi ativa</string>
<string name="banner_no_internet">Chene ìnternet</string>
</resources>

View File

@ -75,7 +75,7 @@
<string name="app_details">Podrobnosti aplikacije</string>
<string name="about_title">Več o F-Droid</string>
<string name="app_list__name__downloading_in_progress">Prenašanje %1$s</string>
<string name="app_list__name__successfully_installed">%1$s nameščena</string>
<string name="app_list__name__successfully_installed">%1$s nameščen</string>
<string name="more">Več</string>
<string name="less">Manj</string>
<string name="antitracklist">Ta aplikacija vam sledi in poroča o vaši aktivnosti</string>

View File

@ -509,4 +509,6 @@
<string name="theme_follow_system">Ndiq sistemin</string>
<string name="use_pure_black_dark_theme_summary">E rekomanduar vetëm për ekranë OLED.</string>
<string name="use_pure_black_dark_theme">Përdor sfond të zi në temë të errët</string>
<string name="banner_no_internet">Pa Internet</string>
<string name="banner_no_data_or_wifi">Pa të Dhëna ose WiFi aktive</string>
</resources>

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="SignatureMismatch">Ново издање је потписано другачијим кључем од старог. Ради уградње новог издања, најпре уклоните старо. (Имајте на уму да уклањањем такође бришете унутрашње податке програма.)</string>
<string name="installIncompatible">Програм не одговара овом уређају, да ли га свеједно уградити\?</string>
<string name="version">Издање</string>
<string name="delete">Избриши</string>
<string name="enable_nfc_send">Омогући слање преко НФЦ-а</string>
<string name="cache_downloaded">Чувај захваћене програме</string>
<string name="updates">Надградње</string>
<string name="SignatureMismatch">Нова верзија је потписана различитим кључем. Да инсталирате нову верзију, прво треба да уклоните стару. (Уклањањем такође бришете унутрашње податке програма.)</string>
<string name="installIncompatible">Програм не одговара овом уређају. Свеједно инсталирати\?</string>
<string name="version">Верзија</string>
<string name="delete">Обриши</string>
<string name="enable_nfc_send">Укључи НФЦ слање</string>
<string name="cache_downloaded">Чувај кеширане програме</string>
<string name="updates">Ажурирања</string>
<string name="other">Друго</string>
<string name="update_interval">Међувреме самосталног освежавања</string>
<string name="notify">Прикажи доступне надградње</string>
@ -15,7 +15,7 @@
<string name="system_installer_on">Користи повлашћено проширење за уградњу, надградњу и уклањање пакета</string>
<string name="local_repo_name">Назив месне ризнице</string>
<string name="local_repo_https_on">Користи шифровану везу ХТТПС:// за ову ризницу</string>
<string name="app_details">Појединости програма</string>
<string name="app_details">Детаљи програма</string>
<string name="no_such_app">Нема таквог програма.</string>
<string name="about_title">О Ф-дроиду</string>
<string name="about_site">Мрежна страница</string>
@ -25,7 +25,7 @@
<string name="app_inst_known_source">Уграђено (из %s)</string>
<string name="app_inst_unknown_source">Уграђено (из непознатог извора)</string>
<string name="added_on">Додато у %s</string>
<string name="ok">Потврди</string>
<string name="ok">У реду</string>
<string name="yes">Да</string>
<string name="no">Не</string>
<string name="repo_add_title">Додај нову ризницу</string>
@ -39,22 +39,22 @@
<string name="repo_add_url">Адреса ризнице</string>
<string name="repo_add_fingerprint">Отисак (додатно)</string>
<string name="malformed_repo_uri">Занемарујем лошу адресу ризнице: %s</string>
<string name="menu_manage">Ризнице</string>
<string name="menu_search">Претражи</string>
<string name="menu_add_repo">Нова ризница</string>
<string name="menu_manage">Складишта</string>
<string name="menu_search">Тражи</string>
<string name="menu_add_repo">Ново складиште</string>
<string name="menu_launch">Отвори</string>
<string name="menu_share">Дели</string>
<string name="menu_install">Угради</string>
<string name="menu_install">Инсталирај</string>
<string name="menu_uninstall">Уклони</string>
<string name="menu_ignore_all">Занемари све надградње</string>
<string name="menu_ignore_this">Занемари ову надградњу</string>
<string name="menu_website">Мрежна страница</string>
<string name="menu_issues">Праћење недостатака</string>
<string name="menu_source">Изворни кôд</string>
<string name="menu_upgrade">Надгради</string>
<string name="details_notinstalled">Није уграђен</string>
<string name="menu_upgrade">Ажурирај</string>
<string name="details_notinstalled">Није инсталиран</string>
<string name="antiadslist">Овај програм садржи огласе</string>
<string name="antitracklist">Овај програм прати и пријављује Ваша дејства</string>
<string name="antitracklist">Програм прати и пријављује ваше активности</string>
<string name="antinonfreeadlist">Овај програм предлаже неслободне додатке</string>
<string name="antinonfreenetlist">Овај програм предлаже неслободне мрежне услуге</string>
<string name="antinonfreedeplist">Овај програм зависи од неслободних програма</string>
@ -94,12 +94,12 @@
<string name="no_permissions">Нема дозвола</string>
<string name="no_handler_app">Немате уграђен програм за %s.</string>
<string name="theme">Тема</string>
<string name="unsigned">Непотписана</string>
<string name="unverified">Неоверена</string>
<string name="unsigned">Непотписано</string>
<string name="unverified">Неоверено</string>
<string name="repo_num_apps">Број програма</string>
<string name="repo_fingerprint">Отисак кључа за потписивање (СХА-256)</string>
<string name="repo_description">Опис</string>
<string name="repo_last_update">Последње освежавање</string>
<string name="repo_last_update">Последње ажурирање</string>
<string name="repo_name">Назив</string>
<string name="unsigned_description">Ово значи да списак програма није могао бити оверен. Требате бити опрезни са преузетим програмима преко садржаја без потписа.</string>
<string name="repo_not_yet_updated">Ова ризница још није коришћена. Омогућите је да бисте видели програме које садржи.</string>
@ -107,20 +107,21 @@
<string name="repo_confirm_delete_title">Обрисати ризницу?</string>
<string name="repo_confirm_delete_body">Брисање ризнице значи да њени програми више неће бити доступни.
\n
\n
\nНапомена: Сви претходно уграђени програми ће остати на уређају.</string>
<string name="repo_disabled_notification">Онемогућена „%1$s“. Мораћете поново да омогућите ову ризницу ради уградње програма из ње.</string>
<string name="repo_disabled_notification">Онемогућена „%1$s“.
\n
\nМораћете поново да омогућите ову ризницу ради уградње програма из ње.</string>
<string name="repo_added">Сачувана је ризница %1$s.</string>
<string name="repo_searching_address">Тражим ризницу на
\n%1$s</string>
<string name="not_on_same_wifi">Ваш уређај није на истој бежичној мрежи са месном ризницом коју сте управо додали! Придружите се овој мрежи: %s</string>
<string name="not_on_same_wifi">Ваш уређај није на истој бежичној мрежи са локалним складиштем које сте додали! Пробајте ову мрежу: %s</string>
<string name="requires_features">Захтева: %1$s</string>
<string name="category_Development">Развој</string>
<string name="category_Games">Игре</string>
<string name="category_Internet">Интернет</string>
<string name="category_Multimedia">Мултимедија</string>
<string name="category_Navigation">Навођење</string>
<string name="category_Phone_SMS">Телазвон и поруке</string>
<string name="category_Navigation">Навигација</string>
<string name="category_Phone_SMS">Телефон и СМС</string>
<string name="category_Reading">Читање</string>
<string name="category_Science_Education">Наука и образовање</string>
<string name="category_Security">Безбедност</string>
@ -134,8 +135,8 @@
<string name="swap_welcome">Добро дошли у Ф-дроид!</string>
<string name="swap_confirm_connect">Желите ли да добавите програме са %1$s одмах\?</string>
<string name="app_name">Ф-дроид</string>
<string name="unstable_updates">Нестабилне надградње</string>
<string name="unstable_updates_summary">Предлагање надоградњи на нестабилна издања</string>
<string name="unstable_updates">Нестабилна ажурирања</string>
<string name="unstable_updates_summary">Предлаже и надоградње на нестабилне верзије</string>
<string name="about_source">Изворни кôд</string>
<string name="app_incompatible">Неодговарајуће</string>
<string name="links">Везе</string>
@ -143,14 +144,14 @@
<string name="bad_fingerprint">Лош отисак</string>
<string name="invalid_url">Ово није исправна адреса.</string>
<string name="menu_changelog">Дневник измена</string>
<string name="banner_updating_repositories">Освежавам ризнице</string>
<string name="banner_updating_repositories">Ажурирам складишта</string>
<string name="status_processing_xml_percent">Обрађујем %2$s / %3$s (%4$d%%) од %1$s</string>
<string name="pref_language">Језик</string>
<string name="pref_language_default">Системски подразумеван</string>
<string name="wifi">Wi-Fi</string>
<string name="wifi">Бежично</string>
<string name="wifi_ap">Врућа тачка</string>
<string name="category_Connectivity">Повезивање</string>
<string name="category_Graphics">Цртање</string>
<string name="category_Graphics">Графика</string>
<string name="category_Money">Новац</string>
<string name="category_Sports_Health">Спорт и здравље</string>
<string name="category_Theming">Теме</string>
@ -211,20 +212,20 @@
<string name="swap_no_peers_nearby">Нисам нашао никога у близини за размену.</string>
<string name="download_error">Преузимање није успело!</string>
<string name="perms_description_app">Достављен од стране %1$s.</string>
<string name="more">Више</string>
<string name="less">Мање</string>
<string name="more">опширније</string>
<string name="less">сажетије</string>
<string name="status_download_unknown_size">Преузимам
\n%2$s од
\n%1$s</string>
<string name="permissions">Дозволе</string>
<string name="repo_details">Ризница</string>
<string name="repo_details">Складиште</string>
<string name="repo_url">Адреса</string>
<string name="system_install_denied_permissions">Повлашћене дозволе нису одобрене за проширење! Пријавите грешку!
</string>
<string name="menu_bitcoin">Биткоин</string>
<string name="menu_litecoin">Лајткоин</string>
<string name="menu_flattr">Флатр</string>
<string name="menu_settings">Подешавања</string>
<string name="menu_settings">Поставке</string>
<string name="swap_connection_misc_error">Десила се грешка приликом повезивања са уређајем, не можемо размењивати са њим!</string>
<string name="swap_join_same_wifi_desc">Да бисте размењивали преко бежичног морате бити на истој мрежи. Ако немате
приступ истој мрежи, једно од вас може да направи бежичну врућу тачку.
@ -242,7 +243,7 @@
<string name="install_confirm_update_no_perms">Да ли желите да инсталирате ажурирање ове постојеће апликације? Постојећи подаци неће бити изгубљени. Није потребан посебан приступ.</string>
<string name="install_confirm_update_system_no_perms">Да ли желите да инсталирате ажурирање ове уграђене апликације? Постојећи подаци неће бити изгубљени. Није потребан посебан приступ.</string>
<string name="crash_dialog_title">Ф-дроид се срушио</string>
<string name="crash_dialog_text">Неочекивана грешка је присилила програм да се заустави. Желите ли да пошаљете податке е-поштом и тиме помогнете у решавању проблема\?</string>
<string name="crash_dialog_text">Неочекивана грешка је зауставила програм. Хоћете ли да е-поштом пријавите проблем и помогнете у решавању проблема\?</string>
<string name="crash_dialog_comment_prompt">Можете да унесете додатне податке и напомене овде:</string>
<string name="antinonfreeassetslist">Овај програм поседује неслободан садржај</string>
<string name="menu_email">Пошаљи е-пошту творцу</string>
@ -268,7 +269,7 @@
<string name="keep_install_history">Чувај историјат уградњи</string>
<string name="keep_install_history_summary">Чувај дневник свих уградњи и уклањања унутар личног складишта</string>
<string name="versions">Издања</string>
<string name="warning_no_internet">Не могу да освежим, да ли сте повезани на интернет?</string>
<string name="warning_no_internet">Не могу да ажурирам. Да ли сте повезани на интернет\?</string>
<string name="app_details_donate_prompt_unknown_author">Почастите програмере %1$s кафом!</string>
<string name="app_details_donate_prompt">%1$s су направили %2$s. Почастите их кафом!</string>
<string name="app_version_x_available">Издање %1$s је доступно</string>
@ -277,7 +278,7 @@
<string name="repositories_summary">Додај додатне изворе програма</string>
<string name="main_menu__latest_apps">Најновије</string>
<string name="main_menu__categories">Категорије</string>
<string name="notification_title_single_update_available">Доступна је надградња</string>
<string name="notification_title_single_update_available">Доступно је ажурирање</string>
<string name="notification_title_single_ready_to_install">Спреман за уградњу</string>
<string name="notification_title_single_ready_to_install_update">Надградња је спремна</string>
<string name="notification_title_single_install_error">Уградња није успела</string>
@ -291,10 +292,10 @@
<string name="notification_title_summary_ready_to_install">Спреман за уградњу</string>
<string name="notification_title_summary_installing">Уграђујем</string>
<string name="notification_title_summary_installed">Успешно је уграђен</string>
<string name="notification_title_summary_install_error">Уградња није успела</string>
<string name="notification_title_summary_install_error">Инсталација неуспешна</string>
<string name="notification_action_update">Освежи</string>
<string name="notification_action_cancel">Одустани</string>
<string name="notification_action_install">Угради</string>
<string name="notification_action_cancel">Откажи</string>
<string name="notification_action_install">Инсталирај</string>
<string name="main_menu__swap_nearby">Оближње</string>
<plurals name="button_view_all_apps_in_category">
<item quantity="one">Прикажи %d</item>
@ -308,7 +309,7 @@
<string name="installed_app__updates_ignored">Надградње су занемарене</string>
<string name="installed_app__updates_ignored_for_suggested_version">Надградње за издање %1$s су занемарене</string>
<string name="preference_category__my_apps">Моји програми</string>
<string name="preference_manage_installed_apps">Управљај уграђеним програмима</string>
<string name="preference_manage_installed_apps">Управљај инсталираним програмима</string>
<string name="tts_category_name">Категорија %1$s</string>
<string name="app__install_downloaded_update">Надгради</string>
<string name="app_list__name__downloading_in_progress">Преузимам %1$s</string>
@ -334,7 +335,7 @@
<item quantity="few">Надграђена пре %1$d дана</item>
<item quantity="other">Надграђена пре %1$d дана</item>
</plurals>
<string name="app_list__name__successfully_installed">%1$s је уграђен</string>
<string name="app_list__name__successfully_installed">%1$s инсталиран</string>
<string name="nearby_splash__download_apps_from_people_nearby">Немате интернета? Преузмите апликације од људи у близини!</string>
<string name="nearby_splash__find_people_button">Пронађи људе у близини</string>
<string name="nearby_splash__both_parties_need_fdroid">Обе стране треба да користе %1$s да би користиле близинску размену.</string>
@ -347,7 +348,7 @@
<string name="app__tts__cancel_download">Откажи преузимање</string>
<string name="menu_license">Лиценца: %s</string>
<string name="app__tts__downloading_progress">Преузимам, %1$d%% завршено</string>
<string name="by_author_format">од %s</string>
<string name="by_author_format">%s</string>
<plurals name="notification_summary_more">
<item quantity="one">+још %1$d…</item>
<item quantity="few">+још %1$d…</item>
@ -393,14 +394,14 @@
<string name="updates__app_with_known_vulnerability__ignore">Занемари</string>
<string name="hide_all_notifications">Сакриј сва обавештења</string>
<string name="install_history">Историјат уградњи</string>
<string name="send_install_history">Шаљи историјат уградњи</string>
<string name="send_install_history">Шаљи историјат инсталација</string>
<string name="about_forum">Сабор за подршку</string>
<string name="app_suggested">Предложено</string>
<string name="app_size">Величина: %1$s</string>
<string name="send_installed_apps">Дели уграђене програме</string>
<string name="prompt_to_send_crash_reports">Питај да шаљеш извештај о рушењу</string>
<string name="prompt_to_send_crash_reports_summary">Скупљај податке у рушењима и питај да ли да се пошаљу програмерима</string>
<string name="hide_all_notifications_summary">Забрани приказ свих радњи у траци стања и обавештења.</string>
<string name="prompt_to_send_crash_reports">Питај за слање извештаја о паду</string>
<string name="prompt_to_send_crash_reports_summary">Скупљај податке о падовима и питај да ли да се шаљу програмерима</string>
<string name="hide_all_notifications_summary">Не приказуј никакве радње у траци статуса нити обавештења.</string>
<string name="install_history_summary">Види лични дневник свих уградњи и брисања</string>
<string name="send_version_and_uuid">Шаљи издање и УУИД служитељима</string>
<string name="send_version_and_uuid_summary">Укључи издање овог програма и случајни, јединствени ЛБ приликом преузимања, ступа на снагу од следећег покретања програма.</string>
@ -510,4 +511,17 @@
<string name="notification_channel_updates_title">Обнављања</string>
<string name="notification_channel_installs_title">Уградње</string>
<string name="send_to_fdroid_metrics">Пошаљи податке о коришћењу</string>
<string name="toast_metrics_in_install_history">%s извештај метрике се може видети у приказу историје уградњи</string>
<string name="theme_follow_system">Прати систем</string>
<string name="use_pure_black_dark_theme_summary">Препоручљиво само на ОЛЕД екранима.</string>
<string name="use_pure_black_dark_theme">Користи чисто црну позадину у тамној теми</string>
<string name="banner_no_data_or_wifi">Нема везе за пренос</string>
<string name="banner_no_internet">Нема интернета</string>
<string name="menu_show_install_history">Прикажи историју уградњи</string>
<string name="menu_show_fdroid_metrics_report">Прикажи извештај метрике</string>
<string name="send_to_fdroid_metrics_summary">Недељно шаље анонимне податке на Ф-дроид метрику (уз укључено чување историје уградњи)</string>
<string name="fdroid_metrics_report">%s извештај метрике</string>
<string name="install_history_and_metrics">Историјат уградњи и метрика</string>
<string name="send_fdroid_metrics_json">%s извештај метрике као JSON фајл</string>
<string name="send_fdroid_metrics_report">Шаљи извештај метрике за %s</string>
</resources>

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