Merge branch 'jacobshack-certify' of github.com:open-keychain/open-keychain into jacobshack-certify

Conflicts:
	OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/MultiCertifyKeyFragment.java
This commit is contained in:
Vincent Breitmoser 2014-10-05 01:22:01 +02:00
commit 60fb3b60a8
6 changed files with 40 additions and 11 deletions

View File

@ -125,9 +125,9 @@ public class CachedPublicKeyRing extends KeyRing {
public boolean canCertify() throws PgpGeneralException { public boolean canCertify() throws PgpGeneralException {
try { try {
Object data = mProviderHelper.getGenericData(mUri, Object data = mProviderHelper.getGenericData(mUri,
KeychainContract.KeyRings.CAN_CERTIFY, KeychainContract.KeyRings.HAS_CERTIFY,
ProviderHelper.FIELD_TYPE_INTEGER); ProviderHelper.FIELD_TYPE_NULL);
return (Long) data > 0; return !((Boolean) data);
} catch(ProviderHelper.NotFoundException e) { } catch(ProviderHelper.NotFoundException e) {
throw new PgpGeneralException(e); throw new PgpGeneralException(e);
} }

View File

@ -385,8 +385,9 @@ public class AddKeysActivity extends ActionBarActivity implements
finish(); finish();
Intent certifyIntent = new Intent(AddKeysActivity.this, MultiCertifyKeyActivity.class); Intent certifyIntent = new Intent(AddKeysActivity.this, MultiCertifyKeyActivity.class);
certifyIntent.putExtra(ImportKeyResult.EXTRA_RESULT, result); certifyIntent.putExtra(MultiCertifyKeyActivity.EXTRA_RESULT, result);
certifyIntent.putExtra(MultiCertifyKeyActivity.EXTRA_KEY_IDS, result.getImportedMasterKeyIds()); certifyIntent.putExtra(MultiCertifyKeyActivity.EXTRA_KEY_IDS, result.getImportedMasterKeyIds());
certifyIntent.putExtra(MultiCertifyKeyActivity.EXTRA_CERTIFY_KEY_ID, mExchangeMasterKeyId);
startActivity(certifyIntent); startActivity(certifyIntent);
result.createNotify(AddKeysActivity.this).show(); result.createNotify(AddKeysActivity.this).show();
@ -448,7 +449,7 @@ public class AddKeysActivity extends ActionBarActivity implements
final ImportKeysListEntry keyEntry = new ImportKeysListEntry(); final ImportKeysListEntry keyEntry = new ImportKeysListEntry();
keyEntry.setFingerprintHex(fingerprint); keyEntry.setFingerprintHex(fingerprint);
keyEntry.setBitStrength(1337); keyEntry.setBitStrength(1337); // TODO: make optional!
keyEntry.addOrigin(cloudPrefs.keyserver); keyEntry.addOrigin(cloudPrefs.keyserver);
ArrayList<ImportKeysListEntry> selectedEntries = new ArrayList<ImportKeysListEntry>(); ArrayList<ImportKeysListEntry> selectedEntries = new ArrayList<ImportKeysListEntry>();
selectedEntries.add(keyEntry); selectedEntries.add(keyEntry);

View File

@ -28,7 +28,9 @@ import org.sufficientlysecure.keychain.R;
*/ */
public class MultiCertifyKeyActivity extends ActionBarActivity { public class MultiCertifyKeyActivity extends ActionBarActivity {
public static final String EXTRA_RESULT = "operation_result";
public static final String EXTRA_KEY_IDS = "extra_key_ids"; public static final String EXTRA_KEY_IDS = "extra_key_ids";
public static final String EXTRA_CERTIFY_KEY_ID = "certify_key_id";
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {

View File

@ -45,14 +45,18 @@ import android.widget.ScrollView;
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.KeyRing; import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserIds; import org.sufficientlysecure.keychain.provider.KeychainContract.UserIds;
import org.sufficientlysecure.keychain.provider.KeychainDatabase.Tables; import org.sufficientlysecure.keychain.provider.KeychainDatabase.Tables;
import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.service.CertifyActionsParcel; import org.sufficientlysecure.keychain.service.CertifyActionsParcel;
import org.sufficientlysecure.keychain.service.CertifyActionsParcel.CertifyAction; import org.sufficientlysecure.keychain.service.CertifyActionsParcel.CertifyAction;
import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
import org.sufficientlysecure.keychain.service.PassphraseCacheService; import org.sufficientlysecure.keychain.service.PassphraseCacheService;
import org.sufficientlysecure.keychain.service.results.CertifyResult; import org.sufficientlysecure.keychain.service.results.CertifyResult;
import org.sufficientlysecure.keychain.service.results.OperationResult;
import org.sufficientlysecure.keychain.ui.adapter.MultiUserIdsAdapter; import org.sufficientlysecure.keychain.ui.adapter.MultiUserIdsAdapter;
import org.sufficientlysecure.keychain.ui.dialog.PassphraseDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.PassphraseDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
@ -105,11 +109,29 @@ public class MultiCertifyKeyFragment extends LoaderFragment
return; return;
} }
// preselect certify key id if given
long certifyKeyId = mActivity.getIntent().getLongExtra(MultiCertifyKeyActivity.EXTRA_CERTIFY_KEY_ID, Constants.key.none);
if (certifyKeyId != Constants.key.none) {
try {
CachedPublicKeyRing key = (new ProviderHelper(getActivity())).getCachedPublicKeyRing(certifyKeyId);
if (key.canCertify()) {
mCertifyKeySpinner.setSelectedKeyId(certifyKeyId);
}
} catch (PgpGeneralException e) {
Log.e(Constants.TAG, "certify certify check failed", e);
}
}
mUserIdsAdapter = new MultiUserIdsAdapter(mActivity, null, 0); mUserIdsAdapter = new MultiUserIdsAdapter(mActivity, null, 0);
mUserIds.setAdapter(mUserIdsAdapter); mUserIds.setAdapter(mUserIdsAdapter);
getLoaderManager().initLoader(0, null, this); getLoaderManager().initLoader(0, null, this);
OperationResult result = mActivity.getIntent().getParcelableExtra(MultiCertifyKeyActivity.EXTRA_RESULT);
if (result != null) {
// display result from import
result.createNotify(mActivity).show();
}
} }
@Override @Override
@ -189,14 +211,15 @@ public class MultiCertifyKeyFragment extends LoaderFragment
return new CursorLoader(mActivity, uri, return new CursorLoader(mActivity, uri,
USER_IDS_PROJECTION, selection, ids, USER_IDS_PROJECTION, selection, ids,
Tables.USER_IDS + "." + UserIds.MASTER_KEY_ID + " ASC" Tables.USER_IDS + "." + UserIds.MASTER_KEY_ID + " ASC"
+ ", " + Tables.USER_IDS + "." + UserIds.USER_ID + " ASC"); + ", " + Tables.USER_IDS + "." + UserIds.USER_ID + " ASC"
);
} }
@Override @Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
MatrixCursor matrix = new MatrixCursor(new String[] { MatrixCursor matrix = new MatrixCursor(new String[]{
"_id", "user_data", "grouped" "_id", "user_data", "grouped"
}); });
data.moveToFirst(); data.moveToFirst();
@ -229,7 +252,7 @@ public class MultiCertifyKeyFragment extends LoaderFragment
byte[] d = p.marshall(); byte[] d = p.marshall();
p.recycle(); p.recycle();
matrix.addRow(new Object[] { matrix.addRow(new Object[]{
lastMasterKeyId, d, header ? 1 : 0 lastMasterKeyId, d, header ? 1 : 0
}); });
// indicate that we have a header for this masterKeyId // indicate that we have a header for this masterKeyId

