concurrency and continuity fixes for verification backstack handling
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user