From f8eb6275f55570236e20e13d106c6fe1613af173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 3 Jul 2018 20:07:38 +0200 Subject: [PATCH] move formatting of key items to new class --- .../ui/adapter/FlexibleKeyDetailsItem.java | 152 +--------------- .../keychain/ui/util/KeyInfoFormatter.java | 167 ++++++++++++++++++ 2 files changed, 176 insertions(+), 143 deletions(-) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/KeyInfoFormatter.java diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/FlexibleKeyDetailsItem.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/FlexibleKeyDetailsItem.java index cf53b113f..16c7a9050 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/FlexibleKeyDetailsItem.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/FlexibleKeyDetailsItem.java @@ -1,13 +1,9 @@ package org.sufficientlysecure.keychain.ui.adapter; +import java.util.Arrays; import java.util.List; -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; -import android.text.format.DateUtils; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -16,14 +12,12 @@ import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.items.IFilterable; import eu.davidea.flexibleadapter.items.IFlexible; import eu.davidea.viewholders.FlexibleViewHolder; + import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo; import org.sufficientlysecure.keychain.ui.adapter.FlexibleKeyDetailsItem.FlexibleKeyItemViewHolder; import org.sufficientlysecure.keychain.ui.adapter.FlexibleKeyItem.FlexibleSectionableKeyItem; -import org.sufficientlysecure.keychain.ui.util.FormattingUtils; -import org.sufficientlysecure.keychain.ui.util.Highlighter; -import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; -import org.sufficientlysecure.keychain.ui.util.PackageIconGetter; +import org.sufficientlysecure.keychain.ui.util.KeyInfoFormatter; public class FlexibleKeyDetailsItem extends FlexibleSectionableKeyItem @@ -77,8 +71,6 @@ public class FlexibleKeyDetailsItem extends FlexibleSectionableKeyItem textviews) { + int textColor; + if (keyInfo.is_revoked()) { + textColor = ContextCompat.getColor(context, R.color.key_flag_gray); + } else if (keyInfo.is_expired()) { + textColor = ContextCompat.getColor(context, R.color.key_flag_gray); + } else if (!keyInfo.is_secure()) { + textColor = ContextCompat.getColor(context, R.color.key_flag_gray); + } else if (keyInfo.has_any_secret()) { + textColor = FormattingUtils.getColorFromAttr(context, R.attr.colorText); + } else { + textColor = FormattingUtils.getColorFromAttr(context, R.attr.colorText); + } + for (TextView textView : textviews) { + textView.setTextColor(textColor); + } + } + + public void formatStatusIcon(ImageView statusIcon) { + if (keyInfo.is_revoked()) { + KeyFormattingUtils.setStatusImage( + context, + statusIcon, + null, + KeyFormattingUtils.State.REVOKED, + R.color.key_flag_gray + ); + + statusIcon.setVisibility(View.VISIBLE); + } else if (keyInfo.is_expired()) { + KeyFormattingUtils.setStatusImage( + context, + statusIcon, + null, + KeyFormattingUtils.State.EXPIRED, + R.color.key_flag_gray + ); + + statusIcon.setVisibility(View.VISIBLE); + } else if (!keyInfo.is_secure()) { + KeyFormattingUtils.setStatusImage( + context, + statusIcon, + null, + KeyFormattingUtils.State.INSECURE, + R.color.key_flag_gray + ); + + statusIcon.setVisibility(View.VISIBLE); + } else if (keyInfo.has_any_secret()) { + statusIcon.setVisibility(View.GONE); + } else { + // this is a public key - show if it's verified + if (keyInfo.is_verified()) { + KeyFormattingUtils.setStatusImage( + context, + statusIcon, + KeyFormattingUtils.State.VERIFIED + ); + + statusIcon.setVisibility(View.VISIBLE); + } else { + KeyFormattingUtils.setStatusImage( + context, + statusIcon, + KeyFormattingUtils.State.UNVERIFIED + ); + + statusIcon.setVisibility(View.VISIBLE); + } + } + } + + public void formatTrustIcon(ImageView trustIdIcon) { + if (!keyInfo.has_any_secret() && !keyInfo.autocrypt_package_names().isEmpty()) { + String packageName = keyInfo.autocrypt_package_names().get(0); + Drawable drawable = PackageIconGetter.getInstance(context).getDrawableForPackageName(packageName); + if (drawable != null) { + trustIdIcon.setImageDrawable(drawable); + trustIdIcon.setVisibility(View.VISIBLE); + } else { + trustIdIcon.setVisibility(View.GONE); + } + } else { + trustIdIcon.setVisibility(View.GONE); + } + } + + @NonNull + private String getSecretKeyReadableTime(Context context, SubKey.UnifiedKeyInfo keyInfo) { + long creationMillis = keyInfo.creation() * 1000; + + boolean allowRelativeTimestamp = keyInfo.has_duplicate(); + if (allowRelativeTimestamp) { + long creationAgeMillis = System.currentTimeMillis() - creationMillis; + if (creationAgeMillis < JUST_NOW_THRESHOLD) { + return context.getString(R.string.label_key_created_just_now); + } + } + + String dateTime = DateUtils.formatDateTime(context, + creationMillis, + DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_YEAR + | DateUtils.FORMAT_ABBREV_MONTH); + return context.getString(R.string.label_key_created, dateTime); + } +}