cleaner handling of verification state

This commit is contained in:
Vincent Breitmoser
2015-03-10 02:08:51 +01:00
parent 4db86fdabe
commit 2a42ff016f
2 changed files with 66 additions and 47 deletions

View File

@@ -71,7 +71,6 @@ public class LinkedIdViewFragment extends Fragment implements
private Context mContext;
private byte[] mFingerprint;
private LayoutInflater mInflater;
private AsyncTask mInProgress;
@@ -106,9 +105,9 @@ public class LinkedIdViewFragment extends Fragment implements
mFingerprint = args.getByteArray(ARG_FINGERPRINT);
mContext = getActivity();
mInflater = getLayoutInflater(savedInstanceState);
getLoaderManager().initLoader(LOADER_ID_LINKED_ID, null, this);
}
@Override
@@ -169,22 +168,7 @@ 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);
{
Bundle args = new Bundle();
args.putParcelable(CertListWidget.ARG_URI, mDataUri);
args.putInt(CertListWidget.ARG_RANK, mLidRank);
getLoaderManager().initLoader(CertListWidget.LOADER_ID_LINKED_CERTS,
args, mViewHolder.vLinkedCerts);
}
setShowVerifying(false);
if (mLinkedId instanceof LinkedIdentity) {
LinkedResource res = ((LinkedIdentity) mLinkedId).mResource;
@@ -281,17 +265,6 @@ public class LinkedIdViewFragment extends Fragment implements
vText = (TextView) root.findViewById(R.id.linked_cert_text);
}
void setShowVerifying(boolean show) {
int child = show ? 1 : 0;
if (vVerifyingContainer.getDisplayedChild() != child) {
vVerifyingContainer.setDisplayedChild(child);
}
if (!show) {
vKeySpinner.setVisibility(View.GONE);
showButton(0);
}
}
void setShowProgress(boolean show) {
vProgress.setDisplayedChild(show ? 0 : 1);
}
@@ -305,6 +278,58 @@ public class LinkedIdViewFragment extends Fragment implements
}
private boolean mVerificationState = false;
/** Switches between the 'verifying' ui bit and certificate status. This method
* must behave correctly in all states, showing or hiding the appropriate views
* and cancelling pending operations where necessary.
*
* This method also handles back button functionality in combination with
* onBackStateChanged.
*/
void setShowVerifying(boolean show) {
if (!show) {
if (mInProgress != null) {
mInProgress.cancel(false);
mInProgress = null;
}
getFragmentManager().removeOnBackStackChangedListener(this);
new Handler().post(new Runnable() {
@Override
public void run() {
getFragmentManager().popBackStack("verification",
FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
});
if (!mVerificationState) {
return;
}
mVerificationState = false;
mViewHolder.showButton(0);
mViewHolder.vKeySpinner.setVisibility(View.GONE);
mViewHolder.vVerifyingContainer.setDisplayedChild(0);
return;
}
if (mVerificationState) {
return;
}
mVerificationState = true;
FragmentManager manager = getFragmentManager();
manager.beginTransaction().addToBackStack("verification").commit();
manager.executePendingTransactions();
manager.addOnBackStackChangedListener(this);
mViewHolder.vVerifyingContainer.setDisplayedChild(1);
}
@Override
public void onBackStackChanged() {
setShowVerifying(false);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup superContainer, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.linked_id_view_fragment, null);
@@ -339,22 +364,25 @@ public class LinkedIdViewFragment extends Fragment implements
}
});
{
Bundle args = new Bundle();
args.putParcelable(CertListWidget.ARG_URI, mDataUri);
args.putInt(CertListWidget.ARG_RANK, mLidRank);
getLoaderManager().initLoader(CertListWidget.LOADER_ID_LINKED_CERTS,
args, mViewHolder.vLinkedCerts);
}
return root;
}
void verifyResource() {
// only one at a time
// only one at a time (no sync needed, mInProgress is only touched in ui thread)
if (mInProgress != null) {
return;
}
FragmentManager manager = getFragmentManager();
manager.beginTransaction().addToBackStack("verification").commit();
manager.executePendingTransactions();
manager.addOnBackStackChangedListener(this);
mViewHolder.setShowVerifying(true);
setShowVerifying(true);
mViewHolder.vKeySpinner.setVisibility(View.GONE);
mViewHolder.setShowProgress(true);
@@ -427,16 +455,6 @@ 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) {

View File

@@ -113,7 +113,8 @@
android:id="@+id/back_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_arrow_back_white_24dp"
android:src="@drawable/ic_chevron_left_grey_24dp"
android:visibility="gone"
style="?android:attr/borderlessButtonStyle" />
<Space