diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectAuthenticationKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectAuthenticationKeyActivity.java index 7110af55c..9614297d7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectAuthenticationKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectAuthenticationKeyActivity.java @@ -60,6 +60,7 @@ import org.sufficientlysecure.keychain.daos.KeyRepository; import org.sufficientlysecure.keychain.remote.ui.RemoteSecurityTokenOperationActivity; import org.sufficientlysecure.keychain.remote.ui.dialog.RemoteSelectAuthenticationKeyPresenter.RemoteSelectAuthenticationKeyView; import org.sufficientlysecure.keychain.ui.dialog.CustomAlertDialogBuilder; +import org.sufficientlysecure.keychain.ui.util.KeyInfoFormatter; import org.sufficientlysecure.keychain.ui.util.ThemeChanger; import org.sufficientlysecure.keychain.ui.util.recyclerview.DividerItemDecoration; import org.sufficientlysecure.keychain.ui.util.recyclerview.RecyclerItemClickListener; @@ -338,11 +339,8 @@ public class RemoteSelectAuthenticationKeyActivity extends FragmentActivity { void bind(UnifiedKeyInfo keyInfo, Drawable selectionIcon) { vName.setText(keyInfo.name()); - Context context = vCreation.getContext(); - String dateTime = DateUtils.formatDateTime(context, keyInfo.creation() * 1000, - DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME | - DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_ABBREV_MONTH); - vCreation.setText(context.getString(R.string.label_key_created, dateTime)); + KeyInfoFormatter keyInfoFormatter = new KeyInfoFormatter(itemView.getContext(), keyInfo, null); + keyInfoFormatter.formatCreationDate(vCreation); vIcon.setImageDrawable(selectionIcon); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdKeyActivity.java index 76a6dd600..ce5eb16c0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdKeyActivity.java @@ -71,6 +71,7 @@ import org.sufficientlysecure.keychain.ui.MainActivity; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper.AbstractCallback; import org.sufficientlysecure.keychain.ui.dialog.CustomAlertDialogBuilder; +import org.sufficientlysecure.keychain.ui.util.KeyInfoFormatter; import org.sufficientlysecure.keychain.ui.util.ThemeChanger; import org.sufficientlysecure.keychain.ui.util.recyclerview.DividerItemDecoration; import org.sufficientlysecure.keychain.ui.util.recyclerview.RecyclerItemClickListener; @@ -523,10 +524,8 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { vName.setText(context.getString(R.string.use_key_no_name)); } - String dateTime = DateUtils.formatDateTime(context, keyInfo.creation() * 1000, - DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME | - DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_ABBREV_MONTH); - vCreation.setText(context.getString(R.string.label_key_created, dateTime)); + KeyInfoFormatter keyInfoFormatter = new KeyInfoFormatter(itemView.getContext(), keyInfo, null); + keyInfoFormatter.formatCreationDate(vCreation); vIcon.setImageDrawable(selectionIcon); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/KeyChoiceAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/KeyChoiceAdapter.java index b8a6d0701..3e6650f26 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/KeyChoiceAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/KeyChoiceAdapter.java @@ -1,30 +1,30 @@ package org.sufficientlysecure.keychain.ui.adapter; +import android.support.annotation.Nullable; +import android.support.annotation.StringRes; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.CheckBox; +import android.widget.RadioButton; +import android.widget.TextView; +import android.widget.Toast; + +import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo; +import org.sufficientlysecure.keychain.ui.adapter.KeyChoiceAdapter.KeyChoiceItem; +import org.sufficientlysecure.keychain.ui.util.KeyInfoFormatter; + import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; -import android.content.Context; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v7.widget.RecyclerView; -import android.text.format.DateUtils; -import android.view.View; -import android.widget.CheckBox; -import android.widget.RadioButton; -import android.widget.TextView; -import android.widget.Toast; - import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; 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.KeyChoiceAdapter.KeyChoiceItem; public class KeyChoiceAdapter extends FlexibleAdapter { @@ -228,16 +228,8 @@ public class KeyChoiceAdapter extends FlexibleAdapter { void bind(UnifiedKeyInfo keyInfo, int choiceMode, boolean isActive, boolean isEnabled) { vName.setText(keyInfo.name()); - Context context = vCreation.getContext(); - if (keyInfo.has_any_secret() || keyInfo.has_duplicate()) { - String dateTime = DateUtils.formatDateTime(context, keyInfo.creation() * 1000, - DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME | - DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_ABBREV_MONTH); - vCreation.setText(context.getString(R.string.label_key_created, dateTime)); - vCreation.setVisibility(View.VISIBLE); - } else { - vCreation.setVisibility(View.GONE); - } + KeyInfoFormatter keyInfoFormatter = new KeyInfoFormatter(itemView.getContext(), keyInfo, null); + keyInfoFormatter.formatCreationDate(vCreation); switch (choiceMode) { case Mode.IDLE: { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/KeyInfoFormatter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/KeyInfoFormatter.java index d2f3aca5e..de7e97039 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/KeyInfoFormatter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/KeyInfoFormatter.java @@ -58,6 +58,8 @@ public class KeyInfoFormatter { public void greyInvalidKeys(List textviews) { int textColor; + + // Note: order is important! if (keyInfo.is_revoked()) { textColor = ContextCompat.getColor(context, R.color.key_flag_gray); } else if (keyInfo.is_expired()) { @@ -75,6 +77,8 @@ public class KeyInfoFormatter { } public void formatStatusIcon(ImageView statusIcon) { + + // Note: order is important! if (keyInfo.is_revoked()) { KeyFormattingUtils.setStatusImage( context, diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeyChoiceSpinnerAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeyChoiceSpinnerAdapter.java index a27afda34..570336050 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeyChoiceSpinnerAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeyChoiceSpinnerAdapter.java @@ -1,11 +1,8 @@ package org.sufficientlysecure.keychain.ui.widget; -import java.util.List; - import android.content.Context; import android.support.annotation.StringRes; -import android.text.format.DateUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -15,9 +12,10 @@ import android.widget.TextView; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo; -import org.sufficientlysecure.keychain.ui.util.FormattingUtils; -import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; -import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State; +import org.sufficientlysecure.keychain.ui.util.KeyInfoFormatter; + +import java.util.Arrays; +import java.util.List; class KeyChoiceSpinnerAdapter extends BaseAdapter { @@ -137,75 +135,11 @@ class KeyChoiceSpinnerAdapter extends BaseAdapter { } public void bind(Context context, UnifiedKeyInfo keyInfo, boolean enabled) { - { // set name and stuff, common to both key types - if (keyInfo.name() != null) { - mMainUserId.setText(keyInfo.name()); - } else { - mMainUserId.setText(R.string.user_id_no_name); - } - if (keyInfo.email() != null) { - mMainUserIdRest.setText(keyInfo.email()); - mMainUserIdRest.setVisibility(View.VISIBLE); - } else { - mMainUserIdRest.setVisibility(View.GONE); - } - } - - // sort of a hack: if this item isn't enabled, we make it clickable - // to intercept its click events. either way, no listener! - mView.setClickable(!enabled); - - { // set edit button and status, specific by key type - - int textColor; - - // Note: order is important! - if (keyInfo.is_revoked()) { - KeyFormattingUtils - .setStatusImage(context, mStatus, null, State.REVOKED, R.color.key_flag_gray); - mStatus.setVisibility(View.VISIBLE); - textColor = context.getResources().getColor(R.color.key_flag_gray); - } else if (keyInfo.is_expired()) { - KeyFormattingUtils.setStatusImage(context, mStatus, null, State.EXPIRED, R.color.key_flag_gray); - mStatus.setVisibility(View.VISIBLE); - textColor = context.getResources().getColor(R.color.key_flag_gray); - } else if (!keyInfo.is_secure()) { - KeyFormattingUtils.setStatusImage(context, mStatus, null, State.INSECURE, R.color.key_flag_gray); - mStatus.setVisibility(View.VISIBLE); - textColor = context.getResources().getColor(R.color.key_flag_gray); - } else if (keyInfo.has_any_secret()) { - mStatus.setVisibility(View.GONE); - textColor = FormattingUtils.getColorFromAttr(context, R.attr.colorText); - } else { - // this is a public key - show if it's verified - if (keyInfo.is_verified()) { - KeyFormattingUtils.setStatusImage(context, mStatus, State.VERIFIED); - mStatus.setVisibility(View.VISIBLE); - } else { - KeyFormattingUtils.setStatusImage(context, mStatus, State.UNVERIFIED); - mStatus.setVisibility(View.VISIBLE); - } - textColor = FormattingUtils.getColorFromAttr(context, R.attr.colorText); - } - - mMainUserId.setTextColor(textColor); - mMainUserIdRest.setTextColor(textColor); - - if (keyInfo.has_duplicate()) { - String dateTime = DateUtils.formatDateTime(context, - keyInfo.creation() * 1000, - DateUtils.FORMAT_SHOW_DATE - | DateUtils.FORMAT_SHOW_TIME - | DateUtils.FORMAT_SHOW_YEAR - | DateUtils.FORMAT_ABBREV_MONTH); - mCreationDate.setText(context.getString(R.string.label_key_created, - dateTime)); - mCreationDate.setTextColor(textColor); - mCreationDate.setVisibility(View.VISIBLE); - } else { - mCreationDate.setVisibility(View.GONE); - } - } + KeyInfoFormatter keyInfoFormatter = new KeyInfoFormatter(context, keyInfo, null); + keyInfoFormatter.formatUserId(mMainUserId, mMainUserIdRest); + keyInfoFormatter.formatCreationDate(mCreationDate); + keyInfoFormatter.formatStatusIcon(mStatus); + keyInfoFormatter.greyInvalidKeys(Arrays.asList(mMainUserId, mMainUserIdRest, mCreationDate)); } } }