Updated fix for Issue #1116

This commit is contained in:
Manoj Khanna 2015-03-11 19:55:31 +05:30
parent 82a2a76a33
commit bb018b8fc1
23 changed files with 163 additions and 101 deletions

View File

@ -36,7 +36,6 @@ import org.sufficientlysecure.keychain.pgp.SignEncryptParcel;
import org.sufficientlysecure.keychain.ui.dialog.DeleteFileDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences;
import org.sufficientlysecure.keychain.util.ShareHelper;
import java.util.ArrayList;
@ -177,16 +176,14 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi
}
@Override
public void onEncryptSuccess(SignEncryptResult result) {
public void onEncryptSuccess(final SignEncryptResult result) {
if (mDeleteAfterEncrypt) {
for (Uri inputUri : mInputUris) {
DeleteFileDialogFragment deleteFileDialog = DeleteFileDialogFragment.newInstance(inputUri);
deleteFileDialog.show(getSupportFragmentManager(), "deleteDialog");
}
mInputUris.clear();
notifyUpdate();
}
final Uri[] inputUris = mInputUris.toArray(new Uri[mInputUris.size()]);
DeleteFileDialogFragment deleteFileDialog = DeleteFileDialogFragment.newInstance(inputUris);
deleteFileDialog.setOnDeletedListener(new DeleteFileDialogFragment.OnDeletedListener() {
@Override
public void onDeleted() {
if (mShareAfterEncrypt) {
// Share encrypted message/file
startActivity(sendWithChooserExcludingEncrypt());
@ -196,6 +193,22 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi
}
}
});
deleteFileDialog.show(getSupportFragmentManager(), "deleteDialog");
mInputUris.clear();
notifyUpdate();
} else {
if (mShareAfterEncrypt) {
// Share encrypted message/file
startActivity(sendWithChooserExcludingEncrypt());
} else {
// Save encrypted file
result.createNotify(EncryptFilesActivity.this).show();
}
}
}
@Override
protected SignEncryptParcel createEncryptBundle() {
// fill values for this action

View File

@ -114,6 +114,13 @@ public class EncryptFilesFragment extends Fragment implements EncryptActivityInt
return;
}
if (mEncryptInterface.getInputUris().contains(inputUri)) {
Notify.showNotify(getActivity(),
getActivity().getString(R.string.error_file_added_already, FileHelper.getFilename(getActivity(), inputUri)),
Notify.Style.ERROR);
return;
}
mEncryptInterface.getInputUris().add(inputUri);
mEncryptInterface.notifyUpdate();
mSelectedFiles.requestFocus();

View File

