rearrange linked id layouts, add CertListWidget
This commit is contained in:
@@ -20,6 +20,7 @@ dependencies {
|
|||||||
compile 'it.neokree:MaterialNavigationDrawer:1.3.1'
|
compile 'it.neokree:MaterialNavigationDrawer:1.3.1'
|
||||||
compile 'com.nispok:snackbar:2.9.1'
|
compile 'com.nispok:snackbar:2.9.1'
|
||||||
compile 'com.getbase:floatingactionbutton:1.8.0'
|
compile 'com.getbase:floatingactionbutton:1.8.0'
|
||||||
|
compile 'com.ocpsoft:ocpsoft-pretty-time:1.0.6'
|
||||||
|
|
||||||
// libs as submodules
|
// libs as submodules
|
||||||
compile project(':extern:openpgp-api-lib')
|
compile project(':extern:openpgp-api-lib')
|
||||||
|
|||||||
@@ -839,9 +839,7 @@ public class ViewKeyActivity extends BaseActivity implements
|
|||||||
mIsExpired = data.getInt(INDEX_IS_EXPIRED) != 0;
|
mIsExpired = data.getInt(INDEX_IS_EXPIRED) != 0;
|
||||||
mIsVerified = data.getInt(INDEX_VERIFIED) > 0;
|
mIsVerified = data.getInt(INDEX_VERIFIED) > 0;
|
||||||
|
|
||||||
if (oldFingerprint == null) {
|
startFragment(mIsSecret, fpData);
|
||||||
startFragment(mIsSecret, fpData);
|
|
||||||
}
|
|
||||||
|
|
||||||
// get name, email, and comment from USER_ID
|
// get name, email, and comment from USER_ID
|
||||||
String[] mainUserId = KeyRing.splitUserId(data.getString(INDEX_USER_ID));
|
String[] mainUserId = KeyRing.splitUserId(data.getString(INDEX_USER_ID));
|
||||||
@@ -1000,21 +998,25 @@ public class ViewKeyActivity extends BaseActivity implements
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startFragment(boolean isSecret, byte[] fingerprint) {
|
private void startFragment(final boolean isSecret, final byte[] fingerprint) {
|
||||||
// Create an instance of the fragment
|
|
||||||
final ViewKeyFragment frag = ViewKeyFragment.newInstance(mDataUri, isSecret, fingerprint);
|
|
||||||
|
|
||||||
new Handler().post(new Runnable() {
|
new Handler().post(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
||||||
FragmentManager manager = getSupportFragmentManager();
|
FragmentManager manager = getSupportFragmentManager();
|
||||||
manager.popBackStack("linked_id", FragmentManager.POP_BACK_STACK_INCLUSIVE);
|
if (manager.getBackStackEntryCount() == 0) {
|
||||||
// Add the fragment to the 'fragment_container' FrameLayout
|
// Create an instance of the fragment
|
||||||
// NOTE: We use commitAllowingStateLoss() to prevent weird crashes!
|
final ViewKeyFragment frag = ViewKeyFragment.newInstance(
|
||||||
manager.beginTransaction()
|
mDataUri, isSecret, fingerprint);
|
||||||
.replace(R.id.view_key_fragment, frag, "main")
|
manager.beginTransaction()
|
||||||
.commit();
|
.replace(R.id.view_key_fragment, frag)
|
||||||
|
.commit();
|
||||||
|
manager.popBackStack();
|
||||||
|
} else {
|
||||||
|
// not sure yet if we actually want this!
|
||||||
|
// manager.popBackStack();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import android.view.View;
|
|||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.ViewAnimator;
|
import android.widget.ViewAnimator;
|
||||||
|
|
||||||
@@ -44,10 +43,10 @@ import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
|
|||||||
import org.sufficientlysecure.keychain.service.PassphraseCacheService;
|
import org.sufficientlysecure.keychain.service.PassphraseCacheService;
|
||||||
import org.sufficientlysecure.keychain.ui.PassphraseDialogActivity;
|
import org.sufficientlysecure.keychain.ui.PassphraseDialogActivity;
|
||||||
import org.sufficientlysecure.keychain.ui.adapter.LinkedIdsAdapter;
|
import org.sufficientlysecure.keychain.ui.adapter.LinkedIdsAdapter;
|
||||||
import org.sufficientlysecure.keychain.ui.adapter.LinkedIdsCertAdapter;
|
|
||||||
import org.sufficientlysecure.keychain.ui.adapter.UserIdsAdapter;
|
import org.sufficientlysecure.keychain.ui.adapter.UserIdsAdapter;
|
||||||
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
||||||
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State;
|
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State;
|
||||||
|
import org.sufficientlysecure.keychain.ui.widget.CertListWidget;
|
||||||
import org.sufficientlysecure.keychain.ui.widget.CertifyKeySpinner;
|
import org.sufficientlysecure.keychain.ui.widget.CertifyKeySpinner;
|
||||||
import org.sufficientlysecure.keychain.util.Log;
|
import org.sufficientlysecure.keychain.util.Log;
|
||||||
|
|
||||||
@@ -61,8 +60,7 @@ public class LinkedIdViewFragment extends Fragment implements
|
|||||||
private static final String ARG_LID_RANK = "rank";
|
private static final String ARG_LID_RANK = "rank";
|
||||||
private static final String ARG_SHOWCERT = "verified";
|
private static final String ARG_SHOWCERT = "verified";
|
||||||
private static final String ARG_FINGERPRINT = "fingerprint";
|
private static final String ARG_FINGERPRINT = "fingerprint";
|
||||||
private static final int LOADER_ID_LINKED_CERTS = 1;
|
private static final int LOADER_ID_LINKED_ID = 1;
|
||||||
private static final int LOADER_ID_LINKED_ID = 2;
|
|
||||||
|
|
||||||
private RawLinkedIdentity mLinkedId;
|
private RawLinkedIdentity mLinkedId;
|
||||||
private LinkedCookieResource mLinkedResource;
|
private LinkedCookieResource mLinkedResource;
|
||||||
@@ -74,10 +72,8 @@ public class LinkedIdViewFragment extends Fragment implements
|
|||||||
|
|
||||||
private boolean mInProgress;
|
private boolean mInProgress;
|
||||||
|
|
||||||
private LinkedIdsCertAdapter mCertAdapter;
|
|
||||||
private Uri mDataUri;
|
private Uri mDataUri;
|
||||||
private ViewHolder mViewHolder;
|
private ViewHolder mViewHolder;
|
||||||
private View mCurrentCert;
|
|
||||||
private int mLidRank;
|
private int mLidRank;
|
||||||
private OnIdentityLoadedListener mIdLoadedListener;
|
private OnIdentityLoadedListener mIdLoadedListener;
|
||||||
|
|
||||||
@@ -109,11 +105,9 @@ public class LinkedIdViewFragment extends Fragment implements
|
|||||||
mContext = getActivity();
|
mContext = getActivity();
|
||||||
mInflater = getLayoutInflater(savedInstanceState);
|
mInflater = getLayoutInflater(savedInstanceState);
|
||||||
|
|
||||||
mCertAdapter = new LinkedIdsCertAdapter(getActivity(), null, 0);
|
|
||||||
// getLoaderManager().initLoader(LOADER_ID_LINKED_CERTS, null, this);
|
|
||||||
getLoaderManager().initLoader(LOADER_ID_LINKED_ID, null, this);
|
getLoaderManager().initLoader(LOADER_ID_LINKED_ID, null, this);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
|
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
@@ -122,10 +116,6 @@ public class LinkedIdViewFragment extends Fragment implements
|
|||||||
UserIdsAdapter.USER_PACKETS_PROJECTION,
|
UserIdsAdapter.USER_PACKETS_PROJECTION,
|
||||||
Tables.USER_PACKETS + "." + UserPackets.RANK
|
Tables.USER_PACKETS + "." + UserPackets.RANK
|
||||||
+ " = " + Integer.toString(mLidRank), null, null);
|
+ " = " + Integer.toString(mLidRank), null, null);
|
||||||
|
|
||||||
case LOADER_ID_LINKED_CERTS:
|
|
||||||
return LinkedIdsCertAdapter.createLoader(getActivity(), mDataUri);
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -162,10 +152,6 @@ public class LinkedIdViewFragment extends Fragment implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LOADER_ID_LINKED_CERTS:
|
|
||||||
mCertAdapter.swapCursor(cursor);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,6 +166,16 @@ public class LinkedIdViewFragment extends Fragment implements
|
|||||||
private void loadIdentity(RawLinkedIdentity linkedId, int certStatus) {
|
private void loadIdentity(RawLinkedIdentity linkedId, int certStatus) {
|
||||||
mLinkedId = linkedId;
|
mLinkedId = linkedId;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
if (mLinkedId instanceof LinkedIdentity) {
|
if (mLinkedId instanceof LinkedIdentity) {
|
||||||
LinkedResource res = ((LinkedIdentity) mLinkedId).mResource;
|
LinkedResource res = ((LinkedIdentity) mLinkedId).mResource;
|
||||||
mLinkedResource = (LinkedCookieResource) res;
|
mLinkedResource = (LinkedCookieResource) res;
|
||||||
@@ -235,30 +231,28 @@ public class LinkedIdViewFragment extends Fragment implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaderReset(Loader<Cursor> loader) {
|
public void onLoaderReset(Loader<Cursor> loader) {
|
||||||
switch (loader.getId()) {
|
|
||||||
case LOADER_ID_LINKED_CERTS:
|
|
||||||
mCertAdapter.swapCursor(null);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static class ViewHolder {
|
static class ViewHolder {
|
||||||
private final View vButtonView;
|
private final View vButtonView;
|
||||||
|
private final ViewAnimator vVerifyingContainer;
|
||||||
LinkedIdsAdapter.ViewHolder mLinkedIdHolder;
|
LinkedIdsAdapter.ViewHolder mLinkedIdHolder;
|
||||||
|
|
||||||
private ViewAnimator mButtonSwitcher;
|
private ViewAnimator mButtonSwitcher;
|
||||||
private LinearLayout vLinkedCerts;
|
private CertListWidget vLinkedCerts;
|
||||||
private CertifyKeySpinner vKeySpinner;
|
private CertifyKeySpinner vKeySpinner;
|
||||||
private LinearLayout vLinkedVerify;
|
|
||||||
private final View vButtonVerify;
|
private final View vButtonVerify;
|
||||||
private final View vButtonRetry;
|
private final View vButtonRetry;
|
||||||
private final View vButtonConfirm;
|
private final View vButtonConfirm;
|
||||||
private final View vButtonBack;
|
private final View vButtonBack;
|
||||||
|
|
||||||
|
private final ViewAnimator vProgress;
|
||||||
|
private final ImageView vIcon;
|
||||||
|
private final TextView vText;
|
||||||
|
|
||||||
ViewHolder(View root) {
|
ViewHolder(View root) {
|
||||||
vLinkedCerts = (LinearLayout) root.findViewById(R.id.linked_id_certs);
|
vLinkedCerts = (CertListWidget) root.findViewById(R.id.linked_id_certs);
|
||||||
vLinkedVerify = (LinearLayout) root.findViewById(R.id.linked_id_verify);
|
|
||||||
vKeySpinner = (CertifyKeySpinner) root.findViewById(R.id.cert_key_spinner);
|
vKeySpinner = (CertifyKeySpinner) root.findViewById(R.id.cert_key_spinner);
|
||||||
mButtonSwitcher = (ViewAnimator) root.findViewById(R.id.button_animator);
|
mButtonSwitcher = (ViewAnimator) root.findViewById(R.id.button_animator);
|
||||||
|
|
||||||
@@ -269,6 +263,26 @@ public class LinkedIdViewFragment extends Fragment implements
|
|||||||
vButtonRetry = root.findViewById(R.id.button_retry);
|
vButtonRetry = root.findViewById(R.id.button_retry);
|
||||||
vButtonConfirm = root.findViewById(R.id.button_confirm);
|
vButtonConfirm = root.findViewById(R.id.button_confirm);
|
||||||
vButtonView = root.findViewById(R.id.button_view);
|
vButtonView = root.findViewById(R.id.button_view);
|
||||||
|
|
||||||
|
vVerifyingContainer = (ViewAnimator) root.findViewById(R.id.linked_verify_container);
|
||||||
|
|
||||||
|
vProgress = (ViewAnimator) root.findViewById(R.id.linked_cert_progress);
|
||||||
|
vIcon = (ImageView) root.findViewById(R.id.linked_cert_icon);
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setShowProgress(boolean show) {
|
||||||
|
vProgress.setDisplayedChild(show ? 0 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -310,21 +324,6 @@ public class LinkedIdViewFragment extends Fragment implements
|
|||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
static class ViewHolderCert {
|
|
||||||
final ViewAnimator vProgress;
|
|
||||||
final ImageView vIcon;
|
|
||||||
final TextView vText;
|
|
||||||
|
|
||||||
ViewHolderCert(View view) {
|
|
||||||
vProgress = (ViewAnimator) view.findViewById(R.id.linked_cert_progress);
|
|
||||||
vIcon = (ImageView) view.findViewById(R.id.linked_cert_icon);
|
|
||||||
vText = (TextView) view.findViewById(R.id.linked_cert_text);
|
|
||||||
}
|
|
||||||
void setShowProgress(boolean show) {
|
|
||||||
vProgress.setDisplayedChild(show ? 0 : 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void showButton(int which) {
|
void showButton(int which) {
|
||||||
if (mViewHolder.mButtonSwitcher.getDisplayedChild() == which) {
|
if (mViewHolder.mButtonSwitcher.getDisplayedChild() == which) {
|
||||||
return;
|
return;
|
||||||
@@ -342,20 +341,11 @@ public class LinkedIdViewFragment extends Fragment implements
|
|||||||
mInProgress = true;
|
mInProgress = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// is there a current certification? if not create a new one
|
mViewHolder.setShowVerifying(true);
|
||||||
final ViewHolderCert holder;
|
|
||||||
if (mCurrentCert == null) {
|
|
||||||
mCurrentCert = mInflater.inflate(R.layout.linked_id_cert, null);
|
|
||||||
holder = new ViewHolderCert(mCurrentCert);
|
|
||||||
mCurrentCert.setTag(holder);
|
|
||||||
mViewHolder.vLinkedVerify.addView(mCurrentCert);
|
|
||||||
} else {
|
|
||||||
holder = (ViewHolderCert) mCurrentCert.getTag();
|
|
||||||
}
|
|
||||||
|
|
||||||
mViewHolder.vKeySpinner.setVisibility(View.GONE);
|
mViewHolder.vKeySpinner.setVisibility(View.GONE);
|
||||||
holder.setShowProgress(true);
|
mViewHolder.setShowProgress(true);
|
||||||
holder.vText.setText("Verifying…");
|
mViewHolder.vText.setText("Verifying…");
|
||||||
|
|
||||||
new AsyncTask<Void,Void,LinkedVerifyResult>() {
|
new AsyncTask<Void,Void,LinkedVerifyResult>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -376,13 +366,13 @@ public class LinkedIdViewFragment extends Fragment implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(LinkedVerifyResult result) {
|
protected void onPostExecute(LinkedVerifyResult result) {
|
||||||
holder.setShowProgress(false);
|
mViewHolder.setShowProgress(false);
|
||||||
if (result.success()) {
|
if (result.success()) {
|
||||||
holder.vText.setText("Ok");
|
mViewHolder.vText.setText("Ok");
|
||||||
setupForConfirmation();
|
setupForConfirmation();
|
||||||
} else {
|
} else {
|
||||||
showButton(1);
|
showButton(1);
|
||||||
holder.vText.setText("Error");
|
mViewHolder.vText.setText("Error");
|
||||||
}
|
}
|
||||||
mInProgress = false;
|
mInProgress = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,131 @@
|
|||||||
|
package org.sufficientlysecure.keychain.ui.widget;
|
||||||
|
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v4.app.LoaderManager;
|
||||||
|
import android.support.v4.content.CursorLoader;
|
||||||
|
import android.support.v4.content.Loader;
|
||||||
|
import android.text.SpannableStringBuilder;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.ViewAnimator;
|
||||||
|
|
||||||
|
import com.ocpsoft.pretty.time.PrettyTime;
|
||||||
|
import org.sufficientlysecure.keychain.R;
|
||||||
|
import org.sufficientlysecure.keychain.provider.KeychainContract;
|
||||||
|
import org.sufficientlysecure.keychain.provider.KeychainContract.Certs;
|
||||||
|
|
||||||
|
public class CertListWidget extends ViewAnimator
|
||||||
|
implements LoaderManager.LoaderCallbacks<Cursor> {
|
||||||
|
|
||||||
|
public static final int LOADER_ID_LINKED_CERTS = 38572;
|
||||||
|
|
||||||
|
public static final String ARG_URI = "uri";
|
||||||
|
public static final String ARG_RANK = "rank";
|
||||||
|
|
||||||
|
|
||||||
|
// These are the rows that we will retrieve.
|
||||||
|
static final String[] CERTS_PROJECTION = new String[]{
|
||||||
|
KeychainContract.Certs._ID,
|
||||||
|
KeychainContract.Certs.MASTER_KEY_ID,
|
||||||
|
KeychainContract.Certs.VERIFIED,
|
||||||
|
KeychainContract.Certs.TYPE,
|
||||||
|
KeychainContract.Certs.RANK,
|
||||||
|
KeychainContract.Certs.KEY_ID_CERTIFIER,
|
||||||
|
KeychainContract.Certs.USER_ID,
|
||||||
|
KeychainContract.Certs.SIGNER_UID,
|
||||||
|
KeychainContract.Certs.CREATION
|
||||||
|
};
|
||||||
|
public static final int INDEX_MASTER_KEY_ID = 1;
|
||||||
|
public static final int INDEX_VERIFIED = 2;
|
||||||
|
public static final int INDEX_TYPE = 3;
|
||||||
|
public static final int INDEX_RANK = 4;
|
||||||
|
public static final int INDEX_KEY_ID_CERTIFIER = 5;
|
||||||
|
public static final int INDEX_USER_ID = 6;
|
||||||
|
public static final int INDEX_SIGNER_UID = 7;
|
||||||
|
public static final int INDEX_CREATION = 8;
|
||||||
|
|
||||||
|
private TextView vCollapsed;
|
||||||
|
private View vExpanded;
|
||||||
|
private View vExpandButton;
|
||||||
|
|
||||||
|
public CertListWidget(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onFinishInflate() {
|
||||||
|
super.onFinishInflate();
|
||||||
|
|
||||||
|
View root = getRootView();
|
||||||
|
vCollapsed = (TextView) root.findViewById(R.id.cert_collapsed_list);
|
||||||
|
vExpanded = root.findViewById(R.id.cert_expanded_list);
|
||||||
|
vExpandButton = root.findViewById(R.id.cert_expand_button);
|
||||||
|
|
||||||
|
// for now
|
||||||
|
vExpandButton.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setExpanded(boolean expanded) {
|
||||||
|
setDisplayedChild(expanded ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
|
||||||
|
Uri baseUri = args.getParcelable(ARG_URI);
|
||||||
|
int rank = args.getInt(ARG_RANK);
|
||||||
|
|
||||||
|
Uri uri = Certs.buildLinkedIdCertsUri(baseUri, rank);
|
||||||
|
return new CursorLoader(getContext(), uri,
|
||||||
|
CERTS_PROJECTION, null, null, null);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
|
||||||
|
|
||||||
|
if (data == null || !data.moveToFirst()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
// TODO support external certificates
|
||||||
|
Date userCert = null;
|
||||||
|
while (!data.isAfterLast()) {
|
||||||
|
|
||||||
|
int verified = data.getInt(INDEX_VERIFIED);
|
||||||
|
Date creation = new Date(data.getLong(INDEX_CREATION) * 1000);
|
||||||
|
|
||||||
|
if (verified == Certs.VERIFIED_SECRET) {
|
||||||
|
if (userCert == null || userCert.after(creation)) {
|
||||||
|
userCert = creation;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data.moveToNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userCert != null) {
|
||||||
|
PrettyTime format = new PrettyTime();
|
||||||
|
vCollapsed.setText("You verified and confirmed this identity "
|
||||||
|
+ format.format(userCert) + ".");
|
||||||
|
} else {
|
||||||
|
vCollapsed.setText("This identity is not yet verified or confirmed.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoaderReset(Loader<Cursor> loader) {
|
||||||
|
setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
44
OpenKeychain/src/main/res/layout/cert_list_widget.xml
Normal file
44
OpenKeychain/src/main/res/layout/cert_list_widget.xml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<org.sufficientlysecure.keychain.ui.widget.CertListWidget
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginLeft="12dp"
|
||||||
|
android:layout_marginRight="12dp"
|
||||||
|
android:id="@+id/linked_id_certs">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:minHeight="?android:attr/listPreferredItemHeight"
|
||||||
|
>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/cert_collapsed_list"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:layout_weight="1"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:src="@drawable/ic_expand_more_black_24dp"
|
||||||
|
android:id="@+id/cert_expand_button"
|
||||||
|
android:padding="4dp"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:id="@+id/cert_expanded_list"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
</ListView>
|
||||||
|
|
||||||
|
</org.sufficientlysecure.keychain.ui.widget.CertListWidget>
|
||||||
@@ -32,21 +32,68 @@
|
|||||||
|
|
||||||
<include layout="@layout/linked_id_item" />
|
<include layout="@layout/linked_id_item" />
|
||||||
|
|
||||||
<LinearLayout
|
<ViewAnimator
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:id="@+id/linked_verify_container"
|
||||||
android:animateLayoutChanges="true"
|
android:inAnimation="@anim/fade_in"
|
||||||
android:id="@+id/linked_id_certs">
|
android:outAnimation="@anim/fade_out">
|
||||||
|
|
||||||
|
<include layout="@layout/cert_list_widget" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:minHeight="?android:attr/listPreferredItemHeight"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:singleLine="true">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_width="0dip"
|
||||||
|
android:layout_marginLeft="16dp"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
android:layout_marginBottom="4dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/linked_cert_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Verifying…"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<ViewAnimator
|
||||||
|
android:layout_width="22dp"
|
||||||
|
android:layout_height="22dp"
|
||||||
|
android:layout_marginLeft="16dp"
|
||||||
|
android:layout_marginRight="16dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:id="@+id/linked_cert_progress"
|
||||||
|
android:inAnimation="@anim/fade_in"
|
||||||
|
android:outAnimation="@anim/fade_out">
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:layout_width="22dp"
|
||||||
|
android:layout_height="22dp"
|
||||||
|
android:indeterminate="true"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="22dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@drawable/status_signature_unknown_cutout_24dp"
|
||||||
|
android:id="@+id/linked_cert_icon"
|
||||||
|
/>
|
||||||
|
</ViewAnimator>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
</ViewAnimator>
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:animateLayoutChanges="true"
|
|
||||||
android:id="@+id/linked_id_verify">
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<org.sufficientlysecure.keychain.ui.widget.CertifyKeySpinner
|
<org.sufficientlysecure.keychain.ui.widget.CertifyKeySpinner
|
||||||
android:layout_marginLeft="14dp"
|
android:layout_marginLeft="14dp"
|
||||||
|
|||||||
Reference in New Issue
Block a user