diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2015-03-10 00:55:48 +0100 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2015-03-10 00:55:48 +0100 |
commit | f76f84dfb2e406dd613be04dabd9432ffd0f9c4b (patch) | |
tree | 03979bcabe235be19bbf165d7d61880cf0916a43 /OpenKeychain/src/main/java/org | |
parent | 6df9387c2c08c7e872e4721c5d677188d29164f4 (diff) | |
download | open-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')
-rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdViewFragment.java | 40 |
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: { |