From ae1ccab059159e806207775b4f566d412f621f5a Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sun, 28 Nov 2021 21:48:48 +0100 Subject: [PATCH] Replace ProgressDialog with notification --- .../card_locker/ImportExportActivity.java | 156 +++++++++--------- .../protect/card_locker/ImportExportTask.java | 46 ++---- .../protect/card_locker/NotificationType.java | 29 ++++ app/src/main/res/values-bg/strings.xml | 4 +- app/src/main/res/values-cs/strings.xml | 4 +- app/src/main/res/values-da/strings.xml | 4 +- app/src/main/res/values-de/strings.xml | 4 +- app/src/main/res/values-el-rGR/strings.xml | 4 +- app/src/main/res/values-eo/strings.xml | 4 +- app/src/main/res/values-es/strings.xml | 4 +- app/src/main/res/values-fi/strings.xml | 4 +- app/src/main/res/values-fr/strings.xml | 4 +- app/src/main/res/values-hr/strings.xml | 6 +- app/src/main/res/values-in-rID/strings.xml | 4 +- app/src/main/res/values-it/strings.xml | 4 +- app/src/main/res/values-ja/strings.xml | 4 +- app/src/main/res/values-ko/strings.xml | 4 +- app/src/main/res/values-lb/strings.xml | 4 +- app/src/main/res/values-lt/strings.xml | 4 +- app/src/main/res/values-lv/strings.xml | 6 +- app/src/main/res/values-nb-rNO/strings.xml | 4 +- app/src/main/res/values-nl/strings.xml | 4 +- app/src/main/res/values-oc/strings.xml | 4 +- app/src/main/res/values-pl/strings.xml | 4 +- app/src/main/res/values-pt/strings.xml | 4 +- app/src/main/res/values-ro-rRO/strings.xml | 4 +- app/src/main/res/values-ru/strings.xml | 4 +- app/src/main/res/values-sk/strings.xml | 4 +- app/src/main/res/values-sl/strings.xml | 4 +- app/src/main/res/values-sv/strings.xml | 4 +- app/src/main/res/values-tr/strings.xml | 4 +- app/src/main/res/values-uk/strings.xml | 4 +- app/src/main/res/values-zh-rCN/strings.xml | 4 +- app/src/main/res/values-zh-rTW/strings.xml | 4 +- app/src/main/res/values/strings.xml | 7 +- 35 files changed, 191 insertions(+), 175 deletions(-) create mode 100644 app/src/main/java/protect/card_locker/NotificationType.java diff --git a/app/src/main/java/protect/card_locker/ImportExportActivity.java b/app/src/main/java/protect/card_locker/ImportExportActivity.java index b48090c3a..7d210b65d 100644 --- a/app/src/main/java/protect/card_locker/ImportExportActivity.java +++ b/app/src/main/java/protect/card_locker/ImportExportActivity.java @@ -1,7 +1,10 @@ package protect.card_locker; import android.Manifest; +import android.app.NotificationManager; +import android.app.PendingIntent; import android.content.ActivityNotFoundException; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; @@ -22,6 +25,7 @@ import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import androidx.core.app.ActivityCompat; +import androidx.core.app.NotificationCompat; import androidx.core.content.ContextCompat; import java.io.FileInputStream; @@ -54,6 +58,12 @@ public class ImportExportActivity extends CatimaAppCompatActivity { final private TaskHandler mTasks = new TaskHandler(); + private NotificationManager mNotifyManager; + private NotificationCompat.Builder mBuilder; + + private static final int NOTIFICATION_IMPORT = 1; + private static final int NOTIFICATION_EXPORT = 2; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -94,7 +104,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity { try { OutputStream writer = getContentResolver().openOutputStream(uri); Log.e(TAG, "Starting file export with: " + result.toString()); - startExport(writer, uri, exportPassword.toCharArray(), true); + startExport(writer, uri, exportPassword != null ? exportPassword.toCharArray() : null, true); } catch (IOException e) { Log.e(TAG, "Failed to export file: " + result.toString(), e); onExportComplete(ImportExportResult.GenericFailure, uri); @@ -256,45 +266,80 @@ public class ImportExportActivity extends CatimaAppCompatActivity { builder.show(); } + private void startProgressNotification(boolean importing) { + mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + mBuilder = new NotificationCompat.Builder(this, NotificationType.getImportExportChannel(this)); + mBuilder.setContentTitle(getString(importing ? R.string.importing : R.string.exporting)) + .setContentText(null) + .setSmallIcon(R.drawable.ic_import_export_white_24dp) + .setColor(getThemeColor()) + .setProgress(0, 0, true); + mNotifyManager.notify(importing ? NOTIFICATION_IMPORT : NOTIFICATION_EXPORT, mBuilder.build()); + } + + private void endProgressNotification(boolean importing, ImportExportResult result, PendingIntent sendIntent) { + String notificationTitle; + String notificationMessage; + + if (result.equals(ImportExportResult.Success)) { + notificationTitle = getString(importing ? R.string.importSuccessfulTitle : R.string.exportSuccessfulTitle); + notificationMessage = getString(importing ? R.string.importSuccessful : R.string.exportSuccessful); + } else { + int reason = R.string.unknown_failure; + if (result.equals(ImportExportResult.BadPassword)) { + reason = R.string.incorrect_password; + } + + notificationTitle = getString(importing ? R.string.importFailedTitle : R.string.exportFailedTitle); + notificationMessage = String.format(getString(importing ? R.string.importFailed : R.string.exportFailed), getString(reason)); + } + + mBuilder.setContentTitle(notificationTitle) + .setContentText(notificationMessage) + .setProgress(0,0, false); + + if (sendIntent != null) { + mBuilder.addAction(R.drawable.ic_share, getString(R.string.sendLabel), sendIntent); + } + + mNotifyManager.notify(importing ? NOTIFICATION_IMPORT : NOTIFICATION_EXPORT, mBuilder.build()); + } + private void startImport(final InputStream target, final Uri targetUri, final DataFormat dataFormat, final char[] password, final boolean closeWhenDone) { mTasks.flushTaskList(TaskHandler.TYPE.IMPORT, true, false, false); - ImportExportTask.TaskCompleteListener listener = new ImportExportTask.TaskCompleteListener() { - @Override - public void onTaskComplete(ImportExportResult result, DataFormat dataFormat) { - onImportComplete(result, targetUri, dataFormat); - if (closeWhenDone) { - try { - target.close(); - } catch (IOException ioException) { - ioException.printStackTrace(); - } + ImportExportTask.TaskCompleteListener listener = (result, dataFormat1) -> { + onImportComplete(result, targetUri, dataFormat1); + if (closeWhenDone) { + try { + target.close(); + } catch (IOException ioException) { + ioException.printStackTrace(); } } }; importExporter = new ImportExportTask(ImportExportActivity.this, dataFormat, target, password, listener); + startProgressNotification(true); mTasks.executeTask(TaskHandler.TYPE.IMPORT, importExporter); } private void startExport(final OutputStream target, final Uri targetUri, char[] password, final boolean closeWhenDone) { mTasks.flushTaskList(TaskHandler.TYPE.EXPORT, true, false, false); - ImportExportTask.TaskCompleteListener listener = new ImportExportTask.TaskCompleteListener() { - @Override - public void onTaskComplete(ImportExportResult result, DataFormat dataFormat) { - onExportComplete(result, targetUri); - if (closeWhenDone) { - try { - target.close(); - } catch (IOException ioException) { - ioException.printStackTrace(); - } + ImportExportTask.TaskCompleteListener listener = (result, dataFormat) -> { + onExportComplete(result, targetUri); + if (closeWhenDone) { + try { + target.close(); + } catch (IOException ioException) { + ioException.printStackTrace(); } } }; importExporter = new ImportExportTask(ImportExportActivity.this, DataFormat.Catima, target, password, listener); + startProgressNotification(false); mTasks.executeTask(TaskHandler.TYPE.EXPORT, importExporter); } @@ -358,72 +403,27 @@ public class ImportExportActivity extends CatimaAppCompatActivity { } private void onImportComplete(ImportExportResult result, Uri path, DataFormat dataFormat) { + endProgressNotification(true, result, null); + if (result == ImportExportResult.BadPassword) { retryWithPassword(dataFormat, path); - return; } - - AlertDialog.Builder builder = new AlertDialog.Builder(this); - - int messageId; - - if (result == ImportExportResult.Success) { - builder.setTitle(R.string.importSuccessfulTitle); - messageId = R.string.importSuccessful; - } else { - builder.setTitle(R.string.importFailedTitle); - messageId = R.string.importFailed; - } - - final String message = getResources().getString(messageId); - - builder.setMessage(message); - builder.setNeutralButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }); - - builder.create().show(); } private void onExportComplete(ImportExportResult result, final Uri path) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - - int messageId; + PendingIntent pendingIntent = null; if (result == ImportExportResult.Success) { - builder.setTitle(R.string.exportSuccessfulTitle); - messageId = R.string.exportSuccessful; - } else { - builder.setTitle(R.string.exportFailedTitle); - messageId = R.string.exportFailed; + Intent sendIntent = new Intent(Intent.ACTION_SEND); + sendIntent.putExtra(Intent.EXTRA_STREAM, path); + sendIntent.setType("text/csv"); + + // set flag to give temporary permission to external app to use the FileProvider + sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + + pendingIntent = PendingIntent.getActivity(this, NOTIFICATION_EXPORT, sendIntent, PendingIntent.FLAG_CANCEL_CURRENT); } - final String message = getResources().getString(messageId); - - builder.setMessage(message); - builder.setNeutralButton(R.string.ok, (dialog, which) -> dialog.dismiss()); - - if (result == ImportExportResult.Success) { - final CharSequence sendLabel = ImportExportActivity.this.getResources().getText(R.string.sendLabel); - - builder.setPositiveButton(sendLabel, (dialog, which) -> { - Intent sendIntent = new Intent(Intent.ACTION_SEND); - sendIntent.putExtra(Intent.EXTRA_STREAM, path); - sendIntent.setType("text/csv"); - - // set flag to give temporary permission to external app to use the FileProvider - sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - - ImportExportActivity.this.startActivity(Intent.createChooser(sendIntent, - sendLabel)); - - dialog.dismiss(); - }); - } - - builder.create().show(); + endProgressNotification(false, result, pendingIntent); } } \ No newline at end of file diff --git a/app/src/main/java/protect/card_locker/ImportExportTask.java b/app/src/main/java/protect/card_locker/ImportExportTask.java index d54c91b4a..4a7502678 100644 --- a/app/src/main/java/protect/card_locker/ImportExportTask.java +++ b/app/src/main/java/protect/card_locker/ImportExportTask.java @@ -1,9 +1,8 @@ package protect.card_locker; import android.app.Activity; -import android.app.ProgressDialog; +import android.app.NotificationManager; import android.content.Context; -import android.content.DialogInterface; import android.util.Log; import java.io.IOException; @@ -12,6 +11,7 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; +import androidx.core.app.NotificationCompat; import protect.card_locker.async.CompatCallable; import protect.card_locker.importexport.DataFormat; import protect.card_locker.importexport.ImportExportResult; @@ -21,15 +21,13 @@ import protect.card_locker.importexport.MultiFormatImporter; public class ImportExportTask implements CompatCallable { private static final String TAG = "Catima"; - private Activity activity; - private boolean doImport; - private DataFormat format; + private final Activity activity; + private final boolean doImport; + private final DataFormat format; private OutputStream outputStream; private InputStream inputStream; - private char[] password; - private TaskCompleteListener listener; - - private ProgressDialog progress; + private final char[] password; + private final TaskCompleteListener listener; /** * Constructor which will setup a task for exporting to the given file @@ -60,11 +58,11 @@ public class ImportExportTask implements CompatCallable { } private ImportExportResult performImport(Context context, InputStream stream, DBHelper db, char[] password) { - ImportExportResult importResult = MultiFormatImporter.importData(context, db, stream, format, password); + ImportExportResult result = MultiFormatImporter.importData(context, db, stream, format, password); - Log.i(TAG, "Import result: " + importResult.name()); + Log.i(TAG, "Import result: " + result.name()); - return importResult; + return result; } private ImportExportResult performExport(Context context, OutputStream stream, DBHelper db, char[] password) { @@ -83,20 +81,6 @@ public class ImportExportTask implements CompatCallable { return result; } - public void onPreExecute() { - progress = new ProgressDialog(activity); - progress.setTitle(doImport ? R.string.importing : R.string.exporting); - - progress.setOnDismissListener(new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - ImportExportTask.this.stop(); - } - }); - - progress.show(); - } - protected ImportExportResult doInBackground(Void... nothing) { final DBHelper db = new DBHelper(activity); ImportExportResult result; @@ -111,15 +95,15 @@ public class ImportExportTask implements CompatCallable { } public void onPostExecute(Object castResult) { - listener.onTaskComplete((ImportExportResult) castResult, format); + ImportExportResult result = (ImportExportResult) castResult; + + listener.onTaskComplete(result, format); - progress.dismiss(); Log.i(TAG, (doImport ? "Import" : "Export") + " Complete"); } - protected void onCancelled() { - progress.dismiss(); - Log.i(TAG, (doImport ? "Import" : "Export") + " Cancelled"); + @Override + public void onPreExecute() { } protected void stop() { diff --git a/app/src/main/java/protect/card_locker/NotificationType.java b/app/src/main/java/protect/card_locker/NotificationType.java new file mode 100644 index 000000000..8d5e9b85e --- /dev/null +++ b/app/src/main/java/protect/card_locker/NotificationType.java @@ -0,0 +1,29 @@ +package protect.card_locker; + +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.Context; +import android.os.Build; + +public class NotificationType { + private final static String NOTIFICATION_IMPORT_EXPORT = "NOTIFICATION_IMPORT_EXPORT"; + + public static String getImportExportChannel(Context context) { + createNotificationChannel(context, NOTIFICATION_IMPORT_EXPORT, context.getString(R.string.importExport), context.getString(R.string.importExportDescription), NotificationManager.IMPORTANCE_HIGH); + + return NOTIFICATION_IMPORT_EXPORT; + } + + private static void createNotificationChannel(Context context, String channelId, CharSequence name, String description, int importance) { + // Create the NotificationType, but only on API 26+ because + // the NotificationType class is new and not in the support library + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationChannel channel = new NotificationChannel(channelId, name, importance); + channel.setDescription(description); + // Register the channel with the system; you can't change the importance + // or other notification behaviors after this + NotificationManager notificationManager = context.getSystemService(NotificationManager.class); + notificationManager.createNotificationChannel(channel); + } + } +} diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 51fa6e72e..523523d7c 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -106,9 +106,9 @@ Избиране чрез приложение Внасяне… Изнасяне… - Картите не могат да бъдат изнесени + Картите не могат да бъдат изнесени: %s Грешка при изнасяне - Картите не могат да бъдат внесени + Картите не могат да бъдат внесени: %s Грешка при внасяне Резултат от изнасяне Резултат от внасяне diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 44dbe96e0..26882b962 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -23,10 +23,10 @@ Zálohování karet vám umožní přesunout je do jiného zařízení. Importováno Import selhal - Nelze importovat karty + Nelze importovat karty: %s Exportovat Export selhal - Nelze exportovat karty + Nelze exportovat karty: %s Importuji… Exportuji… Udělit povolení externího úložiště pro import nebo export karet jako první diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 4c9c173cb..e4a1eff92 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -41,10 +41,10 @@ Hvis du sikkerhedskopierer dine kort, kan du flytte dem til en anden enhed. Importeret Import mislykkedes - Kunne ikke importere kort + Kunne ikke importere kort: %s Eksporteret Eksport mislykkedes - Kunne ikke eksportere kort + Kunne ikke eksportere kort: %s Importere… Eksportere… Mørk diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index c1b962e64..066555caa 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -32,10 +32,10 @@ Durch das Sichern deiner Karten kannst du sie auf ein anderes Gerät übertragen. Importiert Import fehlgeschlagen - Karten konnten nicht importiert werden + Karten konnten nicht importiert werden: %s Exportiert Export fehlgeschlagen - Karten konnten nicht exportiert werden + Karten konnten nicht exportiert werden: %s Importiere… Exportiere… Erlaube Speicherzugriff um Karten zu importieren oder exportieren diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 34295aa50..e9e4db2cc 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -28,10 +28,10 @@ Τα εφεδρικά δεδομένα σας δίνουν την δυνατότητα να μεταφέρετε τις κάρτες σας σε μία άλλη συσκευή. Εισαγωγή επιτυχής Εισαγωγή ανεπιτυχής - Δεν εισήχθει + Δεν εισήχθει: %s Εξαγωγή επιτυχής Εξαγωγή ανεπιτυχής - Δεν εξήχθη + Δεν εξήχθη: %s Γίνεται εισαγωγή του… Γίνεται εξαγωγή του… Δεν είναι δυνατή η εισαγωγή ή εξαγωγή καρτών χωρίς την άδεια πρόσβασης στον εξωτερικό χώρο αποθήκευσης diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index aa9e83e0c..4710dbd54 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -65,8 +65,8 @@ 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 + Ne povis eksporti kartoj: %s + Ne povis importi kartoj: %s Subtenanta supre vian kartoj permesas vin movi ilin al alia aparato. Ne eblis analizi la importado URI Ne eblis trovi karto diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 7651b0dae..59784adca 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -28,10 +28,10 @@ El respaldo le permite transferir sus tarjetas a otro dispositivo. Importado Falló la importación - No se han podido importar tarjetas + No se han podido importar tarjetas: %s Exportado Falló la exportación - No se han podido exportar las tarjetas + No se han podido exportar las tarjetas: %s Importando… Exportando… Otorgar permiso de almacenamiento para importar o exportar tarjetas diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 28590e201..5396b79a8 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -104,10 +104,10 @@ Tiedot kirjoitetaan valitsemaasi sijaintiin. Viedään… Tuodaan… - Kortteja ei voitu viedä + Kortteja ei voitu viedä: %s Vienti epäonnistui Vienti valmis - Kortteja ei voitu tuoda + Kortteja ei voitu tuoda: %s Tuonti epäonnistui Tuonti valmis Varmuuskopioimalla korttisi, voit siirtää ne toiseen laitteeseen. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 45e519d1a..4e241a425 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -28,10 +28,10 @@ Exporter vos cartes vous permet de les récupérer sur un autre appareil. Importé Échec de l\'import - Impossible d\'importer les cartes + Impossible d\'importer les cartes: %s Exporté Échec de l\'export - Impossible d\'exporter les cartes + Impossible d\'exporter les cartes: %s Import … Export … Veuillez autoriser l\'accès au stockage externe avant d\'importer/exporter les données diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index dd5d58835..df0b9d2b1 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -1,5 +1,5 @@ - + Ukloni iz favorita Pretraživanje Spremi @@ -38,7 +38,7 @@ Sigurnosno kopiranje kartica omogućuje vam da ih premjestite na drugi uređaj. Uvezeno Nije moguće uvesti - Nije moguće uvesti karte + Nije moguće uvesti karte: %s Izvezeno Oh Koristite drugu aplikaciju @@ -51,7 +51,7 @@ Koristite drugu aplikaciju Postavke Tamno - Nije moguće izvesti karte + Nije moguće izvesti karte: %s Uvoz… Uvoz iz datotečnog sustava Iz datotečnog sustava diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 917897a39..6993e6701 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -90,10 +90,10 @@ Ekspor Sudah diimpor Impor gagal - Tidak dapat mengimpor kartu + Tidak dapat mengimpor kartu: %s Sudah diekspor Ekspor gagal - Tidak dapat mengekspor kartu + Tidak dapat mengekspor kartu: %s Mengimpor… Mengekspor… Berikan izin penyimpanan eksternal untuk mengimpor atau mengekspor kartu terlebih dahulu diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 47f509910..cb2c69a96 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -33,10 +33,10 @@ Il backup delle carte ti consente di spostarle su un altro dispositivo. Importato Importazione fallita - Impossibile importare le carte + Impossibile importare le carte: %s Esportato Esportazione fallita - Impossibile esportare le carte + Impossibile esportare le carte: %s Importazione in corso… Esportazione in corso… Concedi l\'autorizzazione all\'archiviazione esterna per importare o esportare prima le carte diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 70da4619a..0c937ee28 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -92,7 +92,7 @@ カードをインポート/エクスポートするために外部ストレージへのアクセスを許可してください エクスポート中… インポート中… - カードをエクスポートできませんでした + カードをエクスポートできませんでした: %s エクスポートに失敗しました エクスポートしました カード番号に合わせる @@ -100,7 +100,7 @@ Voucher Vaultでエクスポートした vouchervault.jsonファイルを選択してください。 \nファイルがない場合、Voucher Vaultでファイルをエクスポートしてください。 Voucher Vaultからインポート - カードをインポートできません + カードをインポートできません: %s インポートに失敗しました インポートしました カードをバックアップすると、他のデバイスにカードを移すことができます。 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 5b2a49fa5..94873c78d 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -55,11 +55,11 @@ 외부 앱 사용 파일 시스템에서 파일을 선택합니다. 파일 시스템에서 가져오기 - 카드를 내보낼 수 없음 + 카드를 내보낼 수 없음: %s 다른 파일 관리자 또는 앱을 사용하여 파일을 엽니다. 내보내기 실패 내보내기 완료 - 카드를 가져올 수 없음 + 카드를 가져올 수 없음: %s 가져오기 실패 가져오기 완료 카드 ID를 입력하지 않음 diff --git a/app/src/main/res/values-lb/strings.xml b/app/src/main/res/values-lb/strings.xml index 87a2f27a2..dbe3f053c 100644 --- a/app/src/main/res/values-lb/strings.xml +++ b/app/src/main/res/values-lb/strings.xml @@ -22,7 +22,7 @@ Kaart Bréck Exportéieren Export fehlgeschlagen - Kaarten konnten net exportéiert ginn + Kaarten konnten net exportéiert ginn: %s Importéieren… Import aus dem Dateisystem Wielt eng bestëmmte Datei aus dem Dateisystem. @@ -59,7 +59,7 @@ Dee barcode-Typ kann net ugewise ginn. Et kann zu enger spéiderer Versioun vun der App ënnerstëtzt ginn. Jo Import fehlgeschlagen - Kaarten konnten net anere sproochen ginn + Kaarten konnten net anere sproochen ginn: %s Ausführende… D \' Donnéeë ginn op eng Plaz vun Hirer Wal geschriwwen. Benotzen Se eng beliebige App oder Hire bevorzugten Dateimanager, fir eng Datei ze opmaachen. diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index c7c7d3b6b..5ad1ee450 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -19,8 +19,8 @@ Neįvestas kortelės ID Importuoti/Exportuoti Exportuoti - Nepavyko importuoti kortelių - Nepavyko eksportuoti kortelių + Nepavyko importuoti kortelių: %s + Nepavyko eksportuoti kortelių: %s Importuoja… Eksportuoja… Pirmiausia suteikite išorinės saugyklos leidimą, kad galėtumėte importuoti arba eksportuoti korteles diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 624e75b80..b416411ae 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -1,5 +1,5 @@ - + Meklēšana Pievienot Noklikšķiniet uz pogas + plus, lai pievienotu karti, vai vispirms importējiet dažus no ⋮ izvēlnes. @@ -44,10 +44,10 @@ Jūsu Karšu dublēšana ļauj pārvietot tās uz citu ierīci. Importēts Neizdevās importēt - Nevarēja importēt kartes + Nevarēja importēt kartes: %s Eksports Eksports neizdevās - Nevarēja eksportēt kartes + Nevarēja eksportēt kartes: %s Imports… Eksports… Piešķiriet ārējai atmiņai atļauju vispirms importēt vai eksportēt kartes diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 41930b783..115d9f815 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -29,10 +29,10 @@ Sikkerhetskopiering av kort lar deg flytte dem til en annen enhet. Importert Kunne ikke importere - Klarte ikke å importere kort + Klarte ikke å importere kort: %s Eksportert Kunne ikke eksportere - Kunne ikke eksportere kort + Kunne ikke eksportere kort: %s Importerer… Exporterer… Innvilg lagringstilgang til eksternlager for å importere eller eksportere kort først diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 975d29962..e0cecebdc 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -34,10 +34,10 @@ Door je kaarten te back-uppen, kun je ze overzetten naar een ander apparaat. Importeren voltooid Importeren mislukt - Het importeren is mislukt + Het importeren is mislukt: %s Exporteren voltooid Exporteren mislukt - Het exporteren is mislukt + Het exporteren is mislukt: %s Bezig met importeren… Bezig met exporteren… Verleen het recht ‘externe opslag’ om kaarten te kunnen im- of exporteren diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml index 478044d5e..66ebf622d 100644 --- a/app/src/main/res/values-oc/strings.xml +++ b/app/src/main/res/values-oc/strings.xml @@ -2,9 +2,9 @@ Exportacion… Importacion… - Exportacion pas possibla + Exportacion pas possibla: %s Exportat - Importacion de vòstras cartas impossibla + Importacion de vòstras cartas impossibla: %s Fracàs de l’importacion Importat Exportar vòstras cartas vos permet de las recuperar sus un autre aparelh. diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index e7db30e27..293b5562e 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -33,10 +33,10 @@ Zarchiwizowane dane umożliwiają przeniesienie kart na inne urządzenie. Zaimportowano Import nie powiódł się - Nie udało się zaimportować + Nie udało się zaimportować: %s Wyeksportowano Eksport nie powiódł się - Nie udało się wyeksportować + Nie udało się wyeksportować: %s Importowanie… Eksportowanie… Najpierw przyznaj uprawnienia pamięci zewnętrznej do importowania lub eksportowania kart diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index d9b5831d0..aa9745c2f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -78,10 +78,10 @@ A cópia de segurança dos seus cartões permite-lhe movê-los para outro dispositivo. Importado A importação falhou - Não foi possível importar os cartões + Não foi possível importar os cartões: %s Exportado A exportação falhou - Não foi possível exportar os cartões + Não foi possível exportar os cartões: %s A importar… A exportar… Azul céu diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 2ec808a63..8d85b3fc8 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -35,9 +35,9 @@ Exportați Importat Importul a eșuat - Nu s-a putut importa carduri + Nu s-a putut importa carduri: %s Nu s-a introdus niciun ID de card - Nu s-a putut exporta carduri + Nu s-a putut exporta carduri: %s Importul… Exportul… Acordați mai întâi permisiunea de stocare externă pentru a importa sau exporta carduri diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 69893fb42..2fba28047 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -34,10 +34,10 @@ Резервное копирование карт позволяет перенести их на другое устройство. Импортировано Импорт не выполнен - Невозможно импортировать карты + Невозможно импортировать карты: %s Экспортировано Экспорт не выполнен - Невозможно экспортировать карты + Невозможно экспортировать карты: %s Импорт… Экспорт… Импорт или экспорт невозможен без разрешения на доступ к хранилищу diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 6b73c56d4..b23c85b83 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -28,10 +28,10 @@ Zálohovanie dát Vám umožní presunúť Vaše uložené karty na iné zariadenie. Import bol úspešný Import zlyhal - Zlyhal import + Zlyhal import: %s Export bol úspešný Export zlyhal - Zlyhal export + Zlyhal export: %s Importujem… Exportujem… Nie je možné importovať a exportovať karty bez prístupu k externému úložisku diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index b3309b865..33b1e6749 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -28,10 +28,10 @@ Varnostna kopija omogoča varen prenos kartic na druge naprave. Uvoz je bil uspešen Uvoz ni uspel - Napaka pri uvozu + Napaka pri uvozu: %s Izvoz je uspel Izvoz ni uspel - Napaka pri izvozu + Napaka pri izvozu: %s Uvažanje… Izvažanje… Izvažanje in uvažanje je nemogoče brez omogočenega dostopa do zunanje shrambe diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 7b31dc794..4f470369a 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -99,8 +99,8 @@ Importera från filsystem Exporterar… Importerar… - Kunde inte exportera kort - Kunde inte importera kort + Kunde inte exportera kort: %s + Kunde inte importera kort: %s Importen lyckades Importen misslyckades Säkerhetskopiering av dina kort låter dig flytta dem till en annan enhet. diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index e29170a7c..80e47b41b 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -134,10 +134,10 @@ Kartları içe veya dışa aktarmak için önce harici depolama izni verin Dışa aktarılıyor… İçe aktarılıyor… - Kartlar dışa aktarılamadı + Kartlar dışa aktarılamadı: %s Dışa aktarılamadı Dışa aktarıldı - Kartlar içe aktarılamadı + Kartlar içe aktarılamadı: %s İçe aktarılamadı İçe aktarıldı Kartlarınızı yedeklemek, onları başka bir aygıta taşımanıza olanak tanır. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 62233b163..da559f2c7 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -111,10 +111,10 @@ Надайте дозвіл на доступ до пам\'яті пристрою для імпорту чи експорту карток Експортуємо… Імпортуємо… - Неможливо експортувати картки + Неможливо експортувати картки: %s Помилка експорту Експортовано - Неможливо імпортувати картки + Неможливо імпортувати картки: %s Помилка імпорту Імпортовано Створення резервної копії ваших карток дозволяє перемістити їх до іншого пристрою. diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 37ac3e584..276906ef7 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -99,10 +99,10 @@ 在导入导出前需要获得外部储存权限 导出中… 导入中… - 无法导出卡片 + 无法导出卡片: %s 导出失败 导出成功 - 无法导入卡片 + 无法导入卡片: %s 导入失败 导入成功 备份卡片后你可以让你将它们转移到其他设备。 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 31943016c..d0bbd814b 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -56,7 +56,7 @@ 逾期日期 逾期於:%s 已逾期:%s - 無法匯出卡片 + 無法匯出卡片: %s 匯出失敗 匯出中… 匯出 @@ -73,7 +73,7 @@ 幫助翻譯本程式 匯入/匯出 匯入失敗 - 無法匯入卡片 + 無法匯入卡片: %s 匯入中… 已匯入 我想要分享些卡片給你 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2bb4d51c8..b09771c79 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -60,10 +60,10 @@ Backing up your cards allows you to move them to another device. Imported Import failed - Could not import cards + Could not import cards: %s Exported Export failed - Could not export cards + Could not export cards: %s Importing… Exporting… Grant external storage permission to import or export cards first @@ -255,4 +255,7 @@ Report Error Show details Hide details + Unknown failure + Incorrect password + Notifications about importing or exporting card data \ No newline at end of file