From 22f4eb3e44b42661c7de84c463e04b887c49ea4f Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 18 Jul 2018 12:37:40 +0200 Subject: [PATCH] insert api app when key is selected in SelectSignKeyIdFragment as well --- .../sufficientlysecure/keychain/daos/ApiAppDao.java | 2 +- .../keychain/remote/ApiPendingIntentFactory.java | 3 ++- .../keychain/remote/OpenPgpService.java | 8 +++++--- .../keychain/remote/ui/SelectSignKeyIdActivity.java | 11 +++++++---- .../remote/ui/SelectSignKeyIdListFragment.java | 10 +++++++++- .../keychain/ui/DebugActionsActivity.java | 2 +- 6 files changed, 25 insertions(+), 11 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/daos/ApiAppDao.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/daos/ApiAppDao.java index 79e87bf81..9346f559e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/daos/ApiAppDao.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/daos/ApiAppDao.java @@ -119,7 +119,7 @@ public class ApiAppDao extends AbstractDao { public void addAllowedKeyIdForApp(String packageName, long allowedKeyId) { InsertAllowedKey statement = new InsertAllowedKey(getWritableDb()); statement.bind(packageName, allowedKeyId); - statement.execute(); + statement.executeInsert(); getDatabaseNotifyManager().notifyApiAppChange(packageName); } 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 085299aaf..fff101b5b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ApiPendingIntentFactory.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ApiPendingIntentFactory.java @@ -137,9 +137,10 @@ public class ApiPendingIntentFactory { } public PendingIntent createSelectSignKeyIdLegacyPendingIntent(Intent data, String packageName, - String preferredUserId) { + byte[] packageSignature, String preferredUserId) { Intent intent = new Intent(mContext, SelectSignKeyIdActivity.class); intent.putExtra(SelectSignKeyIdActivity.EXTRA_PACKAGE_NAME, packageName); + intent.putExtra(SelectSignKeyIdActivity.EXTRA_PACKAGE_SIGNATURE, packageSignature); intent.putExtra(SelectSignKeyIdActivity.EXTRA_USER_ID, preferredUserId); 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 b0e6eab6a..72075e29a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java @@ -702,10 +702,11 @@ public class OpenPgpService extends Service { return result; } else { String currentPkg = mApiPermissionHelper.getCurrentCallingPackage(); + byte[] packageSignature = mApiPermissionHelper.getPackageCertificateOrError(currentPkg); String preferredUserId = data.getStringExtra(OpenPgpApi.EXTRA_USER_ID); PendingIntent pi = mApiPendingIntentFactory.createSelectSignKeyIdLegacyPendingIntent( - data, currentPkg, preferredUserId); + data, currentPkg, packageSignature, preferredUserId); // return PendingIntent to be executed by client Intent result = new Intent(); @@ -722,13 +723,14 @@ public class OpenPgpService extends Service { { // return PendingIntent to be executed by client String currentPkg = mApiPermissionHelper.getCurrentCallingPackage(); + byte[] packageSignature = mApiPermissionHelper.getPackageCertificateOrError(currentPkg); String preferredUserId = data.getStringExtra(OpenPgpApi.EXTRA_USER_ID); PendingIntent pi; // the new dialog doesn't really work if we don't have a user id to work with. just show the old... if (TextUtils.isEmpty(preferredUserId)) { - pi = mApiPendingIntentFactory.createSelectSignKeyIdLegacyPendingIntent(data, currentPkg, null); + pi = mApiPendingIntentFactory.createSelectSignKeyIdLegacyPendingIntent( + data, currentPkg, packageSignature, null); } else { - byte[] packageSignature = mApiPermissionHelper.getPackageCertificateOrError(currentPkg); boolean showAutocryptHint = data.getBooleanExtra(OpenPgpApi.EXTRA_SHOW_AUTOCRYPT_HINT, false); pi = mApiPendingIntentFactory.createSelectSignKeyIdPendingIntent( data, currentPkg, packageSignature, preferredUserId, showAutocryptHint); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdActivity.java index 91440e018..5b7308366 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdActivity.java @@ -17,9 +17,9 @@ package org.sufficientlysecure.keychain.remote.ui; + import android.app.Activity; import android.content.Intent; -import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.TextView; @@ -35,6 +35,7 @@ import timber.log.Timber; public class SelectSignKeyIdActivity extends BaseActivity { 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 = OpenPgpApi.EXTRA_USER_ID; public static final String EXTRA_DATA = "data"; @@ -70,17 +71,19 @@ public class SelectSignKeyIdActivity extends BaseActivity { Intent intent = getIntent(); String packageName = intent.getStringExtra(EXTRA_PACKAGE_NAME); + byte[] packageSignature = intent.getByteArrayExtra(EXTRA_PACKAGE_SIGNATURE); mPreferredUserId = intent.getStringExtra(EXTRA_USER_ID); mData = intent.getParcelableExtra(EXTRA_DATA); if (packageName == null) { Timber.e("Intent data missing. Should be Uri of app!"); finish(); } else { - startListFragments(savedInstanceState, packageName, mData, mPreferredUserId); + startListFragments(savedInstanceState, packageName, packageSignature, mData, mPreferredUserId); } } - private void startListFragments(Bundle savedInstanceState, String packageName, Intent data, String preferredUserId) { + private void startListFragments(Bundle savedInstanceState, String packageName, byte[] packageSignature, Intent data, + String preferredUserId) { // 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. @@ -90,7 +93,7 @@ public class SelectSignKeyIdActivity extends BaseActivity { // Create an instance of the fragments SelectSignKeyIdListFragment listFragment = SelectSignKeyIdListFragment - .newInstance(packageName, data, preferredUserId); + .newInstance(packageName, packageSignature, data, preferredUserId); // Add the fragment to the 'fragment_container' FrameLayout // NOTE: We use commitAllowingStateLoss() to prevent weird crashes! getSupportFragmentManager().beginTransaction() diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdListFragment.java index 557f606df..5ef3ec72e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdListFragment.java @@ -34,6 +34,7 @@ import android.widget.LinearLayout; import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpUtils; import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.model.ApiApp; import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo; import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.daos.ApiAppDao; @@ -46,6 +47,7 @@ import org.sufficientlysecure.keychain.ui.keyview.GenericViewModel; public class SelectSignKeyIdListFragment extends RecyclerFragment { private static final String ARG_PACKAGE_NAME = "package_name"; + private static final String ARG_PACKAGE_SIGNATURE = "package_signature"; private static final String ARG_PREF_UID = "pref_uid"; public static final String ARG_DATA = "data"; @@ -57,12 +59,15 @@ public class SelectSignKeyIdListFragment extends RecyclerFragment { PendingIntent pendingIntent = pendingIntentFactory.createSelectSignKeyIdLegacyPendingIntent( - new Intent(), BuildConfig.APPLICATION_ID, "test@openkeychain.org"); + new Intent(), BuildConfig.APPLICATION_ID, getPackageSig(), "test@openkeychain.org"); startPendingIntent(pendingIntent); }); addButtonToLayout(context, verticalLayout, "Select Signing Key").setOnClickListener((v) -> {