aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2015-03-10 00:55:48 +0100
committerVincent Breitmoser <valodim@mugenguild.com>2015-03-10 00:55:48 +0100
commitf76f84dfb2e406dd613be04dabd9432ffd0f9c4b (patch)
tree03979bcabe235be19bbf165d7d61880cf0916a43 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked
parent6df9387c2c08c7e872e4721c5d677188d29164f4 (diff)
downloadopen-keychain-f76f84dfb2e406dd613be04dabd9432ffd0f9c4b.tar.gz
open-keychain-f76f84dfb2e406dd613be04dabd9432ffd0f9c4b.tar.bz2
open-keychain-f76f84dfb2e406dd613be04dabd9432ffd0f9c4b.zip
concurrency and continuity fixes for verification backstack handling
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdViewFragment.java40
1 files changed, 26 insertions, 14 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdViewFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdViewFragment.java
index 8e81eb383..f523441c5 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdViewFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdViewFragment.java
@@ -11,6 +11,7 @@ import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
import android.support.v4.app.Fragment;
@@ -72,7 +73,7 @@ public class LinkedIdViewFragment extends Fragment implements
private byte[] mFingerprint;
private LayoutInflater mInflater;
- private boolean mInProgress;
+ private AsyncTask mInProgress;
private Uri mDataUri;
private ViewHolder mViewHolder;
@@ -157,12 +158,6 @@ public class LinkedIdViewFragment extends Fragment implements
}
}
- @Override
- public void onBackStackChanged() {
- mViewHolder.setShowVerifying(false);
- getFragmentManager().removeOnBackStackChangedListener(LinkedIdViewFragment.this);
- }
-
public interface OnIdentityLoadedListener {
public void onIdentityLoaded();
}
@@ -174,6 +169,13 @@ public class LinkedIdViewFragment extends Fragment implements
private void loadIdentity(RawLinkedIdentity linkedId, int certStatus) {
mLinkedId = linkedId;
+ new Handler().post(new Runnable() {
+ @Override
+ public void run() {
+ getFragmentManager().popBackStack("verification",
+ FragmentManager.POP_BACK_STACK_INCLUSIVE);
+ }
+ });
mViewHolder.setShowVerifying(false);
{
@@ -343,11 +345,8 @@ public class LinkedIdViewFragment extends Fragment implements
void verifyResource() {
// only one at a time
- synchronized (this) {
- if (mInProgress) {
- return;
- }
- mInProgress = true;
+ if (mInProgress != null) {
+ return;
}
FragmentManager manager = getFragmentManager();
@@ -361,7 +360,7 @@ public class LinkedIdViewFragment extends Fragment implements
mViewHolder.setShowProgress(true);
mViewHolder.vText.setText("Verifying…");
- new AsyncTask<Void,Void,LinkedVerifyResult>() {
+ mInProgress = new AsyncTask<Void,Void,LinkedVerifyResult>() {
@Override
protected LinkedVerifyResult doInBackground(Void... params) {
long timer = System.currentTimeMillis();
@@ -381,6 +380,9 @@ public class LinkedIdViewFragment extends Fragment implements
@Override
protected void onPostExecute(LinkedVerifyResult result) {
mViewHolder.setShowProgress(false);
+ if (isCancelled()) {
+ return;
+ }
if (result.success()) {
mViewHolder.vText.setText("Ok");
setupForConfirmation();
@@ -388,7 +390,7 @@ public class LinkedIdViewFragment extends Fragment implements
mViewHolder.showButton(1);
mViewHolder.vText.setText("Error");
}
- mInProgress = false;
+ mInProgress = null;
}
}.execute();
@@ -426,6 +428,16 @@ public class LinkedIdViewFragment extends Fragment implements
}
@Override
+ public void onBackStackChanged() {
+ mViewHolder.setShowVerifying(false);
+ getFragmentManager().removeOnBackStackChangedListener(LinkedIdViewFragment.this);
+ if (mInProgress != null) {
+ mInProgress.cancel(false);
+ mInProgress = null;
+ }
+ }
+
+ @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CODE_PASSPHRASE: {