From a2f0667593be2f7ecd5b0e2445321a22a90eea9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= <dominik@dominikschuermann.de> Date: Tue, 7 Jan 2014 22:59:39 +0100 Subject: action encrypt to contact in view and multi select --- OpenPGP-Keychain/res/layout/key_view_activity.xml | 13 ++++++ .../res/menu/key_list_multi_selection.xml | 9 ---- .../res/menu/key_list_public_multi.xml | 12 ++++++ OpenPGP-Keychain/res/values/strings.xml | 7 +++- .../keychain/ui/KeyListPublicFragment.java | 49 +++++++++++++++------- .../keychain/ui/KeyViewActivity.java | 20 ++++++++- 6 files changed, 85 insertions(+), 25 deletions(-) delete mode 100644 OpenPGP-Keychain/res/menu/key_list_multi_selection.xml create mode 100644 OpenPGP-Keychain/res/menu/key_list_public_multi.xml diff --git a/OpenPGP-Keychain/res/layout/key_view_activity.xml b/OpenPGP-Keychain/res/layout/key_view_activity.xml index 326959e97..8c6281d5b 100644 --- a/OpenPGP-Keychain/res/layout/key_view_activity.xml +++ b/OpenPGP-Keychain/res/layout/key_view_activity.xml @@ -113,4 +113,17 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" /> + <TextView + style="@style/SectionHeader" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:padding="4dp" + android:text="@string/section_actions" /> + + <Button + android:id="@+id/action_encrypt" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/key_view_action_encrypt" /> + </LinearLayout> \ No newline at end of file diff --git a/OpenPGP-Keychain/res/menu/key_list_multi_selection.xml b/OpenPGP-Keychain/res/menu/key_list_multi_selection.xml deleted file mode 100644 index 64f8564c1..000000000 --- a/OpenPGP-Keychain/res/menu/key_list_multi_selection.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<menu xmlns:android="http://schemas.android.com/apk/res/android" > - - <item - android:id="@+id/delete_entry" - android:icon="@android:drawable/ic_menu_delete" - android:title="@string/menu_delete_key"/> - -</menu> \ No newline at end of file diff --git a/OpenPGP-Keychain/res/menu/key_list_public_multi.xml b/OpenPGP-Keychain/res/menu/key_list_public_multi.xml new file mode 100644 index 000000000..92481e9cb --- /dev/null +++ b/OpenPGP-Keychain/res/menu/key_list_public_multi.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" > + + <item + android:id="@+id/menu_key_list_public_multi_encrypt" + android:title="@string/menu_encrypt_to"/> + <item + android:id="@+id/menu_key_list_public_multi_delete" + android:icon="@android:drawable/ic_menu_delete" + android:title="@string/menu_delete_key"/> + +</menu> \ No newline at end of file diff --git a/OpenPGP-Keychain/res/values/strings.xml b/OpenPGP-Keychain/res/values/strings.xml index d870c1289..62beb64f7 100644 --- a/OpenPGP-Keychain/res/values/strings.xml +++ b/OpenPGP-Keychain/res/values/strings.xml @@ -55,6 +55,7 @@ <string name="section_defaults">Defaults</string> <string name="section_advanced">Advanced</string> <string name="section_master_key">Master Key</string> + <string name="section_actions">Actions</string> <!-- button --> <string name="btn_sign_to_clipboard">Sign (Clipboard)</string> @@ -102,7 +103,8 @@ <string name="menu_sign_key">Sign key</string> <string name="menu_beam_preferences">Beam settings</string> <string name="menu_key_edit_cancel">Cancel</string> - + <string name="menu_encrypt_to">Encrypt to…</string> + <!-- label --> <string name="label_sign">Sign</string> <string name="label_message">Message</string> @@ -357,4 +359,7 @@ <item quantity="other">%d keys selected.</item> </plurals> + <!-- Key view --> + <string name="key_view_action_encrypt">Encrypt to this contact</string> + </resources> \ No newline at end of file diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListPublicFragment.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListPublicFragment.java index a21fa7ebd..d9fa0948a 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListPublicFragment.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListPublicFragment.java @@ -22,6 +22,7 @@ import java.util.Set; import org.sufficientlysecure.keychain.Id; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.provider.KeychainContract; +import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.UserIds; import org.sufficientlysecure.keychain.ui.adapter.KeyListPublicAdapter; @@ -56,7 +57,7 @@ import android.widget.ListView; public class KeyListPublicFragment extends Fragment implements AdapterView.OnItemClickListener, LoaderManager.LoaderCallbacks<Cursor> { -// private KeyListPublicActivity mKeyListPublicActivity; + // private KeyListPublicActivity mKeyListPublicActivity; private KeyListPublicAdapter mAdapter; private StickyListHeadersListView mStickyList; @@ -77,7 +78,7 @@ public class KeyListPublicFragment extends Fragment implements AdapterView.OnIte public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); -// mKeyListPublicActivity = (KeyListPublicActivity) getActivity(); + // mKeyListPublicActivity = (KeyListPublicActivity) getActivity(); mStickyList = (StickyListHeadersListView) getActivity().findViewById(R.id.list); mStickyList.setOnItemClickListener(this); @@ -105,7 +106,7 @@ public class KeyListPublicFragment extends Fragment implements AdapterView.OnIte @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { android.view.MenuInflater inflater = getActivity().getMenuInflater(); - inflater.inflate(R.menu.key_list_multi_selection, menu); + inflater.inflate(R.menu.key_list_public_multi, menu); return true; } @@ -117,20 +118,27 @@ public class KeyListPublicFragment extends Fragment implements AdapterView.OnIte @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { Set<Integer> positions = mAdapter.getCurrentCheckedPosition(); + + // get IDs for checked positions as long array + long[] ids = new long[positions.size()]; + int i = 0; + for (int pos : positions) { + ids[i] = mAdapter.getItemId(pos); + i++; + } + switch (item.getItemId()) { - case R.id.delete_entry: - - // get IDs for checked positions as long array - long[] ids = new long[positions.size()]; - int i = 0; - for (int pos : positions) { - ids[i] = mAdapter.getItemId(pos); - i++; - } + case R.id.menu_key_list_public_multi_encrypt: { + encrypt(ids); + + break; + } + case R.id.menu_key_list_public_multi_delete: { showDeleteKeyDialog(ids); break; } + } return false; } @@ -164,8 +172,7 @@ public class KeyListPublicFragment extends Fragment implements AdapterView.OnIte // setListShown(false); // Create an empty adapter we will use to display the loaded data. - mAdapter = new KeyListPublicAdapter(getActivity(), null, Id.type.public_key, - USER_ID_INDEX); + mAdapter = new KeyListPublicAdapter(getActivity(), null, Id.type.public_key, USER_ID_INDEX); mStickyList.setAdapter(mAdapter); // Prepare the loader. Either re-connect with an existing one, @@ -227,6 +234,20 @@ public class KeyListPublicFragment extends Fragment implements AdapterView.OnIte startActivity(detailsIntent); } + public void encrypt(long[] keyRingRowIds) { + // get master key ids from row ids + long[] keyRingIds = new long[keyRingRowIds.length]; + for (int i = 0; i < keyRingRowIds.length; i++) { + keyRingIds[i] = ProviderHelper.getPublicMasterKeyId(getActivity(), keyRingRowIds[i]); + } + + Intent intent = new Intent(getActivity(), EncryptActivity.class); + intent.setAction(EncryptActivity.ACTION_ENCRYPT); + intent.putExtra(EncryptActivity.EXTRA_ENCRYPTION_KEY_IDS, keyRingIds); + // used instead of startActivity set actionbar based on callingPackage + startActivityForResult(intent, 0); + } + /** * Show dialog to delete key * diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java index d7e2b8063..7d51c2ff4 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java @@ -50,6 +50,9 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.format.DateFormat; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; import android.widget.TextView; import android.widget.Toast; @@ -67,6 +70,7 @@ public class KeyViewActivity extends KeyActivity implements CreateNdefMessageCal private TextView mFingerint; private TextView mExpiry; private TextView mCreation; + private Button mActionEncrypt; // NFC private NfcAdapter mNfcAdapter; @@ -86,6 +90,7 @@ public class KeyViewActivity extends KeyActivity implements CreateNdefMessageCal mExpiry = (TextView) this.findViewById(R.id.expiry); mCreation = (TextView) this.findViewById(R.id.creation); mAlgorithm = (TextView) this.findViewById(R.id.algorithm); + mActionEncrypt = (Button) this.findViewById(R.id.action_encrypt); Intent intent = getIntent(); mDataUri = intent.getData(); @@ -146,7 +151,7 @@ public class KeyViewActivity extends KeyActivity implements CreateNdefMessageCal } } }; - + deleteKey(mDataUri, Id.type.public_key, returnHandler); return true; } @@ -172,6 +177,19 @@ public class KeyViewActivity extends KeyActivity implements CreateNdefMessageCal mCreation.setText(DateFormat.getDateFormat(getApplicationContext()).format( PgpKeyHelper.getCreationDate(mPublicKey))); mAlgorithm.setText(PgpKeyHelper.getAlgorithmInfo(mPublicKey)); + + mActionEncrypt.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + long[] encryptionKeyIds = new long[] { mPublicKey.getKeyID() }; + Intent intent = new Intent(KeyViewActivity.this, EncryptActivity.class); + intent.setAction(EncryptActivity.ACTION_ENCRYPT); + intent.putExtra(EncryptActivity.EXTRA_ENCRYPTION_KEY_IDS, encryptionKeyIds); + // used instead of startActivity set actionbar based on callingPackage + startActivityForResult(intent, 0); + } + }); } /** -- cgit v1.2.3