fix threading issues in ViewKeyActivity
This commit is contained in:
parent
effa340c5c
commit
c368630f65
|
@ -165,7 +165,7 @@ public class KeychainServiceTask {
|
||||||
operationCallback.operationFinished(result);
|
operationCallback.operationFinished(result);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
asyncTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
|
||||||
|
|
||||||
CancellationSignal cancellationSignal = new CancellationSignal();
|
CancellationSignal cancellationSignal = new CancellationSignal();
|
||||||
cancellationSignal.setOnCancelListener(() -> {
|
cancellationSignal.setOnCancelListener(() -> {
|
||||||
|
|
|
@ -110,8 +110,7 @@ import org.sufficientlysecure.keychain.util.ShareKeyHelper;
|
||||||
import timber.log.Timber;
|
import timber.log.Timber;
|
||||||
|
|
||||||
|
|
||||||
public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
public class ViewKeyActivity extends BaseSecurityTokenActivity {
|
||||||
CryptoOperationHelper.Callback<ImportKeyringParcel, ImportKeyResult> {
|
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
@IntDef({REQUEST_QR_FINGERPRINT, REQUEST_BACKUP, REQUEST_CERTIFY, REQUEST_DELETE})
|
@IntDef({REQUEST_QR_FINGERPRINT, REQUEST_BACKUP, REQUEST_CERTIFY, REQUEST_DELETE})
|
||||||
private @interface RequestType {
|
private @interface RequestType {
|
||||||
|
@ -169,7 +168,8 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
keyRepository = KeyRepository.create(this);
|
keyRepository = KeyRepository.create(this);
|
||||||
importOpHelper = new CryptoOperationHelper<>(1, this, this, null);
|
importOpHelper = new CryptoOperationHelper<>(1, this, importKeyCallback, null);
|
||||||
|
editOpHelper = new CryptoOperationHelper<>(2, this, editKeyCallback, null);
|
||||||
|
|
||||||
setTitle(null);
|
setTitle(null);
|
||||||
|
|
||||||
|
@ -380,38 +380,6 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changePassword() {
|
private void changePassword() {
|
||||||
CryptoOperationHelper.Callback<ChangeUnlockParcel, EditKeyResult> editKeyCallback
|
|
||||||
= new CryptoOperationHelper.Callback<ChangeUnlockParcel, EditKeyResult>() {
|
|
||||||
@Override
|
|
||||||
public ChangeUnlockParcel createOperationInput() {
|
|
||||||
return changeUnlockParcel;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCryptoOperationSuccess(EditKeyResult result) {
|
|
||||||
displayResult(result);
|
|
||||||
long masterKeyId = unifiedKeyInfo.master_key_id();
|
|
||||||
PassphraseCacheService.clearCachedPassphrase(getApplicationContext(), masterKeyId, masterKeyId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCryptoOperationCancelled() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCryptoOperationError(EditKeyResult result) {
|
|
||||||
displayResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCryptoSetProgress(String msg, int progress, int max) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
editOpHelper = new CryptoOperationHelper<>(2, this, editKeyCallback, R.string.progress_building_key);
|
|
||||||
|
|
||||||
// Message is received after passphrase is cached
|
// Message is received after passphrase is cached
|
||||||
Handler returnHandler = new Handler() {
|
Handler returnHandler = new Handler() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -540,8 +508,8 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
||||||
if (importOpHelper.handleActivityResult(requestCode, resultCode, data)) {
|
if (importOpHelper.handleActivityResult(requestCode, resultCode, data)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (editOpHelper != null) {
|
if (editOpHelper.handleActivityResult(requestCode, resultCode, data)) {
|
||||||
editOpHelper.handleActivityResult(requestCode, resultCode, data);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resultCode != Activity.RESULT_OK) {
|
if (resultCode != Activity.RESULT_OK) {
|
||||||
|
@ -897,36 +865,70 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
||||||
importOpHelper.cryptoOperation();
|
importOpHelper.cryptoOperation();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
CryptoOperationHelper.Callback<ChangeUnlockParcel, EditKeyResult> editKeyCallback
|
||||||
public ImportKeyringParcel createOperationInput() {
|
= new CryptoOperationHelper.Callback<ChangeUnlockParcel, EditKeyResult>() {
|
||||||
HkpKeyserverAddress preferredKeyserver = Preferences.getPreferences(this).getPreferredKeyserver();
|
@Override
|
||||||
|
public ChangeUnlockParcel createOperationInput() {
|
||||||
|
return changeUnlockParcel;
|
||||||
|
}
|
||||||
|
|
||||||
ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(unifiedKeyInfo.fingerprint(), null, null, null);
|
@Override
|
||||||
|
public void onCryptoOperationSuccess(EditKeyResult result) {
|
||||||
|
displayResult(result);
|
||||||
|
long masterKeyId = unifiedKeyInfo.master_key_id();
|
||||||
|
PassphraseCacheService.clearCachedPassphrase(getApplicationContext(), masterKeyId, masterKeyId);
|
||||||
|
}
|
||||||
|
|
||||||
return ImportKeyringParcel.createImportKeyringParcel(Collections.singletonList(keyEntry), preferredKeyserver);
|
@Override
|
||||||
}
|
public void onCryptoOperationCancelled() {
|
||||||
|
|
||||||
@Override
|
}
|
||||||
public void onCryptoOperationSuccess(ImportKeyResult result) {
|
|
||||||
isRefreshing = false;
|
|
||||||
result.createNotify(this).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCryptoOperationCancelled() {
|
public void onCryptoOperationError(EditKeyResult result) {
|
||||||
isRefreshing = false;
|
displayResult(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCryptoOperationError(ImportKeyResult result) {
|
public boolean onCryptoSetProgress(String msg, int progress, int max) {
|
||||||
isRefreshing = false;
|
return true;
|
||||||
result.createNotify(this).show();
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
@Override
|
CryptoOperationHelper.Callback<ImportKeyringParcel, ImportKeyResult> importKeyCallback
|
||||||
public boolean onCryptoSetProgress(String msg, int progress, int max) {
|
= new CryptoOperationHelper.Callback<ImportKeyringParcel, ImportKeyResult>() {
|
||||||
return true;
|
@Override
|
||||||
}
|
public ImportKeyringParcel createOperationInput() {
|
||||||
|
HkpKeyserverAddress preferredKeyserver = Preferences.getPreferences(getApplicationContext()).getPreferredKeyserver();
|
||||||
|
|
||||||
|
ParcelableKeyRing keyEntry =
|
||||||
|
ParcelableKeyRing.createFromReference(unifiedKeyInfo.fingerprint(), null, null, null);
|
||||||
|
|
||||||
|
return ImportKeyringParcel
|
||||||
|
.createImportKeyringParcel(Collections.singletonList(keyEntry), preferredKeyserver);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCryptoOperationSuccess(ImportKeyResult result) {
|
||||||
|
isRefreshing = false;
|
||||||
|
displayResult(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCryptoOperationCancelled() {
|
||||||
|
isRefreshing = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCryptoOperationError(ImportKeyResult result) {
|
||||||
|
isRefreshing = false;
|
||||||
|
displayResult(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCryptoSetProgress(String msg, int progress, int max) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue