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