From b43bac37db1417b3d46dc4b33458a0e140f7b473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Sch=C3=A4ttgen?= Date: Tue, 3 Mar 2020 21:49:56 +0100 Subject: [PATCH] Improve method to notify users on copy Add minor code improvements --- .../aegis/ui/MainActivity.java | 1 - .../aegis/ui/views/EntryAdapter.java | 3 ++ .../aegis/ui/views/EntryHolder.java | 32 +++++++++++++++++++ app/src/main/res/anim/fade_in.xml | 12 +++++++ app/src/main/res/anim/fade_out.xml | 8 +++++ app/src/main/res/anim/slide_down_fade_in.xml | 16 ++++++++++ app/src/main/res/anim/slide_down_fade_out.xml | 21 ++++++++++++ app/src/main/res/layout/card_entry.xml | 30 ++++++++++++++--- .../main/res/layout/card_entry_compact.xml | 27 +++++++++++++--- app/src/main/res/layout/card_entry_small.xml | 28 +++++++++++++--- app/src/main/res/values-cs-rCZ/strings.xml | 1 - app/src/main/res/values-de-rDE/strings.xml | 1 - app/src/main/res/values-es-rES/strings.xml | 1 - app/src/main/res/values-fr-rFR/strings.xml | 1 - app/src/main/res/values-it-rIT/strings.xml | 1 - app/src/main/res/values-kn-rIN/strings.xml | 1 - app/src/main/res/values-nl-rNL/strings.xml | 1 - app/src/main/res/values-ru-rRU/strings.xml | 1 - app/src/main/res/values-zh-rCN/strings.xml | 1 - app/src/main/res/values/strings.xml | 2 +- 20 files changed, 164 insertions(+), 25 deletions(-) create mode 100644 app/src/main/res/anim/fade_in.xml create mode 100644 app/src/main/res/anim/fade_out.xml create mode 100644 app/src/main/res/anim/slide_down_fade_in.xml create mode 100644 app/src/main/res/anim/slide_down_fade_out.xml diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java index 4aaeb09b..7179c15d 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java @@ -757,7 +757,6 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("text/plain", entry.getInfo().getOtp()); clipboard.setPrimaryClip(clip); - Toast.makeText(this, getString(R.string.code_copied), Toast.LENGTH_SHORT).show(); } private class ActionModeCallbacks implements ActionMode.Callback { diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java index ceb69c82..2e92a29b 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java @@ -4,6 +4,8 @@ import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; import androidx.recyclerview.widget.RecyclerView; @@ -340,6 +342,7 @@ public class EntryAdapter extends RecyclerView.Adapter implements I if (!handled) { _view.onEntryClick(entry); + holder.animateCopyText(); } } }); diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java index ec276b19..5b9160f4 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java @@ -1,8 +1,12 @@ package com.beemdevelopment.aegis.ui.views; import android.graphics.PorterDuff; +import android.os.Handler; import android.view.View; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.TextView; import androidx.fragment.app.Fragment; @@ -28,9 +32,11 @@ public class EntryHolder extends RecyclerView.ViewHolder { private TextView _profileName; private TextView _profileCode; private TextView _profileIssuer; + private TextView _profileCopied; private ImageView _profileDrawable; private VaultEntry _entry; private ImageView _buttonRefresh; + private RelativeLayout _description; private boolean _hidden; @@ -38,6 +44,7 @@ public class EntryHolder extends RecyclerView.ViewHolder { private View _view; private UiRefresher _refresher; + private Handler _animationHandler; public EntryHolder(final View view) { super(view); @@ -47,6 +54,8 @@ public class EntryHolder extends RecyclerView.ViewHolder { _profileName = view.findViewById(R.id.profile_account_name); _profileCode = view.findViewById(R.id.profile_code); _profileIssuer = view.findViewById(R.id.profile_issuer); + _profileCopied = view.findViewById(R.id.profile_copied); + _description = view.findViewById(R.id.description); _profileDrawable = view.findViewById(R.id.ivTextDrawable); _buttonRefresh = view.findViewById(R.id.buttonRefresh); @@ -200,6 +209,29 @@ public class EntryHolder extends RecyclerView.ViewHolder { animateAlphaTo(DEFAULT_ALPHA); } + public void animateCopyText() { + if (_animationHandler != null) { + _animationHandler.removeCallbacksAndMessages(null); + } + Animation slideDownFadeIn = AnimationUtils.loadAnimation(itemView.getContext(), R.anim.slide_down_fade_in); + Animation slideDownFadeOut = AnimationUtils.loadAnimation(itemView.getContext(), R.anim.slide_down_fade_out); + Animation fadeOut = AnimationUtils.loadAnimation(itemView.getContext(), R.anim.fade_out); + Animation fadeIn = AnimationUtils.loadAnimation(itemView.getContext(), R.anim.fade_in); + + _profileCopied.startAnimation(slideDownFadeIn); + _description.startAnimation(slideDownFadeOut); + + + _animationHandler = new Handler(); + _animationHandler.postDelayed(new Runnable() { + @Override + public void run() { + _profileCopied.startAnimation(fadeOut); + _description.startAnimation(fadeIn); + } + }, 3000); + } + private void animateAlphaTo(float alpha) { itemView.animate().alpha(alpha).setDuration(200).start(); } diff --git a/app/src/main/res/anim/fade_in.xml b/app/src/main/res/anim/fade_in.xml new file mode 100644 index 00000000..481e19e0 --- /dev/null +++ b/app/src/main/res/anim/fade_in.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/fade_out.xml b/app/src/main/res/anim/fade_out.xml new file mode 100644 index 00000000..09a0f1e8 --- /dev/null +++ b/app/src/main/res/anim/fade_out.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_down_fade_in.xml b/app/src/main/res/anim/slide_down_fade_in.xml new file mode 100644 index 00000000..92cc4842 --- /dev/null +++ b/app/src/main/res/anim/slide_down_fade_in.xml @@ -0,0 +1,16 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_down_fade_out.xml b/app/src/main/res/anim/slide_down_fade_out.xml new file mode 100644 index 00000000..1d8259ce --- /dev/null +++ b/app/src/main/res/anim/slide_down_fade_out.xml @@ -0,0 +1,21 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/card_entry.xml b/app/src/main/res/layout/card_entry.xml index 83ab1034..3d6b89c8 100644 --- a/app/src/main/res/layout/card_entry.xml +++ b/app/src/main/res/layout/card_entry.xml @@ -49,8 +49,30 @@ android:paddingRight="16dp" android:paddingStart="16dp"> - + + + + + @@ -68,7 +87,6 @@ android:id="@+id/profile_account_name" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_below="@id/profile_code" android:layout_toRightOf="@id/profile_issuer" android:ellipsize="end" android:includeFontPadding="false" @@ -77,6 +95,8 @@ android:textSize="15sp" tools:text=" - AccountName" /> + + + + + + @@ -68,7 +87,6 @@ android:id="@+id/profile_account_name" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_below="@id/profile_code" android:layout_toRightOf="@id/profile_issuer" android:ellipsize="end" android:includeFontPadding="false" @@ -76,6 +94,7 @@ android:textColor="@color/extra_info_text" android:textSize="13sp" tools:text=" - AccountName" /> + + + + + @@ -68,7 +87,6 @@ android:id="@+id/profile_account_name" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_below="@id/profile_code" android:layout_toRightOf="@id/profile_issuer" android:ellipsize="end" android:includeFontPadding="false" @@ -76,7 +94,7 @@ android:textColor="@color/extra_info_text" android:textSize="13sp" tools:text=" - AccountName" /> - + Nastavení dokončeno Aegis je nastaven a připraven k používání. Trezor nebyl nenalezen, spouštím nastavení… - Kód zkopírován do schránky Chyby zkopírovány do schránky Verze zkopírována do schránky Při odemykání trezoru došlo k chybě diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 643974f2..416ad567 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -86,7 +86,6 @@ Einrichten abgeschlossen Aegis ist eingerichtet und einsatzbereit. Tresor nicht gefunden, Starten der Einrichtung… - Code in die Zwischenablage kopiert Fehlermeldungen in die Zwischenablage kopiert Version in die Zwischenablage kopiert Beim Versuch, den Tresor zu entsperren, ist ein Fehler aufgetreten. diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 7fc32a48..3c92a642 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -95,7 +95,6 @@ Configuración completada Aegis se ha configurado y está listo para funcionar. Caja fuerte no encontrada, iniciando la configuración… - Código copiado al portapapeles Errores copiados al portapapeles Versión copiada al portapapeles Se ha producido un error tratando de desbloquear la caja fuerte diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index f8ec5a1d..6386126d 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -86,7 +86,6 @@ Configuration terminée Aegis a été configuré et est prêt à être utilisé. Coffre-fort introuvable, lancement de la configuration… - Code copié dans le presse-papier Erreurs copiées dans le presse-papier Version copiée dans le presse-papier Une erreur est survenue en essayant de déverrouiller le coffre-fort diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 2f89b69c..eba4e81c 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -92,7 +92,6 @@ Configurazione completata Aegis è stata configurata, sei pronto a partire. Cassaforte non trovata, avvio configurazione… - Codice copiato negli appunti Codice errore copiato negli appunti Versione copiata negli appunti Si è verificato un errore nello sblocco della cassaforte diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index 7f512bf6..64c1b040 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -86,7 +86,6 @@ ತಯಾರಿ ಪೂರ್ಣಗೊಂಡಿದೆ Aegis ತಯಾರಿಯಾಗಿದೆ ಹಾಗು ಮುಂದುವರೆಯಲು ಸಿದ್ಧವಾಗಿದೆ. ವೌಲ್ಟ್ ಸಿಗಲಿಲ್ಲ, ತಯಾರಿಯನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ… - ಸಂಕೇತವನ್ನು ಕ್ಲಿಪ್ಬೋರ್ಡಿಗೆ ನಕಲಿಸಲಾಗಿದೆ ದೋಷಗಳು ಕ್ಲಿಪ್ಬೋರ್ಡಿಗೆ ನಕಲಿಸಲಾಗಿದೆ ಅವೃತ್ತಿ ಕ್ಲಿಪ್ಬೋರ್ಡಿಗೆ ನಕಲಿಸಲಾಗಿದೆ ವೌಲ್ಟಿನ ಬೀಗವನ್ನು ತೆರೆಯುವಾಗ ಒಂದು ದೋಷ ಸಂಭವಿಸಿದೆ diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 4266f378..6b13907c 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -86,7 +86,6 @@ Configuratie voltooid Aegis is geconfigureerd en is klaar voor gebruik. Kluis niet gevonden, configuratie wordt gestart… - Code gekopieerd naar klembord Fouten zijn gekopieerd naar klembord Versie is gekopieerd naar het klembord Er is een fout opgetreden tijdens het ontgrendelen van de kluis diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 6d9c7f19..3245dbff 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -83,7 +83,6 @@ Настройка завершена Aegis настроен и готов к работе. Хранилище не найдено, запуск первоначальной настройки… - Код скопирован в буфер обмена Ошибки скопированы в буфер обмена Произошла ошибка при попытке разблокировать хранилище Произошла ошибка при попытке сохранить хранилище diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 9a24b3e7..29fe36d5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -95,7 +95,6 @@ 设置完成 Aegis 已经设置和准备好了。 数据库未找到,开始设置…… - 验证码已复制到剪贴板 错误已复制到剪贴板 版本号已复制到剪贴板 试图解锁数据库时出错 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5499c21f..7c27ce63 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -112,7 +112,7 @@ Setup completed Aegis has been setup and is ready to go. Vault not found, starting setup… - Code copied to the clipboard + Copied Errors copied to the clipboard Version copied to the clipboard An error occurred while trying to unlock the vault