Temporary fix for multi export
This commit is contained in:
@@ -27,12 +27,14 @@ import java.io.FileOutputStream;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.net.Proxy;
|
import java.net.Proxy;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import org.spongycastle.bcpg.ArmoredOutputStream;
|
import org.spongycastle.bcpg.ArmoredOutputStream;
|
||||||
import org.sufficientlysecure.keychain.Constants;
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
@@ -211,21 +213,21 @@ public class ExportOperation extends BaseOperation<ExportKeyringParcel> {
|
|||||||
Cursor cursor = null;
|
Cursor cursor = null;
|
||||||
try {
|
try {
|
||||||
|
|
||||||
String selection = null, ids[] = null;
|
String selection = null, selectionArgs[] = null;
|
||||||
|
|
||||||
if (masterKeyIds != null) {
|
if (masterKeyIds != null) {
|
||||||
// generate placeholders and string selection args
|
// convert long[] to String[]
|
||||||
ids = new String[masterKeyIds.length];
|
selectionArgs = new String[masterKeyIds.length];
|
||||||
StringBuilder placeholders = new StringBuilder("?");
|
|
||||||
for (int i = 0; i < masterKeyIds.length; i++) {
|
for (int i = 0; i < masterKeyIds.length; i++) {
|
||||||
ids[i] = Long.toString(masterKeyIds[i]);
|
selectionArgs[i] = Long.toString(masterKeyIds[i]);
|
||||||
if (i != 0) {
|
|
||||||
placeholders.append(",?");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// generates ?,?,? as placeholders for selectionArgs
|
||||||
|
String placeholders = TextUtils.join(",",
|
||||||
|
Collections.nCopies(masterKeyIds.length, "?"));
|
||||||
|
|
||||||
// put together selection string
|
// put together selection string
|
||||||
selection = Tables.KEY_RINGS_PUBLIC + "." + KeyRings.MASTER_KEY_ID
|
selection = Tables.KEYS + "." + KeyRings.MASTER_KEY_ID
|
||||||
+ " IN (" + placeholders + ")";
|
+ " IN (" + placeholders + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,7 +235,7 @@ public class ExportOperation extends BaseOperation<ExportKeyringParcel> {
|
|||||||
KeyRings.buildUnifiedKeyRingsUri(), new String[]{
|
KeyRings.buildUnifiedKeyRingsUri(), new String[]{
|
||||||
KeyRings.MASTER_KEY_ID, KeyRings.PUBKEY_DATA,
|
KeyRings.MASTER_KEY_ID, KeyRings.PUBKEY_DATA,
|
||||||
KeyRings.PRIVKEY_DATA, KeyRings.HAS_ANY_SECRET
|
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()) {
|
if (cursor == null || !cursor.moveToFirst()) {
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ public class KeyListFragment extends LoaderFragment
|
|||||||
|
|
||||||
// This ids for multiple key export.
|
// This ids for multiple key export.
|
||||||
private ArrayList<Long> mIdsForRepeatAskPassphrase;
|
private ArrayList<Long> mIdsForRepeatAskPassphrase;
|
||||||
|
private ArrayList<Long> mIdsForExport;
|
||||||
// This index for remembering the number of master key.
|
// This index for remembering the number of master key.
|
||||||
private int mIndex;
|
private int mIndex;
|
||||||
|
|
||||||
@@ -642,6 +643,7 @@ public class KeyListFragment extends LoaderFragment
|
|||||||
|
|
||||||
private void showMultiExportDialog(long[] masterKeyIds) {
|
private void showMultiExportDialog(long[] masterKeyIds) {
|
||||||
mIdsForRepeatAskPassphrase = new ArrayList<>();
|
mIdsForRepeatAskPassphrase = new ArrayList<>();
|
||||||
|
mIdsForExport = new ArrayList<>();
|
||||||
for (long id : masterKeyIds) {
|
for (long id : masterKeyIds) {
|
||||||
try {
|
try {
|
||||||
if (PassphraseCacheService.getCachedPassphrase(
|
if (PassphraseCacheService.getCachedPassphrase(
|
||||||
@@ -651,6 +653,7 @@ public class KeyListFragment extends LoaderFragment
|
|||||||
} catch (PassphraseCacheService.KeyNotFoundException e) {
|
} catch (PassphraseCacheService.KeyNotFoundException e) {
|
||||||
// This happens when the master key is stripped
|
// This happens when the master key is stripped
|
||||||
// and ignore this key.
|
// and ignore this key.
|
||||||
|
mIdsForExport.add(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mIndex = 0;
|
mIndex = 0;
|
||||||
@@ -658,13 +661,9 @@ public class KeyListFragment extends LoaderFragment
|
|||||||
startPassphraseActivity();
|
startPassphraseActivity();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
long[] idsForMultiExport = new long[mIdsForRepeatAskPassphrase.size()];
|
|
||||||
for (int i = 0; i < mIdsForRepeatAskPassphrase.size(); ++i) {
|
mIdsForExport.addAll(mIdsForRepeatAskPassphrase);
|
||||||
idsForMultiExport[i] = mIdsForRepeatAskPassphrase.get(i);
|
finishExport();
|
||||||
}
|
|
||||||
mExportHelper.showExportKeysDialog(idsForMultiExport,
|
|
||||||
Constants.Path.APP_DIR_FILE,
|
|
||||||
mAdapter.isAnySecretSelected());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startPassphraseActivity() {
|
private void startPassphraseActivity() {
|
||||||
@@ -674,6 +673,16 @@ public class KeyListFragment extends LoaderFragment
|
|||||||
startActivityForResult(intent, REQUEST_REPEAT_PASSPHRASE);
|
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
|
@Override
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
if (mImportOpHelper != null) {
|
if (mImportOpHelper != null) {
|
||||||
@@ -692,13 +701,9 @@ public class KeyListFragment extends LoaderFragment
|
|||||||
startPassphraseActivity();
|
startPassphraseActivity();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
long[] idsForMultiExport = new long[mIdsForRepeatAskPassphrase.size()];
|
|
||||||
for (int i = 0; i < mIdsForRepeatAskPassphrase.size(); ++i) {
|
mIdsForExport.addAll(mIdsForRepeatAskPassphrase);
|
||||||
idsForMultiExport[i] = mIdsForRepeatAskPassphrase.get(i);
|
finishExport();
|
||||||
}
|
|
||||||
mExportHelper.showExportKeysDialog(idsForMultiExport,
|
|
||||||
Constants.Path.APP_DIR_FILE,
|
|
||||||
mAdapter.isAnySecretSelected());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (requestCode == REQUEST_ACTION) {
|
if (requestCode == REQUEST_ACTION) {
|
||||||
|
|||||||
Reference in New Issue
Block a user