@ -18,7 +18,6 @@
package org.sufficientlysecure.keychain.ui.dialog;
import android.app.Dialog;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.net.Uri;
import android.os.Build;
@ -34,18 +33,22 @@ import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.Log;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
public class DeleteFileDialogFragment extends DialogFragment {
private static final String ARG_DELETE_URI = "delete_uri";
private static final String ARG_DELETE_URIS = "delete_uris";
private OnDeletedListener onDeletedListener;
/**
* Creates new instance of this delete file dialog fragment
*/
public static DeleteFileDialogFragment newInstance(Uri deleteUri) {
public static DeleteFileDialogFragment newInstance(Uri... deleteUris) {
DeleteFileDialogFragment frag = new DeleteFileDialogFragment();
Bundle args = new Bundle();
args.putParcelable(ARG_DELETE_URI, deleteUri);
args.putParcelableArray(ARG_DELETE_URIS, deleteUris);
frag.setArguments(args);
@ -59,12 +62,20 @@ public class DeleteFileDialogFragment extends DialogFragment {
public Dialog onCreateDialog(Bundle savedInstanceState) {
final FragmentActivity activity = getActivity();
final Uri deleteUri = getArguments().getParcelable(ARG_DELETE_URI);
final String deleteFilename = FileHelper.getFilename(getActivity(), deleteUri);
final Uri[] deleteUris = (Uri[]) getArguments().getParcelableArray(ARG_DELETE_URIS);
final StringBuilder deleteFileNames = new StringBuilder();
//Retrieving file names after deletion gives unexpected results
final HashMap<Uri, String> deleteFileNameMap = new HashMap<>();
for (Uri deleteUri : deleteUris) {
String deleteFileName = FileHelper.getFilename(getActivity(), deleteUri);
deleteFileNames.append('\n').append(deleteFileName);
deleteFileNameMap.put(deleteUri, deleteFileName);
}
CustomAlertDialogBuilder alert = new CustomAlertDialogBuilder(activity);
alert.setMessage(this.getString(R.string.file_delete_confirmation, deleteFilename));
alert.setMessage(this.getString(R.string.file_delete_confirmation, deleteFileNames.toString()));
alert.setPositiveButton(R.string.btn_delete, new DialogInterface.OnClickListener() {
@ -72,43 +83,56 @@ public class DeleteFileDialogFragment extends DialogFragment {
public void onClick(DialogInterface dialog, int id) {
dismiss();
// NOTE: Use Toasts, not Snackbars. When sharing to another application snackbars
// would not show up!
ArrayList<String> failedFileNameList = new ArrayList<>();
for (Uri deleteUri : deleteUris) {
// Use DocumentsContract on Android >= 4.4
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
try {
if (DocumentsContract.deleteDocument(getActivity().getContentResolver(), deleteUri)) {
Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful,
deleteFilename), Toast.LENGTH_LONG).show();
return;
continue;
}
} catch (UnsupportedOperationException e) {
} catch (Exception e) {
Log.d(Constants.TAG, "Catched UnsupportedOperationException, can happen when delete is not supported!", e);
}
}
try {
if (getActivity().getContentResolver().delete(deleteUri, null, null) > 0) {
Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful,
deleteFilename), Toast.LENGTH_LONG).show();
return;
continue;
}
} catch (UnsupportedOperationException e) {
} catch (Exception e) {
Log.d(Constants.TAG, "Catched UnsupportedOperationException, can happen when delete is not supported!", e);
}
// some Uri's a ContentResolver fails to delete is handled by the java.io.File's delete
// via the path of the Uri
if (new File(deleteUri.getPath()).delete()) {
Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful,
deleteFilename), Toast.LENGTH_LONG).show();
return;
continue;
}
// Note: We can't delete every file...
Toast.makeText(getActivity(), getActivity().getString(R.string.error_file_delete_failed,
deleteFilename), Toast.LENGTH_LONG).show();
failedFileNameList.add(deleteFileNameMap.get(deleteUri));
}
StringBuilder failedFileNames = new StringBuilder();
if (!failedFileNameList.isEmpty()) {
for (String failedFileName : failedFileNameList) {
failedFileNames.append('\n').append(failedFileName);
}
failedFileNames.append('\n').append(getActivity().getString(R.string.error_file_delete_failed));
}
// NOTE: Use Toasts, not Snackbars. When sharing to another application snackbars
// would not show up!
Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful,
deleteUris.length - failedFileNameList.size(), deleteUris.length, failedFileNames.toString()),
Toast.LENGTH_LONG).show();
if (onDeletedListener != null) {
onDeletedListener.onDeleted();
}
}
});
alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@ -120,4 +144,18 @@ public class DeleteFileDialogFragment extends DialogFragment {
return alert.show();
}
public void setOnDeletedListener(OnDeletedListener onDeletedListener) {
this.onDeletedListener = onDeletedListener;
}
/**
* Callback for performing tasks after the deletion of files
*/
public interface OnDeletedListener {
public void onDeleted();
}
}

View File