View File

@ -88,7 +88,10 @@ public class CertifyKeySpinner extends KeySpinner {
if (loader.getId() == LOADER_ID) { if (loader.getId() == LOADER_ID) {
// If there is only one choice, pick it by default // If there is only one choice, pick it by default
if (mAdapter.getCount() == 2) { if (mAdapter.getCount() == 2) {
setSelection(1); // preselect if key can certify
if (data.moveToPosition(1) && data.isNull(mIndexHasCertify)) {
setSelection(1);
}
} }
mIndexHasCertify = data.getColumnIndex(KeychainContract.KeyRings.HAS_CERTIFY); mIndexHasCertify = data.getColumnIndex(KeychainContract.KeyRings.HAS_CERTIFY);
mIndexIsRevoked = data.getColumnIndex(KeychainContract.KeyRings.IS_REVOKED); mIndexIsRevoked = data.getColumnIndex(KeychainContract.KeyRings.IS_REVOKED);

View File

@ -50,7 +50,7 @@
<string name="section_actions">"Actions"</string> <string name="section_actions">"Actions"</string>
<string name="section_share_key">"Whole key"</string> <string name="section_share_key">"Whole key"</string>
<string name="section_certification_key">"Your Key used for certification"</string> <string name="section_certification_key">"Your Key used for certification"</string>
<string name="section_upload_key">"Upload Key"</string> <string name="section_upload_key">"Synchronize Key"</string>
<string name="section_key_server">"Keyserver"</string> <string name="section_key_server">"Keyserver"</string>
<string name="section_fingerprint">"Fingerprint"</string> <string name="section_fingerprint">"Fingerprint"</string>
<string name="section_key_to_certify">"Key to be certified"</string> <string name="section_key_to_certify">"Key to be certified"</string>