Restore app data in smaller batches when performing a full restoration
from a backup set, to prevent a Binder exception that causes the
process to fail entirely.
Android may encounter this exception when trying to call the
transport.startRestore() method if too many packages are involved; in
testing, 300 is an example of too many. Instead of using
IRestoreSession.restoreAll(), use restorePackages() and provide the
package names in batches of 100.
This issue reveals itself when using SeedVault with the D2D patch and
with an OS, such as stock Pixel OS, that includes an abundance of
packages. (Prior to this patch, the call to restoreAll() meant that the
framework would request data restoration for all packages installed,
even if they were not in the metadata.)
In logs, this issue appears as follows:
```
I BackupManagerService: Full restore; asking about 300 apps
W BpBinder: Large outgoing transaction of 528540 bytes, interface descriptor <uncached descriptor>, code 14
E JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 528540)
E BackupManagerService: Unable to contact transport for restore: data parcel size 528540 bytes
```
Change-Id: Ibb5bb4572d9e873beccd6056da5fe3ae4dce71c2
Bip39ComparisionTest was run before and after upgrading org.bitcoinj:bitcoinj-core to latest version to ensure that kotlin-bip39 is still behaving the same.
A small tweak in WordListTest was needed because WorldList constructor was made internal.
* Pre-34, this was marked as @hide and @TestApi
* We were using it as a system app with hidden APIs allowed,
and having added the framework android.jar to gradle
* 91fa0b1298
made it public, so lint now complains. Silence that.
Change-Id: I5a1ec9847a25a0798726af3867d7660db1528a00
When `android.permission.MANAGE_DOCUMENTS` is not granted, Seedvault
prompts to select a storage location. Do not insist on resolving the
storage's actual root, as it will likely (or perhaps always) fail.
Use a fake storage root as is done for USB and app-based options.
Known issues:
* Selected location is assumed not to be USB and not to require
network access in its storage options.
Change-Id: I357b4c68673d71c087be41e9c94c2841c1d6658e
Disable new R8 mode and resource namespacing for now to avoid build failures.
These needs to be worked on before they can be enabled.
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
If you're using Android plugin for Gradle 3.0.0 or higher, your project automatically uses a default version of the build tools that the plugin specifies
Ref: https://developer.android.com/tools/releases/build-tools
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
* Ensure every plugin is present in project's plugin block with version
* Switch to full plugin id for jetbrains plugins
* Move plugin and dependency repos to settings
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
* We've had a love/hate relationship with the combination of
SAF + Nextcloud app + Nextcloud server
* SAF is quite limiting, and that causes it's own issues
* On top of that, Nextcloud app has it's own issues. We've
even sent patches for some things, but there's only so much one can do
https://github.com/nextcloud/android/pulls?q=is%3Apr+author%3Agrote
* With the DAVx5 WebDAV support, it seems to work better.
* However, most recently a server side change broke things entirely, with either apps
https://github.com/seedvault-app/seedvault/issues/490#issuecomment-1368032414
* Due of all of this, it just leads to a bad backup experience.
As such, let's just say this is not recommended at all entirely
* Hopefully in the future we'll be able to support more options
Change-Id: I0b46dd11df7c31606131bf311583fe4777536463
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Korean)
Currently translated at 100.0% (17 of 17 strings)
Translated using Weblate (Korean)
Currently translated at 100.0% (179 of 179 strings)
Co-authored-by: 이정희 <daemul72@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/ko/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/ko/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault storage backup
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (17 of 17 strings)
Translated using Weblate (Galician)
Currently translated at 100.0% (17 of 17 strings)
Translated using Weblate (Galician)
Currently translated at 100.0% (1 of 1 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (179 of 179 strings)
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/es/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_contactsbackup/gl/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/es/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/gl/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault contacts backup
Translation: CalyxOS/Seedvault storage backup
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (French)
Currently translated at 100.0% (170 of 170 strings)
Co-authored-by: Maxime Leroy <lisacintosh@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/fr/
Translation: CalyxOS/Seedvault
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Catalan)
Currently translated at 100.0% (17 of 17 strings)
Translated using Weblate (Catalan)
Currently translated at 100.0% (170 of 170 strings)
Co-authored-by: kbci_wcn <kbci_wcn@aleeas.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/ca/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/ca/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault storage backup
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (17 of 17 strings)
Translated using Weblate (Russian)
Currently translated at 98.8% (177 of 179 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (170 of 170 strings)
Co-authored-by: Егор Ермаков <eg.ermakov2016@yandex.ru>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/ru/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/ru/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault storage backup
Currently translated at 100.0% (17 of 17 strings)
Translated using Weblate (Czech)
Currently translated at 97.2% (174 of 179 strings)
Translated using Weblate (Czech)
Currently translated at 96.6% (173 of 179 strings)
Translated using Weblate (Czech)
Currently translated at 99.4% (169 of 170 strings)
Co-authored-by: Micovec <jiri.vokrinek@email.cz>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/cs/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/cs/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault storage backup
Currently translated at 100.0% (17 of 17 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (170 of 170 strings)
Co-authored-by: Michael Bestas <mkbestas@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/el/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/el/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault storage backup
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (170 of 170 strings)
Co-authored-by: Óscar Fernández Díaz <oscfdezdz@tuta.io>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/es/
Translation: CalyxOS/Seedvault
Currently translated at 100.0% (17 of 17 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (170 of 170 strings)
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/zh_Hans/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault storage backup
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (17 of 17 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (170 of 170 strings)
Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/he/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/he/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault storage backup
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (German)
Currently translated at 100.0% (17 of 17 strings)
Translated using Weblate (German)
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (German)
Currently translated at 100.0% (170 of 170 strings)
Co-authored-by: nautilusx <translate@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/de/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/de/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault storage backup
Currently translated at 100.0% (17 of 17 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (179 of 179 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (170 of 170 strings)
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/tr/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/tr/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault storage backup
* We already pre-fill the code on debug builds to make testing easier
* Allow screenshots too so we don't have to note down the code right away
when testing
Change-Id: Ie9cc3080616b78a6e5f9b427c080f10c146a036d
MR #151 implemented a fallback if MANAGE_DOCUMENTS is not granted,
which falls back to show a file chooser to the user to manually
select the storage root.
Document this behavior in the manifest as well, as the permission
causes some certification tests to fail (#453).
Change-Id: I3271b7969aacc014349766a022f13a00bea9ff85
Signed-off-by: Alexander Martinz <amartinz@shiftphones.com>
additionally adding a test to ensure the storage provider is excluded.
Otherwise, when the storage provider (i.e. DAVx5 or Nextcloud) is installed,
it will be terminated, and the restoration process will be interrupted.
Change-Id: Ic1be201b673d718b416009ff61f5d975c89b6a62
* Pressing "Backup now" should not just ignore you when it's not actually
enabled
* Add a toast message telling you it's not enabled
Fixes: #390
Change-Id: I5d698a244652e094b0acfc42cdea017a0af9a20b
* New SetupWizard uses external/setupdesign (sud) and
external/setupcompat (suc) to achieve the desired looks
* It prevents proper previews when included in any app, though, so
we better try achieving the same by manually styling the activities
for 12
* This patch mimics the design by applying styles similar to the ones
from sud, sometimes reusing parts taken from there
Change-Id: Iccf588e5239aeb00645f97b095910986f32c52d0
By default, Android exposes USB devices only to the main user.
In order to query, read and write to it, the signature permission INTERACT_ACROSS_USERS_FULL (optional) is granted to create Seedvault's context as the system user.
Issue: calyxos#437
Issue: https://github.com/seedvault-app/seedvault/issues/77
Change-Id: I0b1b4c8c5aeeb226419ff94e15f631ebe1db66df
Currently translated at 100.0% (16 of 16 strings)
Translated using Weblate (Catalan)
Currently translated at 100.0% (169 of 169 strings)
Translated using Weblate (Catalan)
Currently translated at 87.5% (148 of 169 strings)
Translated using Weblate (Catalan)
Currently translated at 80.4% (136 of 169 strings)
Translated using Weblate (Catalan)
Currently translated at 71.0% (120 of 169 strings)
Translated using Weblate (Catalan)
Currently translated at 20.7% (35 of 169 strings)
Translated using Weblate (Catalan)
Currently translated at 15.3% (26 of 169 strings)
Translated using Weblate (Catalan)
Currently translated at 5.9% (10 of 169 strings)
Translated using Weblate (Catalan)
Currently translated at 100.0% (1 of 1 strings)
Translated using Weblate (Catalan)
Currently translated at 4.7% (8 of 169 strings)
Co-authored-by: kbci_wcn <kbci_wcn@aleeas.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/ca/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_contactsbackup/ca/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/ca/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault contacts backup
Translation: CalyxOS/Seedvault storage backup
Currently translated at 99.4% (168 of 169 strings)
Translated using Weblate (French)
Currently translated at 97.6% (165 of 169 strings)
Co-authored-by: Armand LB <armandleborgne@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/fr/
Translation: CalyxOS/Seedvault
Currently translated at 98.8% (167 of 169 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (16 of 16 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 43.7% (7 of 16 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1 of 1 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 98.8% (167 of 169 strings)
Co-authored-by: Gabriel Cardoso <g.cardoso@mailfence.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_contactsbackup/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/pt_BR/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault contacts backup
Translation: CalyxOS/Seedvault storage backup
Currently translated at 100.0% (169 of 169 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1 of 1 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (169 of 169 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (169 of 169 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (164 of 164 strings)
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_contactsbackup/zh_Hans/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault contacts backup
Currently translated at 100.0% (169 of 169 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (164 of 164 strings)
Co-authored-by: Óscar Fernández Díaz <oscfdezdz@tuta.io>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/es/
Translation: CalyxOS/Seedvault
Currently translated at 100.0% (169 of 169 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (169 of 169 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (164 of 164 strings)
Translated using Weblate (Hebrew)
Currently translated at 95.7% (157 of 164 strings)
Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/he/
Translation: CalyxOS/Seedvault
Currently translated at 100.0% (169 of 169 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (16 of 16 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (164 of 164 strings)
Added translation using Weblate (Greek)
Translated using Weblate (Greek)
Currently translated at 100.0% (1 of 1 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (164 of 164 strings)
Added translation using Weblate (Greek)
Translated using Weblate (Greek)
Currently translated at 99.3% (163 of 164 strings)
Co-authored-by: Michael Bestas <mkbestas@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/el/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_contactsbackup/el/
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault_storage/el/
Translation: CalyxOS/Seedvault
Translation: CalyxOS/Seedvault contacts backup
Translation: CalyxOS/Seedvault storage backup
Currently translated at 100.0% (160 of 160 strings)
Co-authored-by: Eric <spice2wolf@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/zh_Hans/
Translation: CalyxOS/Seedvault
Change-Id: I61376609ee1b59f103fa469790127ae36c4fc47a
Currently translated at 100.0% (160 of 160 strings)
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/tr/
Translation: CalyxOS/Seedvault
Change-Id: I509a1c362e1e96e5ac4967e00071b286c675178d
On Android 11 this worked fine, but on Android 12 onStart() happens before activity results get delivered. We finish the activity when receiving a cancelled result. However, when onStart() gets called before we know the result, we relaunch an activity required for provisioning again instead of finishing.
* Bump version following versioning scheme
* 3.0 now following new backup format
* Add initial entry to changelog
Change-Id: Ifca1b3feac0f510890450a1999b42897894d58ee
This removes the AAR binary from the repo as it isn't needed anymore. Also room schema migrations will need to be one manually in the future as schema export doesn't seem to work in AOSP.
Before, we were faking a backup and just returned true, but remembering that next time, we need to do a fresh non-incremental @pm@ backup.
Now, we backup to local cache, but don't upload it. On next run, when we can do backups again, we will upload the updated cache. This simplifies things and reduces the special logic required.
This will only hide installed apps from naive attackers as the APKs are still not encrypted and even then other attacks would be possible.
However, it allows us to simplify our storage plugin API.
We ask the user to generate a new key, because actively asking for the old one is training bad security habits, but technically verifying the old key will also work.
* 'master' of https://github.com/seedvault-app/seedvault: (50 commits)
Bump version to 11-2.2
Changelog: Update till 11-2.1
Restrict exported components
Allow launching restore through a dialer code
Add expert settings with an option for unlimited quota
Prevent screenshots of recovery code
Use clearer more generic strings
Ask for system authentication before storing a new recovery code
Split up validating, verifying and storing of recovery code
Disable Nextcloud restore when not installed and no store available
Disable spell-checker on recovery code input
Add warning for third-party tools to README
document potential information leakage through the long-lived SQL caches
Provide an overview over key derivations
Compares kotlin-bip39 library with bitcoinj library
Link FAQ in Readme to make it more discoverable
Move LocalContactsBackup to product partition
Add newline at the end of all files
Improve .editorconfig setup
Don't backup on metered networks
...
Conflicts:
app/src/main/res/values-de/strings.xml
app/src/main/res/values-es/strings.xml
app/src/main/res/values-pt/strings.xml
app/src/main/res/values-zh-rCN/strings.xml
Conflicts resolved by simply checking out translations from android11,
since they are not modified in master at all.
Change-Id: I0a83c72dbc78b38985b46f9b75ce92e27acd2e03
User-facing changes:
* Don't backup on metered networks
* Disable spell-checker on recovery code input
* Disable Nextcloud restore when not installed and no store available
* Ask for system authentication before storing a new recovery code
* Prevent screenshots of recovery code
* Add expert settings with an option for unlimited quota
* Allow launching restore through a dialer code
* Restrict exported components
Others:
* Improve .editorconfig setup
* Move LocalContactsBackup to product partition
* Link FAQ in Readme to make it more discoverable
* Compares kotlin-bip39 library with bitcoinj library
* Provide an overview over key derivations
* document potential information leakage through the long-lived SQL caches
* Add warning for third-party tools to README
Change-Id: I095af13d0ff010c9602bc323267c074ce7d019a2
* We don't show Restore in menu by default since it's
not the best idea to restore a running system
* However, at the same time, it's good to have a way to do
that for those who'd like to restore anyway, and the only
current way is adb, which is not ideal
* Dialing "*#*#RESTORE#*#*" will launch the restore activity
Change-Id: I258fead82f7e916a4de0b314e1840d7aa4b3746c
This is may be inconvenient for some people, but it is way more secure as screenshots can be accessed by malicious apps that look our for BIP39 codes. Better to store the code on paper.
This will help to prevent data extraction via seedvault when somebody gets hold of an unlocked phone. However, it will not help against someone able to force you to provide fingerprints or other device secrets.
Currently translated at 100.0% (135 of 135 strings)
Translated using Weblate (Ukrainian)
Currently translated at 25.9% (35 of 135 strings)
Co-authored-by: Tymofii Lytvynenko <till.svit@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/uk/
Translation: CalyxOS/Seedvault
Currently translated at 99.2% (134 of 135 strings)
Translated using Weblate (Slovak)
Currently translated at 11.8% (16 of 135 strings)
Co-authored-by: František Oboňa <frantisekobona@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/sk/
Translation: CalyxOS/Seedvault
Currently translated at 95.5% (129 of 135 strings)
Translated using Weblate (Telugu)
Currently translated at 65.1% (88 of 135 strings)
Co-authored-by: Shashi A <bitcoinbabu401@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/te/
Translation: CalyxOS/Seedvault
Attempting to install Nextcloud in SetupWizard on a device
that has no app store installed results in a crash.
Disable the option and use an appropriate summary.
Change-Id: Ie3dff8d85ed68b27858fa37b3efb97eb345fa372
* We better not overuse metered networks as such connections
* are usually sensitive to heavy data usage due to monetary costs and/or data limitations.
* Only change here is the BIP39 dependency replacement, however
I'm still bumping version so that it's easy to figure out in case
there ever was a build with just 2.0 and not this due to whatever reason
Change-Id: I9783d5e038d002e871c09be6fe61174c5a5b901f
* delete all storage backups for current user
* clears the storage backup cache
* start a new app data restore set and initializes it
The reason is that old backups won't be readable anymore with the new key. We also can't delete other backups safely as we did before, because we can't be sure that they don't belong to a different device or user.
Previously, we would put our files directly in the root of the storage location and delete any existing backups there. When used by different devices or user profiles, these would keep deleting each other's backups.
Currently translated at 51.1% (69 of 135 strings)
Translated using Weblate (Burmese)
Currently translated at 50.3% (68 of 135 strings)
Translated using Weblate (Burmese)
Currently translated at 48.8% (66 of 135 strings)
Co-authored-by: Chirayu Desai <chirayudesai1@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/my/
Translation: CalyxOS/Seedvault
Currently translated at 99.2% (134 of 135 strings)
Translated using Weblate (Polish)
Currently translated at 51.8% (70 of 135 strings)
Co-authored-by: m4sk1n <me@m4sk.in>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/pl/
Translation: CalyxOS/Seedvault
Currently translated at 100.0% (135 of 135 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (135 of 135 strings)
Translated using Weblate (Spanish)
Currently translated at 97.0% (131 of 135 strings)
Co-authored-by: Óscar Fernández Díaz <oscfdezdz@tuta.io>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/es/
Translation: CalyxOS/Seedvault
Currently translated at 100.0% (135 of 135 strings)
Translated using Weblate (Spanish)
Currently translated at 97.0% (131 of 135 strings)
Translated using Weblate (Spanish)
Currently translated at 91.8% (124 of 135 strings)
Co-authored-by: Oscar Nydza <onn.tico@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/es/
Translation: CalyxOS/Seedvault
Currently translated at 20.0% (27 of 135 strings)
Translated using Weblate (Telugu)
Currently translated at 21.7% (27 of 124 strings)
Co-authored-by: Chaitanya Chowdary <chaitanyachowdaryy@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/calyxos/seedvault/te/
Translation: CalyxOS/Seedvault