From a363a6cacb8070bacd37386c6fd4b038c518d640 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Sat, 24 Mar 2018 18:10:35 +0100 Subject: [PATCH] remove "Edit Identities" button from identities card --- OpenKeychain/src/main/AndroidManifest.xml | 4 - .../keychain/ui/EditIdentitiesActivity.java | 64 --- .../keychain/ui/EditIdentitiesFragment.java | 456 ------------------ .../presenter/IdentitiesPresenter.java | 18 +- .../ui/keyview/view/IdentitiesCardView.java | 16 - .../res/layout/edit_identities_activity.xml | 27 -- .../res/layout/edit_identities_fragment.xml | 87 ---- .../src/main/res/layout/identities_card.xml | 8 - 8 files changed, 1 insertion(+), 679 deletions(-) delete mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditIdentitiesActivity.java delete mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditIdentitiesFragment.java delete mode 100644 OpenKeychain/src/main/res/layout/edit_identities_activity.xml delete mode 100644 OpenKeychain/src/main/res/layout/edit_identities_fragment.xml diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml index f5d3c99e3..8d76101ae 100644 --- a/OpenKeychain/src/main/AndroidManifest.xml +++ b/OpenKeychain/src/main/AndroidManifest.xml @@ -154,10 +154,6 @@ android:name=".ui.EditKeyActivity" android:configChanges="orientation|screenSize|keyboardHidden|keyboard" android:label="@string/title_edit_key" /> - . - */ - -package org.sufficientlysecure.keychain.ui; - -import android.net.Uri; -import android.os.Bundle; - -import org.sufficientlysecure.keychain.R; -import org.sufficientlysecure.keychain.ui.base.BaseActivity; -import timber.log.Timber; - - -public class EditIdentitiesActivity extends BaseActivity { - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - Uri dataUri = getIntent().getData(); - if (dataUri == null) { - Timber.e("Either a key Uri or EXTRA_SAVE_KEYRING_PARCEL is required!"); - finish(); - return; - } - - loadFragment(savedInstanceState, dataUri); - } - - @Override - protected void initLayout() { - setContentView(R.layout.edit_identities_activity); - } - - private void loadFragment(Bundle savedInstanceState, Uri dataUri) { - // However, if we're being restored from a previous state, - // then we don't need to do anything and should return or else - // we could end up with overlapping fragments. - if (savedInstanceState != null) { - return; - } - - EditIdentitiesFragment editIdentitiesFragment = EditIdentitiesFragment.newInstance(dataUri); - - getSupportFragmentManager().beginTransaction() - .replace(R.id.edit_key_fragment_container, editIdentitiesFragment) - .commit(); - } - -} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditIdentitiesFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditIdentitiesFragment.java deleted file mode 100644 index cda0deacb..000000000 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditIdentitiesFragment.java +++ /dev/null @@ -1,456 +0,0 @@ -/* - * Copyright (C) 2017 Schürmann & Breitmoser GbR - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.sufficientlysecure.keychain.ui; - - -import android.app.Activity; -import android.content.Intent; -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.Fragment; -import android.support.v4.app.LoaderManager; -import android.support.v4.content.CursorLoader; -import android.support.v4.content.Loader; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.CheckBox; -import android.widget.ListView; - -import org.sufficientlysecure.keychain.Constants; -import org.sufficientlysecure.keychain.R; -import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround; -import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress; -import org.sufficientlysecure.keychain.operations.results.EditKeyResult; -import org.sufficientlysecure.keychain.operations.results.OperationResult; -import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; -import org.sufficientlysecure.keychain.operations.results.SingletonResult; -import org.sufficientlysecure.keychain.operations.results.UploadResult; -import org.sufficientlysecure.keychain.pgp.KeyRing; -import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; -import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing; -import org.sufficientlysecure.keychain.provider.KeyRepository; -import org.sufficientlysecure.keychain.provider.KeyRepository.NotFoundException; -import org.sufficientlysecure.keychain.provider.KeychainContract; -import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets; -import org.sufficientlysecure.keychain.service.SaveKeyringParcel; -import org.sufficientlysecure.keychain.service.UploadKeyringParcel; -import org.sufficientlysecure.keychain.ui.adapter.UserIdsAdapter; -import org.sufficientlysecure.keychain.ui.adapter.UserIdsAddedAdapter; -import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; -import org.sufficientlysecure.keychain.ui.dialog.AddUserIdDialogFragment; -import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment; -import org.sufficientlysecure.keychain.ui.dialog.SetPassphraseDialogFragment; -import org.sufficientlysecure.keychain.util.Preferences; -import timber.log.Timber; - - -public class EditIdentitiesFragment extends Fragment - implements LoaderManager.LoaderCallbacks { - - public static final String ARG_DATA_URI = "uri"; - - private CheckBox mUploadKeyCheckbox; - private ListView mUserIdsList; - private ListView mUserIdsAddedList; - private View mAddUserId; - - private static final int LOADER_ID_USER_IDS = 0; - - private UserIdsAdapter mUserIdsAdapter; - private UserIdsAddedAdapter mUserIdsAddedAdapter; - - private Uri mDataUri; - - private SaveKeyringParcel.Builder mSkpBuilder; - - private CryptoOperationHelper mEditOpHelper; - private CryptoOperationHelper mUploadOpHelper; - - private String mPrimaryUserId; - - /** - * Creates new instance of this fragment - */ - public static EditIdentitiesFragment newInstance(Uri dataUri) { - EditIdentitiesFragment frag = new EditIdentitiesFragment(); - - Bundle args = new Bundle(); - args.putParcelable(ARG_DATA_URI, dataUri); - - frag.setArguments(args); - - return frag; - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup superContainer, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.edit_identities_fragment, null); - - mUploadKeyCheckbox = view.findViewById(R.id.edit_identities_upload_checkbox); - mUserIdsList = view.findViewById(R.id.edit_identities_user_ids); - mUserIdsAddedList = view.findViewById(R.id.edit_identities_user_ids_added); - mAddUserId = view.findViewById(R.id.edit_identities_add_user_id); - - // If this is a debug build, don't upload by default - if (Constants.DEBUG) { - mUploadKeyCheckbox.setChecked(false); - } - - return view; - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - ((EditIdentitiesActivity) getActivity()).setFullScreenDialogDoneClose( - R.string.btn_save, - new OnClickListener() { - @Override - public void onClick(View v) { - editKey(); - } - }, new OnClickListener() { - @Override - public void onClick(View v) { - getActivity().setResult(Activity.RESULT_CANCELED); - getActivity().finish(); - } - }); - - Uri dataUri = getArguments().getParcelable(ARG_DATA_URI); - if (dataUri == null) { - Timber.e("Either a key Uri is required!"); - getActivity().finish(); - return; - } - - initView(); - loadData(dataUri); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (mEditOpHelper != null) { - mEditOpHelper.handleActivityResult(requestCode, resultCode, data); - } - if (mUploadOpHelper != null) { - mUploadOpHelper.handleActivityResult(requestCode, resultCode, data); - } - - super.onActivityResult(requestCode, resultCode, data); - } - - private void loadData(Uri dataUri) { - mDataUri = dataUri; - - Timber.i("dataUri: " + mDataUri); - - // load the secret key ring. we do verify here that the passphrase is correct, so cached won't do - try { - Uri secretUri = KeychainContract.KeyRings.buildUnifiedKeyRingUri(mDataUri); - CachedPublicKeyRing keyRing = - KeyRepository.create(getContext()).getCachedPublicKeyRing(secretUri); - long masterKeyId = keyRing.getMasterKeyId(); - - // check if this is a master secret key we can work with - switch (keyRing.getSecretKeyType(masterKeyId)) { - case GNU_DUMMY: - finishWithError(LogType.MSG_EK_ERROR_DUMMY); - return; - } - - mSkpBuilder = SaveKeyringParcel.buildChangeKeyringParcel(masterKeyId, keyRing.getFingerprint()); - mPrimaryUserId = keyRing.getPrimaryUserIdWithFallback(); - - } catch (PgpKeyNotFoundException | NotFoundException e) { - finishWithError(LogType.MSG_EK_ERROR_NOT_FOUND); - return; - } - - // Prepare the loaders. Either re-connect with an existing ones, - // or start new ones. - getLoaderManager().initLoader(LOADER_ID_USER_IDS, null, EditIdentitiesFragment.this); - - mUserIdsAdapter = new UserIdsAdapter(getActivity(), null, 0); - mUserIdsAdapter.setEditMode(mSkpBuilder); - mUserIdsList.setAdapter(mUserIdsAdapter); - - // TODO: SaveParcel from savedInstance?! - mUserIdsAddedAdapter = new UserIdsAddedAdapter(getActivity(), mSkpBuilder.getMutableAddUserIds(), false); - mUserIdsAddedList.setAdapter(mUserIdsAddedAdapter); - } - - private void initView() { - mAddUserId.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - addUserId(); - } - }); - - mUserIdsList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - editUserId(position); - } - }); - } - - public Loader onCreateLoader(int id, Bundle args) { - - switch (id) { - case LOADER_ID_USER_IDS: { - Uri baseUri = UserPackets.buildUserIdsUri(mDataUri); - return new CursorLoader(getActivity(), baseUri, - UserIdsAdapter.USER_PACKETS_PROJECTION, null, null, null); - } - - default: - return null; - } - } - - public void onLoadFinished(Loader loader, Cursor data) { - // Swap the new cursor in. (The framework will take care of closing the - // old cursor once we return.) - switch (loader.getId()) { - case LOADER_ID_USER_IDS: { - mUserIdsAdapter.swapCursor(data); - break; - } - } - } - - /** - * This is called when the last Cursor provided to onLoadFinished() above is about to be closed. - * We need to make sure we are no longer using it. - */ - public void onLoaderReset(Loader loader) { - switch (loader.getId()) { - case LOADER_ID_USER_IDS: { - mUserIdsAdapter.swapCursor(null); - break; - } - } - } - - private void editUserId(final int position) { - final String userId = mUserIdsAdapter.getUserId(position); - final boolean isRevoked = mUserIdsAdapter.getIsRevoked(position); - final boolean isRevokedPending = mUserIdsAdapter.getIsRevokedPending(position); - - Handler returnHandler = new Handler() { - @Override - public void handleMessage(Message message) { - switch (message.what) { - case EditUserIdDialogFragment.MESSAGE_CHANGE_PRIMARY_USER_ID: - // toggle - if (mSkpBuilder.getChangePrimaryUserId() != null - && mSkpBuilder.getChangePrimaryUserId().equals(userId)) { - mSkpBuilder.setChangePrimaryUserId(null); - } else { - mSkpBuilder.setChangePrimaryUserId(userId); - } - break; - case EditUserIdDialogFragment.MESSAGE_REVOKE: - // toggle - if (mSkpBuilder.getMutableRevokeUserIds().contains(userId)) { - mSkpBuilder.removeRevokeUserId(userId); - } else { - mSkpBuilder.addRevokeUserId(userId); - // not possible to revoke and change to primary user id - if (mSkpBuilder.getChangePrimaryUserId() != null - && mSkpBuilder.getChangePrimaryUserId().equals(userId)) { - mSkpBuilder.setChangePrimaryUserId(null); - } - } - break; - } - getLoaderManager().getLoader(LOADER_ID_USER_IDS).forceLoad(); - } - }; - - // Create a new Messenger for the communication back - final Messenger messenger = new Messenger(returnHandler); - - DialogFragmentWorkaround.INTERFACE.runnableRunDelayed(new Runnable() { - public void run() { - EditUserIdDialogFragment dialogFragment = - EditUserIdDialogFragment.newInstance(messenger, isRevoked, isRevokedPending); - dialogFragment.show(getActivity().getSupportFragmentManager(), "editUserIdDialog"); - } - }); - } - - private void addUserId() { - Handler returnHandler = new Handler() { - @Override - public void handleMessage(Message message) { - if (message.what == SetPassphraseDialogFragment.MESSAGE_OKAY) { - Bundle data = message.getData(); - - // add new user id - mUserIdsAddedAdapter.add(data - .getString(AddUserIdDialogFragment.MESSAGE_DATA_USER_ID)); - } - } - }; - - // Create a new Messenger for the communication back - Messenger messenger = new Messenger(returnHandler); - - // pre-fill out primary name - String predefinedName = KeyRing.splitUserId(mPrimaryUserId).name; - AddUserIdDialogFragment addUserIdDialog = AddUserIdDialogFragment.newInstance(messenger, predefinedName); - - addUserIdDialog.show(getActivity().getSupportFragmentManager(), "addUserIdDialog"); - } - - - private void editKey() { - EditIdentitiesActivity activity = (EditIdentitiesActivity) getActivity(); - if (activity == null) { - // this is a ui-triggered action, nvm if it fails while detached! - return; - } - - CryptoOperationHelper.Callback editKeyCallback - = new CryptoOperationHelper.Callback() { - @Override - public SaveKeyringParcel createOperationInput() { - return mSkpBuilder.build(); - } - - @Override - public void onCryptoOperationSuccess(EditKeyResult result) { - - if (mUploadKeyCheckbox.isChecked()) { - // result will be displayed after upload - uploadKey(result); - return; - } - - finishWithResult(result); - } - - @Override - public void onCryptoOperationCancelled() { - - } - - @Override - public void onCryptoOperationError(EditKeyResult result) { - displayResult(result); - } - - @Override - public boolean onCryptoSetProgress(String msg, int progress, int max) { - return false; - } - }; - - mEditOpHelper = new CryptoOperationHelper<>(1, this, editKeyCallback, R.string.progress_building_key); - mEditOpHelper.cryptoOperation(); - } - - - private void uploadKey(final EditKeyResult editKeyResult) { - Activity activity = getActivity(); - // if the activity is gone at this point, there is nothing we can do! - if (activity == null) { - return; - } - - if (editKeyResult.mMasterKeyId == null) { - throw new AssertionError("A successful edit key result must include a master key id!"); - } - - final long masterKeyId = editKeyResult.mMasterKeyId; - // upload to favorite keyserver - final HkpKeyserverAddress keyserver = Preferences.getPreferences(activity).getPreferredKeyserver(); - - CryptoOperationHelper.Callback callback - = new CryptoOperationHelper.Callback() { - - @Override - public UploadKeyringParcel createOperationInput() { - return UploadKeyringParcel.createWithKeyId(keyserver, masterKeyId); - } - - @Override - public void onCryptoOperationSuccess(UploadResult result) { - handleResult(result); - } - - @Override - public void onCryptoOperationCancelled() { - - } - - @Override - public void onCryptoOperationError(UploadResult result) { - displayResult(result); - } - - public void handleResult(UploadResult result) { - editKeyResult.getLog().add(result, 0); - finishWithResult(editKeyResult); - } - - @Override - public boolean onCryptoSetProgress(String msg, int progress, int max) { - return false; - } - }; - - mUploadOpHelper = new CryptoOperationHelper<>(3, this, callback, R.string.progress_uploading); - mUploadOpHelper.cryptoOperation(); - } - - private void displayResult(OperationResult result) { - Activity activity = getActivity(); - if (activity == null) { - return; - } - result.createNotify(activity).show(); - } - - void finishWithError(LogType reason) { - SingletonResult errorResult = new SingletonResult(SingletonResult.RESULT_ERROR, reason); - finishWithResult(errorResult); - } - - public void finishWithResult(OperationResult result) { - Activity activity = getActivity(); - if (activity == null) { - return; - } - - Intent data = new Intent(); - data.putExtra(OperationResult.EXTRA_RESULT, result); - activity.setResult(Activity.RESULT_OK, data); - activity.finish(); - } -} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/presenter/IdentitiesPresenter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/presenter/IdentitiesPresenter.java index 499be251c..03873475b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/presenter/IdentitiesPresenter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/presenter/IdentitiesPresenter.java @@ -31,18 +31,16 @@ import android.support.v4.content.Loader; import android.view.View; import org.sufficientlysecure.keychain.provider.AutocryptPeerDataAccessObject; -import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets; -import org.sufficientlysecure.keychain.ui.EditIdentitiesActivity; import org.sufficientlysecure.keychain.ui.adapter.IdentityAdapter; import org.sufficientlysecure.keychain.ui.adapter.IdentityAdapter.IdentityClickListener; import org.sufficientlysecure.keychain.ui.dialog.UserIdInfoDialogFragment; import org.sufficientlysecure.keychain.ui.keyview.LinkedIdViewFragment; import org.sufficientlysecure.keychain.ui.keyview.loader.IdentityLoader; +import org.sufficientlysecure.keychain.ui.keyview.loader.IdentityLoader.AutocryptPeerInfo; import org.sufficientlysecure.keychain.ui.keyview.loader.IdentityLoader.IdentityInfo; import org.sufficientlysecure.keychain.ui.keyview.loader.IdentityLoader.LinkedIdInfo; -import org.sufficientlysecure.keychain.ui.keyview.loader.IdentityLoader.AutocryptPeerInfo; import org.sufficientlysecure.keychain.ui.keyview.loader.IdentityLoader.UserIdInfo; import org.sufficientlysecure.keychain.ui.linked.LinkedIdWizard; import org.sufficientlysecure.keychain.util.Preferences; @@ -87,15 +85,9 @@ public class IdentitiesPresenter implements LoaderCallbacks> }); view.setIdentitiesAdapter(identitiesAdapter); - view.setEditIdentitiesButtonVisible(isSecret); view.setAddLinkedIdButtonVisible(showLinkedIds); view.setIdentitiesCardListener(new IdentitiesCardListener() { - @Override - public void onClickEditIdentities() { - editIdentities(); - } - @Override public void onClickAddIdentity() { addLinkedIdentity(); @@ -163,12 +155,6 @@ public class IdentitiesPresenter implements LoaderCallbacks> } } - private void editIdentities() { - Intent editIntent = new Intent(context, EditIdentitiesActivity.class); - editIntent.setData(KeychainContract.KeyRingData.buildSecretKeyRingUri(masterKeyId)); - viewKeyMvpView.startActivityAndShowResultSnackbar(editIntent); - } - private void addLinkedIdentity() { Intent intent = new Intent(context, LinkedIdWizard.class); intent.setData(KeyRings.buildUnifiedKeyRingUri(masterKeyId)); @@ -190,12 +176,10 @@ public class IdentitiesPresenter implements LoaderCallbacks> public interface IdentitiesMvpView { void setIdentitiesAdapter(IdentityAdapter userIdsAdapter); void setIdentitiesCardListener(IdentitiesCardListener identitiesCardListener); - void setEditIdentitiesButtonVisible(boolean show); void setAddLinkedIdButtonVisible(boolean showLinkedIds); } public interface IdentitiesCardListener { - void onClickEditIdentities(); void onClickAddIdentity(); } } \ No newline at end of file diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/view/IdentitiesCardView.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/view/IdentitiesCardView.java index 38d70c884..ea3af35a8 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/view/IdentitiesCardView.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/view/IdentitiesCardView.java @@ -39,7 +39,6 @@ public class IdentitiesCardView extends CardView implements IdentitiesMvpView { private IdentitiesCardListener identitiesCardListener; private final Button linkedIdsAddButton; - private final Button userIdsEditButton; public IdentitiesCardView(Context context, AttributeSet attrs) { super(context, attrs); @@ -50,16 +49,6 @@ public class IdentitiesCardView extends CardView implements IdentitiesMvpView { vIdentities.setLayoutManager(new LinearLayoutManager(context)); vIdentities.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL_LIST, false)); - userIdsEditButton = view.findViewById(R.id.view_key_card_user_ids_edit); - userIdsEditButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if (identitiesCardListener != null) { - identitiesCardListener.onClickEditIdentities(); - } - } - }); - linkedIdsAddButton = view.findViewById(R.id.view_key_card_linked_ids_add); linkedIdsAddButton.setOnClickListener(new View.OnClickListener() { @Override @@ -81,11 +70,6 @@ public class IdentitiesCardView extends CardView implements IdentitiesMvpView { this.identitiesCardListener = identitiesCardListener; } - @Override - public void setEditIdentitiesButtonVisible(boolean show) { - userIdsEditButton.setVisibility(show ? View.VISIBLE : View.GONE); - } - @Override public void setAddLinkedIdButtonVisible(boolean show) { linkedIdsAddButton.setVisibility(show ? View.VISIBLE : View.GONE); diff --git a/OpenKeychain/src/main/res/layout/edit_identities_activity.xml b/OpenKeychain/src/main/res/layout/edit_identities_activity.xml deleted file mode 100644 index 8505f789a..000000000 --- a/OpenKeychain/src/main/res/layout/edit_identities_activity.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/edit_identities_fragment.xml b/OpenKeychain/src/main/res/layout/edit_identities_fragment.xml deleted file mode 100644 index 1b6fcf5df..000000000 --- a/OpenKeychain/src/main/res/layout/edit_identities_fragment.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/OpenKeychain/src/main/res/layout/identities_card.xml b/OpenKeychain/src/main/res/layout/identities_card.xml index abd33fa1c..a970fd76b 100644 --- a/OpenKeychain/src/main/res/layout/identities_card.xml +++ b/OpenKeychain/src/main/res/layout/identities_card.xml @@ -42,14 +42,6 @@ tools:visibility="visible" /> -