diff options
Diffstat (limited to 'OpenKeychain/src/main')
26 files changed, 409 insertions, 60 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java index fa0edec48..969a84f14 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java @@ -231,7 +231,8 @@ public class EditKeyFragment extends QueueingCryptoOperationFragment<SaveKeyring mUserIdsAddedAdapter = new UserIdsAddedAdapter(getActivity(), mSaveKeyringParcel.mAddUserIds, false); mUserIdsAddedList.setAdapter(mUserIdsAddedAdapter); - mSubkeysAdapter = new SubkeysAdapter(getActivity(), null, 0, mSaveKeyringParcel); + mSubkeysAdapter = new SubkeysAdapter(getActivity(), null, 0); + mSubkeysAdapter.setEditMode(mSaveKeyringParcel); mSubkeysList.setAdapter(mSubkeysAdapter); mSubkeysAddedAdapter = new SubkeysAddedAdapter(getActivity(), mSaveKeyringParcel.mAddSubKeys, false); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvSubkeysFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvSubkeysFragment.java index bd00c6780..ce68bfab1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvSubkeysFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvSubkeysFragment.java @@ -20,30 +20,59 @@ package org.sufficientlysecure.keychain.ui; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Messenger; +import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; +import android.view.ActionMode; +import android.view.ActionMode.Callback; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; import android.widget.ListView; +import android.widget.ViewAnimator; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround; +import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType; import org.sufficientlysecure.keychain.provider.KeychainContract; +import org.sufficientlysecure.keychain.service.SaveKeyringParcel; +import org.sufficientlysecure.keychain.service.SaveKeyringParcel.SubkeyChange; import org.sufficientlysecure.keychain.ui.adapter.SubkeysAdapter; +import org.sufficientlysecure.keychain.ui.adapter.SubkeysAddedAdapter; +import org.sufficientlysecure.keychain.ui.adapter.UserIdsAddedAdapter; +import org.sufficientlysecure.keychain.ui.dialog.AddSubkeyDialogFragment; +import org.sufficientlysecure.keychain.ui.dialog.EditSubkeyDialogFragment; +import org.sufficientlysecure.keychain.ui.dialog.EditSubkeyExpiryDialogFragment; +import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.util.Log; public class ViewKeyAdvSubkeysFragment extends LoaderFragment implements LoaderManager.LoaderCallbacks<Cursor> { public static final String ARG_DATA_URI = "data_uri"; + public static final int LOADER_ID_SUBKEYS = 0; private ListView mSubkeysList; + private ListView mSubkeysAddedList; + private View mSubkeysAddedLayout; + private ViewAnimator mSubkeyAddFabLayout; + private SubkeysAdapter mSubkeysAdapter; + private SubkeysAddedAdapter mSubkeysAddedAdapter; private Uri mDataUriSubkeys; + private boolean mHasSecret; + private SaveKeyringParcel mEditModeSaveKeyringParcel; + /** * Creates new instance of this fragment */ @@ -64,6 +93,36 @@ public class ViewKeyAdvSubkeysFragment extends LoaderFragment implements mSubkeysList = (ListView) view.findViewById(R.id.keys); + mSubkeysList = (ListView) view.findViewById(R.id.view_key_user_ids); + mSubkeysAddedList = (ListView) view.findViewById(R.id.view_key_user_ids_added); + mSubkeysAddedLayout = view.findViewById(R.id.view_key_user_ids_add_layout); + + mSubkeysList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + editSubkey(position); + } + }); + + View footer = new View(getActivity()); + int spacing = (int) android.util.TypedValue.applyDimension( + android.util.TypedValue.COMPLEX_UNIT_DIP, 72, getResources().getDisplayMetrics() + ); + android.widget.AbsListView.LayoutParams params = new android.widget.AbsListView.LayoutParams( + android.widget.AbsListView.LayoutParams.MATCH_PARENT, + spacing + ); + footer.setLayoutParams(params); + mSubkeysAddedList.addFooterView(footer, null, false); + + mSubkeyAddFabLayout = (ViewAnimator) view.findViewById(R.id.view_key_subkey_fab_layout); + view.findViewById(R.id.view_key_subkey_fab).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + addSubkey(); + } + }); + return root; } @@ -90,7 +149,7 @@ public class ViewKeyAdvSubkeysFragment extends LoaderFragment implements // Prepare the loaders. Either re-connect with an existing ones, // or start new ones. - getLoaderManager().initLoader(0, null, this); + getLoaderManager().initLoader(LOADER_ID_SUBKEYS, null, this); } public Loader<Cursor> onCreateLoader(int id, Bundle args) { @@ -122,4 +181,215 @@ public class ViewKeyAdvSubkeysFragment extends LoaderFragment implements mSubkeysAdapter.swapCursor(null); } + private void enterEditMode() { + FragmentActivity activity = getActivity(); + activity.startActionMode(new Callback() { + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + + mEditModeSaveKeyringParcel = new SaveKeyringParcel(0L, new byte[0]); + + mSubkeysAddedAdapter = + new SubkeysAddedAdapter(getActivity(), mEditModeSaveKeyringParcel.mAddSubKeys, false); + mSubkeysAddedList.setAdapter(mSubkeysAddedAdapter); + mSubkeysAddedLayout.setVisibility(View.VISIBLE); + mSubkeyAddFabLayout.setDisplayedChild(1); + + mSubkeysAdapter.setEditMode(mEditModeSaveKeyringParcel); + getLoaderManager().restartLoader(LOADER_ID_SUBKEYS, null, ViewKeyAdvSubkeysFragment.this); + + mode.setTitle(R.string.title_edit_subkeys); + mode.getMenuInflater().inflate(R.menu.action_edit_uids, menu); + + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + mode.finish(); + return true; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + mEditModeSaveKeyringParcel = null; + mSubkeysAdapter.setEditMode(null); + mSubkeysAddedLayout.setVisibility(View.GONE); + mSubkeyAddFabLayout.setDisplayedChild(0); + getLoaderManager().restartLoader(0, null, ViewKeyAdvSubkeysFragment.this); + } + }); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_edit_subkeys: + enterEditMode(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + private void addSubkey() { + boolean willBeMasterKey; + if (mSubkeysAdapter != null) { + willBeMasterKey = mSubkeysAdapter.getCount() == 0 && mSubkeysAddedAdapter.getCount() == 0; + } else { + willBeMasterKey = mSubkeysAddedAdapter.getCount() == 0; + } + + AddSubkeyDialogFragment addSubkeyDialogFragment = + AddSubkeyDialogFragment.newInstance(willBeMasterKey); + addSubkeyDialogFragment + .setOnAlgorithmSelectedListener( + new AddSubkeyDialogFragment.OnAlgorithmSelectedListener() { + @Override + public void onAlgorithmSelected(SaveKeyringParcel.SubkeyAdd newSubkey) { + mSubkeysAddedAdapter.add(newSubkey); + } + } + ); + addSubkeyDialogFragment.show(getActivity().getSupportFragmentManager(), "addSubkeyDialog"); + } + + private void editSubkey(final int position) { + final long keyId = mSubkeysAdapter.getKeyId(position); + + Handler returnHandler = new Handler() { + @Override + public void handleMessage(Message message) { + switch (message.what) { + case EditSubkeyDialogFragment.MESSAGE_CHANGE_EXPIRY: + editSubkeyExpiry(position); + break; + case EditSubkeyDialogFragment.MESSAGE_REVOKE: + // toggle + if (mEditModeSaveKeyringParcel.mRevokeSubKeys.contains(keyId)) { + mEditModeSaveKeyringParcel.mRevokeSubKeys.remove(keyId); + } else { + mEditModeSaveKeyringParcel.mRevokeSubKeys.add(keyId); + } + break; + case EditSubkeyDialogFragment.MESSAGE_STRIP: { + SecretKeyType secretKeyType = mSubkeysAdapter.getSecretKeyType(position); + if (secretKeyType == SecretKeyType.GNU_DUMMY) { + // Key is already stripped; this is a no-op. + break; + } + + SubkeyChange change = mEditModeSaveKeyringParcel.getSubkeyChange(keyId); + if (change == null) { + mEditModeSaveKeyringParcel.mChangeSubKeys.add(new SubkeyChange(keyId, true, false)); + break; + } + // toggle + change.mDummyStrip = !change.mDummyStrip; + if (change.mDummyStrip && change.mMoveKeyToCard) { + // User had chosen to divert key, but now wants to strip it instead. + change.mMoveKeyToCard = false; + } + break; + } + case EditSubkeyDialogFragment.MESSAGE_MOVE_KEY_TO_CARD: { + // TODO: enable later when Admin PIN handling is resolved + Notify.create(getActivity(), + "This feature will be available in an upcoming OpenKeychain version.", + Notify.Style.WARN).show(); + break; + +// Activity activity = EditKeyFragment.this.getActivity(); +// SecretKeyType secretKeyType = mSubkeysAdapter.getSecretKeyType(position); +// if (secretKeyType == SecretKeyType.DIVERT_TO_CARD || +// secretKeyType == SecretKeyType.GNU_DUMMY) { +// Notify.create(activity, R.string.edit_key_error_bad_nfc_stripped, Notify.Style.ERROR) +// .show((ViewGroup) activity.findViewById(R.id.import_snackbar)); +// break; +// } +// int algorithm = mSubkeysAdapter.getAlgorithm(position); +// // these are the PGP constants for RSA_GENERAL, RSA_ENCRYPT and RSA_SIGN +// if (algorithm != 1 && algorithm != 2 && algorithm != 3) { +// Notify.create(activity, R.string.edit_key_error_bad_nfc_algo, Notify.Style.ERROR) +// .show((ViewGroup) activity.findViewById(R.id.import_snackbar)); +// break; +// } +// if (mSubkeysAdapter.getKeySize(position) != 2048) { +// Notify.create(activity, R.string.edit_key_error_bad_nfc_size, Notify.Style.ERROR) +// .show((ViewGroup) activity.findViewById(R.id.import_snackbar)); +// break; +// } +// +// +// SubkeyChange change; +// change = mSaveKeyringParcel.getSubkeyChange(keyId); +// if (change == null) { +// mSaveKeyringParcel.mChangeSubKeys.add( +// new SubkeyChange(keyId, false, true) +// ); +// break; +// } +// // toggle +// change.mMoveKeyToCard = !change.mMoveKeyToCard; +// if (change.mMoveKeyToCard && change.mDummyStrip) { +// // User had chosen to strip key, but now wants to divert it. +// change.mDummyStrip = false; +// } +// break; + } + } + getLoaderManager().getLoader(LOADER_ID_SUBKEYS).forceLoad(); + } + }; + + // Create a new Messenger for the communication back + final Messenger messenger = new Messenger(returnHandler); + + DialogFragmentWorkaround.INTERFACE.runnableRunDelayed(new Runnable() { + public void run() { + EditSubkeyDialogFragment dialogFragment = + EditSubkeyDialogFragment.newInstance(messenger); + + dialogFragment.show(getActivity().getSupportFragmentManager(), "editSubkeyDialog"); + } + }); + } + + private void editSubkeyExpiry(final int position) { + final long keyId = mSubkeysAdapter.getKeyId(position); + final Long creationDate = mSubkeysAdapter.getCreationDate(position); + final Long expiryDate = mSubkeysAdapter.getExpiryDate(position); + + Handler returnHandler = new Handler() { + @Override + public void handleMessage(Message message) { + switch (message.what) { + case EditSubkeyExpiryDialogFragment.MESSAGE_NEW_EXPIRY: + mEditModeSaveKeyringParcel.getOrCreateSubkeyChange(keyId).mExpiry = + (Long) message.getData().getSerializable( + EditSubkeyExpiryDialogFragment.MESSAGE_DATA_EXPIRY); + break; + } + getLoaderManager().getLoader(LOADER_ID_SUBKEYS).forceLoad(); + } + }; + + // Create a new Messenger for the communication back + final Messenger messenger = new Messenger(returnHandler); + + DialogFragmentWorkaround.INTERFACE.runnableRunDelayed(new Runnable() { + public void run() { + EditSubkeyExpiryDialogFragment dialogFragment = + EditSubkeyExpiryDialogFragment.newInstance(messenger, creationDate, expiryDate); + + dialogFragment.show(getActivity().getSupportFragmentManager(), "editSubkeyExpiryDialog"); + } + }); + } + } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvUserIdsFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvUserIdsFragment.java index e98970754..c8e892276 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvUserIdsFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvUserIdsFragment.java @@ -101,8 +101,8 @@ public class ViewKeyAdvUserIdsFragment extends LoaderFragment implements footer.setLayoutParams(params); mUserIdsAddedList.addFooterView(footer, null, false); - mUserIdAddFabLayout = (ViewAnimator) view.findViewById(R.id.view_key_user_id_fab_layout); - view.findViewById(R.id.view_key_user_id_fab).setOnClickListener(new View.OnClickListener() { + mUserIdAddFabLayout = (ViewAnimator) view.findViewById(R.id.view_key_subkey_fab_layout); + view.findViewById(R.id.view_key_subkey_fab).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addUserId(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SubkeysAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SubkeysAdapter.java index 24f5f04a1..84608f2dc 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SubkeysAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SubkeysAdapter.java @@ -22,6 +22,7 @@ import android.content.res.ColorStateList; import android.database.Cursor; import android.graphics.PorterDuff; import android.graphics.Typeface; +import android.support.annotation.Nullable; import android.support.v4.widget.CursorAdapter; import android.text.Spannable; import android.text.SpannableString; @@ -49,7 +50,7 @@ public class SubkeysAdapter extends CursorAdapter { private LayoutInflater mInflater; private SaveKeyringParcel mSaveKeyringParcel; - private boolean hasAnySecret; + private boolean mHasAnySecret; private ColorStateList mDefaultTextColor; public static final String[] SUBKEYS_PROJECTION = new String[]{ @@ -85,16 +86,10 @@ public class SubkeysAdapter extends CursorAdapter { private static final int INDEX_EXPIRY = 13; private static final int INDEX_FINGERPRINT = 14; - public SubkeysAdapter(Context context, Cursor c, int flags, - SaveKeyringParcel saveKeyringParcel) { + public SubkeysAdapter(Context context, Cursor c, int flags) { super(context, c, flags); mInflater = LayoutInflater.from(context); - mSaveKeyringParcel = saveKeyringParcel; - } - - public SubkeysAdapter(Context context, Cursor c, int flags) { - this(context, c, flags, null); } public long getKeyId(int position) { @@ -133,12 +128,12 @@ public class SubkeysAdapter extends CursorAdapter { @Override public Cursor swapCursor(Cursor newCursor) { - hasAnySecret = false; + mHasAnySecret = false; if (newCursor != null && newCursor.moveToFirst()) { do { SecretKeyType hasSecret = SecretKeyType.fromNum(newCursor.getInt(INDEX_HAS_SECRET)); if (hasSecret.isUsable()) { - hasAnySecret = true; + mHasAnySecret = true; break; } } while (newCursor.moveToNext()); @@ -354,4 +349,18 @@ public class SubkeysAdapter extends CursorAdapter { } } + /** Set this adapter into edit mode. This mode displays additional info for + * each item from a supplied SaveKeyringParcel reference. + * + * Note that it is up to the caller to reload the underlying cursor after + * updating the SaveKeyringParcel! + * + * @see SaveKeyringParcel + * + * @param saveKeyringParcel The parcel to get info from, or null to leave edit mode. + */ + public void setEditMode(@Nullable SaveKeyringParcel saveKeyringParcel) { + mSaveKeyringParcel = saveKeyringParcel; + } + } diff --git a/OpenKeychain/src/main/res/layout/view_key_adv_main_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_adv_main_fragment.xml index ab0c59865..98ee2d492 100644 --- a/OpenKeychain/src/main/res/layout/view_key_adv_main_fragment.xml +++ b/OpenKeychain/src/main/res/layout/view_key_adv_main_fragment.xml @@ -63,7 +63,7 @@ android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_alignParentBottom="true" - android:id="@+id/view_key_user_id_fab_layout" + android:id="@+id/view_key_subkey_fab_layout" android:inAnimation="@anim/fab_slide_in" android:outAnimation="@anim/fab_slide_down"> @@ -72,7 +72,7 @@ android:layout_height="wrap_content" /> <android.support.design.widget.FloatingActionButton - android:id="@+id/view_key_user_id_fab" + android:id="@+id/view_key_subkey_fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="24dp" diff --git a/OpenKeychain/src/main/res/layout/view_key_adv_subkeys_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_adv_subkeys_fragment.xml index 62fd113f9..c86b32349 100644 --- a/OpenKeychain/src/main/res/layout/view_key_adv_subkeys_fragment.xml +++ b/OpenKeychain/src/main/res/layout/view_key_adv_subkeys_fragment.xml @@ -1,34 +1,88 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" +android:layout_width="match_parent" +android:layout_height="match_parent" +xmlns:tools="http://schemas.android.com/tools"> + +<ScrollView android:layout_width="match_parent" - android:layout_height="match_parent" - android:focusable="true" - android:focusableInTouchMode="true" - android:descendantFocusability="beforeDescendants" - android:orientation="vertical"> - - <TextView - style="@style/SectionHeader" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginBottom="4dp" - android:layout_marginTop="8dp" - android:layout_marginLeft="16dp" - android:layout_marginRight="16dp" - android:text="@string/section_keys" /> + android:layout_height="match_parent"> - <FrameLayout + <!-- focusable and related properties to workaround http://stackoverflow.com/q/16182331--> + <LinearLayout android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="wrap_content" + android:focusable="true" + android:focusableInTouchMode="true" + android:descendantFocusability="beforeDescendants" + android:orientation="vertical" + android:paddingLeft="16dp" + android:paddingRight="16dp"> + + <TextView + style="@style/SectionHeader" + android:layout_width="wrap_content" + android:layout_height="0dp" + android:layout_marginTop="8dp" + android:text="@string/section_keys" + android:layout_weight="1" /> - <ListView + <org.sufficientlysecure.keychain.ui.widget.FixedListView android:id="@+id/keys" android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_marginBottom="4dp" + android:layout_weight="1" + android:scrollbarStyle="outsideOverlay" /> + + <LinearLayout + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:scrollbarStyle="outsideOverlay" - android:paddingLeft="16dp" - android:paddingRight="16dp" - android:layout_marginBottom="8dp" /> - </FrameLayout> + android:orientation="vertical" + android:id="@+id/view_key_subkeys_add_layout" + android:visibility="gone" + tools:visibility="visible"> + + <View + android:layout_width="match_parent" + android:layout_height="1dip" + android:background="?android:attr/listDivider" /> + + <org.sufficientlysecure.keychain.ui.widget.FixedListView + android:id="@+id/view_key_subkeys_added" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + + </LinearLayout> + + </LinearLayout> + +</ScrollView> + +<ViewAnimator + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" + android:layout_alignParentBottom="true" + android:id="@+id/view_key_subkey_fab_layout" + android:inAnimation="@anim/fab_slide_in" + android:outAnimation="@anim/fab_slide_down"> + + <Space + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> + + <android.support.design.widget.FloatingActionButton + android:id="@+id/view_key_subkey_fab" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="24dp" + android:src="@drawable/ic_person_add_grey_24dp" + android:visibility="invisible" + android:layout_gravity="bottom" + tools:visibility="visible" /> + +</ViewAnimator> -</LinearLayout>
\ No newline at end of file +</RelativeLayout> diff --git a/OpenKeychain/src/main/res/menu/edit_subkeys.xml b/OpenKeychain/src/main/res/menu/edit_subkeys.xml new file mode 100644 index 000000000..f9f75ebbb --- /dev/null +++ b/OpenKeychain/src/main/res/menu/edit_subkeys.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <item + android:id="@+id/menu_edit_subkeys" + android:icon="@drawable/ic_mode_edit_white_24dp" + android:title="@string/key_view_action_edit_subkeys" + app:showAsAction="always" + /> + +</menu>
\ No newline at end of file diff --git a/OpenKeychain/src/main/res/menu/edit_user_id.xml b/OpenKeychain/src/main/res/menu/edit_user_id.xml index d1f856fd2..617dae841 100644 --- a/OpenKeychain/src/main/res/menu/edit_user_id.xml +++ b/OpenKeychain/src/main/res/menu/edit_user_id.xml @@ -5,7 +5,7 @@ <item android:id="@+id/menu_edit_user_ids" android:icon="@drawable/ic_mode_edit_white_24dp" - android:title="@string/key_view_action_edit" + android:title="@string/key_view_action_edit_ids" app:showAsAction="always" /> diff --git a/OpenKeychain/src/main/res/menu/key_view.xml b/OpenKeychain/src/main/res/menu/key_view.xml index c0adfcd6f..a3de4efed 100644 --- a/OpenKeychain/src/main/res/menu/key_view.xml +++ b/OpenKeychain/src/main/res/menu/key_view.xml @@ -7,7 +7,7 @@ android:icon="@drawable/ic_mode_edit_white_24dp" android:visible="false" app:showAsAction="always" - android:title="@string/key_view_action_edit" /> + android:title="@string/key_view_action_edit_ids" /> <item android:id="@+id/menu_key_view_refresh" diff --git a/OpenKeychain/src/main/res/values-cs/strings.xml b/OpenKeychain/src/main/res/values-cs/strings.xml index 25f6803d0..6b080e665 100644 --- a/OpenKeychain/src/main/res/values-cs/strings.xml +++ b/OpenKeychain/src/main/res/values-cs/strings.xml @@ -385,7 +385,7 @@ <string name="key_list_empty_text1">Žádný klíč nenalezen!</string> <string name="key_list_filter_show_all">Zobrazit všechny klíče</string> <!--Key view--> - <string name="key_view_action_edit">Editovat klíč</string> + <string name="key_view_action_edit_ids">Editovat klíč</string> <string name="key_view_action_encrypt">Zašifrovat text</string> <string name="key_view_action_encrypt_files">soubory</string> <string name="key_view_action_certify">Potvrdit klíč</string> diff --git a/OpenKeychain/src/main/res/values-de/strings.xml b/OpenKeychain/src/main/res/values-de/strings.xml index 6f4b8d1d5..6a29c338f 100644 --- a/OpenKeychain/src/main/res/values-de/strings.xml +++ b/OpenKeychain/src/main/res/values-de/strings.xml @@ -572,7 +572,7 @@ <string name="key_list_fab_search">Schlüsselsuche</string> <string name="key_list_fab_import">Aus Datei importieren</string> <!--Key view--> - <string name="key_view_action_edit">Schlüssel bearbeiten</string> + <string name="key_view_action_edit_ids">Schlüssel bearbeiten</string> <string name="key_view_action_encrypt">Text verschlüsseln</string> <string name="key_view_action_encrypt_files">Dateien</string> <string name="key_view_action_certify">Schlüssel bestätigen</string> diff --git a/OpenKeychain/src/main/res/values-es/strings.xml b/OpenKeychain/src/main/res/values-es/strings.xml index b39ccac5c..b895ced33 100644 --- a/OpenKeychain/src/main/res/values-es/strings.xml +++ b/OpenKeychain/src/main/res/values-es/strings.xml @@ -581,7 +581,7 @@ <string name="key_list_fab_search">Búsqueda de clave</string> <string name="key_list_fab_import">Importar desde fichero</string> <!--Key view--> - <string name="key_view_action_edit">Editar clave</string> + <string name="key_view_action_edit_ids">Editar clave</string> <string name="key_view_action_encrypt">Cifrar texto</string> <string name="key_view_action_encrypt_files">ficheros</string> <string name="key_view_action_certify">Confirmar clave</string> diff --git a/OpenKeychain/src/main/res/values-eu/strings.xml b/OpenKeychain/src/main/res/values-eu/strings.xml index 3d2ba88d8..b26be00ce 100644 --- a/OpenKeychain/src/main/res/values-eu/strings.xml +++ b/OpenKeychain/src/main/res/values-eu/strings.xml @@ -576,7 +576,7 @@ <string name="key_list_fab_search">Giltza Bilaketa</string> <string name="key_list_fab_import">Inportatu Agiritik</string> <!--Key view--> - <string name="key_view_action_edit">Editatu giltza</string> + <string name="key_view_action_edit_ids">Editatu giltza</string> <string name="key_view_action_encrypt">Enkriptatu idazkia</string> <string name="key_view_action_encrypt_files">agiriak</string> <string name="key_view_action_certify">Baieztatu giltza</string> diff --git a/OpenKeychain/src/main/res/values-fr/strings.xml b/OpenKeychain/src/main/res/values-fr/strings.xml index d80ff8988..506cf2af9 100644 --- a/OpenKeychain/src/main/res/values-fr/strings.xml +++ b/OpenKeychain/src/main/res/values-fr/strings.xml @@ -586,7 +586,7 @@ <string name="key_list_fab_search">Recherche de clefs</string> <string name="key_list_fab_import">Importer d\'un fichier</string> <!--Key view--> - <string name="key_view_action_edit">Modifier la clef</string> + <string name="key_view_action_edit_ids">Modifier la clef</string> <string name="key_view_action_encrypt">Chiffrer un texte</string> <string name="key_view_action_encrypt_files">fichiers</string> <string name="key_view_action_certify">Confirmer la clef</string> diff --git a/OpenKeychain/src/main/res/values-it/strings.xml b/OpenKeychain/src/main/res/values-it/strings.xml index 42478af12..8a9fc394f 100644 --- a/OpenKeychain/src/main/res/values-it/strings.xml +++ b/OpenKeychain/src/main/res/values-it/strings.xml @@ -441,7 +441,7 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars <string name="key_list_empty_text1">Nessuna chiave trovata!</string> <string name="key_list_filter_show_all">Mostra tutte le chiavi</string> <!--Key view--> - <string name="key_view_action_edit">Modifica chiave</string> + <string name="key_view_action_edit_ids">Modifica chiave</string> <string name="key_view_action_encrypt">Codifica Testo</string> <string name="key_view_action_encrypt_files">documenti</string> <string name="key_view_action_update">Aggiorna dal server delle chiavi</string> diff --git a/OpenKeychain/src/main/res/values-ja/strings.xml b/OpenKeychain/src/main/res/values-ja/strings.xml index 82a4c8f33..5b1b3e9ef 100644 --- a/OpenKeychain/src/main/res/values-ja/strings.xml +++ b/OpenKeychain/src/main/res/values-ja/strings.xml @@ -573,7 +573,7 @@ <string name="key_list_fab_search">鍵の検索</string> <string name="key_list_fab_import">ファイルからインポート</string> <!--Key view--> - <string name="key_view_action_edit">鍵の編集</string> + <string name="key_view_action_edit_ids">鍵の編集</string> <string name="key_view_action_encrypt">テキスト暗号化</string> <string name="key_view_action_encrypt_files">ファイル</string> <string name="key_view_action_certify">鍵の確認</string> diff --git a/OpenKeychain/src/main/res/values-nl/strings.xml b/OpenKeychain/src/main/res/values-nl/strings.xml index 04fac67f2..932832f60 100644 --- a/OpenKeychain/src/main/res/values-nl/strings.xml +++ b/OpenKeychain/src/main/res/values-nl/strings.xml @@ -489,7 +489,7 @@ <string name="key_list_empty_text1">Geen sleutels gevonden!</string> <string name="key_list_filter_show_all">Alle sleutels weergeven</string> <!--Key view--> - <string name="key_view_action_edit">Sleutel bewerken</string> + <string name="key_view_action_edit_ids">Sleutel bewerken</string> <string name="key_view_action_encrypt">Versleutel tekst</string> <string name="key_view_action_encrypt_files">bestanden</string> <string name="key_view_action_certify">Sleutel bevestigen</string> diff --git a/OpenKeychain/src/main/res/values-pl/strings.xml b/OpenKeychain/src/main/res/values-pl/strings.xml index 5c80bf161..adb3cf49f 100644 --- a/OpenKeychain/src/main/res/values-pl/strings.xml +++ b/OpenKeychain/src/main/res/values-pl/strings.xml @@ -373,7 +373,7 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw <string name="key_list_empty_text1">Nie znaleziono kluczy!</string> <string name="key_list_filter_show_all">Pokaż wszystkie klucze</string> <!--Key view--> - <string name="key_view_action_edit">Edytuj klucz</string> + <string name="key_view_action_edit_ids">Edytuj klucz</string> <string name="key_view_action_encrypt">Szyfruj tekst</string> <string name="key_view_action_encrypt_files">pliki</string> <string name="key_view_action_update">Aktualizuj z serwera kluczy</string> diff --git a/OpenKeychain/src/main/res/values-ru/strings.xml b/OpenKeychain/src/main/res/values-ru/strings.xml index c1710c063..10dd79cba 100644 --- a/OpenKeychain/src/main/res/values-ru/strings.xml +++ b/OpenKeychain/src/main/res/values-ru/strings.xml @@ -487,7 +487,7 @@ <string name="key_list_filter_show_all">Показать все ключи</string> <string name="key_list_fab_search">Поиск ключа</string> <!--Key view--> - <string name="key_view_action_edit">Изменить ключ</string> + <string name="key_view_action_edit_ids">Изменить ключ</string> <string name="key_view_action_encrypt">Зашифровать текст</string> <string name="key_view_action_encrypt_files">файлы</string> <string name="key_view_action_certify">Подтвердить ключ</string> diff --git a/OpenKeychain/src/main/res/values-sl/strings.xml b/OpenKeychain/src/main/res/values-sl/strings.xml index d7db38ccf..697de0984 100644 --- a/OpenKeychain/src/main/res/values-sl/strings.xml +++ b/OpenKeychain/src/main/res/values-sl/strings.xml @@ -426,7 +426,7 @@ <string name="key_list_empty_text1">Najden ni bil noben ključ!</string> <string name="key_list_filter_show_all">Prikaži vse ključe</string> <!--Key view--> - <string name="key_view_action_edit">Uredi ključ</string> + <string name="key_view_action_edit_ids">Uredi ključ</string> <string name="key_view_action_encrypt">Šifriraj besedilo</string> <string name="key_view_action_encrypt_files">datoteke</string> <string name="key_view_action_certify">Potrdi ključ</string> diff --git a/OpenKeychain/src/main/res/values-sr/strings.xml b/OpenKeychain/src/main/res/values-sr/strings.xml index f19f92087..8ff26f896 100644 --- a/OpenKeychain/src/main/res/values-sr/strings.xml +++ b/OpenKeychain/src/main/res/values-sr/strings.xml @@ -600,7 +600,7 @@ <string name="key_list_fab_search">Претрага кључа</string> <string name="key_list_fab_import">Увези из фајла</string> <!--Key view--> - <string name="key_view_action_edit">Уреди кључ</string> + <string name="key_view_action_edit_ids">Уреди кључ</string> <string name="key_view_action_encrypt">Шифруј текст</string> <string name="key_view_action_encrypt_files">фајлови</string> <string name="key_view_action_certify">Потврди кључ</string> diff --git a/OpenKeychain/src/main/res/values-sv/strings.xml b/OpenKeychain/src/main/res/values-sv/strings.xml index 23d7e6908..f3a818ecf 100644 --- a/OpenKeychain/src/main/res/values-sv/strings.xml +++ b/OpenKeychain/src/main/res/values-sv/strings.xml @@ -476,7 +476,7 @@ <string name="key_list_fab_search">Nyckelsökning</string> <string name="key_list_fab_import">Importera från fil</string> <!--Key view--> - <string name="key_view_action_edit">Redigera nyckel</string> + <string name="key_view_action_edit_ids">Redigera nyckel</string> <string name="key_view_action_encrypt">Kryptera text</string> <string name="key_view_action_encrypt_files">filer</string> <string name="key_view_action_certify">Bekräfta nyckel</string> diff --git a/OpenKeychain/src/main/res/values-tr/strings.xml b/OpenKeychain/src/main/res/values-tr/strings.xml index 22cd4e361..b6088a954 100644 --- a/OpenKeychain/src/main/res/values-tr/strings.xml +++ b/OpenKeychain/src/main/res/values-tr/strings.xml @@ -302,7 +302,7 @@ </plurals> <string name="key_list_filter_show_all">Tüm anahtarları göster</string> <!--Key view--> - <string name="key_view_action_edit">Anahtarı düzenle</string> + <string name="key_view_action_edit_ids">Anahtarı düzenle</string> <string name="key_view_action_encrypt">Metni şifrele</string> <string name="key_view_action_encrypt_files">dosyalar</string> <string name="key_view_action_update">Anahtar sunucusundan güncelle</string> diff --git a/OpenKeychain/src/main/res/values-uk/strings.xml b/OpenKeychain/src/main/res/values-uk/strings.xml index 0613819e9..97f9ec391 100644 --- a/OpenKeychain/src/main/res/values-uk/strings.xml +++ b/OpenKeychain/src/main/res/values-uk/strings.xml @@ -309,7 +309,7 @@ <string name="key_list_empty_text1">Ключ не знайдено!</string> <string name="key_list_filter_show_all">Показати усі ключі</string> <!--Key view--> - <string name="key_view_action_edit">Редагувати ключ</string> + <string name="key_view_action_edit_ids">Редагувати ключ</string> <string name="key_view_action_encrypt">Зашифрувати текст</string> <string name="key_view_action_encrypt_files">файли</string> <string name="key_view_action_update">Оновити із сервера ключів</string> diff --git a/OpenKeychain/src/main/res/values-zh-rTW/strings.xml b/OpenKeychain/src/main/res/values-zh-rTW/strings.xml index 81b3bf126..cb4ebf002 100644 --- a/OpenKeychain/src/main/res/values-zh-rTW/strings.xml +++ b/OpenKeychain/src/main/res/values-zh-rTW/strings.xml @@ -479,7 +479,7 @@ <!--Key list--> <string name="key_list_empty_text1">找不到金鑰!</string> <!--Key view--> - <string name="key_view_action_edit">編輯金鑰</string> + <string name="key_view_action_edit_ids">編輯金鑰</string> <string name="key_view_action_encrypt">加密文字</string> <string name="key_view_action_encrypt_files">檔案</string> <string name="key_view_action_share_with">分享...</string> diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 78d4e03ee..ee498b969 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -666,7 +666,8 @@ <string name="key_list_fab_import">"Import from File"</string> <!-- Key view --> - <string name="key_view_action_edit">"Edit key"</string> + <string name="key_view_action_edit_ids">"Edit Identities"</string> + <string name="key_view_action_edit_subkeys">"Edit Subkeys"</string> <string name="key_view_action_encrypt">"Encrypt text"</string> <string name="key_view_action_encrypt_files">"files"</string> <string name="key_view_action_certify">"Confirm key"</string> @@ -1707,5 +1708,7 @@ <string name="menu_uids_save">Save</string> <string name="menu_uids_save">"Save"</string> <string name="title_edit_identities">"Edit Identities"</string> + <string name="title_edit_subkeys">"Edit Subkeys"</string> + <string name="btn_search_for_query">"Search for\n'%s'"</string> </resources> |