concurrency and continuity fixes for verification backstack handling

This commit is contained in:
Vincent Breitmoser
2015-03-10 00:55:48 +01:00
parent 6df9387c2c
commit f76f84dfb2

View File

@@ -11,6 +11,7 @@ import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.os.Messenger; import android.os.Messenger;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
@@ -72,7 +73,7 @@ public class LinkedIdViewFragment extends Fragment implements
private byte[] mFingerprint; private byte[] mFingerprint;
private LayoutInflater mInflater; private LayoutInflater mInflater;
private boolean mInProgress; private AsyncTask mInProgress;
private Uri mDataUri; private Uri mDataUri;
private ViewHolder mViewHolder; 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 interface OnIdentityLoadedListener {
public void onIdentityLoaded(); public void onIdentityLoaded();
} }
@@ -174,6 +169,13 @@ public class LinkedIdViewFragment extends Fragment implements
private void loadIdentity(RawLinkedIdentity linkedId, int certStatus) { private void loadIdentity(RawLinkedIdentity linkedId, int certStatus) {
mLinkedId = linkedId; mLinkedId = linkedId;
new Handler().post(new Runnable() {
@Override
public void run() {
getFragmentManager().popBackStack("verification",
FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
});
mViewHolder.setShowVerifying(false); mViewHolder.setShowVerifying(false);
{ {
@@ -343,11 +345,8 @@ public class LinkedIdViewFragment extends Fragment implements
void verifyResource() { void verifyResource() {
// only one at a time // only one at a time
synchronized (this) { if (mInProgress != null) {
if (mInProgress) { return;
return;
}
mInProgress = true;
} }
FragmentManager manager = getFragmentManager(); FragmentManager manager = getFragmentManager();
@@ -361,7 +360,7 @@ public class LinkedIdViewFragment extends Fragment implements
mViewHolder.setShowProgress(true); mViewHolder.setShowProgress(true);
mViewHolder.vText.setText("Verifying…"); mViewHolder.vText.setText("Verifying…");
new AsyncTask<Void,Void,LinkedVerifyResult>() { mInProgress = new AsyncTask<Void,Void,LinkedVerifyResult>() {
@Override @Override
protected LinkedVerifyResult doInBackground(Void... params) { protected LinkedVerifyResult doInBackground(Void... params) {
long timer = System.currentTimeMillis(); long timer = System.currentTimeMillis();
@@ -381,6 +380,9 @@ public class LinkedIdViewFragment extends Fragment implements
@Override @Override
protected void onPostExecute(LinkedVerifyResult result) { protected void onPostExecute(LinkedVerifyResult result) {
mViewHolder.setShowProgress(false); mViewHolder.setShowProgress(false);
if (isCancelled()) {
return;
}
if (result.success()) { if (result.success()) {
mViewHolder.vText.setText("Ok"); mViewHolder.vText.setText("Ok");
setupForConfirmation(); setupForConfirmation();
@@ -388,7 +390,7 @@ public class LinkedIdViewFragment extends Fragment implements
mViewHolder.showButton(1); mViewHolder.showButton(1);
mViewHolder.vText.setText("Error"); mViewHolder.vText.setText("Error");
} }
mInProgress = false; mInProgress = null;
} }
}.execute(); }.execute();
@@ -425,6 +427,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 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) { switch (requestCode) {