aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2014-10-04 18:59:59 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2014-10-04 18:59:59 +0200
commit9e1a0c2c0a6de82425b3e4715d700a7361a1e328 (patch)
tree20cf1823511258a91af68200176d10046bf13e14
parentc614d8d4e044e91cf60b488884f0d5c166e1ecc9 (diff)
downloadopen-keychain-9e1a0c2c0a6de82425b3e4715d700a7361a1e328.tar.gz
open-keychain-9e1a0c2c0a6de82425b3e4715d700a7361a1e328.tar.bz2
open-keychain-9e1a0c2c0a6de82425b3e4715d700a7361a1e328.zip
Pass imported master key ids via result parcel
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpImportExport.java14
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/ImportKeyResult.java15
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/AddKeysActivity.java63
-rw-r--r--OpenKeychain/src/main/res/layout/add_key_activity.xml35
-rw-r--r--OpenKeychain/src/main/res/values/strings.xml11
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>