@ -173,7 +173,6 @@
<string name="pin_for">Zadat PIN pro \'%s\'</string>
<string name="yubikey_pin_for">Zadejte PIN pro přístup k YubiKey pro \'%s\'</string>
<string name="nfc_text">Přidržte YubiKey u zadní strany vašeho přístroje.</string>
<string name="file_delete_confirmation">Chcete opravdu smazat\n%s?</string>
<string name="no_file_selected">Nejprve vyberte soubor.</string>
<string name="encrypt_sign_successful">Úspěšně podepsáno a/nebo zašifrováno.</string>
<string name="encrypt_sign_clipboard_successful">Úspěšně podepsání a/nebo zašifrováno do schránky.</string>
@ -507,6 +506,7 @@
<string name="error_no_encrypt_subkey">Není dostupný šifrovací podklíč!</string>
<string name="contact_show_key">Zobrazit klíč (%s)</string>
<string name="swipe_to_update">Potáhnout dolů pro aktualizaci z keyserveru</string>
<string name="file_delete_successful"></string>
<!--Passphrase wizard-->
<!--TODO: rename all the things!-->
<!--<string name="enter_passphrase_twice">Enter passphrase twice</string>-->

View File

@ -190,7 +190,6 @@
<string name="pin_for">PIN für \'%s\' eingeben</string>
<string name="yubikey_pin_for">PIN für Zugriff auf Yubikey für \'%s\' eingeben</string>
<string name="nfc_text">Halten Sie den YubiKey gegen die Rückseite Ihres Geräts.</string>
<string name="file_delete_confirmation">%s wirklich löschen?</string>
<string name="no_file_selected">Zuerst eine Datei auswählen.</string>
<string name="encrypt_sign_successful">Erfolgreich signiert und/oder verschlüsselt.</string>
<string name="encrypt_sign_clipboard_successful">Erfolgreich in die Zwischenablage signiert und/oder verschlüsselt.</string>
@ -1098,4 +1097,5 @@
<string name="nfc_write_succesful">Erfolgreich auf den NFC-Tag geschrieben</string>
<string name="unlocked">Entsperrt</string>
<string name="nfc_settings">Einstellungen</string>
<string name="file_delete_successful"></string>
</resources>

View File

@ -194,7 +194,6 @@
<string name="pin_for">Introduzca el PIN para \'%s\'</string>
<string name="yubikey_pin_for">Introduzca el PIN para acceder a la YubiKey para \'%s\'</string>
<string name="nfc_text">Sostenga la YubiKey contra el reverso de su dispositivo.</string>
<string name="file_delete_confirmation">¿Está seguro de que quiere eliminar\n%s?</string>
<string name="no_file_selected">Selecciona un archivo antes.</string>
<string name="encrypt_sign_successful">Firmado y/o cifrado con éxito.</string>
<string name="encrypt_sign_clipboard_successful">Firmado y/o cifrado del portapapeles con éxito.</string>
@ -1145,4 +1144,5 @@
<string name="nfc_write_succesful">Se escribió con éxito en la etiqueta NFC</string>
<string name="unlocked">Desbloqueado</string>
<string name="nfc_settings">Configuración</string>
<string name="file_delete_successful"></string>
</resources>

View File

@ -61,6 +61,8 @@
<string name="wrong_passphrase">Vale salasõne</string>
<string name="passphrases_do_not_match">Salasõned ei ühti.</string>
<string name="passphrase_for_symmetric_encryption">Sümmeetriline krüpteering</string>
<string name="file_delete_successful"></string>
<string name="file_delete_confirmation"></string>
<!--errors
no punctuation, all lowercase,
they will be put after "error_message", e.g. "Error: file not found"-->

View File

@ -379,4 +379,6 @@
<string name="nfc_title">NFC</string>
<!--<string name="nfc_text">Please place a NFC tag near your device</string>-->
<string name="nfc_settings">Ezarpenak</string>
<string name="file_delete_successful"></string>
<string name="file_delete_confirmation"></string>
</resources>

View File

@ -169,6 +169,8 @@
<string name="passphrase_for_symmetric_encryption">Symmetrinen salaus.</string>
<string name="passphrase_for">Syötä salasana \'%s\':lle</string>
<string name="pin_for">Syötä PIN \'%s\':lle</string>
<string name="file_delete_successful"></string>
<string name="file_delete_confirmation"></string>
<!--errors
no punctuation, all lowercase,
they will be put after "error_message", e.g. "Error: file not found"-->

