diff options
Diffstat (limited to 'OpenKeychain/src/main/java')
4 files changed, 50 insertions, 43 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ExportOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ExportOperation.java index 82b72c1fc..56ed4ef58 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ExportOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ExportOperation.java @@ -27,12 +27,14 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Proxy; +import java.util.Collections; import java.util.concurrent.atomic.AtomicBoolean; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.support.annotation.NonNull; +import android.text.TextUtils; import org.spongycastle.bcpg.ArmoredOutputStream; import org.sufficientlysecure.keychain.Constants; @@ -211,21 +213,21 @@ public class ExportOperation extends BaseOperation<ExportKeyringParcel> { Cursor cursor = null; try { - String selection = null, ids[] = null; + String selection = null, selectionArgs[] = null; if (masterKeyIds != null) { - // generate placeholders and string selection args - ids = new String[masterKeyIds.length]; - StringBuilder placeholders = new StringBuilder("?"); + // convert long[] to String[] + selectionArgs = new String[masterKeyIds.length]; for (int i = 0; i < masterKeyIds.length; i++) { - ids[i] = Long.toString(masterKeyIds[i]); - if (i != 0) { - placeholders.append(",?"); - } + selectionArgs[i] = Long.toString(masterKeyIds[i]); } + // generates ?,?,? as placeholders for selectionArgs + String placeholders = TextUtils.join(",", + Collections.nCopies(masterKeyIds.length, "?")); + // put together selection string - selection = Tables.KEY_RINGS_PUBLIC + "." + KeyRings.MASTER_KEY_ID + selection = Tables.KEYS + "." + KeyRings.MASTER_KEY_ID + " IN (" + placeholders + ")"; } @@ -233,7 +235,7 @@ public class ExportOperation extends BaseOperation<ExportKeyringParcel> { KeyRings.buildUnifiedKeyRingsUri(), new String[]{ KeyRings.MASTER_KEY_ID, KeyRings.PUBKEY_DATA, KeyRings.PRIVKEY_DATA, KeyRings.HAS_ANY_SECRET - }, selection, ids, Tables.KEYS + "." + KeyRings.MASTER_KEY_ID + }, selection, selectionArgs, Tables.KEYS + "." + KeyRings.MASTER_KEY_ID ); if (cursor == null || !cursor.moveToFirst()) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java index ac66bd097..af99f01c9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java @@ -88,8 +88,8 @@ public class OpenPgpService extends RemoteService { boolean duplicateUserIdsCheck = false; ArrayList<Long> keyIds = new ArrayList<>(); - ArrayList<String> missingUserIds = new ArrayList<>(); - ArrayList<String> duplicateUserIds = new ArrayList<>(); + ArrayList<String> missingEmails = new ArrayList<>(); + ArrayList<String> duplicateEmails = new ArrayList<>(); if (!noUserIdsCheck) { for (String email : encryptionUserIds) { // try to find the key for this specific email @@ -102,13 +102,13 @@ public class OpenPgpService extends RemoteService { keyIds.add(id); } else { missingUserIdsCheck = true; - missingUserIds.add(email); + missingEmails.add(email); Log.d(Constants.TAG, "user id missing"); } - // another entry for this email -> too keys with the same email inside user id + // another entry for this email -> two keys with the same email inside user id if (cursor != null && cursor.moveToNext()) { duplicateUserIdsCheck = true; - duplicateUserIds.add(email); + duplicateEmails.add(email); // also pre-select long id = cursor.getLong(cursor.getColumnIndex(KeyRings.MASTER_KEY_ID)); @@ -136,8 +136,8 @@ public class OpenPgpService extends RemoteService { intent.setAction(RemoteServiceActivity.ACTION_SELECT_PUB_KEYS); intent.putExtra(RemoteServiceActivity.EXTRA_SELECTED_MASTER_KEY_IDS, keyIdsArray); intent.putExtra(RemoteServiceActivity.EXTRA_NO_USER_IDS_CHECK, noUserIdsCheck); - intent.putExtra(RemoteServiceActivity.EXTRA_MISSING_USER_IDS, missingUserIds); - intent.putExtra(RemoteServiceActivity.EXTRA_DUPLICATE_USER_IDS, duplicateUserIds); + intent.putExtra(RemoteServiceActivity.EXTRA_MISSING_EMAILS, missingEmails); + intent.putExtra(RemoteServiceActivity.EXTRA_DUPLICATE_EMAILS, duplicateEmails); intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data); PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0, diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/RemoteServiceActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/RemoteServiceActivity.java index 5facde64f..a2e781e8a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/RemoteServiceActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/RemoteServiceActivity.java @@ -69,8 +69,8 @@ public class RemoteServiceActivity extends BaseActivity { public static final String EXTRA_ACC_NAME = "acc_name"; // select pub keys action public static final String EXTRA_SELECTED_MASTER_KEY_IDS = "master_key_ids"; - public static final String EXTRA_MISSING_USER_IDS = "missing_user_ids"; - public static final String EXTRA_DUPLICATE_USER_IDS = "dublicate_user_ids"; + public static final String EXTRA_MISSING_EMAILS = "missing_emails"; + public static final String EXTRA_DUPLICATE_EMAILS = "dublicate_emails"; public static final String EXTRA_NO_USER_IDS_CHECK = "no_user_ids"; // error message public static final String EXTRA_ERROR_MESSAGE = "error_message"; @@ -222,10 +222,10 @@ public class RemoteServiceActivity extends BaseActivity { case ACTION_SELECT_PUB_KEYS: { long[] selectedMasterKeyIds = intent.getLongArrayExtra(EXTRA_SELECTED_MASTER_KEY_IDS); boolean noUserIdsCheck = intent.getBooleanExtra(EXTRA_NO_USER_IDS_CHECK, true); - ArrayList<String> missingUserIds = intent - .getStringArrayListExtra(EXTRA_MISSING_USER_IDS); - ArrayList<String> dublicateUserIds = intent - .getStringArrayListExtra(EXTRA_DUPLICATE_USER_IDS); + ArrayList<String> missingEmails = intent + .getStringArrayListExtra(EXTRA_MISSING_EMAILS); + ArrayList<String> duplicateEmails = intent + .getStringArrayListExtra(EXTRA_DUPLICATE_EMAILS); SpannableStringBuilder ssb = new SpannableStringBuilder(); final SpannableString textIntro = new SpannableString( @@ -235,23 +235,23 @@ public class RemoteServiceActivity extends BaseActivity { textIntro.setSpan(new StyleSpan(Typeface.BOLD), 0, textIntro.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); ssb.append(textIntro); - if (missingUserIds != null && missingUserIds.size() > 0) { + if (missingEmails != null && missingEmails.size() > 0) { ssb.append("\n\n"); ssb.append(getString(R.string.api_select_pub_keys_missing_text)); ssb.append("\n"); - for (String userId : missingUserIds) { - SpannableString ss = new SpannableString(userId + "\n"); + for (String emails : missingEmails) { + SpannableString ss = new SpannableString(emails + "\n"); ss.setSpan(new BulletSpan(15, Color.BLACK), 0, ss.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); ssb.append(ss); } } - if (dublicateUserIds != null && dublicateUserIds.size() > 0) { + if (duplicateEmails != null && duplicateEmails.size() > 0) { ssb.append("\n\n"); ssb.append(getString(R.string.api_select_pub_keys_dublicates_text)); ssb.append("\n"); - for (String userId : dublicateUserIds) { - SpannableString ss = new SpannableString(userId + "\n"); + for (String email : duplicateEmails) { + SpannableString ss = new SpannableString(email + "\n"); ss.setSpan(new BulletSpan(15, Color.BLACK), 0, ss.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); ssb.append(ss); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java index c5bfdbedf..bb19fe2b1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java @@ -118,6 +118,7 @@ public class KeyListFragment extends LoaderFragment // This ids for multiple key export. private ArrayList<Long> mIdsForRepeatAskPassphrase; + private ArrayList<Long> mIdsForExport; // This index for remembering the number of master key. private int mIndex; @@ -642,6 +643,7 @@ public class KeyListFragment extends LoaderFragment private void showMultiExportDialog(long[] masterKeyIds) { mIdsForRepeatAskPassphrase = new ArrayList<>(); + mIdsForExport = new ArrayList<>(); for (long id : masterKeyIds) { try { if (PassphraseCacheService.getCachedPassphrase( @@ -651,6 +653,7 @@ public class KeyListFragment extends LoaderFragment } catch (PassphraseCacheService.KeyNotFoundException e) { // This happens when the master key is stripped // and ignore this key. + mIdsForExport.add(id); } } mIndex = 0; @@ -658,13 +661,9 @@ public class KeyListFragment extends LoaderFragment startPassphraseActivity(); return; } - long[] idsForMultiExport = new long[mIdsForRepeatAskPassphrase.size()]; - for (int i = 0; i < mIdsForRepeatAskPassphrase.size(); ++i) { - idsForMultiExport[i] = mIdsForRepeatAskPassphrase.get(i); - } - mExportHelper.showExportKeysDialog(idsForMultiExport, - Constants.Path.APP_DIR_FILE, - mAdapter.isAnySecretSelected()); + + mIdsForExport.addAll(mIdsForRepeatAskPassphrase); + finishExport(); } private void startPassphraseActivity() { @@ -674,6 +673,16 @@ public class KeyListFragment extends LoaderFragment startActivityForResult(intent, REQUEST_REPEAT_PASSPHRASE); } + private void finishExport() { + long[] idsForMultiExport = new long[mIdsForExport.size()]; + for (int i = 0; i < mIdsForExport.size(); i++) { + idsForMultiExport[i] = mIdsForExport.get(i); + } + mExportHelper.showExportKeysDialog(idsForMultiExport, + Constants.Path.APP_DIR_FILE, + mAdapter.isAnySecretSelected()); + } + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (mImportOpHelper != null) { @@ -692,13 +701,9 @@ public class KeyListFragment extends LoaderFragment startPassphraseActivity(); return; } - long[] idsForMultiExport = new long[mIdsForRepeatAskPassphrase.size()]; - for (int i = 0; i < mIdsForRepeatAskPassphrase.size(); ++i) { - idsForMultiExport[i] = mIdsForRepeatAskPassphrase.get(i); - } - mExportHelper.showExportKeysDialog(idsForMultiExport, - Constants.Path.APP_DIR_FILE, - mAdapter.isAnySecretSelected()); + + mIdsForExport.addAll(mIdsForRepeatAskPassphrase); + finishExport(); } if (requestCode == REQUEST_ACTION) { |