aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2015-03-26 17:52:18 +0100
committerVincent Breitmoser <valodim@mugenguild.com>2015-03-26 17:52:18 +0100
commitab5a7d409450d6e7451ec8ea62ca091df83e2933 (patch)
tree8d2bd7e8f57fec05f068d8cc49f0c9c9c12845fe /OpenKeychain/src/main/java/org/sufficientlysecure
parentdc8b04a79333d13f3e9903757502521348ccec57 (diff)
downloadopen-keychain-ab5a7d409450d6e7451ec8ea62ca091df83e2933.tar.gz
open-keychain-ab5a7d409450d6e7451ec8ea62ca091df83e2933.tar.bz2
open-keychain-ab5a7d409450d6e7451ec8ea62ca091df83e2933.zip
more (subtle) ui work
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdViewFragment.java29
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/SubtleAttentionSeeker.java18
2 files changed, 38 insertions, 9 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdViewFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdViewFragment.java
index 2efafc086..5c1389573 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdViewFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdViewFragment.java
@@ -3,13 +3,18 @@ package org.sufficientlysecure.keychain.ui.linked;
import java.io.IOException;
import java.util.Arrays;
+import android.animation.Animator;
+import android.animation.Animator.AnimatorListener;
+import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.AsyncTask;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -53,6 +58,7 @@ import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State;
import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style;
+import org.sufficientlysecure.keychain.ui.util.SubtleAttentionSeeker;
import org.sufficientlysecure.keychain.ui.widget.CertListWidget;
import org.sufficientlysecure.keychain.ui.widget.CertifyKeySpinner;
import org.sufficientlysecure.keychain.util.Log;
@@ -241,6 +247,7 @@ public class LinkedIdViewFragment extends Fragment implements
private final View vButtonView;
private final ViewAnimator vVerifyingContainer;
private final ViewAnimator vItemCertified;
+ private final View vKeySpinnerContainer;
LinkedIdsAdapter.ViewHolder mLinkedIdHolder;
private ViewAnimator vButtonSwitcher;
@@ -257,6 +264,7 @@ public class LinkedIdViewFragment extends Fragment implements
ViewHolder(View root) {
vLinkedCerts = (CertListWidget) root.findViewById(R.id.linked_id_certs);
vKeySpinner = (CertifyKeySpinner) root.findViewById(R.id.cert_key_spinner);
+ vKeySpinnerContainer = root.findViewById(R.id.cert_key_spincontainer);
vButtonSwitcher = (ViewAnimator) root.findViewById(R.id.button_animator);
mLinkedIdHolder = new LinkedIdsAdapter.ViewHolder(root);
@@ -283,17 +291,17 @@ public class LinkedIdViewFragment extends Fragment implements
case VERIFYING:
vProgress.setDisplayedChild(0);
vText.setText(context.getString(R.string.linked_text_verifying));
- vKeySpinner.setVisibility(View.GONE);
+ vKeySpinnerContainer.setVisibility(View.GONE);
break;
case VERIFY_OK:
vProgress.setDisplayedChild(1);
if (!isSecret) {
showButton(2);
- vKeySpinner.setVisibility(View.VISIBLE);
+ vKeySpinnerContainer.setVisibility(View.VISIBLE);
} else {
showButton(1);
- vKeySpinner.setVisibility(View.GONE);
+ vKeySpinnerContainer.setVisibility(View.GONE);
}
break;
@@ -301,13 +309,13 @@ public class LinkedIdViewFragment extends Fragment implements
showButton(1);
vProgress.setDisplayedChild(2);
vText.setText(context.getString(R.string.linked_text_error));
- vKeySpinner.setVisibility(View.GONE);
+ vKeySpinnerContainer.setVisibility(View.GONE);
break;
case CERTIFYING:
vProgress.setDisplayedChild(0);
vText.setText(context.getString(R.string.linked_text_confirming));
- vKeySpinner.setVisibility(View.GONE);
+ vKeySpinnerContainer.setVisibility(View.GONE);
break;
}
}
@@ -364,7 +372,7 @@ public class LinkedIdViewFragment extends Fragment implements
mVerificationState = false;
mViewHolder.showButton(0);
- mViewHolder.vKeySpinner.setVisibility(View.GONE);
+ mViewHolder.vKeySpinnerContainer.setVisibility(View.GONE);
mViewHolder.showVerifyingContainer(mContext, false, mIsSecret);
return;
}
@@ -450,7 +458,7 @@ public class LinkedIdViewFragment extends Fragment implements
setShowVerifying(true);
- mViewHolder.vKeySpinner.setVisibility(View.GONE);
+ mViewHolder.vKeySpinnerContainer.setVisibility(View.GONE);
mViewHolder.setVerifyingState(mContext, VerifyState.VERIFYING, mIsSecret);
mInProgress = new AsyncTask<Void,Void,LinkedVerifyResult>() {
@@ -478,7 +486,9 @@ public class LinkedIdViewFragment extends Fragment implements
if (result.success()) {
mViewHolder.vText.setText(getString(mLinkedResource.getVerifiedText(mIsSecret)));
mViewHolder.setVerifyingState(mContext, VerifyState.VERIFY_OK, mIsSecret);
-
+ ObjectAnimator anim = SubtleAttentionSeeker.tada(mViewHolder.vButtonConfirm, 0.6f, 1000);
+ anim.setStartDelay(800);
+ anim.start();
} else {
mViewHolder.setVerifyingState(mContext, VerifyState.VERIFY_ERROR, mIsSecret);
result.createNotify(getActivity()).show();
@@ -498,6 +508,9 @@ public class LinkedIdViewFragment extends Fragment implements
// get the user's passphrase for this key (if required)
long certifyKeyId = mViewHolder.vKeySpinner.getSelectedItemId();
if (certifyKeyId == key.none || certifyKeyId == key.symmetric) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ SubtleAttentionSeeker.tint(mViewHolder.vKeySpinnerContainer, 600).start();
+ }
Notify.create(getActivity(), R.string.select_key_to_certify, Style.ERROR).show();
return;
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/SubtleAttentionSeeker.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/SubtleAttentionSeeker.java
index 87444c226..bf4211899 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/SubtleAttentionSeeker.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/SubtleAttentionSeeker.java
@@ -17,13 +17,19 @@
package org.sufficientlysecure.keychain.ui.util;
+import android.animation.AnimatorInflater;
+import android.animation.ArgbEvaluator;
import android.animation.Keyframe;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.annotation.TargetApi;
+import android.content.Context;
import android.os.Build.VERSION_CODES;
import android.view.View;
+import org.sufficientlysecure.keychain.R;
+
+
@TargetApi(VERSION_CODES.ICE_CREAM_SANDWICH)
/** Simple animation helper for subtle attention seeker stuff.
*
@@ -36,6 +42,10 @@ public class SubtleAttentionSeeker {
}
public static ObjectAnimator tada(View view, float shakeFactor) {
+ return tada(view, shakeFactor, 1400);
+ }
+
+ public static ObjectAnimator tada(View view, float shakeFactor, int duration) {
PropertyValuesHolder pvhScaleX = PropertyValuesHolder.ofKeyframe(View.SCALE_X,
Keyframe.ofFloat(0f, 1f),
@@ -80,7 +90,13 @@ public class SubtleAttentionSeeker {
);
return ObjectAnimator.ofPropertyValuesHolder(view, pvhScaleX, pvhScaleY, pvhRotate).
- setDuration(1400);
+ setDuration(duration);
+ }
+
+ @TargetApi(VERSION_CODES.LOLLIPOP)
+ public static ObjectAnimator tint(View view, int duration) {
+ return ObjectAnimator.ofArgb(view, "backgroundColor",
+ 0x00FF0000, 0x33FF0000, 0x00FF0000).setDuration(duration);
}
}