View File

@ -194,7 +194,6 @@
<string name="pin_for">Saisir le NIP pour « %s »</string>
<string name="yubikey_pin_for">Saisir le NIP pour accéder à la Yubikey pour « %s »</string>
<string name="nfc_text">Tenez la YubiKey contre le dos de votre appareil.</string>
<string name="file_delete_confirmation">Êtes-vous certain de vouloir supprimer\n%s?</string>
<string name="no_file_selected">Choisir d\'abord un fichier.</string>
<string name="encrypt_sign_successful">Signé et/ou chiffré avec succès.</string>
<string name="encrypt_sign_clipboard_successful">Signé et/ou chiffré vers le presse-papiers avec succès.</string>
@ -1136,4 +1135,5 @@
<string name="nfc_write_succesful">Écrit avec succès sur la balise NFC</string>
<string name="unlocked">Déverrouillé</string>
<string name="nfc_settings">Paramètres</string>
<string name="file_delete_successful"></string>
</resources>

View File

@ -164,7 +164,6 @@
<string name="passphrase_must_not_be_empty">Si prega di inserire una frase di accesso.</string>
<string name="passphrase_for_symmetric_encryption">Codifica Simmetrica.</string>
<string name="passphrase_for">Inserisci la frase di accesso per \'%s\'</string>
<string name="file_delete_confirmation">Sei sicuro di voler eliminare\n%s?</string>
<string name="no_file_selected">Seleziona un file prima.</string>
<string name="encrypt_sign_successful">Firmato e/o codificato con successo.</string>
<string name="encrypt_sign_clipboard_successful">Firmato e/o codificato con successo negli appunti.</string>
@ -715,6 +714,7 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars
<string name="error_no_file_selected">Seleziona almeno un file da codificare!</string>
<string name="error_multi_not_supported">Il salvataggio di più file non è supportato. Questa è una limitazione corrente di Android.</string>
<string name="key_colon">Chiave:</string>
<string name="file_delete_successful"></string>
<!--Passphrase wizard-->
<!--TODO: rename all the things!-->
<!--<string name="enter_passphrase_twice">Enter passphrase twice</string>-->

View File

@ -192,8 +192,6 @@
<string name="pin_for">\'%s\' にPINを入力してください</string>
<string name="yubikey_pin_for">\'%s\' の Yubikey にアクセスするためのPINを入力してください</string>
<string name="nfc_text">あなたのデバイスの背面にYubiKeyを固定してください。</string>
<string name="file_delete_confirmation">%s
を削除してもかまいませんか?</string>
<string name="no_file_selected">最初にファイルを選択してください。</string>
<string name="encrypt_sign_successful">署名/暗号化に成功しました。</string>
<string name="encrypt_sign_clipboard_successful">クリップボードの中身の署名/暗号化に成功しました。</string>
@ -1092,4 +1090,5 @@
<string name="nfc_write_succesful">NFCタグに書けました!</string>
<string name="unlocked">アンロック</string>
<string name="nfc_settings">設定</string>
<string name="file_delete_successful"></string>
</resources>

View File

@ -204,8 +204,6 @@
<string name="pin_for">Voer PIN in voor \'%s\'</string>
<string name="yubikey_pin_for">Voer PIN in om toegang te verkrijgen tot YubiKey voor \'%s\'</string>
<string name="nfc_text">Hou YubiKey tegen de achterkant van je toestel</string>
<string name="file_delete_confirmation">Ben je zeker dat je %s wil verwijderen?</string>
<string name="file_delete_successful">\'%s\' is verwijderd.</string>
<string name="no_file_selected">Selecteer eerst een bestand.</string>
<string name="encrypt_sign_successful">Succesvol gesigneerd en/of gecodeerd.</string>
<string name="encrypt_sign_clipboard_successful">Succesvol gesigneerd en/of gecodeerd naar klembord.</string>
@ -239,7 +237,6 @@
<!--errors
no punctuation, all lowercase,
they will be put after "error_message", e.g. "Error: file not found"-->
<string name="error_file_delete_failed">Verwijderen van \'%s\' mislukt. Gelieve dit handmatig te doen!</string>
<string name="error_file_not_found">bestand niet gevonden</string>
<string name="error_no_secret_key_found">geen geschikte privésleutel gevonden</string>
<string name="error_external_storage_not_ready">externe opslag niet gereed</string>
@ -1159,4 +1156,5 @@
<string name="nfc_write_succesful">Succesvol geschreven op NFC-tag</string>
<string name="unlocked">Ontgrendeld</string>
<string name="nfc_settings">Instellingen</string>
<string name="file_delete_successful"></string>
</resources>

View File

@ -179,7 +179,6 @@
<string name="passphrase_for">Podaj hasło dla \'%s\'</string>
<string name="pin_for">Wpisz PIN dla \'%s\'</string>
<string name="nfc_text">Trzymaj YubiKey z tyłu Twojego urządzenia.</string>
<string name="file_delete_confirmation">Czy jesteś pewny, że chcesz usunąć\n%s?</string>
<string name="no_file_selected">Najpierw wskaż plik.</string>
<string name="encrypt_sign_successful">Pomyślnie podpisano i/lub zaszyfrowano.</string>
<string name="encrypt_sign_clipboard_successful">Pomyslnie podpisano i/lub zaszyfrowano do schowka.</string>
@ -657,6 +656,7 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw
<string name="error_no_file_selected">Wybierz przynajmniej jeden plik, aby szyfrować!</string>
<string name="key_colon">Klucz:</string>
<string name="btn_start_exchange">Rozpocznij wymianę</string>
<string name="file_delete_successful"></string>
<!--Passphrase wizard-->
<!--TODO: rename all the things!-->
<!--<string name="enter_passphrase_twice">Enter passphrase twice</string>-->

View File

@ -192,7 +192,6 @@
<string name="yubikey_pin_for">Введите PIN для доступа к YubiKey для
\'%s\'</string>
<string name="nfc_text">Держите YubiKey возле задней части вашего устройства.</string>
<string name="file_delete_confirmation">Вы уверены, что хотите удалить\n%s?</string>
<string name="no_file_selected">Сначала выберите файл.</string>
<string name="encrypt_sign_successful">Успешно подписано и/или зашифровано.</string>
<string name="encrypt_sign_clipboard_successful">Успешно подписано и/или зашифровано в буфер обмена.</string>
@ -811,4 +810,5 @@
<!--<string name="nfc_text">Please place a NFC tag near your device</string>-->
<string name="unlocked">Разблокирован</string>
<string name="nfc_settings">Настройки</string>
<string name="file_delete_successful"></string>
</resources>

View File

@ -168,7 +168,6 @@
<string name="passphrase_must_not_be_empty">Vnesite geslo.</string>
<string name="passphrase_for_symmetric_encryption">Simetrično šifriranje.</string>
<string name="passphrase_for">Vnesite geslo za \'%s\'</string>
<string name="file_delete_confirmation">Ste prepričani, da želite izbrisati\n%s?</string>
<string name="no_file_selected">Najprej izberite datoteko.</string>
<string name="encrypt_sign_successful">Uspešno podpisano in/ali šifrirano.</string>
<string name="encrypt_sign_clipboard_successful">Uspešno podpisano in/ali šifrirano ter poslano v odložišče.</string>
@ -479,6 +478,7 @@
<string name="error_no_encrypt_subkey">Ni nobenega podključa za šifriranje!</string>
<string name="contact_show_key">Prikaži ključ (%s)</string>
<string name="key_colon">Ključ:</string>
<string name="file_delete_successful"></string>
<!--Passphrase wizard-->
<!--TODO: rename all the things!-->
<!--<string name="enter_passphrase_twice">Enter passphrase twice</string>-->

View File

