refactor ViewKeyActivity to remove field m* prefix
This commit is contained in:
parent
b3a5b7e04a
commit
84d652be8b
|
@ -48,7 +48,7 @@ public class CertifyFingerprintActivity extends BaseActivity {
|
|||
}
|
||||
});
|
||||
|
||||
Timber.i("mDataUri: " + mDataUri.toString());
|
||||
Timber.i("dataUri: " + mDataUri.toString());
|
||||
|
||||
startFragment(savedInstanceState, mDataUri);
|
||||
}
|
||||
|
|
|
@ -113,7 +113,7 @@ public class CertifyFingerprintFragment extends LoaderFragment implements
|
|||
private void loadData(Uri dataUri) {
|
||||
mDataUri = dataUri;
|
||||
|
||||
Timber.i("mDataUri: " + mDataUri.toString());
|
||||
Timber.i("dataUri: " + mDataUri.toString());
|
||||
|
||||
// Prepare the loaders. Either re-connect with an existing ones,
|
||||
// or start new ones.
|
||||
|
|
|
@ -165,7 +165,7 @@ public class EditIdentitiesFragment extends Fragment
|
|||
private void loadData(Uri dataUri) {
|
||||
mDataUri = dataUri;
|
||||
|
||||
Timber.i("mDataUri: " + mDataUri);
|
||||
Timber.i("dataUri: " + mDataUri);
|
||||
|
||||
// load the secret key ring. we do verify here that the passphrase is correct, so cached won't do
|
||||
try {
|
||||
|
|
|
@ -195,7 +195,7 @@ public class EditKeyFragment extends QueueingCryptoOperationFragment<SaveKeyring
|
|||
private void loadData(Uri dataUri) {
|
||||
mDataUri = dataUri;
|
||||
|
||||
Timber.i("mDataUri: " + mDataUri);
|
||||
Timber.i("dataUri: " + mDataUri);
|
||||
|
||||
// load the secret key ring. we do verify here that the passphrase is correct, so cached won't do
|
||||
try {
|
||||
|
|
|
@ -240,7 +240,7 @@ public class ViewKeyAdvUserIdsFragment extends LoaderFragment implements
|
|||
private void loadData(Uri dataUri) {
|
||||
mDataUri = dataUri;
|
||||
|
||||
Timber.i("mDataUri: " + mDataUri);
|
||||
Timber.i("dataUri: " + mDataUri);
|
||||
|
||||
mUserIdsAdapter = new UserIdsAdapter(getActivity(), null, 0);
|
||||
mUserIds.setAdapter(mUserIdsAdapter);
|
||||
|
|
|
@ -31,6 +31,7 @@ import android.os.Build;
|
|||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Parcelable;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
|
@ -41,7 +42,6 @@ import android.support.v4.content.CursorLoader;
|
|||
import android.support.v4.content.Loader;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextSwitcher;
|
||||
|
@ -86,19 +86,18 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements
|
|||
private static final String ARG_MASTER_KEY_ID = "master_key_id";
|
||||
private static final int LOADER_ID_LINKED_ID = 1;
|
||||
|
||||
private UriAttribute mLinkedId;
|
||||
private LinkedTokenResource mLinkedResource;
|
||||
private boolean mIsSecret;
|
||||
private long masterKeyId;
|
||||
private boolean isSecret;
|
||||
|
||||
private Context mContext;
|
||||
private long mMasterKeyId;
|
||||
private UriAttribute linkedId;
|
||||
private LinkedTokenResource linkedResource;
|
||||
|
||||
private AsyncTask mInProgress;
|
||||
private AsyncTask taskInProgress;
|
||||
|
||||
private Uri mDataUri;
|
||||
private ViewHolder mViewHolder;
|
||||
private int mLidRank;
|
||||
private long mCertifyKeyId;
|
||||
private Uri dataUri;
|
||||
private ViewHolder viewHolder;
|
||||
private int lidRank;
|
||||
private long certifyKeyId;
|
||||
|
||||
public static LinkedIdViewFragment newInstance(Uri dataUri, int rank,
|
||||
boolean isSecret, long masterKeyId) throws IOException {
|
||||
|
@ -125,13 +124,11 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements
|
|||
super.onCreate(savedInstanceState);
|
||||
|
||||
Bundle args = getArguments();
|
||||
mDataUri = args.getParcelable(ARG_DATA_URI);
|
||||
mLidRank = args.getInt(ARG_LID_RANK);
|
||||
dataUri = args.getParcelable(ARG_DATA_URI);
|
||||
lidRank = args.getInt(ARG_LID_RANK);
|
||||
|
||||
mIsSecret = args.getBoolean(ARG_IS_SECRET);
|
||||
mMasterKeyId = args.getLong(ARG_MASTER_KEY_ID);
|
||||
|
||||
mContext = getActivity();
|
||||
isSecret = args.getBoolean(ARG_IS_SECRET);
|
||||
masterKeyId = args.getLong(ARG_MASTER_KEY_ID);
|
||||
|
||||
getLoaderManager().initLoader(LOADER_ID_LINKED_ID, null, this);
|
||||
|
||||
|
@ -141,10 +138,10 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements
|
|||
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
|
||||
switch (id) {
|
||||
case LOADER_ID_LINKED_ID:
|
||||
return new CursorLoader(getActivity(), mDataUri,
|
||||
return new CursorLoader(getContext(), dataUri,
|
||||
UserIdsAdapter.USER_PACKETS_PROJECTION,
|
||||
Tables.USER_PACKETS + "." + UserPackets.RANK
|
||||
+ " = " + Integer.toString(mLidRank), null, null);
|
||||
+ " = " + Integer.toString(lidRank), null, null);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
@ -181,68 +178,62 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements
|
|||
}
|
||||
|
||||
public void finishFragment() {
|
||||
new Handler().post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
FragmentManager manager = getFragmentManager();
|
||||
manager.removeOnBackStackChangedListener(LinkedIdViewFragment.this);
|
||||
manager.popBackStack("linked_id", FragmentManager.POP_BACK_STACK_INCLUSIVE);
|
||||
}
|
||||
new Handler().post(() -> {
|
||||
FragmentManager manager = getFragmentManager();
|
||||
manager.removeOnBackStackChangedListener(LinkedIdViewFragment.this);
|
||||
manager.popBackStack("linked_id", FragmentManager.POP_BACK_STACK_INCLUSIVE);
|
||||
});
|
||||
}
|
||||
|
||||
private void loadIdentity(UriAttribute linkedId, int certStatus) {
|
||||
mLinkedId = linkedId;
|
||||
this.linkedId = linkedId;
|
||||
|
||||
if (mLinkedId instanceof LinkedAttribute) {
|
||||
LinkedResource res = ((LinkedAttribute) mLinkedId).mResource;
|
||||
mLinkedResource = (LinkedTokenResource) res;
|
||||
if (this.linkedId instanceof LinkedAttribute) {
|
||||
LinkedResource res = ((LinkedAttribute) this.linkedId).mResource;
|
||||
linkedResource = (LinkedTokenResource) res;
|
||||
}
|
||||
|
||||
if (!mIsSecret) {
|
||||
if (!isSecret) {
|
||||
switch (certStatus) {
|
||||
case Certs.VERIFIED_SECRET:
|
||||
KeyFormattingUtils.setStatusImage(mContext, mViewHolder.mLinkedIdHolder.vVerified,
|
||||
KeyFormattingUtils.setStatusImage(getContext(), viewHolder.mLinkedIdHolder.vVerified,
|
||||
null, State.VERIFIED, KeyFormattingUtils.DEFAULT_COLOR);
|
||||
break;
|
||||
case Certs.VERIFIED_SELF:
|
||||
KeyFormattingUtils.setStatusImage(mContext, mViewHolder.mLinkedIdHolder.vVerified,
|
||||
KeyFormattingUtils.setStatusImage(getContext(), viewHolder.mLinkedIdHolder.vVerified,
|
||||
null, State.UNVERIFIED, KeyFormattingUtils.DEFAULT_COLOR);
|
||||
break;
|
||||
default:
|
||||
KeyFormattingUtils.setStatusImage(mContext, mViewHolder.mLinkedIdHolder.vVerified,
|
||||
KeyFormattingUtils.setStatusImage(getContext(), viewHolder.mLinkedIdHolder.vVerified,
|
||||
null, State.INVALID, KeyFormattingUtils.DEFAULT_COLOR);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
mViewHolder.mLinkedIdHolder.vVerified.setImageResource(R.drawable.octo_link_24dp);
|
||||
viewHolder.mLinkedIdHolder.vVerified.setImageResource(R.drawable.octo_link_24dp);
|
||||
}
|
||||
|
||||
mViewHolder.mLinkedIdHolder.bind(mContext, mLinkedId);
|
||||
viewHolder.mLinkedIdHolder.bind(getContext(), this.linkedId);
|
||||
|
||||
setShowVerifying(false);
|
||||
|
||||
// no resource, nothing further we can do…
|
||||
if (mLinkedResource == null) {
|
||||
mViewHolder.vButtonView.setVisibility(View.GONE);
|
||||
mViewHolder.vButtonVerify.setVisibility(View.GONE);
|
||||
if (linkedResource == null) {
|
||||
viewHolder.vButtonView.setVisibility(View.GONE);
|
||||
viewHolder.vButtonVerify.setVisibility(View.GONE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mLinkedResource.isViewable()) {
|
||||
mViewHolder.vButtonView.setVisibility(View.VISIBLE);
|
||||
mViewHolder.vButtonView.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = mLinkedResource.getViewIntent();
|
||||
if (intent == null) {
|
||||
return;
|
||||
}
|
||||
getActivity().startActivity(intent);
|
||||
if (linkedResource.isViewable()) {
|
||||
viewHolder.vButtonView.setVisibility(View.VISIBLE);
|
||||
viewHolder.vButtonView.setOnClickListener(v -> {
|
||||
Intent intent = linkedResource.getViewIntent();
|
||||
if (intent == null) {
|
||||
return;
|
||||
}
|
||||
startActivity(intent);
|
||||
});
|
||||
} else {
|
||||
mViewHolder.vButtonView.setVisibility(View.GONE);
|
||||
viewHolder.vButtonView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -362,27 +353,22 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements
|
|||
*/
|
||||
void setShowVerifying(boolean show) {
|
||||
if (!show) {
|
||||
if (mInProgress != null) {
|
||||
mInProgress.cancel(false);
|
||||
mInProgress = null;
|
||||
if (taskInProgress != null) {
|
||||
taskInProgress.cancel(false);
|
||||
taskInProgress = null;
|
||||
}
|
||||
getFragmentManager().removeOnBackStackChangedListener(this);
|
||||
new Handler().post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
getFragmentManager().popBackStack("verification",
|
||||
FragmentManager.POP_BACK_STACK_INCLUSIVE);
|
||||
}
|
||||
});
|
||||
new Handler().post(() -> getFragmentManager().popBackStack("verification",
|
||||
FragmentManager.POP_BACK_STACK_INCLUSIVE));
|
||||
|
||||
if (!mVerificationState) {
|
||||
return;
|
||||
}
|
||||
mVerificationState = false;
|
||||
|
||||
mViewHolder.showButton(0);
|
||||
mViewHolder.vKeySpinnerContainer.setVisibility(View.GONE);
|
||||
mViewHolder.showVerifyingContainer(mContext, false, mIsSecret);
|
||||
viewHolder.showButton(0);
|
||||
viewHolder.vKeySpinnerContainer.setVisibility(View.GONE);
|
||||
viewHolder.showVerifyingContainer(getContext(), false, isSecret);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -395,7 +381,7 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements
|
|||
manager.beginTransaction().addToBackStack("verification").commit();
|
||||
manager.executePendingTransactions();
|
||||
manager.addOnBackStackChangedListener(this);
|
||||
mViewHolder.showVerifyingContainer(mContext, true, mIsSecret);
|
||||
viewHolder.showVerifyingContainer(getContext(), true, isSecret);
|
||||
|
||||
}
|
||||
|
||||
|
@ -405,44 +391,29 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements
|
|||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup superContainer, Bundle savedInstanceState) {
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup superContainer, Bundle savedInstanceState) {
|
||||
View root = inflater.inflate(R.layout.linked_id_view_fragment, null);
|
||||
|
||||
mViewHolder = new ViewHolder(root);
|
||||
root.setTag(mViewHolder);
|
||||
viewHolder = new ViewHolder(root);
|
||||
root.setTag(viewHolder);
|
||||
|
||||
((ImageView) root.findViewById(R.id.status_icon_verified))
|
||||
.setColorFilter(ContextCompat.getColor(mContext, R.color.android_green_light),
|
||||
.setColorFilter(ContextCompat.getColor(getContext(), R.color.android_green_light),
|
||||
PorterDuff.Mode.SRC_IN);
|
||||
((ImageView) root.findViewById(R.id.status_icon_invalid))
|
||||
.setColorFilter(ContextCompat.getColor(mContext, R.color.android_red_light),
|
||||
.setColorFilter(ContextCompat.getColor(getContext(), R.color.android_red_light),
|
||||
PorterDuff.Mode.SRC_IN);
|
||||
|
||||
mViewHolder.vButtonVerify.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
verifyResource();
|
||||
}
|
||||
});
|
||||
mViewHolder.vButtonRetry.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
verifyResource();
|
||||
}
|
||||
});
|
||||
mViewHolder.vButtonConfirm.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
initiateCertifying();
|
||||
}
|
||||
});
|
||||
viewHolder.vButtonVerify.setOnClickListener(v -> verifyResource());
|
||||
viewHolder.vButtonRetry.setOnClickListener(v -> verifyResource());
|
||||
viewHolder.vButtonConfirm.setOnClickListener(v -> initiateCertifying());
|
||||
|
||||
{
|
||||
Bundle args = new Bundle();
|
||||
args.putParcelable(CertListWidget.ARG_URI, Certs.buildLinkedIdCertsUri(mDataUri, mLidRank));
|
||||
args.putBoolean(CertListWidget.ARG_IS_SECRET, mIsSecret);
|
||||
args.putParcelable(CertListWidget.ARG_URI, Certs.buildLinkedIdCertsUri(dataUri, lidRank));
|
||||
args.putBoolean(CertListWidget.ARG_IS_SECRET, isSecret);
|
||||
getLoaderManager().initLoader(CertListWidget.LOADER_ID_LINKED_CERTS,
|
||||
args, mViewHolder.vLinkedCerts);
|
||||
args, viewHolder.vLinkedCerts);
|
||||
}
|
||||
|
||||
return root;
|
||||
|
@ -450,17 +421,17 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements
|
|||
|
||||
void verifyResource() {
|
||||
|
||||
// only one at a time (no sync needed, mInProgress is only touched in ui thread)
|
||||
if (mInProgress != null) {
|
||||
// only one at a time (no sync needed, taskInProgress is only touched in ui thread)
|
||||
if (taskInProgress != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
setShowVerifying(true);
|
||||
|
||||
mViewHolder.vKeySpinnerContainer.setVisibility(View.GONE);
|
||||
mViewHolder.setVerifyingState(mContext, VerifyState.VERIFYING, mIsSecret);
|
||||
viewHolder.vKeySpinnerContainer.setVisibility(View.GONE);
|
||||
viewHolder.setVerifyingState(getContext(), VerifyState.VERIFYING, isSecret);
|
||||
|
||||
mInProgress = new AsyncTask<Void,Void,LinkedVerifyResult>() {
|
||||
taskInProgress = new AsyncTask<Void,Void,LinkedVerifyResult>() {
|
||||
@Override
|
||||
protected LinkedVerifyResult doInBackground(Void... params) {
|
||||
FragmentActivity activity = getActivity();
|
||||
|
@ -468,13 +439,13 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements
|
|||
byte[] fingerprint;
|
||||
try {
|
||||
fingerprint = KeyRepository.create(activity).getCachedPublicKeyRing(
|
||||
mMasterKeyId).getFingerprint();
|
||||
masterKeyId).getFingerprint();
|
||||
} catch (PgpKeyNotFoundException e) {
|
||||
throw new IllegalStateException("Key to verify linked id for must exist in db!");
|
||||
}
|
||||
|
||||
long timer = System.currentTimeMillis();
|
||||
LinkedVerifyResult result = mLinkedResource.verify(activity, fingerprint);
|
||||
LinkedVerifyResult result = linkedResource.verify(activity, fingerprint);
|
||||
|
||||
// ux flow: this operation should take at last a second
|
||||
timer = System.currentTimeMillis() -timer;
|
||||
|
@ -493,17 +464,17 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements
|
|||
return;
|
||||
}
|
||||
if (result.success()) {
|
||||
mViewHolder.vText.setText(getString(mLinkedResource.getVerifiedText(mIsSecret)));
|
||||
viewHolder.vText.setText(getString(linkedResource.getVerifiedText(isSecret)));
|
||||
// hack to preserve bold text
|
||||
((TextView) mViewHolder.vText.getCurrentView()).setText(
|
||||
mLinkedResource.getVerifiedText(mIsSecret));
|
||||
mViewHolder.setVerifyingState(mContext, VerifyState.VERIFY_OK, mIsSecret);
|
||||
mViewHolder.mLinkedIdHolder.seekAttention();
|
||||
((TextView) viewHolder.vText.getCurrentView()).setText(
|
||||
linkedResource.getVerifiedText(isSecret));
|
||||
viewHolder.setVerifyingState(getContext(), VerifyState.VERIFY_OK, isSecret);
|
||||
viewHolder.mLinkedIdHolder.seekAttention();
|
||||
} else {
|
||||
mViewHolder.setVerifyingState(mContext, VerifyState.VERIFY_ERROR, mIsSecret);
|
||||
viewHolder.setVerifyingState(getContext(), VerifyState.VERIFY_ERROR, isSecret);
|
||||
result.createNotify(getActivity()).show();
|
||||
}
|
||||
mInProgress = null;
|
||||
taskInProgress = null;
|
||||
}
|
||||
}.execute();
|
||||
|
||||
|
@ -511,22 +482,22 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements
|
|||
|
||||
private void initiateCertifying() {
|
||||
|
||||
if (mIsSecret) {
|
||||
if (isSecret) {
|
||||
return;
|
||||
}
|
||||
|
||||
// get the user's passphrase for this key (if required)
|
||||
mCertifyKeyId = mViewHolder.vKeySpinner.getSelectedKeyId();
|
||||
if (mCertifyKeyId == key.none || mCertifyKeyId == key.symmetric) {
|
||||
certifyKeyId = viewHolder.vKeySpinner.getSelectedKeyId();
|
||||
if (certifyKeyId == key.none || certifyKeyId == key.symmetric) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
SubtleAttentionSeeker.tintBackground(mViewHolder.vKeySpinnerContainer, 600).start();
|
||||
SubtleAttentionSeeker.tintBackground(viewHolder.vKeySpinnerContainer, 600).start();
|
||||
} else {
|
||||
Notify.create(getActivity(), R.string.select_key_to_certify, Style.ERROR).show();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
mViewHolder.setVerifyingState(mContext, VerifyState.CERTIFYING, false);
|
||||
viewHolder.setVerifyingState(getContext(), VerifyState.CERTIFYING, false);
|
||||
cryptoOperation();
|
||||
|
||||
}
|
||||
|
@ -543,11 +514,11 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements
|
|||
@Nullable
|
||||
@Override
|
||||
public Parcelable createOperationInput() {
|
||||
CertifyAction action = CertifyAction.createForUserAttributes(mMasterKeyId,
|
||||
Collections.singletonList(mLinkedId.toUserAttribute()));
|
||||
CertifyAction action = CertifyAction.createForUserAttributes(masterKeyId,
|
||||
Collections.singletonList(linkedId.toUserAttribute()));
|
||||
|
||||
// fill values for this action
|
||||
CertifyActionsParcel.Builder builder = CertifyActionsParcel.builder(mCertifyKeyId);
|
||||
CertifyActionsParcel.Builder builder = CertifyActionsParcel.builder(certifyKeyId);
|
||||
builder.addActions(Collections.singletonList(action));
|
||||
|
||||
return builder.build();
|
||||
|
|
|
@ -20,8 +20,8 @@ package org.sufficientlysecure.keychain.ui.keyview;
|
|||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
||||
import android.animation.ArgbEvaluator;
|
||||
import android.animation.ObjectAnimator;
|
||||
|
@ -106,7 +106,6 @@ import org.sufficientlysecure.keychain.ui.util.Notify;
|
|||
import org.sufficientlysecure.keychain.ui.util.Notify.Style;
|
||||
import org.sufficientlysecure.keychain.ui.util.QrCodeUtils;
|
||||
import org.sufficientlysecure.keychain.util.ContactHelper;
|
||||
import org.sufficientlysecure.keychain.util.Passphrase;
|
||||
import org.sufficientlysecure.keychain.util.Preferences;
|
||||
import timber.log.Timber;
|
||||
|
||||
|
@ -127,82 +126,80 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
public static final String EXTRA_DISPLAY_RESULT = "display_result";
|
||||
public static final String EXTRA_LINKED_TRANSITION = "linked_transition";
|
||||
|
||||
KeyRepository mKeyRepository;
|
||||
KeyRepository keyRepository;
|
||||
|
||||
protected Uri mDataUri;
|
||||
protected Uri dataUri;
|
||||
|
||||
// For CryptoOperationHelper.Callback
|
||||
private HkpKeyserverAddress mKeyserver;
|
||||
private ArrayList<ParcelableKeyRing> mKeyList;
|
||||
private CryptoOperationHelper<ImportKeyringParcel, ImportKeyResult> mImportOpHelper;
|
||||
private CryptoOperationHelper<ChangeUnlockParcel, EditKeyResult> mEditOpHelper;
|
||||
private ChangeUnlockParcel mChangeUnlockParcel;
|
||||
private CryptoOperationHelper<ImportKeyringParcel, ImportKeyResult> importOpHelper;
|
||||
private CryptoOperationHelper<ChangeUnlockParcel, EditKeyResult> editOpHelper;
|
||||
private ChangeUnlockParcel changeUnlockParcel;
|
||||
|
||||
private TextView mStatusText;
|
||||
private ImageView mStatusImage;
|
||||
private AppBarLayout mAppBarLayout;
|
||||
private CollapsingToolbarLayout mCollapsingToolbarLayout;
|
||||
private TextView statusText;
|
||||
private ImageView statusImage;
|
||||
private AppBarLayout appBarLayout;
|
||||
private CollapsingToolbarLayout collapsingToolbarLayout;
|
||||
|
||||
private ImageButton mActionEncryptFile;
|
||||
private ImageButton mActionEncryptText;
|
||||
private FloatingActionButton mFab;
|
||||
private ImageView mPhoto;
|
||||
private FrameLayout mPhotoLayout;
|
||||
private ImageView mQrCode;
|
||||
private CardView mQrCodeLayout;
|
||||
private ImageButton actionEncryptFile;
|
||||
private ImageButton actionEncryptText;
|
||||
private FloatingActionButton floatingActionButton;
|
||||
private ImageView photoView;
|
||||
private FrameLayout photoLayout;
|
||||
private ImageView qrCodeView;
|
||||
private CardView qrCodeLayout;
|
||||
|
||||
private byte[] mQrCodeLoaded;
|
||||
private byte[] qrCodeLoaded;
|
||||
|
||||
private static final int LOADER_ID_UNIFIED = 0;
|
||||
|
||||
private boolean mIsSecret = false;
|
||||
private boolean mHasEncrypt = false;
|
||||
private boolean mIsVerified = false;
|
||||
private boolean mIsRevoked = false;
|
||||
private boolean mIsSecure = true;
|
||||
private boolean mIsExpired = false;
|
||||
private boolean isSecret = false;
|
||||
private boolean hasEncrypt = false;
|
||||
private boolean isVerified = false;
|
||||
private boolean isRevoked = false;
|
||||
private boolean isSecure = true;
|
||||
private boolean isExpired = false;
|
||||
|
||||
private MenuItem mRefreshItem;
|
||||
private boolean mIsRefreshing;
|
||||
private Animation mRotate, mRotateSpin;
|
||||
private View mRefresh;
|
||||
private MenuItem refreshItem;
|
||||
private boolean isRefreshing;
|
||||
private Animation rotate, rotateSpin;
|
||||
private View refreshView;
|
||||
|
||||
private long mMasterKeyId;
|
||||
private byte[] mFingerprint;
|
||||
private long masterKeyId;
|
||||
private byte[] fingerprint;
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
mKeyRepository = KeyRepository.create(this);
|
||||
mImportOpHelper = new CryptoOperationHelper<>(1, this, this, null);
|
||||
keyRepository = KeyRepository.create(this);
|
||||
importOpHelper = new CryptoOperationHelper<>(1, this, this, null);
|
||||
|
||||
setTitle(null);
|
||||
|
||||
mStatusText = findViewById(R.id.view_key_status);
|
||||
mStatusImage = findViewById(R.id.view_key_status_image);
|
||||
mAppBarLayout = findViewById(R.id.app_bar_layout);
|
||||
mCollapsingToolbarLayout = findViewById(R.id.collapsing_toolbar);
|
||||
statusText = findViewById(R.id.view_key_status);
|
||||
statusImage = findViewById(R.id.view_key_status_image);
|
||||
appBarLayout = findViewById(R.id.app_bar_layout);
|
||||
collapsingToolbarLayout = findViewById(R.id.collapsing_toolbar);
|
||||
|
||||
mActionEncryptFile = findViewById(R.id.view_key_action_encrypt_files);
|
||||
mActionEncryptText = findViewById(R.id.view_key_action_encrypt_text);
|
||||
mFab = findViewById(R.id.fab);
|
||||
mPhoto = findViewById(R.id.view_key_photo);
|
||||
mPhotoLayout = findViewById(R.id.view_key_photo_layout);
|
||||
mQrCode = findViewById(R.id.view_key_qr_code);
|
||||
mQrCodeLayout = findViewById(R.id.view_key_qr_code_layout);
|
||||
actionEncryptFile = findViewById(R.id.view_key_action_encrypt_files);
|
||||
actionEncryptText = findViewById(R.id.view_key_action_encrypt_text);
|
||||
floatingActionButton = findViewById(R.id.fab);
|
||||
photoView = findViewById(R.id.view_key_photo);
|
||||
photoLayout = findViewById(R.id.view_key_photo_layout);
|
||||
qrCodeView = findViewById(R.id.view_key_qr_code);
|
||||
qrCodeLayout = findViewById(R.id.view_key_qr_code_layout);
|
||||
|
||||
mRotateSpin = AnimationUtils.loadAnimation(this, R.anim.rotate_spin);
|
||||
rotateSpin = AnimationUtils.loadAnimation(this, R.anim.rotate_spin);
|
||||
|
||||
//ContentDescriptionHint Listeners implemented
|
||||
|
||||
ContentDescriptionHint.setup(mActionEncryptFile);
|
||||
ContentDescriptionHint.setup(mActionEncryptText);
|
||||
ContentDescriptionHint.setup(mFab);
|
||||
ContentDescriptionHint.setup(actionEncryptFile);
|
||||
ContentDescriptionHint.setup(actionEncryptText);
|
||||
ContentDescriptionHint.setup(floatingActionButton);
|
||||
|
||||
|
||||
mRotateSpin.setAnimationListener(new AnimationListener() {
|
||||
rotateSpin.setAnimationListener(new AnimationListener() {
|
||||
@Override
|
||||
public void onAnimationStart(Animation animation) {
|
||||
|
||||
|
@ -210,9 +207,9 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
|
||||
@Override
|
||||
public void onAnimationEnd(Animation animation) {
|
||||
mRefreshItem.getActionView().clearAnimation();
|
||||
mRefreshItem.setActionView(null);
|
||||
mRefreshItem.setEnabled(true);
|
||||
refreshItem.getActionView().clearAnimation();
|
||||
refreshItem.setActionView(null);
|
||||
refreshItem.setEnabled(true);
|
||||
|
||||
// this is a deferred call
|
||||
supportInvalidateOptionsMenu();
|
||||
|
@ -223,9 +220,9 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
|
||||
}
|
||||
});
|
||||
mRotate = AnimationUtils.loadAnimation(this, R.anim.rotate);
|
||||
mRotate.setRepeatCount(Animation.INFINITE);
|
||||
mRotate.setAnimationListener(new Animation.AnimationListener() {
|
||||
rotate = AnimationUtils.loadAnimation(this, R.anim.rotate);
|
||||
rotate.setRepeatCount(Animation.INFINITE);
|
||||
rotate.setAnimationListener(new Animation.AnimationListener() {
|
||||
@Override
|
||||
public void onAnimationStart(Animation animation) {
|
||||
|
||||
|
@ -238,23 +235,23 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
|
||||
@Override
|
||||
public void onAnimationRepeat(Animation animation) {
|
||||
if (!mIsRefreshing) {
|
||||
mRefreshItem.getActionView().clearAnimation();
|
||||
mRefreshItem.getActionView().startAnimation(mRotateSpin);
|
||||
if (!isRefreshing) {
|
||||
refreshItem.getActionView().clearAnimation();
|
||||
refreshItem.getActionView().startAnimation(rotateSpin);
|
||||
}
|
||||
}
|
||||
});
|
||||
mRefresh = getLayoutInflater().inflate(R.layout.indeterminate_progress, null);
|
||||
refreshView = getLayoutInflater().inflate(R.layout.indeterminate_progress, null);
|
||||
|
||||
mDataUri = getIntent().getData();
|
||||
if (mDataUri == null) {
|
||||
dataUri = getIntent().getData();
|
||||
if (dataUri == null) {
|
||||
Timber.e("Data missing. Should be uri of key!");
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
if (mDataUri.getHost().equals(ContactsContract.AUTHORITY)) {
|
||||
mDataUri = new ContactHelper(this).dataUriFromContactUri(mDataUri);
|
||||
if (mDataUri == null) {
|
||||
if (dataUri.getHost().equals(ContactsContract.AUTHORITY)) {
|
||||
dataUri = new ContactHelper(this).dataUriFromContactUri(dataUri);
|
||||
if (dataUri == null) {
|
||||
Timber.e("Contact Data missing. Should be uri of key!");
|
||||
Toast.makeText(this, R.string.error_contacts_key_id_missing, Toast.LENGTH_LONG).show();
|
||||
finish();
|
||||
|
@ -262,38 +259,20 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
}
|
||||
}
|
||||
|
||||
Timber.i("mDataUri: " + mDataUri);
|
||||
Timber.i("dataUri: " + dataUri);
|
||||
|
||||
mActionEncryptFile.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
encrypt(mDataUri, false);
|
||||
}
|
||||
});
|
||||
mActionEncryptText.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
encrypt(mDataUri, true);
|
||||
actionEncryptFile.setOnClickListener(v -> encrypt(dataUri, false));
|
||||
actionEncryptText.setOnClickListener(v -> encrypt(dataUri, true));
|
||||
|
||||
floatingActionButton.setOnClickListener(v -> {
|
||||
if (isSecret) {
|
||||
startSafeSlinger(dataUri);
|
||||
} else {
|
||||
scanQrCode();
|
||||
}
|
||||
});
|
||||
|
||||
mFab.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mIsSecret) {
|
||||
startSafeSlinger(mDataUri);
|
||||
} else {
|
||||
scanQrCode();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mQrCodeLayout.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
showQrCodeDialog();
|
||||
}
|
||||
});
|
||||
qrCodeLayout.setOnClickListener(v -> showQrCodeDialog());
|
||||
|
||||
// Prepare the loaders. Either re-connect with an existing ones,
|
||||
// or start new ones.
|
||||
|
@ -311,7 +290,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
|
||||
if (Preferences.getPreferences(this).getExperimentalEnableKeybase()) {
|
||||
FragmentManager manager = getSupportFragmentManager();
|
||||
final ViewKeyKeybaseFragment keybaseFrag = ViewKeyKeybaseFragment.newInstance(mDataUri);
|
||||
final ViewKeyKeybaseFragment keybaseFrag = ViewKeyKeybaseFragment.newInstance(dataUri);
|
||||
manager.beginTransaction()
|
||||
.replace(R.id.view_key_keybase_fragment, keybaseFrag)
|
||||
.commit();
|
||||
|
@ -327,7 +306,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
super.onCreateOptionsMenu(menu);
|
||||
getMenuInflater().inflate(R.menu.key_view, menu);
|
||||
mRefreshItem = menu.findItem(R.id.menu_key_view_refresh);
|
||||
refreshItem = menu.findItem(R.id.menu_key_view_refresh);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -361,20 +340,16 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
}
|
||||
case R.id.menu_key_view_advanced: {
|
||||
Intent advancedIntent = new Intent(this, ViewKeyAdvActivity.class);
|
||||
advancedIntent.setData(mDataUri);
|
||||
advancedIntent.setData(dataUri);
|
||||
startActivity(advancedIntent);
|
||||
return true;
|
||||
}
|
||||
case R.id.menu_key_view_refresh: {
|
||||
try {
|
||||
updateFromKeyserver(mDataUri, mKeyRepository);
|
||||
} catch (PgpKeyNotFoundException e) {
|
||||
Notify.create(this, R.string.error_key_not_found, Notify.Style.ERROR).show();
|
||||
}
|
||||
updateFromKeyserver();
|
||||
return true;
|
||||
}
|
||||
case R.id.menu_key_view_certify_fingerprint: {
|
||||
certifyFingerprint(mDataUri);
|
||||
certifyFingerprint(dataUri);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -384,13 +359,13 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
MenuItem backupKey = menu.findItem(R.id.menu_key_view_backup);
|
||||
backupKey.setVisible(mIsSecret);
|
||||
menu.findItem(R.id.menu_key_view_skt).setVisible(mIsSecret);
|
||||
backupKey.setVisible(isSecret);
|
||||
menu.findItem(R.id.menu_key_view_skt).setVisible(isSecret);
|
||||
MenuItem changePassword = menu.findItem(R.id.menu_key_change_password);
|
||||
changePassword.setVisible(mIsSecret);
|
||||
changePassword.setVisible(isSecret);
|
||||
|
||||
MenuItem certifyFingerprint = menu.findItem(R.id.menu_key_view_certify_fingerprint);
|
||||
certifyFingerprint.setVisible(!mIsSecret && !mIsVerified && !mIsExpired && !mIsRevoked);
|
||||
certifyFingerprint.setVisible(!isSecret && !isVerified && !isExpired && !isRevoked);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -400,7 +375,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
= new CryptoOperationHelper.Callback<ChangeUnlockParcel, EditKeyResult>() {
|
||||
@Override
|
||||
public ChangeUnlockParcel createOperationInput() {
|
||||
return mChangeUnlockParcel;
|
||||
return changeUnlockParcel;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -424,7 +399,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
}
|
||||
};
|
||||
|
||||
mEditOpHelper = new CryptoOperationHelper<>(2, this, editKeyCallback, R.string.progress_building_key);
|
||||
editOpHelper = new CryptoOperationHelper<>(2, this, editKeyCallback, R.string.progress_building_key);
|
||||
|
||||
// Message is received after passphrase is cached
|
||||
Handler returnHandler = new Handler() {
|
||||
|
@ -434,12 +409,12 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
Bundle data = message.getData();
|
||||
|
||||
// use new passphrase!
|
||||
mChangeUnlockParcel = ChangeUnlockParcel.createChangeUnlockParcel(
|
||||
mMasterKeyId, mFingerprint,
|
||||
changeUnlockParcel = ChangeUnlockParcel.createChangeUnlockParcel(
|
||||
masterKeyId, fingerprint,
|
||||
data.getParcelable(SetPassphraseDialogFragment.MESSAGE_NEW_PASSPHRASE)
|
||||
);
|
||||
|
||||
mEditOpHelper.cryptoOperation();
|
||||
editOpHelper.cryptoOperation();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -472,7 +447,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
|
||||
private void certifyImmediate() {
|
||||
Intent intent = new Intent(this, CertifyKeyActivity.class);
|
||||
intent.putExtra(CertifyKeyActivity.EXTRA_KEY_IDS, new long[] { mMasterKeyId });
|
||||
intent.putExtra(CertifyKeyActivity.EXTRA_KEY_IDS, new long[] { masterKeyId });
|
||||
|
||||
startActivityForResult(intent, REQUEST_CERTIFY);
|
||||
}
|
||||
|
@ -485,11 +460,11 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
Bundle opts = null;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
ActivityOptions options = ActivityOptions
|
||||
.makeSceneTransitionAnimation(this, mQrCodeLayout, "qr_code");
|
||||
.makeSceneTransitionAnimation(this, qrCodeLayout, "qr_code");
|
||||
opts = options.toBundle();
|
||||
}
|
||||
|
||||
qrCodeIntent.setData(mDataUri);
|
||||
qrCodeIntent.setData(dataUri);
|
||||
ActivityCompat.startActivity(this, qrCodeIntent, opts);
|
||||
}
|
||||
|
||||
|
@ -498,7 +473,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
if (keyHasPassphrase()) {
|
||||
Intent intent = new Intent(this, PassphraseDialogActivity.class);
|
||||
RequiredInputParcel requiredInput =
|
||||
RequiredInputParcel.createRequiredDecryptPassphrase(mMasterKeyId, mMasterKeyId);
|
||||
RequiredInputParcel.createRequiredDecryptPassphrase(masterKeyId, masterKeyId);
|
||||
requiredInput.mSkipCaching = true;
|
||||
intent.putExtra(PassphraseDialogActivity.EXTRA_REQUIRED_INPUT, requiredInput);
|
||||
startActivityForResult(intent, requestCode);
|
||||
|
@ -510,7 +485,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
private boolean keyHasPassphrase() {
|
||||
try {
|
||||
SecretKeyType secretKeyType =
|
||||
mKeyRepository.getCachedPublicKeyRing(mMasterKeyId).getSecretKeyType(mMasterKeyId);
|
||||
keyRepository.getCachedPublicKeyRing(masterKeyId).getSecretKeyType(masterKeyId);
|
||||
switch (secretKeyType) {
|
||||
// all of these make no sense to ask
|
||||
case PASSPHRASE_EMPTY:
|
||||
|
@ -528,7 +503,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
|
||||
private void startBackupActivity() {
|
||||
Intent intent = new Intent(this, BackupActivity.class);
|
||||
intent.putExtra(BackupActivity.EXTRA_MASTER_KEY_IDS, new long[]{mMasterKeyId});
|
||||
intent.putExtra(BackupActivity.EXTRA_MASTER_KEY_IDS, new long[]{ masterKeyId });
|
||||
intent.putExtra(BackupActivity.EXTRA_SECRET, true);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
@ -537,9 +512,9 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
Intent deleteIntent = new Intent(this, DeleteKeyDialogActivity.class);
|
||||
|
||||
deleteIntent.putExtra(DeleteKeyDialogActivity.EXTRA_DELETE_MASTER_KEY_IDS,
|
||||
new long[]{mMasterKeyId});
|
||||
deleteIntent.putExtra(DeleteKeyDialogActivity.EXTRA_HAS_SECRET, mIsSecret);
|
||||
if (mIsSecret) {
|
||||
new long[]{ masterKeyId });
|
||||
deleteIntent.putExtra(DeleteKeyDialogActivity.EXTRA_HAS_SECRET, isSecret);
|
||||
if (isSecret) {
|
||||
// for upload in case key is secret
|
||||
deleteIntent.putExtra(DeleteKeyDialogActivity.EXTRA_KEYSERVER,
|
||||
Preferences.getPreferences(this).getPreferredKeyserver());
|
||||
|
@ -550,11 +525,11 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
|
||||
@Override
|
||||
protected void onActivityResult(@RequestType int requestCode, int resultCode, Intent data) {
|
||||
if (mImportOpHelper.handleActivityResult(requestCode, resultCode, data)) {
|
||||
if (importOpHelper.handleActivityResult(requestCode, resultCode, data)) {
|
||||
return;
|
||||
}
|
||||
if (mEditOpHelper != null) {
|
||||
mEditOpHelper.handleActivityResult(requestCode, resultCode, data);
|
||||
if (editOpHelper != null) {
|
||||
editOpHelper.handleActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
|
||||
if (resultCode != Activity.RESULT_OK) {
|
||||
|
@ -577,7 +552,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
Notify.create(this, R.string.error_scan_fp, Notify.LENGTH_LONG, Style.ERROR).show();
|
||||
return;
|
||||
}
|
||||
if (Arrays.equals(mFingerprint, fingerprint)) {
|
||||
if (Arrays.equals(this.fingerprint, fingerprint)) {
|
||||
certifyImmediate();
|
||||
} else {
|
||||
Notify.create(this, R.string.error_scan_match, Notify.LENGTH_LONG, Style.ERROR).show();
|
||||
|
@ -617,33 +592,30 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
}
|
||||
|
||||
public void showMainFragment() {
|
||||
new Handler().post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
FragmentManager manager = getSupportFragmentManager();
|
||||
new Handler().post(() -> {
|
||||
FragmentManager manager = getSupportFragmentManager();
|
||||
|
||||
// unless we must refresh
|
||||
ViewKeyFragment frag = (ViewKeyFragment) manager.findFragmentByTag("view_key_fragment");
|
||||
// if everything is valid, just drop it
|
||||
if (frag != null && frag.isValidForData(mIsSecret)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// if the main fragment doesn't exist, or is not of the correct type, (re)create it
|
||||
frag = ViewKeyFragment.newInstance(mMasterKeyId, mIsSecret);
|
||||
// get rid of possible backstack, this fragment is always at the bottom
|
||||
manager.popBackStack("security_token", FragmentManager.POP_BACK_STACK_INCLUSIVE);
|
||||
manager.beginTransaction()
|
||||
.replace(R.id.view_key_fragment, frag, "view_key_fragment")
|
||||
// if this gets lost, it doesn't really matter since the loader will reinstate it onResume
|
||||
.commitAllowingStateLoss();
|
||||
// unless we must refresh
|
||||
ViewKeyFragment frag = (ViewKeyFragment) manager.findFragmentByTag("view_key_fragment");
|
||||
// if everything is valid, just drop it
|
||||
if (frag != null && frag.isValidForData(isSecret)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// if the main fragment doesn't exist, or is not of the correct type, (re)create it
|
||||
frag = ViewKeyFragment.newInstance(masterKeyId, isSecret);
|
||||
// get rid of possible backstack, this fragment is always at the bottom
|
||||
manager.popBackStack("security_token", FragmentManager.POP_BACK_STACK_INCLUSIVE);
|
||||
manager.beginTransaction()
|
||||
.replace(R.id.view_key_fragment, frag, "view_key_fragment")
|
||||
// if this gets lost, it doesn't really matter since the loader will reinstate it onResume
|
||||
.commitAllowingStateLoss();
|
||||
});
|
||||
}
|
||||
|
||||
private void encrypt(Uri dataUri, boolean text) {
|
||||
// If there is no encryption key, don't bother.
|
||||
if (!mHasEncrypt) {
|
||||
if (!hasEncrypt) {
|
||||
Notify.create(this, R.string.error_no_encrypt_subkey, Notify.Style.ERROR).show();
|
||||
return;
|
||||
}
|
||||
|
@ -700,18 +672,18 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
}
|
||||
|
||||
protected void onPostExecute(Bitmap qrCode) {
|
||||
mQrCodeLoaded = fingerprint;
|
||||
qrCodeLoaded = fingerprint;
|
||||
// scale the image up to our actual size. we do this in code rather
|
||||
// than let the ImageView do this because we don't require filtering.
|
||||
Bitmap scaled = Bitmap.createScaledBitmap(qrCode,
|
||||
mQrCode.getHeight(), mQrCode.getHeight(),
|
||||
ViewKeyActivity.this.qrCodeView.getHeight(), ViewKeyActivity.this.qrCodeView.getHeight(),
|
||||
false);
|
||||
mQrCode.setImageBitmap(scaled);
|
||||
ViewKeyActivity.this.qrCodeView.setImageBitmap(scaled);
|
||||
|
||||
// simple fade-in animation
|
||||
AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f);
|
||||
anim.setDuration(200);
|
||||
mQrCode.startAnimation(anim);
|
||||
ViewKeyActivity.this.qrCodeView.startAnimation(anim);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -753,7 +725,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
|
||||
switch (id) {
|
||||
case LOADER_ID_UNIFIED: {
|
||||
Uri baseUri = KeychainContract.KeyRings.buildUnifiedKeyRingUri(mDataUri);
|
||||
Uri baseUri = KeychainContract.KeyRings.buildUnifiedKeyRingUri(dataUri);
|
||||
return new CursorLoader(this, baseUri, PROJECTION, null, null, null);
|
||||
}
|
||||
|
||||
|
@ -803,23 +775,23 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
|
||||
String name = data.getString(INDEX_NAME);
|
||||
|
||||
mCollapsingToolbarLayout.setTitle(name != null ? name : getString(R.string.user_id_no_name));
|
||||
collapsingToolbarLayout.setTitle(name != null ? name : getString(R.string.user_id_no_name));
|
||||
|
||||
mMasterKeyId = data.getLong(INDEX_MASTER_KEY_ID);
|
||||
mFingerprint = data.getBlob(INDEX_FINGERPRINT);
|
||||
mIsSecret = data.getInt(INDEX_HAS_ANY_SECRET) != 0;
|
||||
mHasEncrypt = data.getInt(INDEX_HAS_ENCRYPT) != 0;
|
||||
mIsRevoked = data.getInt(INDEX_IS_REVOKED) > 0;
|
||||
mIsExpired = data.getInt(INDEX_IS_EXPIRED) != 0;
|
||||
mIsSecure = data.getInt(INDEX_IS_SECURE) == 1;
|
||||
mIsVerified = data.getInt(INDEX_VERIFIED) > 0;
|
||||
masterKeyId = data.getLong(INDEX_MASTER_KEY_ID);
|
||||
fingerprint = data.getBlob(INDEX_FINGERPRINT);
|
||||
isSecret = data.getInt(INDEX_HAS_ANY_SECRET) != 0;
|
||||
hasEncrypt = data.getInt(INDEX_HAS_ENCRYPT) != 0;
|
||||
isRevoked = data.getInt(INDEX_IS_REVOKED) > 0;
|
||||
isExpired = data.getInt(INDEX_IS_EXPIRED) != 0;
|
||||
isSecure = data.getInt(INDEX_IS_SECURE) == 1;
|
||||
isVerified = data.getInt(INDEX_VERIFIED) > 0;
|
||||
|
||||
// queue showing of the main fragment
|
||||
showMainFragment();
|
||||
|
||||
// if the refresh animation isn't playing
|
||||
if (!mRotate.hasStarted() && !mRotateSpin.hasStarted()) {
|
||||
// re-create options menu based on mIsSecret, mIsVerified
|
||||
if (!rotate.hasStarted() && !rotateSpin.hasStarted()) {
|
||||
// re-create options menu based on isSecret, isVerified
|
||||
supportInvalidateOptionsMenu();
|
||||
// this is done at the end of the animation otherwise
|
||||
}
|
||||
|
@ -836,72 +808,72 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
return;
|
||||
}
|
||||
|
||||
mPhoto.setImageBitmap(photo);
|
||||
mPhoto.setColorFilter(getResources().getColor(R.color.toolbar_photo_tint), PorterDuff.Mode.SRC_ATOP);
|
||||
mPhotoLayout.setVisibility(View.VISIBLE);
|
||||
photoView.setImageBitmap(photo);
|
||||
photoView.setColorFilter(getResources().getColor(R.color.toolbar_photo_tint), PorterDuff.Mode.SRC_ATOP);
|
||||
photoLayout.setVisibility(View.VISIBLE);
|
||||
}
|
||||
};
|
||||
|
||||
boolean showStatusText = mIsSecure && !mIsExpired && !mIsRevoked;
|
||||
boolean showStatusText = isSecure && !isExpired && !isRevoked;
|
||||
if (showStatusText) {
|
||||
mStatusText.setVisibility(View.VISIBLE);
|
||||
statusText.setVisibility(View.VISIBLE);
|
||||
|
||||
if (mIsSecret) {
|
||||
mStatusText.setText(R.string.view_key_my_key);
|
||||
} else if (mIsVerified) {
|
||||
mStatusText.setText(R.string.view_key_verified);
|
||||
if (isSecret) {
|
||||
statusText.setText(R.string.view_key_my_key);
|
||||
} else if (isVerified) {
|
||||
statusText.setText(R.string.view_key_verified);
|
||||
} else {
|
||||
mStatusText.setText(R.string.view_key_unverified);
|
||||
statusText.setText(R.string.view_key_unverified);
|
||||
}
|
||||
} else {
|
||||
mStatusText.setVisibility(View.GONE);
|
||||
statusText.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
// Note: order is important
|
||||
int color;
|
||||
if (mIsRevoked) {
|
||||
mStatusImage.setVisibility(View.VISIBLE);
|
||||
KeyFormattingUtils.setStatusImage(this, mStatusImage, mStatusText,
|
||||
if (isRevoked) {
|
||||
statusImage.setVisibility(View.VISIBLE);
|
||||
KeyFormattingUtils.setStatusImage(this, statusImage, statusText,
|
||||
State.REVOKED, R.color.icons, true);
|
||||
// noinspection deprecation, fix requires api level 23
|
||||
color = getResources().getColor(R.color.key_flag_red);
|
||||
|
||||
mActionEncryptFile.setVisibility(View.INVISIBLE);
|
||||
mActionEncryptText.setVisibility(View.INVISIBLE);
|
||||
actionEncryptFile.setVisibility(View.INVISIBLE);
|
||||
actionEncryptText.setVisibility(View.INVISIBLE);
|
||||
hideFab();
|
||||
mQrCodeLayout.setVisibility(View.GONE);
|
||||
} else if (!mIsSecure) {
|
||||
mStatusImage.setVisibility(View.VISIBLE);
|
||||
KeyFormattingUtils.setStatusImage(this, mStatusImage, mStatusText,
|
||||
qrCodeLayout.setVisibility(View.GONE);
|
||||
} else if (!isSecure) {
|
||||
statusImage.setVisibility(View.VISIBLE);
|
||||
KeyFormattingUtils.setStatusImage(this, statusImage, statusText,
|
||||
State.INSECURE, R.color.icons, true);
|
||||
// noinspection deprecation, fix requires api level 23
|
||||
color = getResources().getColor(R.color.key_flag_red);
|
||||
|
||||
mActionEncryptFile.setVisibility(View.INVISIBLE);
|
||||
mActionEncryptText.setVisibility(View.INVISIBLE);
|
||||
actionEncryptFile.setVisibility(View.INVISIBLE);
|
||||
actionEncryptText.setVisibility(View.INVISIBLE);
|
||||
hideFab();
|
||||
mQrCodeLayout.setVisibility(View.GONE);
|
||||
} else if (mIsExpired) {
|
||||
mStatusImage.setVisibility(View.VISIBLE);
|
||||
KeyFormattingUtils.setStatusImage(this, mStatusImage, mStatusText,
|
||||
qrCodeLayout.setVisibility(View.GONE);
|
||||
} else if (isExpired) {
|
||||
statusImage.setVisibility(View.VISIBLE);
|
||||
KeyFormattingUtils.setStatusImage(this, statusImage, statusText,
|
||||
State.EXPIRED, R.color.icons, true);
|
||||
// noinspection deprecation, fix requires api level 23
|
||||
color = getResources().getColor(R.color.key_flag_red);
|
||||
|
||||
mActionEncryptFile.setVisibility(View.INVISIBLE);
|
||||
mActionEncryptText.setVisibility(View.INVISIBLE);
|
||||
actionEncryptFile.setVisibility(View.INVISIBLE);
|
||||
actionEncryptText.setVisibility(View.INVISIBLE);
|
||||
hideFab();
|
||||
mQrCodeLayout.setVisibility(View.GONE);
|
||||
} else if (mIsSecret) {
|
||||
mStatusImage.setVisibility(View.GONE);
|
||||
qrCodeLayout.setVisibility(View.GONE);
|
||||
} else if (isSecret) {
|
||||
statusImage.setVisibility(View.GONE);
|
||||
// noinspection deprecation, fix requires api level 23
|
||||
color = getResources().getColor(R.color.key_flag_green);
|
||||
// reload qr code only if the fingerprint changed
|
||||
if (!Arrays.equals(mFingerprint, mQrCodeLoaded)) {
|
||||
loadQrCode(mFingerprint);
|
||||
if (!Arrays.equals(fingerprint, qrCodeLoaded)) {
|
||||
loadQrCode(fingerprint);
|
||||
}
|
||||
photoTask.execute(mMasterKeyId);
|
||||
mQrCodeLayout.setVisibility(View.VISIBLE);
|
||||
photoTask.execute(masterKeyId);
|
||||
qrCodeLayout.setVisibility(View.VISIBLE);
|
||||
|
||||
// and place leftOf qr code
|
||||
// RelativeLayout.LayoutParams nameParams = (RelativeLayout.LayoutParams)
|
||||
|
@ -915,39 +887,39 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
// mName.setLayoutParams(nameParams);
|
||||
|
||||
RelativeLayout.LayoutParams statusParams = (RelativeLayout.LayoutParams)
|
||||
mStatusText.getLayoutParams();
|
||||
statusText.getLayoutParams();
|
||||
statusParams.setMargins(FormattingUtils.dpToPx(this, 48), 0, 0, 0);
|
||||
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
||||
statusParams.setMarginEnd(0);
|
||||
}
|
||||
statusParams.addRule(RelativeLayout.LEFT_OF, R.id.view_key_qr_code_layout);
|
||||
mStatusText.setLayoutParams(statusParams);
|
||||
statusText.setLayoutParams(statusParams);
|
||||
|
||||
mActionEncryptFile.setVisibility(View.VISIBLE);
|
||||
mActionEncryptText.setVisibility(View.VISIBLE);
|
||||
actionEncryptFile.setVisibility(View.VISIBLE);
|
||||
actionEncryptText.setVisibility(View.VISIBLE);
|
||||
|
||||
showFab();
|
||||
// noinspection deprecation (no getDrawable with theme at current minApi level 15!)
|
||||
mFab.setImageDrawable(getResources().getDrawable(R.drawable.ic_repeat_white_24dp));
|
||||
floatingActionButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_repeat_white_24dp));
|
||||
} else {
|
||||
mActionEncryptFile.setVisibility(View.VISIBLE);
|
||||
mActionEncryptText.setVisibility(View.VISIBLE);
|
||||
mQrCodeLayout.setVisibility(View.GONE);
|
||||
actionEncryptFile.setVisibility(View.VISIBLE);
|
||||
actionEncryptText.setVisibility(View.VISIBLE);
|
||||
qrCodeLayout.setVisibility(View.GONE);
|
||||
|
||||
if (mIsVerified) {
|
||||
mStatusText.setText(R.string.view_key_verified);
|
||||
mStatusImage.setVisibility(View.VISIBLE);
|
||||
KeyFormattingUtils.setStatusImage(this, mStatusImage, mStatusText,
|
||||
if (isVerified) {
|
||||
statusText.setText(R.string.view_key_verified);
|
||||
statusImage.setVisibility(View.VISIBLE);
|
||||
KeyFormattingUtils.setStatusImage(this, statusImage, statusText,
|
||||
State.VERIFIED, R.color.icons, true);
|
||||
// noinspection deprecation, fix requires api level 23
|
||||
color = getResources().getColor(R.color.key_flag_green);
|
||||
photoTask.execute(mMasterKeyId);
|
||||
photoTask.execute(masterKeyId);
|
||||
|
||||
hideFab();
|
||||
} else {
|
||||
mStatusText.setText(R.string.view_key_unverified);
|
||||
mStatusImage.setVisibility(View.VISIBLE);
|
||||
KeyFormattingUtils.setStatusImage(this, mStatusImage, mStatusText,
|
||||
statusText.setText(R.string.view_key_unverified);
|
||||
statusImage.setVisibility(View.VISIBLE);
|
||||
KeyFormattingUtils.setStatusImage(this, statusImage, statusText,
|
||||
State.UNVERIFIED, R.color.icons, true);
|
||||
// noinspection deprecation, fix requires api level 23
|
||||
color = getResources().getColor(R.color.key_flag_orange);
|
||||
|
@ -957,16 +929,16 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
}
|
||||
|
||||
if (mPreviousColor == 0 || mPreviousColor == color) {
|
||||
mAppBarLayout.setBackgroundColor(color);
|
||||
mCollapsingToolbarLayout.setContentScrimColor(color);
|
||||
mCollapsingToolbarLayout.setStatusBarScrimColor(getStatusBarBackgroundColor(color));
|
||||
appBarLayout.setBackgroundColor(color);
|
||||
collapsingToolbarLayout.setContentScrimColor(color);
|
||||
collapsingToolbarLayout.setStatusBarScrimColor(getStatusBarBackgroundColor(color));
|
||||
mPreviousColor = color;
|
||||
} else {
|
||||
ObjectAnimator colorFade =
|
||||
ObjectAnimator.ofObject(mAppBarLayout, "backgroundColor",
|
||||
ObjectAnimator.ofObject(appBarLayout, "backgroundColor",
|
||||
new ArgbEvaluator(), mPreviousColor, color);
|
||||
mCollapsingToolbarLayout.setContentScrimColor(color);
|
||||
mCollapsingToolbarLayout.setStatusBarScrimColor(getStatusBarBackgroundColor(color));
|
||||
collapsingToolbarLayout.setContentScrimColor(color);
|
||||
collapsingToolbarLayout.setStatusBarScrimColor(getStatusBarBackgroundColor(color));
|
||||
|
||||
colorFade.setDuration(1200);
|
||||
colorFade.start();
|
||||
|
@ -974,7 +946,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
}
|
||||
|
||||
//noinspection deprecation
|
||||
mStatusImage.setAlpha(80);
|
||||
statusImage.setAlpha(80);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -986,22 +958,22 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
* Helper to show Fab, from http://stackoverflow.com/a/31047038
|
||||
*/
|
||||
private void showFab() {
|
||||
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) mFab.getLayoutParams();
|
||||
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) floatingActionButton.getLayoutParams();
|
||||
p.setBehavior(new FloatingActionButton.Behavior());
|
||||
p.setAnchorId(R.id.app_bar_layout);
|
||||
mFab.setLayoutParams(p);
|
||||
mFab.setVisibility(View.VISIBLE);
|
||||
floatingActionButton.setLayoutParams(p);
|
||||
floatingActionButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to hide Fab, from http://stackoverflow.com/a/31047038
|
||||
*/
|
||||
private void hideFab() {
|
||||
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) mFab.getLayoutParams();
|
||||
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) floatingActionButton.getLayoutParams();
|
||||
p.setBehavior(null); //should disable default animations
|
||||
p.setAnchorId(View.NO_ID); //should let you set visibility
|
||||
mFab.setLayoutParams(p);
|
||||
mFab.setVisibility(View.GONE);
|
||||
floatingActionButton.setLayoutParams(p);
|
||||
floatingActionButton.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1012,45 +984,42 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||
// CryptoOperationHelper.Callback functions
|
||||
|
||||
|
||||
private void updateFromKeyserver(Uri dataUri, KeyRepository keyRepository)
|
||||
throws PgpKeyNotFoundException {
|
||||
private void updateFromKeyserver() {
|
||||
if (fingerprint == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
mIsRefreshing = true;
|
||||
mRefreshItem.setEnabled(false);
|
||||
mRefreshItem.setActionView(mRefresh);
|
||||
mRefresh.startAnimation(mRotate);
|
||||
isRefreshing = true;
|
||||
refreshItem.setEnabled(false);
|
||||
refreshItem.setActionView(refreshView);
|
||||
refreshView.startAnimation(rotate);
|
||||
|
||||
byte[] blob = keyRepository.getCachedPublicKeyRing(dataUri).getFingerprint();
|
||||
|
||||
ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(blob, null, null, null);
|
||||
ArrayList<ParcelableKeyRing> entries = new ArrayList<>();
|
||||
entries.add(keyEntry);
|
||||
mKeyList = entries;
|
||||
|
||||
mKeyserver = Preferences.getPreferences(this).getPreferredKeyserver();
|
||||
|
||||
mImportOpHelper.cryptoOperation();
|
||||
importOpHelper.cryptoOperation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImportKeyringParcel createOperationInput() {
|
||||
return ImportKeyringParcel.createImportKeyringParcel(mKeyList, mKeyserver);
|
||||
HkpKeyserverAddress preferredKeyserver = Preferences.getPreferences(this).getPreferredKeyserver();
|
||||
|
||||
ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(fingerprint, null, null, null);
|
||||
|
||||
return ImportKeyringParcel.createImportKeyringParcel(Collections.singletonList(keyEntry), preferredKeyserver);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCryptoOperationSuccess(ImportKeyResult result) {
|
||||
mIsRefreshing = false;
|
||||
isRefreshing = false;
|
||||
result.createNotify(this).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCryptoOperationCancelled() {
|
||||
mIsRefreshing = false;
|
||||
isRefreshing = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCryptoOperationError(ImportKeyResult result) {
|
||||
mIsRefreshing = false;
|
||||
isRefreshing = false;
|
||||
result.createNotify(this).show();
|
||||
}
|
||||
|
||||
|
|
|
@ -58,17 +58,17 @@ public class ViewKeyFragment extends LoaderFragment implements ViewKeyMvpView, O
|
|||
private static final int LOADER_ID_SUBKEY_STATUS = 3;
|
||||
private static final int LOADER_ID_KEYSERVER_STATUS = 4;
|
||||
|
||||
private IdentitiesCardView mIdentitiesCardView;
|
||||
private IdentitiesPresenter mIdentitiesPresenter;
|
||||
private IdentitiesCardView identitiesCardView;
|
||||
private IdentitiesPresenter identitiesPresenter;
|
||||
|
||||
SystemContactCardView mSystemContactCard;
|
||||
SystemContactPresenter mSystemContactPresenter;
|
||||
SystemContactCardView systemContactCard;
|
||||
SystemContactPresenter systemContactPresenter;
|
||||
|
||||
KeyHealthView mKeyStatusHealth;
|
||||
KeyserverStatusView mKeyStatusKeyserver;
|
||||
KeyHealthView keyStatusHealth;
|
||||
KeyserverStatusView keyStatusKeyserver;
|
||||
|
||||
KeyHealthPresenter mKeyHealthPresenter;
|
||||
KeyserverStatusPresenter mKeyserverStatusPresenter;
|
||||
KeyHealthPresenter keyHealthPresenter;
|
||||
KeyserverStatusPresenter keyserverStatusPresenter;
|
||||
|
||||
private Integer displayedContextMenuPosition;
|
||||
|
||||
|
@ -91,11 +91,11 @@ public class ViewKeyFragment extends LoaderFragment implements ViewKeyMvpView, O
|
|||
View root = super.onCreateView(inflater, superContainer, savedInstanceState);
|
||||
View view = inflater.inflate(R.layout.view_key_fragment, getContainer());
|
||||
|
||||
mIdentitiesCardView = view.findViewById(R.id.card_identities);
|
||||
identitiesCardView = view.findViewById(R.id.card_identities);
|
||||
|
||||
mSystemContactCard = view.findViewById(R.id.linked_system_contact_card);
|
||||
mKeyStatusHealth = view.findViewById(R.id.key_status_health);
|
||||
mKeyStatusKeyserver = view.findViewById(R.id.key_status_keyserver);
|
||||
systemContactCard = view.findViewById(R.id.linked_system_contact_card);
|
||||
keyStatusHealth = view.findViewById(R.id.key_status_health);
|
||||
keyStatusKeyserver = view.findViewById(R.id.key_status_keyserver);
|
||||
|
||||
return root;
|
||||
}
|
||||
|
@ -107,21 +107,21 @@ public class ViewKeyFragment extends LoaderFragment implements ViewKeyMvpView, O
|
|||
long masterKeyId = getArguments().getLong(ARG_MASTER_KEY_ID);
|
||||
mIsSecret = getArguments().getBoolean(ARG_IS_SECRET);
|
||||
|
||||
mIdentitiesPresenter = new IdentitiesPresenter(
|
||||
getContext(), mIdentitiesCardView, this, LOADER_IDENTITIES, masterKeyId, mIsSecret);
|
||||
mIdentitiesPresenter.startLoader(getLoaderManager());
|
||||
identitiesPresenter = new IdentitiesPresenter(
|
||||
getContext(), identitiesCardView, this, LOADER_IDENTITIES, masterKeyId, mIsSecret);
|
||||
identitiesPresenter.startLoader(getLoaderManager());
|
||||
|
||||
mSystemContactPresenter = new SystemContactPresenter(
|
||||
getContext(), mSystemContactCard, LOADER_ID_LINKED_CONTACT, masterKeyId, mIsSecret);
|
||||
mSystemContactPresenter.startLoader(getLoaderManager());
|
||||
systemContactPresenter = new SystemContactPresenter(
|
||||
getContext(), systemContactCard, LOADER_ID_LINKED_CONTACT, masterKeyId, mIsSecret);
|
||||
systemContactPresenter.startLoader(getLoaderManager());
|
||||
|
||||
mKeyHealthPresenter = new KeyHealthPresenter(
|
||||
getContext(), mKeyStatusHealth, LOADER_ID_SUBKEY_STATUS, masterKeyId, mIsSecret);
|
||||
mKeyHealthPresenter.startLoader(getLoaderManager());
|
||||
keyHealthPresenter = new KeyHealthPresenter(
|
||||
getContext(), keyStatusHealth, LOADER_ID_SUBKEY_STATUS, masterKeyId, mIsSecret);
|
||||
keyHealthPresenter.startLoader(getLoaderManager());
|
||||
|
||||
mKeyserverStatusPresenter = new KeyserverStatusPresenter(
|
||||
getContext(), mKeyStatusKeyserver, LOADER_ID_KEYSERVER_STATUS, masterKeyId, mIsSecret);
|
||||
mKeyserverStatusPresenter.startLoader(getLoaderManager());
|
||||
keyserverStatusPresenter = new KeyserverStatusPresenter(
|
||||
getContext(), keyStatusKeyserver, LOADER_ID_KEYSERVER_STATUS, masterKeyId, mIsSecret);
|
||||
keyserverStatusPresenter.startLoader(getLoaderManager());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -193,7 +193,7 @@ public class ViewKeyFragment extends LoaderFragment implements ViewKeyMvpView, O
|
|||
case R.id.autocrypt_forget:
|
||||
int position = displayedContextMenuPosition;
|
||||
displayedContextMenuPosition = null;
|
||||
mIdentitiesPresenter.onClickForgetIdentity(position);
|
||||
identitiesPresenter.onClickForgetIdentity(position);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue