refactor ViewKeyActivity to remove field m* prefix

This commit is contained in:
Vincent Breitmoser 2018-02-12 17:31:14 +01:00
parent b3a5b7e04a
commit 84d652be8b
8 changed files with 327 additions and 387 deletions

View file

@ -48,7 +48,7 @@ public class CertifyFingerprintActivity extends BaseActivity {
}
});
Timber.i("mDataUri: " + mDataUri.toString());
Timber.i("dataUri: " + mDataUri.toString());
startFragment(savedInstanceState, mDataUri);
}

View file

@ -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.

View file

@ -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 {

View file

@ -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 {

View file

@ -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);

View file

@ -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();

View file

@ -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();
}

View file

@ -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;
}