@ -204,8 +204,6 @@
<string name="pin_for">Унесите ПИН за „%s“</string>
<string name="yubikey_pin_for">Унесите ПИН за приступ Јубикључу за „%s“</string>
<string name="nfc_text">Држите Јубикључ на полеђини вашег уређаја.</string>
<string name="file_delete_confirmation">Желите ли заиста да обришете\n%s?</string>
<string name="file_delete_successful">Брисање је успело.</string>
<string name="no_file_selected">Најпре изаберите фајл.</string>
<string name="encrypt_sign_successful">Потписивање и/или шифровање је успело.</string>
<string name="encrypt_sign_clipboard_successful">Потписивање и/или шифровање на клипборд је успело.</string>
@ -240,7 +238,6 @@
<!--errors
no punctuation, all lowercase,
they will be put after "error_message", e.g. "Error: file not found"-->
<string name="error_file_delete_failed">брисање „%s“ није успело</string>
<string name="error_file_not_found">фајл није нађен</string>
<string name="error_no_secret_key_found">одговарајући тајни кључ није нађен</string>
<string name="error_external_storage_not_ready">спољашње складиште није спремно</string>
@ -1145,4 +1142,5 @@
<string name="nfc_write_succesful">Успешно уписах на НФЦ ознаку</string>
<string name="unlocked">Откључан</string>
<string name="nfc_settings">Поставке</string>
<string name="file_delete_successful"></string>
</resources>

View File

@ -178,7 +178,6 @@
<string name="pin_for">Ange PIN för \'%s\'</string>
<string name="yubikey_pin_for">Ange PIN för att få åtkomst till YubiKey för \'%s\'</string>
<string name="nfc_text">Håll YubiKey mot baksidan av din enhet.</string>
<string name="file_delete_confirmation">Vill du verkligen radera\n%s?</string>
<string name="no_file_selected">Välj en fil först.</string>
<string name="encrypt_sign_successful">Signerades och/eller krypterades.</string>
<string name="encrypt_sign_clipboard_successful">Signerades och/eller krypterades till urklipp.</string>
@ -864,4 +863,5 @@
<string name="no_nfc_support">Denna enhet stöder inte NFC</string>
<string name="unlocked">Upplåst</string>
<string name="nfc_settings">Inställningar</string>
<string name="file_delete_successful"></string>
</resources>

View File

@ -167,7 +167,6 @@
<string name="passphrase_for_symmetric_encryption">Simetrik şifreleme.</string>
<string name="passphrase_for">\'%s\' için bir parola girin</string>
<string name="nfc_text">YubiKey\'inizi cihazınızın arkasında tutun.</string>
<string name="file_delete_confirmation">Silmek istediğinize emin misiniz\n%s?</string>
<string name="no_file_selected">Önce bir dosya seçin.</string>
<string name="encrypt_sign_successful">Başarıyla imzalandı ve/veya şifrelendi.</string>
<string name="encrypt_sign_clipboard_successful">Kopyalama önbelleğine başarıyla imzalandı ve/veya şifrelendi.</string>
@ -509,6 +508,7 @@
<string name="error_multi_not_supported">Birden çok dosyanın kaydedilmesi desteklenmiyor. Bu şu anki Android\'in bir kısıtlamasıdır.</string>
<string name="key_colon">Anahtar:</string>
<string name="exchange_description">Anahtar değiş tokuşu başlatmak için sağ taraftan katılımcıların sayısını seçin ve \"Değiş tokuşu başlat\" tuşuna tıklayın.\n\nSadece istenilen katılımcıların değişim işleminde olduğundan ve parmak izlerinin doğruluğundan emin olmak için size iki soru daha sorulacak.</string>
<string name="file_delete_successful"></string>
<!--Passphrase wizard-->
<!--TODO: rename all the things!-->
<!--<string name="enter_passphrase_twice">Enter passphrase twice</string>-->

View File

