aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--OpenPGP-Keychain/res/menu/key_view.xml4
-rw-r--r--OpenPGP-Keychain/res/values/strings.xml1
-rw-r--r--OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java148
3 files changed, 94 insertions, 59 deletions
diff --git a/OpenPGP-Keychain/res/menu/key_view.xml b/OpenPGP-Keychain/res/menu/key_view.xml
index 0785abd32..3798cb935 100644
--- a/OpenPGP-Keychain/res/menu/key_view.xml
+++ b/OpenPGP-Keychain/res/menu/key_view.xml
@@ -19,6 +19,10 @@
android:id="@+id/menu_key_view_share_nfc"
android:showAsAction="never"
android:title="@string/menu_share_nfc"/>
+ <item
+ android:id="@+id/menu_key_view_share_clipboard"
+ android:showAsAction="never"
+ android:title="@string/menu_copy_to_clipboard"/>
</menu>
</item>
<item
diff --git a/OpenPGP-Keychain/res/values/strings.xml b/OpenPGP-Keychain/res/values/strings.xml
index 6ab668934..e837e01dc 100644
--- a/OpenPGP-Keychain/res/values/strings.xml
+++ b/OpenPGP-Keychain/res/values/strings.xml
@@ -97,6 +97,7 @@
<string name="menu_share">Share with…</string>
<string name="menu_share_qr_code">Share with QR Code</string>
<string name="menu_share_nfc">Share with NFC</string>
+ <string name="menu_copy_to_clipboard">Copy to clipboard</string>
<string name="menu_sign_key">Sign key</string>
<string name="menu_beam_preferences">Beam settings</string>
diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java
index 45c79fc8e..4bffd9f3d 100644
--- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java
+++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java
@@ -28,6 +28,7 @@ import org.spongycastle.openpgp.PGPPublicKeyRing;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.Id;
import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;
import org.sufficientlysecure.keychain.pgp.PgpKeyHelper;
import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.ui.dialog.ShareNfcDialogFragment;
@@ -108,62 +109,18 @@ public class KeyViewActivity extends SherlockFragmentActivity implements CreateN
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- // TODO: use data uri in the other activities instead of givin key ring row id!
-
- long keyRingRowId = Long.valueOf(mDataUri.getLastPathSegment());
-
switch (item.getItemId()) {
case R.id.menu_key_view_update:
- long updateKeyId = 0;
- PGPPublicKeyRing updateKeyRing = ProviderHelper.getPGPPublicKeyRingByRowId(this,
- keyRingRowId);
- if (updateKeyRing != null) {
- updateKeyId = PgpKeyHelper.getMasterKey(updateKeyRing).getKeyID();
- }
- if (updateKeyId == 0) {
- // this shouldn't happen
- return true;
- }
-
- Intent queryIntent = new Intent(this, KeyServerQueryActivity.class);
- queryIntent.setAction(KeyServerQueryActivity.ACTION_LOOK_UP_KEY_ID_AND_RETURN);
- queryIntent.putExtra(KeyServerQueryActivity.EXTRA_KEY_ID, updateKeyId);
-
- // TODO: lookup??
- startActivityForResult(queryIntent, Id.request.look_up_key_id);
-
+ updateFromKeyserver();
return true;
case R.id.menu_key_view_sign:
- long keyId = 0;
- PGPPublicKeyRing signKeyRing = ProviderHelper.getPGPPublicKeyRingByRowId(this,
- keyRingRowId);
- if (signKeyRing != null) {
- keyId = PgpKeyHelper.getMasterKey(signKeyRing).getKeyID();
- }
- if (keyId == 0) {
- // this shouldn't happen
- return true;
- }
-
- Intent signIntent = new Intent(this, SignKeyActivity.class);
- signIntent.putExtra(SignKeyActivity.EXTRA_KEY_ID, keyId);
- startActivity(signIntent);
+ signKey();
return true;
case R.id.menu_key_view_export_keyserver:
- Intent uploadIntent = new Intent(this, KeyServerUploadActivity.class);
- uploadIntent.setAction(KeyServerUploadActivity.ACTION_EXPORT_KEY_TO_SERVER);
- uploadIntent.putExtra(KeyServerUploadActivity.EXTRA_KEYRING_ROW_ID, (int) keyRingRowId);
- startActivityForResult(uploadIntent, Id.request.export_to_server);
-
+ uploadToKeyserver();
return true;
case R.id.menu_key_view_export_file:
- // long masterKeyId = ProviderHelper.getPublicMasterKeyId(mKeyListActivity,
- // keyRingRowId);
- // if (masterKeyId == -1) {
- // masterKeyId = ProviderHelper.getSecretMasterKeyId(mKeyListActivity, keyRingRowId);
- // }
- //
- // mKeyListActivity.showExportKeysDialog(masterKeyId);
+ exportToFile();
return true;
case R.id.menu_key_view_share_default:
shareKey();
@@ -172,20 +129,13 @@ public class KeyViewActivity extends SherlockFragmentActivity implements CreateN
shareKeyQrCode();
return true;
case R.id.menu_key_view_share_nfc:
- // get master key id using row id
- // long masterKeyId2 = ProviderHelper.getPublicMasterKeyId(this, keyRingRowId);
- //
- // Intent nfcIntent = new Intent(this, ShareNfcBeamActivity.class);
- // nfcIntent.setAction(ShareNfcBeamActivity.ACTION_SHARE_KEYRING_WITH_NFC);
- // nfcIntent.putExtra(ShareNfcBeamActivity.EXTRA_MASTER_KEY_ID, masterKeyId2);
- // startActivityForResult(nfcIntent, 0);
-
shareNfc();
-
+ return true;
+ case R.id.menu_key_view_share_clipboard:
+ copyToClipboard();
return true;
case R.id.menu_key_view_delete:
- // mKeyListActivity.showDeleteKeyDialog(keyRingRowId);
-
+ deleteKey();
return true;
}
@@ -238,6 +188,75 @@ public class KeyViewActivity extends SherlockFragmentActivity implements CreateN
return result;
}
+ private void exportToFile() {
+ // long masterKeyId = ProviderHelper.getPublicMasterKeyId(mKeyListActivity,
+ // keyRingRowId);
+ // if (masterKeyId == -1) {
+ // masterKeyId = ProviderHelper.getSecretMasterKeyId(mKeyListActivity, keyRingRowId);
+ // }
+ //
+ // mKeyListActivity.showExportKeysDialog(masterKeyId);
+ }
+
+ private void deleteKey() {
+ long keyRingRowId = Long.valueOf(mDataUri.getLastPathSegment());
+
+ // mKeyListActivity.showDeleteKeyDialog(keyRingRowId);
+ }
+
+ private void uploadToKeyserver() {
+ long keyRingRowId = Long.valueOf(mDataUri.getLastPathSegment());
+
+ Intent uploadIntent = new Intent(this, KeyServerUploadActivity.class);
+ uploadIntent.setAction(KeyServerUploadActivity.ACTION_EXPORT_KEY_TO_SERVER);
+ uploadIntent.putExtra(KeyServerUploadActivity.EXTRA_KEYRING_ROW_ID, (int) keyRingRowId);
+ startActivityForResult(uploadIntent, Id.request.export_to_server);
+ }
+
+ private void updateFromKeyserver() {
+ // TODO: use data uri!
+ long keyRingRowId = Long.valueOf(mDataUri.getLastPathSegment());
+
+ long updateKeyId = 0;
+ PGPPublicKeyRing updateKeyRing = ProviderHelper.getPGPPublicKeyRingByRowId(this,
+ keyRingRowId);
+ if (updateKeyRing != null) {
+ updateKeyId = PgpKeyHelper.getMasterKey(updateKeyRing).getKeyID();
+ }
+ // if (updateKeyId == 0) {
+ // // this shouldn't happen
+ // return true;
+ // }
+
+ Intent queryIntent = new Intent(this, KeyServerQueryActivity.class);
+ queryIntent.setAction(KeyServerQueryActivity.ACTION_LOOK_UP_KEY_ID_AND_RETURN);
+ queryIntent.putExtra(KeyServerQueryActivity.EXTRA_KEY_ID, updateKeyId);
+
+ // TODO: lookup??
+ startActivityForResult(queryIntent, Id.request.look_up_key_id);
+
+ }
+
+ private void signKey() {
+ // TODO: use data uri!
+ long keyRingRowId = Long.valueOf(mDataUri.getLastPathSegment());
+
+ long keyId = 0;
+ PGPPublicKeyRing signKeyRing = ProviderHelper
+ .getPGPPublicKeyRingByRowId(this, keyRingRowId);
+ if (signKeyRing != null) {
+ keyId = PgpKeyHelper.getMasterKey(signKeyRing).getKeyID();
+ }
+ // if (keyId == 0) {
+ // // this shouldn't happen
+ // return true;
+ // }
+
+ Intent signIntent = new Intent(this, SignKeyActivity.class);
+ signIntent.putExtra(SignKeyActivity.EXTRA_KEY_ID, keyId);
+ startActivity(signIntent);
+ }
+
private void shareKey() {
// TODO: use data uri!
long keyRingRowId = Long.valueOf(mDataUri.getLastPathSegment());
@@ -272,6 +291,17 @@ public class KeyViewActivity extends SherlockFragmentActivity implements CreateN
dialog.show(getSupportFragmentManager(), "shareNfcDialog");
}
+ private void copyToClipboard() {
+ // TODO: use data uri!
+ long keyRingRowId = Long.valueOf(mDataUri.getLastPathSegment());
+ long masterKeyId = ProviderHelper.getPublicMasterKeyId(this, keyRingRowId);
+ // get public keyring as ascii armored string
+ ArrayList<String> keyringArmored = ProviderHelper.getPublicKeyRingsAsArmoredString(this,
+ new long[] { masterKeyId });
+
+ ClipboardReflection.copyToClipboard(this, keyringArmored.get(0));
+ }
+
/**
* NFC: Initialize NFC sharing if OS and device supports it
*/