From d515b267964fd5398da8338414acbaebe8edcb21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 8 Jan 2013 22:12:23 +0100 Subject: Generic share of keyring via Android Intent SEND, renaming of own share intents --- APG/src/org/thialfihar/android/apg/Id.java | 7 +- .../android/apg/ui/KeyListPublicFragment.java | 24 +++++-- .../thialfihar/android/apg/ui/ShareActivity.java | 74 ++++++++++++++++++++++ .../android/apg/ui/ShareNfcBeamActivity.java | 5 +- .../android/apg/ui/ShareQrCodeActivity.java | 65 ------------------- 5 files changed, 99 insertions(+), 76 deletions(-) create mode 100644 APG/src/org/thialfihar/android/apg/ui/ShareActivity.java delete mode 100644 APG/src/org/thialfihar/android/apg/ui/ShareQrCodeActivity.java (limited to 'APG/src') diff --git a/APG/src/org/thialfihar/android/apg/Id.java b/APG/src/org/thialfihar/android/apg/Id.java index d25bb24b0..db283da37 100644 --- a/APG/src/org/thialfihar/android/apg/Id.java +++ b/APG/src/org/thialfihar/android/apg/Id.java @@ -35,9 +35,10 @@ public final class Id { public static final int edit = 0x21070003; public static final int update = 0x21070004; public static final int exportToServer = 0x21070005; - public static final int share_qr_code = 0x21070006; - public static final int share_nfc = 0x21070007; - public static final int signKey = 0x21070008; + public static final int share = 0x21070006; + public static final int share_qr_code = 0x21070007; + public static final int share_nfc = 0x21070008; + public static final int signKey = 0x21070009; public static final class option { public static final int new_pass_phrase = 0x21070001; diff --git a/APG/src/org/thialfihar/android/apg/ui/KeyListPublicFragment.java b/APG/src/org/thialfihar/android/apg/ui/KeyListPublicFragment.java index 06bf7e7d9..7c23e6217 100644 --- a/APG/src/org/thialfihar/android/apg/ui/KeyListPublicFragment.java +++ b/APG/src/org/thialfihar/android/apg/ui/KeyListPublicFragment.java @@ -76,8 +76,9 @@ public class KeyListPublicFragment extends KeyListFragment implements menu.add(0, Id.menu.update, 1, R.string.menu_updateKey); menu.add(0, Id.menu.signKey, 2, R.string.menu_signKey); menu.add(0, Id.menu.exportToServer, 3, R.string.menu_exportKeyToServer); - menu.add(0, Id.menu.share_qr_code, 6, R.string.menu_shareQrCode); - menu.add(0, Id.menu.share_nfc, 7, R.string.menu_shareNfc); + menu.add(0, Id.menu.share, 6, R.string.menu_share); + menu.add(0, Id.menu.share_qr_code, 7, R.string.menu_shareQrCode); + menu.add(0, Id.menu.share_nfc, 8, R.string.menu_shareNfc); } @@ -142,9 +143,9 @@ public class KeyListPublicFragment extends KeyListFragment implements // get master key id using row id long masterKeyId = ProviderHelper.getPublicMasterKeyId(mKeyListActivity, keyRingRowId); - Intent qrCodeIntent = new Intent(mKeyListActivity, ShareQrCodeActivity.class); - qrCodeIntent.setAction(ShareQrCodeActivity.ACTION_SHARE_WITH_QR_CODE); - qrCodeIntent.putExtra(ShareQrCodeActivity.EXTRA_MASTER_KEY_ID, masterKeyId); + Intent qrCodeIntent = new Intent(mKeyListActivity, ShareActivity.class); + qrCodeIntent.setAction(ShareActivity.ACTION_SHARE_KEYRING_WITH_QR_CODE); + qrCodeIntent.putExtra(ShareActivity.EXTRA_MASTER_KEY_ID, masterKeyId); startActivityForResult(qrCodeIntent, 0); return true; @@ -154,12 +155,23 @@ public class KeyListPublicFragment extends KeyListFragment implements long masterKeyId2 = ProviderHelper.getPublicMasterKeyId(mKeyListActivity, keyRingRowId); Intent nfcIntent = new Intent(mKeyListActivity, ShareNfcBeamActivity.class); - nfcIntent.setAction(ShareNfcBeamActivity.ACTION_SHARE_WITH_NFC); + nfcIntent.setAction(ShareNfcBeamActivity.ACTION_SHARE_KEYRING_WITH_NFC); nfcIntent.putExtra(ShareNfcBeamActivity.EXTRA_MASTER_KEY_ID, masterKeyId2); startActivityForResult(nfcIntent, 0); return true; + case Id.menu.share: + // get master key id using row id + long masterKeyId3 = ProviderHelper.getPublicMasterKeyId(mKeyListActivity, keyRingRowId); + + Intent shareIntent = new Intent(mKeyListActivity, ShareActivity.class); + shareIntent.setAction(ShareActivity.ACTION_SHARE_KEYRING); + shareIntent.putExtra(ShareActivity.EXTRA_MASTER_KEY_ID, masterKeyId3); + startActivityForResult(shareIntent, 0); + + return true; + default: return super.onContextItemSelected(item); diff --git a/APG/src/org/thialfihar/android/apg/ui/ShareActivity.java b/APG/src/org/thialfihar/android/apg/ui/ShareActivity.java new file mode 100644 index 000000000..7fec42e47 --- /dev/null +++ b/APG/src/org/thialfihar/android/apg/ui/ShareActivity.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2013 Dominik Schürmann + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.thialfihar.android.apg.ui; + +import java.util.ArrayList; + +import org.thialfihar.android.apg.Constants; +import org.thialfihar.android.apg.R; +import org.thialfihar.android.apg.provider.ProviderHelper; + +import com.actionbarsherlock.app.SherlockFragmentActivity; +import com.google.zxing.integration.android.IntentIntegrator; + +import android.content.Intent; +import android.os.Bundle; + +public class ShareActivity extends SherlockFragmentActivity { + public static final String ACTION_SHARE_KEYRING = Constants.INTENT_PREFIX + "SHARE_KEYRING"; + public static final String ACTION_SHARE_KEYRING_WITH_QR_CODE = Constants.INTENT_PREFIX + + "SHARE_KEYRING_WITH_QR_CODE"; + + public static final String EXTRA_MASTER_KEY_ID = "masterKeyId"; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + handleActions(getIntent()); + } + + protected void handleActions(Intent intent) { + String action = intent.getAction(); + Bundle extras = intent.getExtras(); + + if (extras == null) { + extras = new Bundle(); + } + + long masterKeyId = extras.getLong(EXTRA_MASTER_KEY_ID); + + // get public keyring as ascii armored string + ArrayList keyringArmored = ProviderHelper.getPublicKeyRingsAsArmoredString(this, + new long[] { masterKeyId }); + + // close this activity + finish(); + + if (ACTION_SHARE_KEYRING.equals(action)) { + // let user choose application + Intent sendIntent = new Intent(Intent.ACTION_SEND); + sendIntent.putExtra(Intent.EXTRA_TEXT, keyringArmored.get(0)); + sendIntent.setType("text/plain"); + startActivity(Intent.createChooser(sendIntent, + getResources().getText(R.string.shareKeyringWith))); + } else if (ACTION_SHARE_KEYRING_WITH_QR_CODE.equals(action)) { + // use barcode scanner integration library + new IntentIntegrator(this).shareText(keyringArmored.get(0)); + } + } +} diff --git a/APG/src/org/thialfihar/android/apg/ui/ShareNfcBeamActivity.java b/APG/src/org/thialfihar/android/apg/ui/ShareNfcBeamActivity.java index bdf5f6227..abb2d6b82 100644 --- a/APG/src/org/thialfihar/android/apg/ui/ShareNfcBeamActivity.java +++ b/APG/src/org/thialfihar/android/apg/ui/ShareNfcBeamActivity.java @@ -54,7 +54,8 @@ import android.text.method.LinkMovementMethod; @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public class ShareNfcBeamActivity extends SherlockFragmentActivity implements CreateNdefMessageCallback, OnNdefPushCompleteCallback { - public static final String ACTION_SHARE_WITH_NFC = Constants.INTENT_PREFIX + "SHARE_WITH_NFC"; + public static final String ACTION_SHARE_KEYRING_WITH_NFC = Constants.INTENT_PREFIX + + "SHARE_KEYRING_WITH_NFC"; public static final String EXTRA_MASTER_KEY_ID = "masterKeyId"; @@ -96,7 +97,7 @@ public class ShareNfcBeamActivity extends SherlockFragmentActivity implements extras = new Bundle(); } - if (ACTION_SHARE_WITH_NFC.equals(action)) { + if (ACTION_SHARE_KEYRING_WITH_NFC.equals(action)) { long masterKeyId = extras.getLong(EXTRA_MASTER_KEY_ID); // get public keyring as byte array diff --git a/APG/src/org/thialfihar/android/apg/ui/ShareQrCodeActivity.java b/APG/src/org/thialfihar/android/apg/ui/ShareQrCodeActivity.java deleted file mode 100644 index 7d4237b80..000000000 --- a/APG/src/org/thialfihar/android/apg/ui/ShareQrCodeActivity.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2013 Dominik Schürmann - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.thialfihar.android.apg.ui; - -import java.util.ArrayList; - -import org.thialfihar.android.apg.Constants; -import org.thialfihar.android.apg.provider.ProviderHelper; - -import com.actionbarsherlock.app.SherlockFragmentActivity; -import com.google.zxing.integration.android.IntentIntegrator; - -import android.content.Intent; -import android.os.Bundle; - -public class ShareQrCodeActivity extends SherlockFragmentActivity { - public static final String ACTION_SHARE_WITH_QR_CODE = Constants.INTENT_PREFIX - + "SHARE_WITH_QR_CODE"; - - public static final String EXTRA_MASTER_KEY_ID = "masterKeyId"; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - handleActions(getIntent()); - } - - protected void handleActions(Intent intent) { - String action = intent.getAction(); - Bundle extras = intent.getExtras(); - - if (extras == null) { - extras = new Bundle(); - } - - if (ACTION_SHARE_WITH_QR_CODE.equals(action)) { - long masterKeyId = extras.getLong(EXTRA_MASTER_KEY_ID); - - // get public keyring as ascii armored string - ArrayList keyringArmored = ProviderHelper.getPublicKeyRingsAsArmoredString( - this, new long[] { masterKeyId }); - // close this activity - finish(); - - // use barcode scanner integration library - new IntentIntegrator(this).shareText(keyringArmored.get(0)); - } - } - -} -- cgit v1.2.3