@ -168,7 +168,6 @@
<string name="passphrase_must_not_be_empty">Будь ласка, введіть парольну фразу.</string>
<string name="passphrase_for_symmetric_encryption">Симетричне шифрування.</string>
<string name="passphrase_for">Введіть парольну фразу для \'%s\'</string>
<string name="file_delete_confirmation">Ви справді хочете вилучити\n%s?</string>
<string name="no_file_selected">Виберіть спершу файл.</string>
<string name="encrypt_sign_successful">Успішно підписано та/або перевірено.</string>
<string name="encrypt_sign_clipboard_successful">Успішно підписано та/або зашифровано до буфера обміну.</string>
@ -589,6 +588,7 @@
<string name="can_sign_not">не можна підписати</string>
<string name="error_no_encrypt_subkey">Жодний підключ шифрування недоступний!</string>
<string name="contact_show_key">Показати ключ (%s)</string>
<string name="file_delete_successful"></string>
<!--Passphrase wizard-->
<!--TODO: rename all the things!-->
<!--<string name="enter_passphrase_twice">Enter passphrase twice</string>-->

View File

@ -139,7 +139,6 @@
<string name="passphrases_do_not_match">口令不相符。</string>
<string name="passphrase_must_not_be_empty">請輸入口令。</string>
<string name="passphrase_for_symmetric_encryption">對稱加密。</string>
<string name="file_delete_confirmation">你確定要刪除\n%s</string>
<string name="no_file_selected">請先選擇檔案。</string>
<string name="encrypt_sign_successful">成功簽名並/或加密。</string>
<string name="encrypt_sign_clipboard_successful">成功簽名並/或加密到剪貼簿。</string>
@ -422,6 +421,7 @@
<string name="error_no_encrypt_subkey">沒有可供加密的子金鑰!</string>
<string name="info_no_manual_account_creation">請不要自行建立OpenKeychain帳戶。\n更多資訊請參考說明。</string>
<string name="exchange_description">要發起金鑰交換,先在右邊選擇與會人數,然後點選〝開始交換〞。\n\n接下來會詢問你兩個問題以確保會議成員與交換的指紋是正確的。</string>
<string name="file_delete_successful"></string>
<!--Passphrase wizard-->
<!--TODO: rename all the things!-->
<!--<string name="enter_passphrase_twice">Enter passphrase twice</string>-->

View File

@ -195,6 +195,8 @@
<string name="api_select_pub_keys_text">请重审收件人列表</string>
<!--Share-->
<string name="share_nfc_dialog">使用NFC分享</string>
<string name="file_delete_successful"></string>
<string name="file_delete_confirmation"></string>
<!--Key list-->
<!--Key view-->
<!--Key trust-->

View File

@ -222,8 +222,8 @@
<string name="pin_for">"Enter PIN for '%s'"</string>
<string name="yubikey_pin_for">"Enter PIN to access YubiKey for '%s'"</string>
<string name="nfc_text">"Hold YubiKey against the back of your device."</string>
<string name="file_delete_confirmation">"Are you sure you want to delete\n%s?"</string>
<string name="file_delete_successful">"'%s' has been deleted."</string>
<string name="file_delete_confirmation">"Are you sure you want to delete the following files?%s"</string>
<string name="file_delete_successful">"%1$d out of %2$d files have been deleted.%3$s"</string>
<string name="no_file_selected">"Select a file first."</string>
<string name="encrypt_sign_successful">"Successfully signed and/or encrypted."</string>
<string name="encrypt_sign_clipboard_successful">"Successfully signed and/or encrypted to clipboard."</string>
@ -264,7 +264,8 @@
no punctuation, all lowercase,
they will be put after "error_message", e.g. "Error: file not found"
-->
<string name="error_file_delete_failed">"Deleting '%s' failed. Please do this manually!"</string>
<string name="error_file_delete_failed">"are not deleted."</string>
<string name="error_file_added_already">%s has been added already.</string>
<string name="error_file_not_found">"file not found"</string>
<string name="error_no_secret_key_found">"no suitable secret key found"</string>
<string name="error_external_storage_not_ready">"external storage not ready"</string>