mirror of
https://github.com/moparisthebest/open-keychain
synced 2025-02-17 07:30:14 -05:00
wrapped-key-ring: use CachedKeyRing where possible
This commit is contained in:
parent
ab6c47a9b3
commit
6d7daec37f
@ -31,6 +31,7 @@ import android.widget.Toast;
|
|||||||
import org.sufficientlysecure.keychain.Constants;
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
import org.sufficientlysecure.keychain.R;
|
import org.sufficientlysecure.keychain.R;
|
||||||
import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround;
|
import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround;
|
||||||
|
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
|
||||||
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||||
import org.sufficientlysecure.keychain.service.KeychainIntentService;
|
import org.sufficientlysecure.keychain.service.KeychainIntentService;
|
||||||
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
|
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
|
||||||
@ -51,14 +52,15 @@ public class ExportHelper {
|
|||||||
|
|
||||||
public void deleteKey(Uri dataUri, Handler deleteHandler) {
|
public void deleteKey(Uri dataUri, Handler deleteHandler) {
|
||||||
try {
|
try {
|
||||||
long masterKeyId = new ProviderHelper(mActivity).extractOrGetMasterKeyId(dataUri);
|
long masterKeyId = new ProviderHelper(mActivity).getCachedPublicKeyRing(dataUri)
|
||||||
|
.extractOrGetMasterKeyId();
|
||||||
|
|
||||||
// Create a new Messenger for the communication back
|
// Create a new Messenger for the communication back
|
||||||
Messenger messenger = new Messenger(deleteHandler);
|
Messenger messenger = new Messenger(deleteHandler);
|
||||||
DeleteKeyDialogFragment deleteKeyDialog = DeleteKeyDialogFragment.newInstance(messenger,
|
DeleteKeyDialogFragment deleteKeyDialog = DeleteKeyDialogFragment.newInstance(messenger,
|
||||||
new long[]{ masterKeyId });
|
new long[]{ masterKeyId });
|
||||||
deleteKeyDialog.show(mActivity.getSupportFragmentManager(), "deleteKeyDialog");
|
deleteKeyDialog.show(mActivity.getSupportFragmentManager(), "deleteKeyDialog");
|
||||||
} catch (ProviderHelper.NotFoundException e) {
|
} catch (PgpGeneralException e) {
|
||||||
Log.e(Constants.TAG, "key not found!", e);
|
Log.e(Constants.TAG, "key not found!", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,10 @@ package org.sufficientlysecure.keychain.provider;
|
|||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
|
||||||
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
import org.sufficientlysecure.keychain.pgp.KeyRing;
|
import org.sufficientlysecure.keychain.pgp.KeyRing;
|
||||||
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
|
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
|
||||||
|
import org.sufficientlysecure.keychain.util.Log;
|
||||||
|
|
||||||
public class CachedPublicKeyRing extends KeyRing {
|
public class CachedPublicKeyRing extends KeyRing {
|
||||||
|
|
||||||
@ -17,12 +19,30 @@ public class CachedPublicKeyRing extends KeyRing {
|
|||||||
|
|
||||||
public long getMasterKeyId() throws PgpGeneralException {
|
public long getMasterKeyId() throws PgpGeneralException {
|
||||||
try {
|
try {
|
||||||
return mProviderHelper.getMasterKeyId(mUri);
|
Object data = mProviderHelper.getGenericData(mUri,
|
||||||
} catch(ProviderHelper.NotFoundException e) {
|
KeychainContract.KeyRings.MASTER_KEY_ID, ProviderHelper.FIELD_TYPE_INTEGER);
|
||||||
|
return (Long) data;
|
||||||
|
} catch (ProviderHelper.NotFoundException e) {
|
||||||
throw new PgpGeneralException(e);
|
throw new PgpGeneralException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the master key id related to a given query. The id will either be extracted from the
|
||||||
|
* query, which should work for all specific /key_rings/ queries, or will be queried if it can't.
|
||||||
|
*/
|
||||||
|
public long extractOrGetMasterKeyId() throws PgpGeneralException {
|
||||||
|
// try extracting from the uri first
|
||||||
|
String firstSegment = mUri.getPathSegments().get(1);
|
||||||
|
if (!firstSegment.equals("find")) try {
|
||||||
|
return Long.parseLong(firstSegment);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
// didn't work? oh well.
|
||||||
|
Log.d(Constants.TAG, "Couldn't get masterKeyId from URI, querying...");
|
||||||
|
}
|
||||||
|
return getMasterKeyId();
|
||||||
|
}
|
||||||
|
|
||||||
public String getPrimaryUserId() throws PgpGeneralException {
|
public String getPrimaryUserId() throws PgpGeneralException {
|
||||||
try {
|
try {
|
||||||
Object data = mProviderHelper.getGenericData(mUri,
|
Object data = mProviderHelper.getGenericData(mUri,
|
||||||
|
@ -147,32 +147,6 @@ public class ProviderHelper {
|
|||||||
return getGenericData(KeyRings.buildUnifiedKeyRingUri(masterKeyId), proj, types);
|
return getGenericData(KeyRings.buildUnifiedKeyRingUri(masterKeyId), proj, types);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Find the master key id related to a given query. The id will either be extracted from the
|
|
||||||
* query, which should work for all specific /key_rings/ queries, or will be queried if it can't.
|
|
||||||
*/
|
|
||||||
public long extractOrGetMasterKeyId(Uri queryUri)
|
|
||||||
throws NotFoundException {
|
|
||||||
// try extracting from the uri first
|
|
||||||
String firstSegment = queryUri.getPathSegments().get(1);
|
|
||||||
if (!firstSegment.equals("find")) try {
|
|
||||||
return Long.parseLong(firstSegment);
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
// didn't work? oh well.
|
|
||||||
Log.d(Constants.TAG, "Couldn't get masterKeyId from URI, querying...");
|
|
||||||
}
|
|
||||||
return getMasterKeyId(queryUri);
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getMasterKeyId(Uri queryUri) throws NotFoundException {
|
|
||||||
Object data = getGenericData(queryUri, KeyRings.MASTER_KEY_ID, FIELD_TYPE_INTEGER);
|
|
||||||
if (data != null) {
|
|
||||||
return (Long) data;
|
|
||||||
} else {
|
|
||||||
throw new NotFoundException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public LongSparseArray<PGPKeyRing> getPGPKeyRings(Uri queryUri) {
|
public LongSparseArray<PGPKeyRing> getPGPKeyRings(Uri queryUri) {
|
||||||
Cursor cursor = mContentResolver.query(queryUri,
|
Cursor cursor = mContentResolver.query(queryUri,
|
||||||
|
@ -33,6 +33,7 @@ import com.beardedhen.androidbootstrap.BootstrapButton;
|
|||||||
|
|
||||||
import org.sufficientlysecure.keychain.Constants;
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
import org.sufficientlysecure.keychain.R;
|
import org.sufficientlysecure.keychain.R;
|
||||||
|
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
|
||||||
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||||
import org.sufficientlysecure.keychain.remote.AccountSettings;
|
import org.sufficientlysecure.keychain.remote.AccountSettings;
|
||||||
import org.sufficientlysecure.keychain.ui.EditKeyActivity;
|
import org.sufficientlysecure.keychain.ui.EditKeyActivity;
|
||||||
@ -179,9 +180,10 @@ public class AccountSettingsFragment extends Fragment implements
|
|||||||
// select newly created key
|
// select newly created key
|
||||||
try {
|
try {
|
||||||
long masterKeyId = new ProviderHelper(getActivity())
|
long masterKeyId = new ProviderHelper(getActivity())
|
||||||
.extractOrGetMasterKeyId(data.getData());
|
.getCachedPublicKeyRing(data.getData())
|
||||||
|
.extractOrGetMasterKeyId();
|
||||||
mSelectKeyFragment.selectKey(masterKeyId);
|
mSelectKeyFragment.selectKey(masterKeyId);
|
||||||
} catch (ProviderHelper.NotFoundException e) {
|
} catch (PgpGeneralException e) {
|
||||||
Log.e(Constants.TAG, "key not found!", e);
|
Log.e(Constants.TAG, "key not found!", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -163,12 +163,12 @@ public class EncryptAsymmetricFragment extends Fragment {
|
|||||||
Vector<Long> goodIds = new Vector<Long>();
|
Vector<Long> goodIds = new Vector<Long>();
|
||||||
for (int i = 0; i < preselectedEncryptionKeyIds.length; ++i) {
|
for (int i = 0; i < preselectedEncryptionKeyIds.length; ++i) {
|
||||||
try {
|
try {
|
||||||
long id = providerHelper.getMasterKeyId(
|
long id = providerHelper.getCachedPublicKeyRing(
|
||||||
KeyRings.buildUnifiedKeyRingsFindBySubkeyUri(
|
KeyRings.buildUnifiedKeyRingsFindBySubkeyUri(
|
||||||
preselectedEncryptionKeyIds[i])
|
preselectedEncryptionKeyIds[i])
|
||||||
);
|
).getMasterKeyId();
|
||||||
goodIds.add(id);
|
goodIds.add(id);
|
||||||
} catch (ProviderHelper.NotFoundException e) {
|
} catch (PgpGeneralException e) {
|
||||||
Log.e(Constants.TAG, "key not found!", e);
|
Log.e(Constants.TAG, "key not found!", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,7 @@ import org.sufficientlysecure.keychain.R;
|
|||||||
import org.sufficientlysecure.keychain.pgp.WrappedPublicKeyRing;
|
import org.sufficientlysecure.keychain.pgp.WrappedPublicKeyRing;
|
||||||
import org.sufficientlysecure.keychain.pgp.PgpConversionHelper;
|
import org.sufficientlysecure.keychain.pgp.PgpConversionHelper;
|
||||||
import org.sufficientlysecure.keychain.pgp.PgpKeyHelper;
|
import org.sufficientlysecure.keychain.pgp.PgpKeyHelper;
|
||||||
|
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
|
||||||
import org.sufficientlysecure.keychain.provider.KeychainContract.Certs;
|
import org.sufficientlysecure.keychain.provider.KeychainContract.Certs;
|
||||||
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
|
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
|
||||||
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||||
@ -211,12 +212,11 @@ public class ViewCertActivity extends ActionBarActivity
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
ProviderHelper providerHelper = new ProviderHelper(ViewCertActivity.this);
|
ProviderHelper providerHelper = new ProviderHelper(ViewCertActivity.this);
|
||||||
long signerMasterKeyId = providerHelper.getMasterKeyId(
|
long signerMasterKeyId = providerHelper.getCachedPublicKeyRing(
|
||||||
KeyRings.buildUnifiedKeyRingsFindBySubkeyUri(mCertifierKeyId)
|
KeyRings.buildUnifiedKeyRingsFindBySubkeyUri(mCertifierKeyId)).getMasterKeyId();
|
||||||
);
|
|
||||||
viewIntent.setData(KeyRings.buildGenericKeyRingUri(signerMasterKeyId));
|
viewIntent.setData(KeyRings.buildGenericKeyRingUri(signerMasterKeyId));
|
||||||
startActivity(viewIntent);
|
startActivity(viewIntent);
|
||||||
} catch (ProviderHelper.NotFoundException e) {
|
} catch (PgpGeneralException e) {
|
||||||
// TODO notify user of this, maybe offer download?
|
// TODO notify user of this, maybe offer download?
|
||||||
Log.e(Constants.TAG, "key not found!", e);
|
Log.e(Constants.TAG, "key not found!", e);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,9 @@ import android.widget.ListView;
|
|||||||
import com.devspark.appmsg.AppMsg;
|
import com.devspark.appmsg.AppMsg;
|
||||||
|
|
||||||
import org.sufficientlysecure.keychain.Constants;
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
import org.sufficientlysecure.keychain.R;import org.sufficientlysecure.keychain.provider.KeychainContract;
|
import org.sufficientlysecure.keychain.R;
|
||||||
|
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
|
||||||
|
import org.sufficientlysecure.keychain.provider.KeychainContract;
|
||||||
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
|
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
|
||||||
import org.sufficientlysecure.keychain.provider.KeychainContract.UserIds;
|
import org.sufficientlysecure.keychain.provider.KeychainContract.UserIds;
|
||||||
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||||
@ -235,14 +237,16 @@ public class ViewKeyMainFragment extends LoaderFragment implements
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
long keyId = new ProviderHelper(getActivity()).extractOrGetMasterKeyId(dataUri);
|
long keyId = new ProviderHelper(getActivity())
|
||||||
|
.getCachedPublicKeyRing(dataUri)
|
||||||
|
.extractOrGetMasterKeyId();
|
||||||
long[] encryptionKeyIds = new long[]{keyId};
|
long[] encryptionKeyIds = new long[]{keyId};
|
||||||
Intent intent = new Intent(getActivity(), EncryptActivity.class);
|
Intent intent = new Intent(getActivity(), EncryptActivity.class);
|
||||||
intent.setAction(EncryptActivity.ACTION_ENCRYPT);
|
intent.setAction(EncryptActivity.ACTION_ENCRYPT);
|
||||||
intent.putExtra(EncryptActivity.EXTRA_ENCRYPTION_KEY_IDS, encryptionKeyIds);
|
intent.putExtra(EncryptActivity.EXTRA_ENCRYPTION_KEY_IDS, encryptionKeyIds);
|
||||||
// used instead of startActivity set actionbar based on callingPackage
|
// used instead of startActivity set actionbar based on callingPackage
|
||||||
startActivityForResult(intent, 0);
|
startActivityForResult(intent, 0);
|
||||||
} catch (ProviderHelper.NotFoundException e) {
|
} catch (PgpGeneralException e) {
|
||||||
Log.e(Constants.TAG, "key not found!", e);
|
Log.e(Constants.TAG, "key not found!", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user