diff options
author | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-10-04 18:59:59 +0200 |
---|---|---|
committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-10-04 18:59:59 +0200 |
commit | 9e1a0c2c0a6de82425b3e4715d700a7361a1e328 (patch) | |
tree | 20cf1823511258a91af68200176d10046bf13e14 | |
parent | c614d8d4e044e91cf60b488884f0d5c166e1ecc9 (diff) | |
download | open-keychain-9e1a0c2c0a6de82425b3e4715d700a7361a1e328.tar.gz open-keychain-9e1a0c2c0a6de82425b3e4715d700a7361a1e328.tar.bz2 open-keychain-9e1a0c2c0a6de82425b3e4715d700a7361a1e328.zip |
Pass imported master key ids via result parcel
5 files changed, 87 insertions, 51 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpImportExport.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpImportExport.java index c3320ed6a..964c535dd 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpImportExport.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpImportExport.java @@ -120,10 +120,12 @@ public class PgpImportExport { // If there aren't even any keys, do nothing here. if (entries == null || !entries.hasNext()) { return new ImportKeyResult( - ImportKeyResult.RESULT_FAIL_NOTHING, mProviderHelper.getLog(), 0, 0, 0, 0); + ImportKeyResult.RESULT_FAIL_NOTHING, mProviderHelper.getLog(), 0, 0, 0, 0, + new long[]{}); } int newKeys = 0, oldKeys = 0, badKeys = 0, secret = 0; + ArrayList<Long> importedMasterKeyIds = new ArrayList<Long>(); int position = 0; double progSteps = 100.0 / num; @@ -165,11 +167,13 @@ public class PgpImportExport { badKeys += 1; } else if (result.updated()) { oldKeys += 1; + importedMasterKeyIds.add(key.getMasterKeyId()); } else { newKeys += 1; if (key.isSecret()) { secret += 1; } + importedMasterKeyIds.add(key.getMasterKeyId()); } } catch (IOException e) { @@ -210,8 +214,14 @@ public class PgpImportExport { resultType |= ImportKeyResult.RESULT_CANCELLED; } - return new ImportKeyResult(resultType, log, newKeys, oldKeys, badKeys, secret); + // convert to long array + long[] importedMasterKeyIdsArray = new long[importedMasterKeyIds.size()]; + for (int i = 0; i < importedMasterKeyIds.size(); ++i) { + importedMasterKeyIdsArray[i] = importedMasterKeyIds.get(i); + } + return new ImportKeyResult(resultType, log, newKeys, oldKeys, badKeys, secret, + importedMasterKeyIdsArray); } public Bundle exportKeyRings(ArrayList<Long> publicKeyRingMasterIds, diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/ImportKeyResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/ImportKeyResult.java index fa0dc6af3..0d71af876 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/ImportKeyResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/ImportKeyResult.java @@ -37,6 +37,7 @@ import org.sufficientlysecure.keychain.ui.LogDisplayFragment; public class ImportKeyResult extends OperationResult { public final int mNewKeys, mUpdatedKeys, mBadKeys, mSecret; + public final long[] mImportedMasterKeyIds; // At least one new key public static final int RESULT_OK_NEWKEYS = 8; @@ -69,21 +70,28 @@ public class ImportKeyResult extends OperationResult { return (mResult & RESULT_FAIL_NOTHING) == RESULT_FAIL_NOTHING; } + public long[] getImportedMasterKeyIds() { + return mImportedMasterKeyIds; + } + public ImportKeyResult(Parcel source) { super(source); mNewKeys = source.readInt(); mUpdatedKeys = source.readInt(); mBadKeys = source.readInt(); mSecret = source.readInt(); + mImportedMasterKeyIds = source.createLongArray(); } public ImportKeyResult(int result, OperationLog log, - int newKeys, int updatedKeys, int badKeys, int secret) { + int newKeys, int updatedKeys, int badKeys, int secret, + long[] importedMasterKeyIds) { super(result, log); mNewKeys = newKeys; mUpdatedKeys = updatedKeys; mBadKeys = badKeys; mSecret = secret; + mImportedMasterKeyIds = importedMasterKeyIds; } @Override @@ -93,6 +101,7 @@ public class ImportKeyResult extends OperationResult { dest.writeInt(mUpdatedKeys); dest.writeInt(mBadKeys); dest.writeInt(mSecret); + dest.writeLongArray(mImportedMasterKeyIds); } public static Creator<ImportKeyResult> CREATOR = new Creator<ImportKeyResult>() { @@ -162,8 +171,8 @@ public class ImportKeyResult extends OperationResult { color = Style.RED; if (isFailNothing()) { str = activity.getString((resultType & ImportKeyResult.RESULT_CANCELLED) > 0 - ? R.string.import_error_nothing_cancelled - : R.string.import_error_nothing); + ? R.string.import_error_nothing_cancelled + : R.string.import_error_nothing); } else { str = activity.getResources().getQuantityString(R.plurals.import_error, mBadKeys); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/AddKeysActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/AddKeysActivity.java index 2dc6cc7ee..436ed050f 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/AddKeysActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/AddKeysActivity.java @@ -74,6 +74,7 @@ public class AddKeysActivity extends ActionBarActivity implements View mActionSafeSlinger; ImageView mActionSafeSlingerIcon; View mActionQrCode; + View mActionNfc; View mActionSearchCloud; ProviderHelper mProviderHelper; @@ -103,6 +104,7 @@ public class AddKeysActivity extends ActionBarActivity implements mActionSafeSlingerIcon.setColorFilter(getResources().getColor(R.color.tertiary_text_light), PorterDuff.Mode.SRC_IN); mActionQrCode = findViewById(R.id.add_keys_qr_code); + mActionNfc = findViewById(R.id.add_keys_nfc); mActionSearchCloud = findViewById(R.id.add_keys_search_cloud); mSafeSlingerKeySpinner.setOnKeyChangedListener(new KeySpinner.OnKeyChangedListener() { @@ -126,6 +128,16 @@ public class AddKeysActivity extends ActionBarActivity implements } }); + mActionNfc.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // show nfc help + Intent intent = new Intent(AddKeysActivity.this, HelpActivity.class); + intent.putExtra(HelpActivity.EXTRA_SELECTED_TAB, HelpActivity.TAB_NFC); + startActivityForResult(intent, 0); + } + }); + mActionSearchCloud.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -183,8 +195,7 @@ public class AddKeysActivity extends ActionBarActivity implements getSupportLoaderManager().restartLoader(LOADER_ID_BYTES, null, this); break; case ExchangeActivity.RESULT_EXCHANGE_CANCELED: - // handle canceled result - // ... + // do nothing break; } break; @@ -291,29 +302,13 @@ public class AddKeysActivity extends ActionBarActivity implements } @Override - public void onLoadFinished(Loader<AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>> loader, AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>> data) { - + public void onLoadFinished(Loader<AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>> loader, + AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>> data) { Log.d(Constants.TAG, "data: " + data.getResult()); - // swap in the real data! -// mAdapter.setData(data.getResult()); -// mAdapter.notifyDataSetChanged(); -// -// setListAdapter(mAdapter); -// -// // The list should now be shown. -// if (isResumed()) { -// setListShown(true); -// } else { -// setListShownNoAnimation(true); -// } - Exception error = data.getError(); - // free old cached key data -// mCachedKeyData = null; - LongSparseArray<ParcelableKeyRing> mCachedKeyData = null; - + LongSparseArray<ParcelableKeyRing> cachedKeyData = null; // TODO: Use parcels!!!!!!!!!!!!!!! switch (loader.getId()) { @@ -321,8 +316,8 @@ public class AddKeysActivity extends ActionBarActivity implements if (error == null) { // No error - mCachedKeyData = ((ImportKeysListLoader) loader).getParcelableRings(); - Log.d(Constants.TAG, "no error!:" + mCachedKeyData); + cachedKeyData = ((ImportKeysListLoader) loader).getParcelableRings(); + Log.d(Constants.TAG, "no error!:" + cachedKeyData); } else if (error instanceof ImportKeysListLoader.NoValidKeysException) { Notify.showNotify(this, R.string.error_import_no_valid_keys, Notify.Style.ERROR); @@ -361,7 +356,7 @@ public class AddKeysActivity extends ActionBarActivity implements break; } - importKeys(mCachedKeyData); + importKeys(cachedKeyData); } @Override @@ -434,21 +429,11 @@ public class AddKeysActivity extends ActionBarActivity implements return; } - // TODO: start certify with received keys - -// if (ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_RESULT.equals(getIntent().getAction()) -// || ACTION_IMPORT_KEY_FROM_FILE_AND_RETURN.equals(getIntent().getAction())) { -// Intent intent = new Intent(); -// intent.putExtra(ImportKeyResult.EXTRA_RESULT, result); -// ImportKeysActivity.this.setResult(RESULT_OK, intent); -// ImportKeysActivity.this.finish(); -// return; -// } -// if (ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_TO_SERVICE.equals(getIntent().getAction())) { -// ImportKeysActivity.this.setResult(RESULT_OK, mPendingIntentData); -// ImportKeysActivity.this.finish(); -// return; -// } + finish(); + Intent certifyIntent = new Intent(); // TODO: certify + certifyIntent.putExtra(ImportKeyResult.EXTRA_RESULT, result); + certifyIntent.putExtra("key ids", result.getImportedMasterKeyIds()); // TODO: extra + startActivity(certifyIntent); result.createNotify(AddKeysActivity.this).show(); } diff --git a/OpenKeychain/src/main/res/layout/add_key_activity.xml b/OpenKeychain/src/main/res/layout/add_key_activity.xml index 624ef9ed4..548d1224e 100644 --- a/OpenKeychain/src/main/res/layout/add_key_activity.xml +++ b/OpenKeychain/src/main/res/layout/add_key_activity.xml @@ -21,7 +21,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" - android:text="Secure Exchange" /> + android:text="@string/add_keys_section_secure_exchange" /> <LinearLayout android:layout_width="match_parent" @@ -35,7 +35,7 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textAppearance="?android:attr/textAppearanceMedium" - android:text="My key:" + android:text="@string/add_keys_my_key" android:paddingRight="8dp" /> <org.sufficientlysecure.keychain.ui.widget.ExchangeKeySpinner @@ -61,7 +61,7 @@ android:textAppearance="?android:attr/textAppearanceMedium" android:layout_width="0dip" android:layout_height="match_parent" - android:text="Start exchange" + android:text="@string/add_keys_start_exchange" android:layout_weight="1" android:gravity="center_vertical" /> @@ -87,7 +87,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="32dp" - android:text="Secure add" /> + android:text="@string/add_keys_section_secure_add" /> <TextView android:id="@+id/add_keys_qr_code" @@ -99,12 +99,33 @@ android:minHeight="?android:attr/listPreferredItemHeight" android:clickable="true" style="@style/SelectableItem" - android:text="QR Code" + android:text="@string/add_keys_qr_code" android:drawableRight="@drawable/ic_action_qr_code" android:drawablePadding="8dp" android:gravity="center_vertical" /> <View + android:id="@+id/view_key_action_certify_divider" + android:layout_width="match_parent" + android:layout_height="1dip" + android:background="?android:attr/listDivider" /> + + <TextView + android:id="@+id/add_keys_nfc" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minHeight="?android:attr/listPreferredItemHeight" + android:clickable="true" + style="@style/SelectableItem" + android:text="@string/add_keys_nfc" + android:drawableRight="@drawable/ic_action_nfc" + android:drawablePadding="8dp" + android:gravity="center_vertical" /> + + <View android:layout_width="match_parent" android:layout_height="1dip" android:background="?android:attr/listDivider" @@ -115,7 +136,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="32dp" - android:text="Import (untrusted)" /> + android:text="@string/add_keys_section_import" /> <TextView android:id="@+id/add_keys_search_cloud" @@ -127,7 +148,7 @@ android:minHeight="?android:attr/listPreferredItemHeight" android:clickable="true" style="@style/SelectableItem" - android:text="Search cloud" + android:text="@string/add_keys_cloud" android:drawableRight="@drawable/ic_action_search" android:drawablePadding="8dp" android:gravity="center_vertical" /> diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index ac2be23fa..ac594065f 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -284,6 +284,17 @@ <string name="decrypt_result_decrypted_and_signature_uncertified">"Successfully decrypted and valid signature (uncertified)"</string> <string name="decrypt_result_decrypted_and_signature_certified">"Successfully decrypted and valid signature (certified)"</string> + <!-- Add keys --> + <string name="add_keys_section_secure_exchange">"Secure Exchange"</string> + <string name="add_keys_section_secure_add">"Secure Add"</string> + <string name="add_keys_section_import">"Import (untrusted)"</string> + <string name="add_keys_my_key">"My key:"</string> + <string name="add_keys_start_exchange">"Start exchange"</string> + <string name="add_keys_qr_code">"Scan QR Code"</string> + <string name="add_keys_nfc">"Receive via NFC"</string> + <string name="add_keys_cloud">"Search cloud"</string> + + <!-- progress dialogs, usually ending in '…' --> <string name="progress_done">"Done."</string> <string name="progress_cancel">"Cancel"</string> |