From 538be96e61f5b6c2c39b02ed2f1550a1a6a9a2c9 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Sun, 15 Mar 2015 21:41:04 +0100 Subject: work on certification ui --- .../drawables/status_signature_verified_inner.svg | 77 +++++++++++++++++++++ Graphics/update-drawables.sh | 6 +- .../keychain/pgp/linked/LinkedResource.java | 3 + .../keychain/pgp/linked/resources/DnsResource.java | 7 ++ .../pgp/linked/resources/GenericHttpsResource.java | 9 +++ .../pgp/linked/resources/TwitterResource.java | 7 ++ .../keychain/ui/adapter/LinkedIdsAdapter.java | 2 +- .../keychain/ui/linked/LinkedIdViewFragment.java | 30 +++++--- OpenKeychain/src/main/res/anim/fade_in_up.xml | 11 +++ OpenKeychain/src/main/res/anim/fade_out_down.xml | 11 +++ .../status_signature_verified_inner_24dp.png | Bin 0 -> 544 bytes .../status_signature_verified_inner_96dp.png | Bin 0 -> 2031 bytes .../status_signature_verified_inner_24dp.png | Bin 0 -> 429 bytes .../status_signature_verified_inner_96dp.png | Bin 0 -> 1437 bytes .../status_signature_verified_inner_24dp.png | Bin 0 -> 717 bytes .../status_signature_verified_inner_96dp.png | Bin 0 -> 3022 bytes .../status_signature_verified_inner_24dp.png | Bin 0 -> 1095 bytes .../status_signature_verified_inner_96dp.png | Bin 0 -> 4214 bytes .../status_signature_verified_inner_24dp.png | Bin 0 -> 1437 bytes .../src/main/res/layout/linked_id_item.xml | 18 +++-- .../main/res/layout/linked_id_view_fragment.xml | 48 +++++++------ OpenKeychain/src/main/res/values/strings.xml | 16 +++-- 22 files changed, 197 insertions(+), 48 deletions(-) create mode 100644 Graphics/drawables/status_signature_verified_inner.svg create mode 100644 OpenKeychain/src/main/res/anim/fade_in_up.xml create mode 100644 OpenKeychain/src/main/res/anim/fade_out_down.xml create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/status_signature_verified_inner_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/status_signature_verified_inner_96dp.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/status_signature_verified_inner_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/status_signature_verified_inner_96dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/status_signature_verified_inner_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/status_signature_verified_inner_96dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/status_signature_verified_inner_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/status_signature_verified_inner_96dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxxhdpi/status_signature_verified_inner_24dp.png diff --git a/Graphics/drawables/status_signature_verified_inner.svg b/Graphics/drawables/status_signature_verified_inner.svg new file mode 100644 index 000000000..554df0643 --- /dev/null +++ b/Graphics/drawables/status_signature_verified_inner.svg @@ -0,0 +1,77 @@ + + + + + + image/svg+xml + + signature-verified-cutout + + + + + + signature-verified-cutout + Created with Sketch. + + + + + + + diff --git a/Graphics/update-drawables.sh b/Graphics/update-drawables.sh index 8da894725..a2da5bbfc 100755 --- a/Graphics/update-drawables.sh +++ b/Graphics/update-drawables.sh @@ -22,7 +22,7 @@ SRC_DIR=./drawables/ #inkscape -w 512 -h 512 -e "$PLAY_DIR/$NAME.png" $NAME.svg -for NAME in "ic_cloud_search" "ic_action_encrypt_file" "ic_action_encrypt_text" "ic_action_verified_cutout" "ic_action_encrypt_copy" "ic_action_encrypt_save" "ic_action_encrypt_share" "status_lock_closed" "status_lock_error" "status_lock_open" "status_signature_expired_cutout" "status_signature_invalid_cutout" "status_signature_revoked_cutout" "status_signature_unknown_cutout" "status_signature_unverified_cutout" "status_signature_verified_cutout" "key_flag_authenticate" "key_flag_certify" "key_flag_encrypt" "key_flag_sign" +for NAME in "ic_cloud_search" "ic_action_encrypt_file" "ic_action_encrypt_text" "ic_action_verified_cutout" "ic_action_encrypt_copy" "ic_action_encrypt_save" "ic_action_encrypt_share" "status_lock_closed" "status_lock_error" "status_lock_open" "status_signature_expired_cutout" "status_signature_invalid_cutout" "status_signature_revoked_cutout" "status_signature_unknown_cutout" "status_signature_unverified_cutout" "status_signature_verified_cutout" "key_flag_authenticate" "key_flag_certify" "key_flag_encrypt" "key_flag_sign" "status_signature_verified_inner" do echo $NAME inkscape -w 24 -h 24 -e "$MDPI_DIR/${NAME}_24dp.png" "$SRC_DIR/$NAME.svg" @@ -32,7 +32,7 @@ inkscape -w 72 -h 72 -e "$XXDPI_DIR/${NAME}_24dp.png" "$SRC_DIR/$NAME.svg" inkscape -w 96 -h 96 -e "$XXXDPI_DIR/${NAME}_24dp.png" "$SRC_DIR/$NAME.svg" done -for NAME in "status_signature_expired_cutout" "status_signature_invalid_cutout" "status_signature_revoked_cutout" "status_signature_unknown_cutout" "status_signature_unverified_cutout" "status_signature_verified_cutout" +for NAME in "status_signature_expired_cutout" "status_signature_invalid_cutout" "status_signature_revoked_cutout" "status_signature_unknown_cutout" "status_signature_unverified_cutout" "status_signature_verified_cutout" "status_signature_verified_inner" do echo $NAME inkscape -w 96 -h 96 -e "$MDPI_DIR/${NAME}_96dp.png" "$SRC_DIR/$NAME.svg" @@ -60,4 +60,4 @@ for NAME in "first_time_1" do echo $NAME inkscape -w 512 -h 512 -e "$DRAWABLE_DIR/$NAME.png" "$SRC_DIR/$NAME.svg" -done \ No newline at end of file +done diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedResource.java index e954a514c..f91a24d57 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedResource.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedResource.java @@ -15,6 +15,8 @@ import java.util.regex.Pattern; import android.content.Context; import android.content.Intent; import android.support.annotation.DrawableRes; +import android.support.annotation.StringRes; + public abstract class LinkedResource { @@ -102,6 +104,7 @@ public abstract class LinkedResource { } public abstract @DrawableRes int getDisplayIcon(); + public abstract @StringRes int getVerifiedText(); public abstract String getDisplayTitle(Context context); public abstract String getDisplayComment(Context context); public boolean isViewable() { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/DnsResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/DnsResource.java index 253e611a8..21c3a3eef 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/DnsResource.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/DnsResource.java @@ -2,6 +2,7 @@ package org.sufficientlysecure.keychain.pgp.linked.resources; import android.content.Context; import android.support.annotation.DrawableRes; +import android.support.annotation.StringRes; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; @@ -103,6 +104,12 @@ public class DnsResource extends LinkedCookieResource { return magicPattern.matcher(res); } + @Override + public @StringRes + int getVerifiedText() { + return R.string.linked_verified_dns; + } + @Override public @DrawableRes int getDisplayIcon() { return R.drawable.dns; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/GenericHttpsResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/GenericHttpsResource.java index 1e872c6cb..c6d5883ee 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/GenericHttpsResource.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/GenericHttpsResource.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.support.annotation.DrawableRes; +import android.support.annotation.StringRes; import com.textuality.keybase.lib.Search; @@ -81,6 +82,8 @@ public class GenericHttpsResource extends LinkedCookieResource { log.add(LogType.MSG_LV_FETCH_ERROR_URL, indent); return null; } catch (IOException e) { + Log.e(Constants.TAG, "io error", e); + e.printStackTrace(); log.add(LogType.MSG_LV_FETCH_ERROR_IO, indent); return null; } @@ -109,6 +112,12 @@ public class GenericHttpsResource extends LinkedCookieResource { return R.drawable.ssl_lock; } + @Override + public @StringRes + int getVerifiedText() { + return R.string.linked_verified_https; + } + @Override public String getDisplayTitle(Context context) { return "Website (HTTPS)"; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/TwitterResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/TwitterResource.java index 32bf92a99..8bc872f51 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/TwitterResource.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/TwitterResource.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.support.annotation.DrawableRes; +import android.support.annotation.StringRes; import android.util.Log; import com.textuality.keybase.lib.JWalk; @@ -118,6 +119,12 @@ public class TwitterResource extends LinkedCookieResource { return R.drawable.twitter; } + @Override + public @StringRes + int getVerifiedText() { + return R.string.linked_verified_twitter; + } + @Override public String getDisplayTitle(Context context) { return "Twitter"; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java index 9727fab1d..e94ea5189 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java @@ -201,7 +201,7 @@ public class LinkedIdsAdapter extends UserAttributesAdapter { final public TextView vComment; public ViewHolder(View view) { - vVerified = (ImageView) view.findViewById(R.id.user_id_item_certified); + vVerified = (ImageView) view.findViewById(R.id.linked_id_certified_icon); vIcon = (ImageView) view.findViewById(R.id.linked_id_type_icon); vTitle = (TextView) view.findViewById(R.id.linked_id_title); vComment = (TextView) view.findViewById(R.id.linked_id_comment); 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 c39e40761..502abe8e6 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 @@ -7,6 +7,7 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.database.Cursor; +import android.graphics.PorterDuff; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; @@ -23,6 +24,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.TextView; import android.widget.ViewAnimator; @@ -240,6 +242,7 @@ public class LinkedIdViewFragment extends Fragment implements static class ViewHolder { private final View vButtonView; private final ViewAnimator vVerifyingContainer; + private final ViewAnimator vItemCertified; LinkedIdsAdapter.ViewHolder mLinkedIdHolder; private ViewAnimator vButtonSwitcher; @@ -267,6 +270,7 @@ public class LinkedIdViewFragment extends Fragment implements vButtonView = root.findViewById(R.id.button_view); vVerifyingContainer = (ViewAnimator) root.findViewById(R.id.linked_verify_container); + vItemCertified = (ViewAnimator) root.findViewById(R.id.linked_id_certified); vProgress = (ViewAnimator) root.findViewById(R.id.linked_cert_progress); vText = (TextView) root.findViewById(R.id.linked_cert_text); @@ -285,7 +289,6 @@ public class LinkedIdViewFragment extends Fragment implements break; case VERIFY_OK: - vText.setText("Ok"); vProgress.setDisplayedChild(1); if (!isSecret) { showButton(2); @@ -315,7 +318,9 @@ public class LinkedIdViewFragment extends Fragment implements if (vVerifyingContainer.getDisplayedChild() == (show ? 1 : 0)) { return; } + vVerifyingContainer.setDisplayedChild(show ? 1 : 0); + vItemCertified.setDisplayedChild(show ? 1 : 0); } void showButton(int which) { @@ -386,6 +391,15 @@ public class LinkedIdViewFragment extends Fragment implements mViewHolder = new ViewHolder(root); root.setTag(mViewHolder); + ((ImageView) root.findViewById(R.id.status_icon_verified)) + .setColorFilter(mContext.getResources().getColor(R.color.android_green_light), + PorterDuff.Mode.SRC_IN); + ((ImageView) root.findViewById(R.id.status_icon_invalid)) + .setColorFilter(mContext.getResources().getColor(R.color.android_red_light), + PorterDuff.Mode.SRC_IN); + + + mViewHolder.vButtonBack.setClickable(true); mViewHolder.vButtonBack.findViewById(R.id.back_button).setOnClickListener(new OnClickListener() { @Override @@ -459,9 +473,11 @@ public class LinkedIdViewFragment extends Fragment implements return; } if (result.success()) { + mViewHolder.vText.setText(mLinkedResource.getVerifiedText()); mViewHolder.setVerifyingState(VerifyState.VERIFY_OK, mIsSecret); } else { mViewHolder.setVerifyingState(VerifyState.VERIFY_ERROR, mIsSecret); + result.createNotify(getActivity()).show(); } mInProgress = null; } @@ -524,7 +540,7 @@ public class LinkedIdViewFragment extends Fragment implements return; } - mViewHolder.setVerifyingState(VerifyState.CERTIFYING, mIsSecret); + mViewHolder.setVerifyingState(VerifyState.CERTIFYING, false); Bundle data = new Bundle(); { @@ -557,19 +573,11 @@ public class LinkedIdViewFragment extends Fragment implements Bundle data = message.getData(); - if (message.arg1 == MessageStatus.UPDATE_PROGRESS.ordinal()) { - if (data.containsKey(DATA_MESSAGE)) { - mViewHolder.vText.setText(data.getString(DATA_MESSAGE)); - } else if (data.containsKey(DATA_MESSAGE_ID)) { - mViewHolder.vText.setText(data.getString(DATA_MESSAGE_ID)); - } - return; - } - if (message.arg1 == MessageStatus.OKAY.ordinal()) { CertifyResult result = data.getParcelable(CertifyResult.EXTRA_RESULT); result.createNotify(getActivity()).show(); } + } }; diff --git a/OpenKeychain/src/main/res/anim/fade_in_up.xml b/OpenKeychain/src/main/res/anim/fade_in_up.xml new file mode 100644 index 000000000..c190c0f53 --- /dev/null +++ b/OpenKeychain/src/main/res/anim/fade_in_up.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/anim/fade_out_down.xml b/OpenKeychain/src/main/res/anim/fade_out_down.xml new file mode 100644 index 000000000..523b180af --- /dev/null +++ b/OpenKeychain/src/main/res/anim/fade_out_down.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/drawable-hdpi/status_signature_verified_inner_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/status_signature_verified_inner_24dp.png new file mode 100644 index 000000000..e9dfc47a4 Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-hdpi/status_signature_verified_inner_24dp.png differ diff --git a/OpenKeychain/src/main/res/drawable-hdpi/status_signature_verified_inner_96dp.png b/OpenKeychain/src/main/res/drawable-hdpi/status_signature_verified_inner_96dp.png new file mode 100644 index 000000000..4a3f2b2b5 Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-hdpi/status_signature_verified_inner_96dp.png differ diff --git a/OpenKeychain/src/main/res/drawable-mdpi/status_signature_verified_inner_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/status_signature_verified_inner_24dp.png new file mode 100644 index 000000000..28e37d9f3 Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-mdpi/status_signature_verified_inner_24dp.png differ diff --git a/OpenKeychain/src/main/res/drawable-mdpi/status_signature_verified_inner_96dp.png b/OpenKeychain/src/main/res/drawable-mdpi/status_signature_verified_inner_96dp.png new file mode 100644 index 000000000..cc7091df0 Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-mdpi/status_signature_verified_inner_96dp.png differ diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/status_signature_verified_inner_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/status_signature_verified_inner_24dp.png new file mode 100644 index 000000000..ea801c45a Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xhdpi/status_signature_verified_inner_24dp.png differ diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/status_signature_verified_inner_96dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/status_signature_verified_inner_96dp.png new file mode 100644 index 000000000..61610df19 Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xhdpi/status_signature_verified_inner_96dp.png differ diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/status_signature_verified_inner_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/status_signature_verified_inner_24dp.png new file mode 100644 index 000000000..bcd73b09b Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxhdpi/status_signature_verified_inner_24dp.png differ diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/status_signature_verified_inner_96dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/status_signature_verified_inner_96dp.png new file mode 100644 index 000000000..71e563218 Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxhdpi/status_signature_verified_inner_96dp.png differ diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/status_signature_verified_inner_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/status_signature_verified_inner_24dp.png new file mode 100644 index 000000000..cc7091df0 Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxxhdpi/status_signature_verified_inner_24dp.png differ diff --git a/OpenKeychain/src/main/res/layout/linked_id_item.xml b/OpenKeychain/src/main/res/layout/linked_id_item.xml index 5fc5e78a8..900d3a5d5 100644 --- a/OpenKeychain/src/main/res/layout/linked_id_item.xml +++ b/OpenKeychain/src/main/res/layout/linked_id_item.xml @@ -1,10 +1,12 @@ + android:singleLine="true" + tools:showIn="@layout/linked_id_view_fragment"> - - + + + diff --git a/OpenKeychain/src/main/res/layout/linked_id_view_fragment.xml b/OpenKeychain/src/main/res/layout/linked_id_view_fragment.xml index 106d2343f..2fb79a4bf 100644 --- a/OpenKeychain/src/main/res/layout/linked_id_view_fragment.xml +++ b/OpenKeychain/src/main/res/layout/linked_id_view_fragment.xml @@ -38,6 +38,8 @@ android:id="@+id/linked_verify_container" android:inAnimation="@anim/fade_in" android:outAnimation="@anim/fade_out" + android:layout_marginLeft="12dp" + android:layout_marginRight="12dp" > @@ -49,11 +51,30 @@ android:orientation="horizontal" android:singleLine="true"> + + + + + + - - - - - - diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 3e46a7328..4902485b0 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -1304,6 +1304,16 @@ "More bla:" "After successful verification, press the Finish button to add the Linked Identity to your keyring and finish the process." + "Verify" + Text has been copied to clipboard + "The Website has been fetched and verified." + "The DNS record has been fetched and verified." + "The Tweet has been fetched and verified." + + "There is one more unknown identity type" + "There are %d more unknown identity types" + + "A \'linked identity\' connects your pgp key to a resource on the web." "Please select a type:" "This file claims ownership of the OpenPGP key with long id %2$s.\n\nCookie for proof:\n%1$s" @@ -1315,11 +1325,5 @@ "Add Linked Identity" "Linked Identities" "Finish" - "Verify" - Text has been copied to clipboard - - "There is one more unknown identity type" - "There are %d more unknown identity types" - -- cgit v1.2.3