From d6f8357a76d017a3928667b429612aceb094d011 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 18 Apr 2018 16:34:28 +0200 Subject: [PATCH] Slight change to "Use different key" submenu, possibly display Autocrypt Setup Message hint --- .../remote/ApiPendingIntentFactory.java | 3 +- .../keychain/remote/OpenPgpService.java | 3 +- .../ui/dialog/RemoteSelectIdKeyActivity.java | 30 +++++++++++++- .../RemoteSelectIdentityKeyPresenter.java | 12 +++++- .../res/layout/api_select_identity_key.xml | 41 +++++++++++++++++++ OpenKeychain/src/main/res/values/strings.xml | 4 +- 6 files changed, 86 insertions(+), 7 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ApiPendingIntentFactory.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ApiPendingIntentFactory.java index 98e64ad00..eb988e045 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ApiPendingIntentFactory.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ApiPendingIntentFactory.java @@ -143,12 +143,13 @@ public class ApiPendingIntentFactory { } PendingIntent createSelectSignKeyIdPendingIntent(Intent data, String packageName, - byte[] packageSignature, String preferredUserId) { + byte[] packageSignature, String preferredUserId, boolean showAutocryptHint) { Intent intent = new Intent(mContext, RemoteSelectIdKeyActivity.class); intent.setData(KeychainContract.ApiApps.buildByPackageNameUri(packageName)); intent.putExtra(RemoteSelectIdKeyActivity.EXTRA_PACKAGE_NAME, packageName); intent.putExtra(RemoteSelectIdKeyActivity.EXTRA_PACKAGE_SIGNATURE, packageSignature); intent.putExtra(RemoteSelectIdKeyActivity.EXTRA_USER_ID, preferredUserId); + intent.putExtra(RemoteSelectIdKeyActivity.EXTRA_SHOW_AUTOCRYPT_HINT, showAutocryptHint); return createInternal(data, intent); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java index 0e653e6fb..4597c1ec0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java @@ -723,8 +723,9 @@ public class OpenPgpService extends Service { pi = mApiPendingIntentFactory.createSelectSignKeyIdLegacyPendingIntent(data, currentPkg, null); } else { byte[] packageSignature = mApiPermissionHelper.getPackageCertificateOrError(currentPkg); + boolean showAutocryptHint = data.getBooleanExtra(OpenPgpApi.EXTRA_SHOW_AUTOCRYPT_HINT, false); pi = mApiPendingIntentFactory.createSelectSignKeyIdPendingIntent( - data, currentPkg, packageSignature, preferredUserId); + data, currentPkg, packageSignature, preferredUserId, showAutocryptHint); } result.putExtra(OpenPgpApi.RESULT_INTENT, pi); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdKeyActivity.java index 5acd94a12..fa9674e73 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdKeyActivity.java @@ -62,6 +62,7 @@ import org.sufficientlysecure.keychain.livedata.KeyInfoInteractor.KeyInfo; import org.sufficientlysecure.keychain.operations.results.ImportKeyResult; import org.sufficientlysecure.keychain.remote.ui.dialog.RemoteSelectIdentityKeyPresenter.RemoteSelectIdentityKeyView; import org.sufficientlysecure.keychain.service.ImportKeyringParcel; +import org.sufficientlysecure.keychain.ui.MainActivity; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper.AbstractCallback; import org.sufficientlysecure.keychain.ui.dialog.CustomAlertDialogBuilder; @@ -76,6 +77,7 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { public static final String EXTRA_PACKAGE_NAME = "package_name"; public static final String EXTRA_PACKAGE_SIGNATURE = "package_signature"; public static final String EXTRA_USER_ID = "user_id"; + public static final String EXTRA_SHOW_AUTOCRYPT_HINT = "show_autocrypt_hint"; public static final String EXTRA_CURRENT_MASTER_KEY_ID = "current_master_key_id"; @@ -108,8 +110,9 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { String userId = intent.getStringExtra(EXTRA_USER_ID); String packageName = intent.getStringExtra(EXTRA_PACKAGE_NAME); byte[] packageSignature = intent.getByteArrayExtra(EXTRA_PACKAGE_SIGNATURE); + boolean showAutocryptHint = intent.getBooleanExtra(EXTRA_SHOW_AUTOCRYPT_HINT, false); - presenter.setupFromIntentData(packageName, packageSignature, userId); + presenter.setupFromIntentData(packageName, packageSignature, userId, showAutocryptHint); } public static class RemoteSelectIdentityKeyDialogFragment extends DialogFragment { @@ -127,6 +130,7 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { private View buttonNoKeysExisting; private View buttonKeyListOther; private View buttonOverflow; + private View buttonGotoOpenKeychain; @NonNull @Override @@ -156,6 +160,8 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { buttonGenOkBack = view.findViewById(R.id.button_genok_back); buttonGenOkFinish = view.findViewById(R.id.button_genok_finish); + buttonGotoOpenKeychain = view.findViewById(R.id.button_goto_openkeychain); + keyChoiceList = view.findViewById(R.id.identity_key_list); keyChoiceList.setLayoutManager(new LinearLayoutManager(activity)); keyChoiceList.addItemDecoration( @@ -200,6 +206,7 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { final KeyChoiceAdapter keyChoiceAdapter = new KeyChoiceAdapter(layoutInflater, getResources()); final TextView titleText = rootView.findViewById(R.id.text_title_select_key); final TextView addressText = rootView.findViewById(R.id.text_user_id); + final TextView autocryptHint = rootView.findViewById(R.id.key_import_autocrypt_hint); final ToolableViewAnimator layoutAnimator = rootView.findViewById(R.id.layout_animator); keyChoiceList.setAdapter(keyChoiceAdapter); @@ -231,10 +238,16 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { @Override public void setTitleClientIconAndName(Drawable drawable, CharSequence name) { titleText.setText(getString(R.string.title_select_key, name)); + autocryptHint.setText(getString(R.string.key_import_text_autocrypt_setup_msg, name)); // iconClientApp.setImageDrawable(drawable); setSelectionIcons(drawable); } + @Override + public void setShowAutocryptHint(boolean showAutocryptHint) { + autocryptHint.setVisibility(showAutocryptHint ? View.VISIBLE : View.GONE); + } + private void setSelectionIcons(Drawable drawable) { ConstantState constantState = drawable.getConstantState(); if (constantState == null) { @@ -268,7 +281,7 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { @Override public void showLayoutSelectKeyList() { layoutAnimator.setDisplayedChildId(R.id.select_key_layout_key_list); - buttonOverflow.setVisibility(View.GONE); + buttonOverflow.setVisibility(View.VISIBLE); } @Override @@ -343,6 +356,17 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { }); menu.show(); } + + @Override + public void showOpenKeychainIntent() { + Activity activity = getActivity(); + if (activity == null) { + return; + } + + Intent intent = new Intent(activity.getApplicationContext(), MainActivity.class); + startActivity(intent); + } }; } @@ -362,6 +386,8 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { buttonGenOkBack.setOnClickListener(view -> presenter.onClickGenerateOkBack()); buttonGenOkFinish.setOnClickListener(view -> presenter.onClickGenerateOkFinish()); + buttonGotoOpenKeychain.setOnClickListener(view -> presenter.onClickGoToOpenKeychain()); + keyChoiceList.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), (view, position) -> presenter.onKeyItemClick(position))); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdentityKeyPresenter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdentityKeyPresenter.java index 59d5de589..6cd4bdef6 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdentityKeyPresenter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdentityKeyPresenter.java @@ -76,7 +76,7 @@ class RemoteSelectIdentityKeyPresenter { this.view = view; } - void setupFromIntentData(String packageName, byte[] packageSignature, String rawUserId) { + void setupFromIntentData(String packageName, byte[] packageSignature, String rawUserId, boolean clientHasAutocryptSetupMsg) { try { setPackageInfo(packageName, packageSignature); } catch (NameNotFoundException e) { @@ -87,6 +87,7 @@ class RemoteSelectIdentityKeyPresenter { this.userId = OpenPgpUtils.splitUserId(rawUserId); view.setAddressText(userId.email); + view.setShowAutocryptHint(clientHasAutocryptSetupMsg); loadKeyInfo(); } @@ -220,17 +221,22 @@ class RemoteSelectIdentityKeyPresenter { } public void onClickMenuListAllKeys() { - viewModel.setListAllKeys(true); + viewModel.setListAllKeys(!viewModel.isListAllKeys()); loadKeyInfo(); view.showLayoutSelectKeyList(); } + public void onClickGoToOpenKeychain() { + view.showOpenKeychainIntent(); + } + interface RemoteSelectIdentityKeyView { void finishAndReturn(long masterKeyId); void finishAsCancelled(); void setAddressText(String text); void setTitleClientIconAndName(Drawable drawable, CharSequence name); + void setShowAutocryptHint(boolean showAutocryptHint); void showLayoutEmpty(); void showLayoutSelectNoKeys(); @@ -249,5 +255,7 @@ class RemoteSelectIdentityKeyPresenter { void showImportInternalError(); void displayOverflowMenu(); + + void showOpenKeychainIntent(); } } diff --git a/OpenKeychain/src/main/res/layout/api_select_identity_key.xml b/OpenKeychain/src/main/res/layout/api_select_identity_key.xml index af6f6b0c0..1c1b3fc3f 100644 --- a/OpenKeychain/src/main/res/layout/api_select_identity_key.xml +++ b/OpenKeychain/src/main/res/layout/api_select_identity_key.xml @@ -297,6 +297,47 @@ android:textAppearance="?android:attr/textAppearanceMedium" /> + + + + + + + + + Finish Generated end-to-end key! Finishing setup… - To import your key, you can either:\n\n① Open Autocrypt Setup Message from another e-mail app in K-9 Mail\n\n② Manually import in OpenKeychain + To use an end-to-end key, it has to be imported into OpenKeychain. + To import your existing setup from another device, you can also open an Autocrypt Setup Message in %s. + Go to OpenKeychain