diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 66239acd0..d2a9593e0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,8 +6,7 @@ - - + 0; - - for (int grant : grantResults) { - if (grant != PackageManager.PERMISSION_GRANTED) { - success = false; - } - } - - if (!success) { - // External storage permission rejected, inform user that - // import/export is prevented - Toast.makeText(getApplicationContext(), R.string.noExternalStoragePermissionError, - Toast.LENGTH_LONG).show(); - } - - } - } - @Override protected void onDestroy() { mTasks.flushTaskList(TaskHandler.TYPE.IMPORT, true, false, false); diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 49e5f725d..e673c6ed4 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -111,6 +111,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { private static final int PERMISSION_REQUEST_CAMERA_IMAGE_FRONT = 100; private static final int PERMISSION_REQUEST_CAMERA_IMAGE_BACK = 101; private static final int PERMISSION_REQUEST_CAMERA_IMAGE_ICON = 102; + private static final int PERMISSION_REQUEST_STORAGE_IMAGE_FRONT = 103; + private static final int PERMISSION_REQUEST_STORAGE_IMAGE_BACK = 104; + private static final int PERMISSION_REQUEST_STORAGE_IMAGE_ICON = 105; public static final String BUNDLE_ID = "id"; public static final String BUNDLE_DUPLICATE_ID = "duplicateId"; @@ -981,14 +984,55 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - if (requestCode == PERMISSION_REQUEST_CAMERA_IMAGE_FRONT) { + boolean allowed = grantResults[0] == PackageManager.PERMISSION_GRANTED; + Integer failureReason = null; + + if (requestCode == PERMISSION_REQUEST_CAMERA_IMAGE_FRONT) { + if (allowed) { takePhotoForCard(Utils.CARD_IMAGE_FROM_CAMERA_FRONT); - } else if (requestCode == PERMISSION_REQUEST_CAMERA_IMAGE_BACK) { - takePhotoForCard(Utils.CARD_IMAGE_FROM_CAMERA_BACK); - } else if (requestCode == PERMISSION_REQUEST_CAMERA_IMAGE_ICON) { - takePhotoForCard(Utils.CARD_IMAGE_FROM_CAMERA_ICON); + return; } + + failureReason = R.string.cameraPermissionRequired; + } else if (requestCode == PERMISSION_REQUEST_CAMERA_IMAGE_BACK) { + if (allowed) { + takePhotoForCard(Utils.CARD_IMAGE_FROM_CAMERA_BACK); + return; + } + + failureReason = R.string.cameraPermissionRequired; + } else if (requestCode == PERMISSION_REQUEST_CAMERA_IMAGE_ICON) { + if (allowed) { + takePhotoForCard(Utils.CARD_IMAGE_FROM_CAMERA_ICON); + return; + } + + failureReason = R.string.cameraPermissionRequired; + } else if (requestCode == PERMISSION_REQUEST_STORAGE_IMAGE_FRONT) { + if (allowed) { + selectImageFromGallery(Utils.CARD_IMAGE_FROM_FILE_FRONT); + return; + } + + failureReason = R.string.storageReadPermissionRequired; + } else if (requestCode == PERMISSION_REQUEST_STORAGE_IMAGE_BACK) { + if (allowed) { + selectImageFromGallery(Utils.CARD_IMAGE_FROM_FILE_BACK); + return; + } + + failureReason = R.string.storageReadPermissionRequired; + } else if (requestCode == PERMISSION_REQUEST_STORAGE_IMAGE_ICON) { + if (allowed) { + selectImageFromGallery(Utils.CARD_IMAGE_FROM_FILE_ICON); + return; + } + + failureReason = R.string.storageReadPermissionRequired; + } + + if (failureReason != null) { + Toast.makeText(this, failureReason, Toast.LENGTH_LONG).show(); } } @@ -1060,6 +1104,24 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { mPhotoTakerLauncher.launch(photoURI); } + private void selectImageFromGallery(int type) { + mRequestedImage = type; + + Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); + photoPickerIntent.setType("image/*"); + Intent contentIntent = new Intent(Intent.ACTION_GET_CONTENT); + contentIntent.setType("image/*"); + Intent chooserIntent = Intent.createChooser(photoPickerIntent, getString(R.string.addFromImage)); + chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { contentIntent }); + + try { + mPhotoPickerLauncher.launch(chooserIntent); + } catch (ActivityNotFoundException e) { + Toast.makeText(getApplicationContext(), R.string.failedLaunchingPhotoPicker, Toast.LENGTH_LONG).show(); + Log.e(TAG, "No activity found to handle intent", e); + } + } + class EditCardIdAndBarcode implements View.OnClickListener { @Override public void onClick(View v) { @@ -1141,63 +1203,38 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { } cardOptions.put(getString(R.string.takePhoto), () -> { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - int permissionRequestType; + int permissionRequestType; - if (v.getId() == R.id.frontImageHolder) { - permissionRequestType = PERMISSION_REQUEST_CAMERA_IMAGE_FRONT; - } else if (v.getId() == R.id.backImageHolder) { - permissionRequestType = PERMISSION_REQUEST_CAMERA_IMAGE_BACK; - } else if (v.getId() == R.id.thumbnail) { - permissionRequestType = PERMISSION_REQUEST_CAMERA_IMAGE_ICON; - } else { - throw new IllegalArgumentException("Unknown ID type " + v.getId()); - } - - requestPermissions(new String[]{Manifest.permission.CAMERA}, permissionRequestType); - } else { - int cardImageType; - - if (v.getId() == R.id.frontImageHolder) { - cardImageType = Utils.CARD_IMAGE_FROM_CAMERA_FRONT; - } else if (v.getId() == R.id.backImageHolder) { - cardImageType = Utils.CARD_IMAGE_FROM_CAMERA_BACK; - } else if (v.getId() == R.id.thumbnail) { - cardImageType = Utils.CARD_IMAGE_FROM_CAMERA_ICON; - } else { - throw new IllegalArgumentException("Unknown ID type " + v.getId()); - } - - takePhotoForCard(cardImageType); - } - return null; - }); - - cardOptions.put(getString(R.string.addFromImage), () -> { if (v.getId() == R.id.frontImageHolder) { - mRequestedImage = Utils.CARD_IMAGE_FROM_FILE_FRONT; + permissionRequestType = PERMISSION_REQUEST_CAMERA_IMAGE_FRONT; } else if (v.getId() == R.id.backImageHolder) { - mRequestedImage = Utils.CARD_IMAGE_FROM_FILE_BACK; + permissionRequestType = PERMISSION_REQUEST_CAMERA_IMAGE_BACK; } else if (v.getId() == R.id.thumbnail) { - mRequestedImage = Utils.CARD_IMAGE_FROM_FILE_ICON; + permissionRequestType = PERMISSION_REQUEST_CAMERA_IMAGE_ICON; } else { throw new IllegalArgumentException("Unknown ID type " + v.getId()); } - Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); - photoPickerIntent.setType("image/*"); - Intent contentIntent = new Intent(Intent.ACTION_GET_CONTENT); - contentIntent.setType("image/*"); - Intent chooserIntent = Intent.createChooser(photoPickerIntent, getString(R.string.addFromImage)); - chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { contentIntent }); + PermissionUtils.requestCameraPermission(LoyaltyCardEditActivity.this, permissionRequestType); - try { - mPhotoPickerLauncher.launch(chooserIntent); - } catch (ActivityNotFoundException e) { - Toast.makeText(getApplicationContext(), R.string.failedLaunchingPhotoPicker, Toast.LENGTH_LONG).show(); - Log.e(TAG, "No activity found to handle intent", e); + return null; + }); + + cardOptions.put(getString(R.string.addFromImage), () -> { + int permissionRequestType; + + if (v.getId() == R.id.frontImageHolder) { + permissionRequestType = PERMISSION_REQUEST_STORAGE_IMAGE_FRONT; + } else if (v.getId() == R.id.backImageHolder) { + permissionRequestType = PERMISSION_REQUEST_STORAGE_IMAGE_BACK; + } else if (v.getId() == R.id.thumbnail) { + permissionRequestType = PERMISSION_REQUEST_STORAGE_IMAGE_ICON; + } else { + throw new IllegalArgumentException("Unknown ID type " + v.getId()); } + PermissionUtils.requestStorageReadPermission(LoyaltyCardEditActivity.this, permissionRequestType); + return null; }); diff --git a/app/src/main/java/protect/card_locker/PermissionUtils.java b/app/src/main/java/protect/card_locker/PermissionUtils.java new file mode 100644 index 000000000..b5e2390a7 --- /dev/null +++ b/app/src/main/java/protect/card_locker/PermissionUtils.java @@ -0,0 +1,79 @@ +package protect.card_locker; + +import android.Manifest; +import android.app.Activity; +import android.content.pm.PackageManager; +import android.os.Build; + +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +public class PermissionUtils { + /** + * Check if storage read permission is needed. + * + * This is only necessary on Android 6.0 (Marshmallow) and below. See + * https://github.com/CatimaLoyalty/Android/issues/979 for more info. + * + * @param activity + * @return + */ + private static boolean needsStorageReadPermission(Activity activity) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + return false; + } + + return ContextCompat.checkSelfPermission(activity, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED; + } + + /** + * Check if camera permission is needed. + * + * @param activity + * @return + */ + public static boolean needsCameraPermission(Activity activity) { + // Android only introduced the runtime permission system in Marshmallow (Android 6.0) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + return false; + } + + return ContextCompat.checkSelfPermission(activity, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED; + } + + /** + * Call onRequestPermissionsResult after storage read permission was granted. + * Mocks a successful grant if a grant is not necessary. + * + * @param activity + * @param requestCode + */ + public static void requestStorageReadPermission(Activity activity, int requestCode) { + String[] permissions = new String[]{ android.Manifest.permission.READ_EXTERNAL_STORAGE }; + int[] mockedResults = new int[]{ PackageManager.PERMISSION_GRANTED }; + + if (needsStorageReadPermission(activity)) { + ActivityCompat.requestPermissions(activity, permissions, requestCode); + } else { + activity.onRequestPermissionsResult(requestCode, permissions, mockedResults); + } + } + + /** + * Call onRequestPermissionsResult after camera permission was granted. + * Mocks a successful grant if a grant is not necessary. + * + * @param activity + * @param requestCode + */ + public static void requestCameraPermission(Activity activity, int requestCode) { + String[] permissions = new String[]{ Manifest.permission.CAMERA }; + int[] mockedResults = new int[]{ PackageManager.PERMISSION_GRANTED }; + + if (needsCameraPermission(activity)) { + ActivityCompat.requestPermissions(activity, permissions, requestCode); + } else { + activity.onRequestPermissionsResult(requestCode, permissions, mockedResults); + } + } +} diff --git a/app/src/main/java/protect/card_locker/ScanActivity.java b/app/src/main/java/protect/card_locker/ScanActivity.java index 097c6199c..d098da78f 100644 --- a/app/src/main/java/protect/card_locker/ScanActivity.java +++ b/app/src/main/java/protect/card_locker/ScanActivity.java @@ -53,6 +53,8 @@ public class ScanActivity extends CatimaAppCompatActivity { private static final int MEDIUM_SCALE_FACTOR_DIP = 460; private static final int COMPAT_SCALE_FACTOR_DIP = 320; + private static final int PERMISSION_SCAN_ADD_FROM_IMAGE = 100; + private CaptureManager capture; private DecoratedBarcodeView barcodeScannerView; @@ -226,6 +228,10 @@ public class ScanActivity extends CatimaAppCompatActivity { } public void addFromImage(View view) { + PermissionUtils.requestStorageReadPermission(this, PERMISSION_SCAN_ADD_FROM_IMAGE); + } + + private void addFromImageAfterPermission() { Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); photoPickerIntent.setType("image/*"); Intent contentIntent = new Intent(Intent.ACTION_GET_CONTENT); @@ -275,9 +281,15 @@ public class ScanActivity extends CatimaAppCompatActivity { @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == CaptureManager.getCameraPermissionReqCode()) + + if (requestCode == CaptureManager.getCameraPermissionReqCode()) { showCameraPermissionMissingText(grantResults[0] != PackageManager.PERMISSION_GRANTED); - + } else if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE) { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + addFromImageAfterPermission(); + } else { + Toast.makeText(this, R.string.storageReadPermissionRequired, Toast.LENGTH_LONG).show(); + } + } } - } diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 0ea2121eb..652925d0e 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -39,7 +39,6 @@ متصدر فشل التصدير لا يمكن عمل التصدير - امنح التخزين الخارجي اذن لاستيراد وتصدير البيانات ستتم كتابة البيانات في الموقع الذي تختاره. من نظام الملفات استخدم تطبيقًا آخر diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index b1f1fcba6..21c64bcf2 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -34,7 +34,6 @@ Снимка на предната страна Снимки Изберете файл на друго приложение. - Разрешете достъп до хранилището, за да работи внасянето и изнасянето Картата не е намерена Идентификаторът е променен. Желаете ли с неговата стойност да бъде променен и щрихкодът\? Обновяване на щрихкода\? diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index b19a9753b..64b256e6f 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -29,7 +29,6 @@ Export nelze provést Importuji… Exportuji… - Udělit oprávnění přístupu k externímu úložišti pro import nebo export dat Import ze souborového systému Vyberte konkrétní soubor v úložišti. Ze souborového systému diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 044c38fee..ae9386d42 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -67,7 +67,6 @@ Vælg en bestemt fil fra filsystemet. Import fra filsystem Dataene skrives til en placering efter eget valg. - Giv først tilladelse til ekstern lagring til at importere eller eksportere kort Kunne ikke analysere import-URI\'en Kunne ikke finde kort Der er ikke angivet noget kort-ID diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 561de4db3..a6676a763 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -36,7 +36,6 @@ Export konnte nicht durchgeführt werden Importiere… Exportiere… - Berechtigung für den externen Speicher zum Importieren oder Exportieren von Daten erteilen Importiere aus dem Dateisystem Wähle eine Datei vom Dateisystem aus. Wähle vom Dateisystem diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index dd28e1ca1..b42842a18 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -32,7 +32,6 @@ Δεν ήταν δυνατή η εξαγωγή Γίνεται εισαγωγή του… Γίνεται εξαγωγή του… - Εγκρίνετε την άδεια εξωτερικής αποθήκευσης για να εισάγετε ή εξάγετε δεδομένα Εισαγωγή από το σύστημα αρχείων Επιλέξτε ένα συγκεκριμένο αρχείο από το σύστημα αρχείων. Από το σύστημα αρχείων diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index a20915885..145247973 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -63,7 +63,6 @@ Uzi alian app Elektu specifa dosiero de la dosiersistemo. La datumoj estos skribita al loko de via elekto. - Grant ekstera stokado permeso de importado aŭ eksportado kartoj unua Ne povis eksporti kartoj Ne povis importi kartoj Subtenanta supre vian kartoj permesas vin movi ilin al alia aparato. diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 569c9a25e..942f65db8 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -32,7 +32,6 @@ No se han podido exportar Importando… Exportando… - Otorgar permiso de almacenamiento para importar o exportar datos Importar desde el sistema de archivos Elegir un archivo concreto del sistema de archivos. Desde el sistema de archivos diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index bf4cb189a..2b2026648 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -1,6 +1,5 @@ - Salli käyttöoikeus ulkoisen tallennustilan käyttöön voidaksesi tuoda tai viedä tietoja Ei Kyllä Vaihdoit ID-tunnuksen. Haluatko päivittää myös viivakoodin käyttämään samaa arvoa\? diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index c0cab3102..0ae5cdd9d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -32,7 +32,6 @@ Impossible d’effectuer l’exportation Import … Export … - Accorder au stockage externe l’autorisation d’importer ou d’exporter des données Importer depuis le système de fichiers Choisissez le fichier à importer. Système de fichiers diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 0634a22ec..4d0a3fcef 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -150,5 +150,4 @@ संस्करण: %s %s संशोधन के बारे में आई डी क्लिपबोर्ड पर कॉपी किया गया - डेटा आयात या निर्यात करने के लिए एक्सटर्नल स्टोरेज एक्सेस प्रदान करें \ No newline at end of file diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 4ce964895..4abef898a 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -44,7 +44,6 @@ Podaci će biti zabilježeni na odabranom mjestu. Izvoz nije uspio Opskrba… - Najprije odobrite dopuštenje za vanjsku pohranu za uvoz ili izvoz kartica Odaberite određenu datoteku iz datotečnog sustava. Koristite drugu aplikaciju Postavke diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index e5ab424dd..ff56a49ec 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -81,7 +81,6 @@ Exportálás sikertelen Importálás… Exportálás… - Külső háttértárhoz való hozzáférés engedélyezése adat import vagy export miatt Az adatokat a kiválasztott helyre fogjuk menteni. Importálás fájlrendszerből A fájlrendszerből diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 3f27a2ff6..3925c3980 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -96,7 +96,6 @@ Tidak dapat mengekspor Sedang mengimpor… Sedang mengekspor… - Berikan izin penyimpanan eksternal untuk mengimpor atau mengekspor data Data akan ditulis ke lokasi pilihan Anda. Impor dari pengelola file bawaan Pilih file dari pengelola file bawaan. diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index a5aba2f26..c8eb78379 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -33,7 +33,6 @@ Stuðningur upp spil gerir þér kleift að færa þá til annar tæki. Flutt Innflutningur mistókst - Grant ytri geymslu leyfi til að flytja eða flytja spil fyrstu Gögnum verður skrifað á stað af eigin vali. Innflutningur frá möppuna Velja ákveðna skrá frá möppuna. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 3fba2b1f8..44c4a8fe4 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -37,7 +37,6 @@ Impossibile eseguire l\'esportazione Importazione in corso… Esportazione in corso… - Concedi il permesso di archiviazione esterna per importare o esportare dati Importa dall\'archivio Scegli un file dall\'archivio. Dall\'archivio diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index aac743903..a27433423 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -87,7 +87,6 @@ ストレージからファイルを選択してください。 ストレージからインポート 選択した場所にデータを出力します。 - データをインポート/エクスポートするために外部ストレージへのアクセスを許可してください エクスポート中… インポート中… カードをエクスポートできませんでした diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 448292566..f583b4ae0 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -23,7 +23,6 @@ Nepavyko eksportuoti Importuoja… Eksportuoja… - Pirmiausia suteikite išorinės saugyklos leidimą, kad galėtumėte importuoti arba eksportuoti korteles Apie Copylefted laisvoji programinė įranga, licencijuota GPLv3+ Apie %s diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 01f778129..f52925393 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -48,7 +48,6 @@ Kartes neizdevās eksportēt Importē… Eksportē… - Piešķiriet ārējai atmiņai atļauju vispirms importēt vai eksportēt kartes Dati tiks saglabāti Jūsu izvēlētajā vietā. Imports no failu sistēmas Izvēlieties konkrētu failu no failu sistēmas. diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index f85fbab7b..5481f352f 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -33,7 +33,6 @@ Kunne ikke utføre eksport Importerer… Exporterer… - Innvilg lagringstilgang til eksternlager for å importere eller eksportere data Data skrives dit du ønsker det. Importer fra filsystem Velg spesifikk fil fra filsystemet. diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 96bbd1974..6149dfb86 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -38,7 +38,6 @@ Het exporteren is mislukt Bezig met importeren… Bezig met exporteren… - Verleen het recht ‘externe opslag’ om gegevens te kunnen im- of exporteren De gegevens worden weggeschreven op een locatie naar keuze. Importeren uit bestandssysteem Kies een specifiek bestand van het bestandssysteem. diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 564a93cb3..ecf99aace 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -37,7 +37,6 @@ Nie udało się wyeksportować Importowanie… Eksportowanie… - Zezwalaj na przechowywanie zewnętrzne w celu importowania lub eksportowania danych Importuj z systemu plików Wybierz określony plik z systemu plików. Z systemu plików diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index acada102a..7365d7bdc 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -72,7 +72,6 @@ Subir Descer Sair - Conceda primeiro a autorização de acesso ao armazenamento externo para importar ou exportar dados A cópia de segurança dos seus dados permite-lhe movê-los para outro dispositivo. Importado A importação falhou diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 53323323c..225c7a91f 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -38,7 +38,6 @@ Nu s-a putut exporta carduri Importul… Exportul… - Acordați mai întâi permisiunea de stocare externă pentru a importa sau exporta carduri Datele vor fi scrise într-o locație aleasă de dumneavoastră. Import din sistemul de fișiere Utilizați o altă aplicație diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e28ae8eb0..ea5dfaf0f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -38,7 +38,6 @@ Невозможно выполнить экспорт Импорт… Экспорт… - Импорт или экспорт данных невозможен без разрешения на доступ к хранилищу Данные будут записаны в выбранное место. Импорт из файловой системы Выберете файл на файловой системе. diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index ba13ac010..6d279861c 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -32,7 +32,6 @@ Zlyhal export Importujem… Exportujem… - Nie je možné importovať a exportovať karty bez prístupu k externému úložisku Import zo súborového systému Vyberte súbor zo súborového systému. Zo súborového systému diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index ba6d829f0..30159a8f1 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -32,7 +32,6 @@ Napaka pri izvozu baze Uvažanje… Izvažanje… - Izvažanje in uvažanje je nemogoče brez omogočenega dostopa do zunanje shrambe Uvozi iz datotečnega sistema Izberite specifično datoteko iz datotečnega sistema. Iz datotečnega sistema diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index b01e53fb2..b61ef1adc 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -171,7 +171,6 @@ Anteckning System Språk - Bevilja tillstånd för extern lagring för att kunna importera eller exportera data Möjliggjordes av: %s Brunt Grått diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 135db3bdf..f8152b919 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -128,7 +128,6 @@ Dosya sisteminden belirli bir dosya seçin. Dosya sisteminden içe aktar Veriler seçtiğiniz bir konuma yazılacak. - Verileri içeri veya dışarı aktarmak için harici depolama izni verin Dışa aktarılıyor… İçe aktarılıyor… Dışa aktarma gerçekleştirilemedi diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e6c091b9d..70cf82cc4 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -106,7 +106,6 @@ Оберіть файл у провіднику. Імпорт з файлу Дані буде записано до локації обраної вами. - Надайте дозвіл на доступ до пам\'яті пристрою для імпорту/експорту даних Експортуємо… Імпортуємо… Неможливо здійснити експорт diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index e375c4bd8..b164e191a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -94,7 +94,6 @@ 请从文件系统选择文件. 从文件系统导入 导出的数据将储存至你选择的位置. - 在导入导出前需要获得外部储存权限 无法访问相机 Catima需要访问您的相机来扫描条形码. 轻触这里以更改您的权限设置。 导出中… diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 213f54b68..e9857ada8 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -161,7 +161,6 @@ 掃描條碼 尚未輸入卡片名稱 備份您的資料以將其轉移至其他裝置中。 - 在匯入及匯出資料前,請先允許外部儲存裝置存取權限 自檔案系統中匯入 自檔案系統中選取檔案。 自檔案系統 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ef636c6d5..56dba0129 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -65,7 +65,8 @@ Could not perform export Importing… Exporting… - Grant external storage permission to import or export data + Permission to read storage needed for this action… + Permission to access camera needed for this action… Could not access the camera To scan barcodes, Catima will need access to your camera. Tap here to change your permission settings. The data will be written to a location of your choice.