From f7fe4145972cedf7fc972bae8480bb429cfacbf9 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Fri, 30 Mar 2018 15:18:58 +0200 Subject: [PATCH] Hide custom entries protected #65 --- .../activities/EntryActivity.java | 2 +- .../activities/EntryEditActivity.java | 18 ++++---- .../activities/ListNodesActivity.java | 1 - .../keepassdroid/database/ExtraFields.java | 1 - .../keepassdroid/view/EntryContentsView.java | 19 +++++++-- ...tryNewField.java => EntryCustomField.java} | 21 +++++----- .../view/EntryCustomFieldProtected.java | 41 +++++++++++++++++++ ...ewField.java => EntryEditCustomField.java} | 8 ++-- 8 files changed, 81 insertions(+), 30 deletions(-) rename app/src/main/java/com/keepassdroid/view/{EntryNewField.java => EntryCustomField.java} (76%) create mode 100644 app/src/main/java/com/keepassdroid/view/EntryCustomFieldProtected.java rename app/src/main/java/com/keepassdroid/view/{EntryEditNewField.java => EntryEditCustomField.java} (92%) diff --git a/app/src/main/java/com/keepassdroid/activities/EntryActivity.java b/app/src/main/java/com/keepassdroid/activities/EntryActivity.java index af8e4e2d6..538f2b3e5 100644 --- a/app/src/main/java/com/keepassdroid/activities/EntryActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/EntryActivity.java @@ -251,7 +251,7 @@ public class EntryActivity extends LockingHideActivity { mEntry.getFields().doActionToAllCustomProtectedField((label, value) -> - entryContentsView.addExtraField(label, value.toString(), view -> + entryContentsView.addExtraField(label, value, view -> clipboardHelper.timeoutCopyToClipboard( value.toString(), getString(R.string.copy_field, label) diff --git a/app/src/main/java/com/keepassdroid/activities/EntryEditActivity.java b/app/src/main/java/com/keepassdroid/activities/EntryEditActivity.java index fecc1af62..05301083a 100644 --- a/app/src/main/java/com/keepassdroid/activities/EntryEditActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/EntryEditActivity.java @@ -57,7 +57,7 @@ import com.keepassdroid.tasks.ProgressTask; import com.keepassdroid.utils.MenuUtil; import com.keepassdroid.utils.Types; import com.keepassdroid.utils.Util; -import com.keepassdroid.view.EntryEditNewField; +import com.keepassdroid.view.EntryEditCustomField; import com.kunzisoft.keepass.R; import java.util.UUID; @@ -201,7 +201,7 @@ public class EntryEditActivity extends LockingHideActivity View add = findViewById(R.id.add_new_field); add.setVisibility(View.VISIBLE); add.setOnClickListener(v -> { - EntryEditNewField ees = new EntryEditNewField(EntryEditActivity.this); + EntryEditCustomField ees = new EntryEditCustomField(EntryEditActivity.this); ees.setData("", new ProtectedString(false, "")); entryExtraFieldsContainer.addView(ees); @@ -230,8 +230,8 @@ public class EntryEditActivity extends LockingHideActivity // Validate extra fields if (mEntry.allowExtraFields()) { for (int i = 0; i < entryExtraFieldsContainer.getChildCount(); i++) { - EntryEditNewField entryEditNewField = (EntryEditNewField) entryExtraFieldsContainer.getChildAt(i); - String key = entryEditNewField.getLabel(); + EntryEditCustomField entryEditCustomField = (EntryEditCustomField) entryExtraFieldsContainer.getChildAt(i); + String key = entryEditCustomField.getLabel(); if (key == null || key.length() == 0) { Toast.makeText(this, R.string.error_string_key, Toast.LENGTH_LONG).show(); return false; @@ -277,7 +277,7 @@ public class EntryEditActivity extends LockingHideActivity newEntry.removeAllCustomFields(); // Add extra fields from views for (int i = 0; i < entryExtraFieldsContainer.getChildCount(); i++) { - EntryEditNewField view = (EntryEditNewField) entryExtraFieldsContainer.getChildAt(i); + EntryEditCustomField view = (EntryEditCustomField) entryExtraFieldsContainer.getChildAt(i); String key = view.getLabel(); String value = view.getValue(); boolean protect = view.isProtected(); @@ -339,10 +339,10 @@ public class EntryEditActivity extends LockingHideActivity if (mEntry.allowExtraFields()) { LinearLayout container = findViewById(R.id.advanced_container); mEntry.getFields().doActionToAllCustomProtectedField((key, value) -> { - EntryEditNewField entryEditNewField = new EntryEditNewField(EntryEditActivity.this); - entryEditNewField.setData(key, value); - entryEditNewField.setFontVisibility(visibilityFontActivated); - container.addView(entryEditNewField); + EntryEditCustomField entryEditCustomField = new EntryEditCustomField(EntryEditActivity.this); + entryEditCustomField.setData(key, value); + entryEditCustomField.setFontVisibility(visibilityFontActivated); + container.addView(entryEditCustomField); }); } } diff --git a/app/src/main/java/com/keepassdroid/activities/ListNodesActivity.java b/app/src/main/java/com/keepassdroid/activities/ListNodesActivity.java index 761057144..c26373ba5 100644 --- a/app/src/main/java/com/keepassdroid/activities/ListNodesActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/ListNodesActivity.java @@ -136,7 +136,6 @@ public abstract class ListNodesActivity extends LockingActivity protected void assignListToNodeAdapter(RecyclerView recyclerView) { recyclerView.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET); - // TODO mList.setTextFilterEnabled(true); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(mAdapter); } diff --git a/app/src/main/java/com/keepassdroid/database/ExtraFields.java b/app/src/main/java/com/keepassdroid/database/ExtraFields.java index b2c9e69e5..a03ef3af0 100644 --- a/app/src/main/java/com/keepassdroid/database/ExtraFields.java +++ b/app/src/main/java/com/keepassdroid/database/ExtraFields.java @@ -64,7 +64,6 @@ public class ExtraFields implements Serializable, Cloneable { String key = pair.getKey(); if (isNotStandardField(key)) { protectedFields.put(key, pair.getValue()); - // TODO Add hidden style for protection field } } } diff --git a/app/src/main/java/com/keepassdroid/view/EntryContentsView.java b/app/src/main/java/com/keepassdroid/view/EntryContentsView.java index 271526b61..4db7fb149 100644 --- a/app/src/main/java/com/keepassdroid/view/EntryContentsView.java +++ b/app/src/main/java/com/keepassdroid/view/EntryContentsView.java @@ -29,6 +29,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import com.keepassdroid.database.security.ProtectedString; import com.keepassdroid.utils.Util; import com.kunzisoft.keepass.R; @@ -151,6 +152,12 @@ public class EntryContentsView extends LinearLayout { } else { passwordView.setTransformationMethod(PasswordTransformationMethod.getInstance()); } + // Hidden style for custom fields + for (int i = 0; i < extrasView.getChildCount(); i++) { + View childCustomView = extrasView.getChildAt(i); + if (childCustomView instanceof EntryCustomFieldProtected) + ((EntryCustomFieldProtected) childCustomView).setHiddenPasswordStyle(hiddenStyle); + } } public void assignURL(String url) { @@ -173,10 +180,14 @@ public class EntryContentsView extends LinearLayout { } } - public void addExtraField(String title, String value, OnClickListener onActionClickListener) { - EntryNewField entryNewField = new EntryNewField(getContext(), null, title, value, onActionClickListener); - entryNewField.applyFontVisibility(fontInVisibility); - extrasView.addView(entryNewField); + public void addExtraField(String title, ProtectedString value, OnClickListener onActionClickListener) { + EntryCustomField entryCustomField; + if (value.isProtected()) + entryCustomField = new EntryCustomFieldProtected(getContext(), null, title, value, onActionClickListener); + else + entryCustomField = new EntryCustomField(getContext(), null, title, value, onActionClickListener); + entryCustomField.applyFontVisibility(fontInVisibility); + extrasView.addView(entryCustomField); } public void clearExtraFields() { diff --git a/app/src/main/java/com/keepassdroid/view/EntryNewField.java b/app/src/main/java/com/keepassdroid/view/EntryCustomField.java similarity index 76% rename from app/src/main/java/com/keepassdroid/view/EntryNewField.java rename to app/src/main/java/com/keepassdroid/view/EntryCustomField.java index 38b6f3eeb..f384c86b5 100644 --- a/app/src/main/java/com/keepassdroid/view/EntryNewField.java +++ b/app/src/main/java/com/keepassdroid/view/EntryCustomField.java @@ -26,28 +26,29 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import com.keepassdroid.database.security.ProtectedString; import com.keepassdroid.utils.Util; import com.kunzisoft.keepass.R; -public class EntryNewField extends LinearLayout { +public class EntryCustomField extends LinearLayout { - private TextView labelView; - private TextView valueView; - private ImageView actionImageView; + protected TextView labelView; + protected TextView valueView; + protected ImageView actionImageView; - public EntryNewField(Context context) { + public EntryCustomField(Context context) { this(context, null); } - public EntryNewField(Context context, AttributeSet attrs) { + public EntryCustomField(Context context, AttributeSet attrs) { this(context, attrs, null, null); } - public EntryNewField(Context context, AttributeSet attrs, String title, String value) { + public EntryCustomField(Context context, AttributeSet attrs, String title, ProtectedString value) { this(context, attrs, title, value, null); } - public EntryNewField(Context context, AttributeSet attrs, String label, String value, OnClickListener onClickActionListener) { + public EntryCustomField(Context context, AttributeSet attrs, String label, ProtectedString value, OnClickListener onClickActionListener) { super(context, attrs); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); @@ -74,9 +75,9 @@ public class EntryNewField extends LinearLayout { } } - public void setValue(String value) { + public void setValue(ProtectedString value) { if (value != null) { - valueView.setText(value); + valueView.setText(value.toString()); } } diff --git a/app/src/main/java/com/keepassdroid/view/EntryCustomFieldProtected.java b/app/src/main/java/com/keepassdroid/view/EntryCustomFieldProtected.java new file mode 100644 index 000000000..06b8b04fc --- /dev/null +++ b/app/src/main/java/com/keepassdroid/view/EntryCustomFieldProtected.java @@ -0,0 +1,41 @@ +package com.keepassdroid.view; + +import android.content.Context; +import android.text.method.PasswordTransformationMethod; +import android.util.AttributeSet; + +import com.keepassdroid.database.security.ProtectedString; + +public class EntryCustomFieldProtected extends EntryCustomField{ + + public EntryCustomFieldProtected(Context context) { + super(context); + } + + public EntryCustomFieldProtected(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public EntryCustomFieldProtected(Context context, AttributeSet attrs, String title, ProtectedString value) { + super(context, attrs, title, value); + } + + public EntryCustomFieldProtected(Context context, AttributeSet attrs, String label, ProtectedString value, OnClickListener onClickActionListener) { + super(context, attrs, label, value, onClickActionListener); + } + + public void setValue(ProtectedString value) { + if (value != null) { + valueView.setText(value.toString()); + setHiddenPasswordStyle(value.isProtected()); + } + } + + public void setHiddenPasswordStyle(boolean hiddenStyle) { + if ( !hiddenStyle ) { + valueView.setTransformationMethod(null); + } else { + valueView.setTransformationMethod(PasswordTransformationMethod.getInstance()); + } + } +} diff --git a/app/src/main/java/com/keepassdroid/view/EntryEditNewField.java b/app/src/main/java/com/keepassdroid/view/EntryEditCustomField.java similarity index 92% rename from app/src/main/java/com/keepassdroid/view/EntryEditNewField.java rename to app/src/main/java/com/keepassdroid/view/EntryEditCustomField.java index 0f007a204..2c50e3102 100644 --- a/app/src/main/java/com/keepassdroid/view/EntryEditNewField.java +++ b/app/src/main/java/com/keepassdroid/view/EntryEditCustomField.java @@ -34,21 +34,21 @@ import com.keepassdroid.database.security.ProtectedString; import com.keepassdroid.utils.Util; import com.kunzisoft.keepass.R; -public class EntryEditNewField extends RelativeLayout { +public class EntryEditCustomField extends RelativeLayout { private TextView labelView; private EditText valueView; private CompoundButton protectionCheckView; - public EntryEditNewField(Context context) { + public EntryEditCustomField(Context context) { this(context, null); } - public EntryEditNewField(Context context, AttributeSet attrs) { + public EntryEditCustomField(Context context, AttributeSet attrs) { this(context, attrs, 0); } - public EntryEditNewField(Context context, AttributeSet attrs, int defStyle) { + public EntryEditCustomField(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);