From 55dc504f26d5a34824d8ec9cdd04fe9b43358546 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Wed, 1 Aug 2018 15:45:49 +0200 Subject: [PATCH] Fix visual elements --- .../keepass/activities/EntryActivity.java | 2 +- .../keepass/activities/GroupActivity.java | 4 ++- .../keepass/adapters/NodeAdapter.java | 8 +++-- .../adapters/SearchEntryCursorAdapter.java | 20 ++++++++++- .../kunzisoft/keepass/database/PwEntry.java | 36 ++++++++++++------- .../kunzisoft/keepass/database/PwGroup.java | 10 +++++- .../kunzisoft/keepass/database/PwNode.java | 11 ++++-- .../keepass/database/SortNodeEnum.java | 4 +-- .../dialogs/GroupEditDialogFragment.java | 6 ++-- .../main/res/layout-v23/fingerprint_show.xml | 2 +- app/src/main/res/layout/entry_view.xml | 2 +- app/src/main/res/layout/list_nodes_entry.xml | 2 ++ app/src/main/res/layout/list_nodes_group.xml | 2 ++ .../res/layout/list_nodes_with_add_button.xml | 4 +-- app/src/main/res/layout/password.xml | 2 +- app/src/main/res/layout/search_entry.xml | 20 +++++++++-- app/src/main/res/values-v21/styles.xml | 2 +- app/src/main/res/values/styles.xml | 11 +++--- 18 files changed, 106 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.java b/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.java index 49768966c..f591cb285 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.java +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.java @@ -323,7 +323,7 @@ public class EntryActivity extends LockingHideActivity { } // Assign title text - titleView.setText(mEntry.getDisplayTitle()); + titleView.setText(mEntry.getVisualTitle()); // Assign basic fields entryContentsView.assignUserName(mEntry.getUsername()); diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.java b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.java index f0a8a3f70..89a156873 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.java +++ b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.java @@ -542,7 +542,7 @@ public class GroupActivity extends LockingActivity switch (node.getType()) { case GROUP: oldGroupToUpdate = (PwGroup) node; - GroupEditDialogFragment.build(node) + GroupEditDialogFragment.build(oldGroupToUpdate) .show(getSupportFragmentManager(), GroupEditDialogFragment.TAG_CREATE_GROUP); break; @@ -705,6 +705,8 @@ public class GroupActivity extends LockingActivity super.onResume(); // Refresh the elements assignGroupViewElements(); + // Refresh suggestions to change preferences + searchSuggestionAdapter.reInit(this); } /** diff --git a/app/src/main/java/com/kunzisoft/keepass/adapters/NodeAdapter.java b/app/src/main/java/com/kunzisoft/keepass/adapters/NodeAdapter.java index ce0518ee0..c8d3b1bec 100644 --- a/app/src/main/java/com/kunzisoft/keepass/adapters/NodeAdapter.java +++ b/app/src/main/java/com/kunzisoft/keepass/adapters/NodeAdapter.java @@ -239,7 +239,7 @@ public class NodeAdapter extends RecyclerView.Adapter { database.getDrawFactory().assignDatabaseIconTo(context, holder.icon, subNode.getIcon()); } // Assign text - holder.text.setText(subNode.getDisplayTitle()); + holder.text.setText(subNode.getTitle()); // Assign click holder.container.setOnClickListener( new OnNodeClickListener(subNode)); @@ -252,12 +252,14 @@ public class NodeAdapter extends RecyclerView.Adapter { // Add username holder.subText.setText(""); holder.subText.setVisibility(View.GONE); - if (showUsernames && subNode.getType().equals(PwNode.Type.ENTRY)) { + if (subNode.getType().equals(PwNode.Type.ENTRY)) { PwEntry entry = (PwEntry) subNode; entry.startToManageFieldReferences(database.getPwDatabase()); + holder.text.setText(entry.getVisualTitle()); + String username = entry.getUsername(); - if (!username.isEmpty()) { + if (showUsernames && !username.isEmpty()) { holder.subText.setVisibility(View.VISIBLE); holder.subText.setText(username); } diff --git a/app/src/main/java/com/kunzisoft/keepass/adapters/SearchEntryCursorAdapter.java b/app/src/main/java/com/kunzisoft/keepass/adapters/SearchEntryCursorAdapter.java index 949d8c2f5..ff459b07e 100644 --- a/app/src/main/java/com/kunzisoft/keepass/adapters/SearchEntryCursorAdapter.java +++ b/app/src/main/java/com/kunzisoft/keepass/adapters/SearchEntryCursorAdapter.java @@ -37,6 +37,7 @@ import com.kunzisoft.keepass.database.PwIcon; import com.kunzisoft.keepass.database.PwIconFactory; import com.kunzisoft.keepass.database.cursor.EntryCursor; import com.kunzisoft.keepass.icons.IconPackChooser; +import com.kunzisoft.keepass.settings.PreferencesUtil; import java.util.UUID; @@ -44,6 +45,7 @@ public class SearchEntryCursorAdapter extends CursorAdapter { private LayoutInflater cursorInflater; private Database database; + private boolean displayUsername; private int iconColor; public SearchEntryCursorAdapter(Context context, Database database) { @@ -57,6 +59,12 @@ public class SearchEntryCursorAdapter extends CursorAdapter { TypedArray taTextColor = context.getTheme().obtainStyledAttributes(attrTextColor); this.iconColor = taTextColor.getColor(0, Color.WHITE); taTextColor.recycle(); + + reInit(context); + } + + public void reInit(Context context) { + this.displayUsername = PreferencesUtil.showUsernamesListEntries(context); } @Override @@ -66,6 +74,7 @@ public class SearchEntryCursorAdapter extends CursorAdapter { ViewHolder viewHolder = new ViewHolder(); viewHolder.imageViewIcon = view.findViewById(R.id.entry_icon); viewHolder.textViewTitle = view.findViewById(R.id.entry_text); + viewHolder.textViewSubTitle = view.findViewById(R.id.entry_subtext); view.setTag(viewHolder); return view; @@ -75,6 +84,8 @@ public class SearchEntryCursorAdapter extends CursorAdapter { public void bindView(View view, Context context, Cursor cursor) { // Retrieve elements from cursor + UUID uuid = new UUID(cursor.getLong(cursor.getColumnIndex(EntryCursor.COLUMN_INDEX_UUID_MOST_SIGNIFICANT_BITS)), + cursor.getLong(cursor.getColumnIndex(EntryCursor.COLUMN_INDEX_UUID_LEAST_SIGNIFICANT_BITS))); PwIconFactory iconFactory = database.getPwDatabase().getIconFactory(); PwIcon icon = iconFactory.getIcon( new UUID(cursor.getLong(cursor.getColumnIndex(EntryCursor.COLUMN_INDEX_ICON_CUSTOM_UUID_MOST_SIGNIFICANT_BITS)), @@ -85,6 +96,8 @@ public class SearchEntryCursorAdapter extends CursorAdapter { icon = iconFactory.getKeyIcon(); } String title = cursor.getString( cursor.getColumnIndex(EntryCursor.COLUMN_INDEX_TITLE) ); + String username = cursor.getString( cursor.getColumnIndex(EntryCursor.COLUMN_INDEX_USERNAME) ); + String url = cursor.getString( cursor.getColumnIndex(EntryCursor.COLUMN_INDEX_URL) ); ViewHolder viewHolder = (ViewHolder) view.getTag(); @@ -95,12 +108,17 @@ public class SearchEntryCursorAdapter extends CursorAdapter { database.getDrawFactory().assignDatabaseIconTo(context, viewHolder.imageViewIcon, icon); } // Assign title - viewHolder.textViewTitle.setText(title); + String showTitle = PwEntry.getVisualTitle(false, title, username, url, uuid); + viewHolder.textViewTitle.setText(showTitle); + if (displayUsername && !username.isEmpty()) { + viewHolder.textViewSubTitle.setText(String.format("(%s)", username)); + } } private static class ViewHolder { ImageView imageViewIcon; TextView textViewTitle; + TextView textViewSubTitle; } @Override diff --git a/app/src/main/java/com/kunzisoft/keepass/database/PwEntry.java b/app/src/main/java/com/kunzisoft/keepass/database/PwEntry.java index 386f4ea2f..fb1434aa0 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/PwEntry.java +++ b/app/src/main/java/com/kunzisoft/keepass/database/PwEntry.java @@ -97,21 +97,31 @@ public abstract class PwEntry extends PwNode { return getTitle().equals(PMS_TAN_ENTRY) && (getUsername().length() > 0); } - @Override - public String getDisplayTitle() { - if ( isTan() ) { - return PMS_TAN_ENTRY + " " + getUsername(); - } else { - if (getTitle().isEmpty()) - if (getUrl().isEmpty()) - return getUUID().toString(); - else - return getUrl(); - else - return getTitle(); - } + /** + * {@inheritDoc} + * Get the display title from an entry,
+ * {@link #startToManageFieldReferences(PwDatabase)} and {@link #stopToManageFieldReferences()} must be called + * before and after {@link #getVisualTitle()} + */ + public String getVisualTitle() { + // only used to compare, don't car if it's a reference + return getVisualTitle(isTan(), getTitle(), getUsername(), getUrl(), getUUID()); } + public static String getVisualTitle(boolean isTAN, String title, String username, String url, UUID uuid) { + if ( isTAN ) { + return PMS_TAN_ENTRY + " " + username; + } else { + if (title.isEmpty()) + if (url.isEmpty()) + return uuid.toString(); + else + return url; + else + return title; + } + } + // TODO encapsulate extra fields /** diff --git a/app/src/main/java/com/kunzisoft/keepass/database/PwGroup.java b/app/src/main/java/com/kunzisoft/keepass/database/PwGroup.java index 95237eefd..a494084a1 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/PwGroup.java +++ b/app/src/main/java/com/kunzisoft/keepass/database/PwGroup.java @@ -130,10 +130,18 @@ public abstract class PwGroup implements ISmallTimeLogger public abstract Type getType(); /** - * @return Title to display as view + * @return Title */ - public abstract String getDisplayTitle(); + public abstract String getTitle(); + + /** + * @return Title to display, typically return alternative title if {@link #getTitle()} is empty + */ + protected abstract String getVisualTitle(); /** * @return Visual icon @@ -210,7 +215,7 @@ public abstract class PwNode implements ISmallTimeLogger */ public boolean isContentVisuallyTheSame(PwNode o) { return getType().equals(o.getType()) - && getDisplayTitle().equals(o.getDisplayTitle()) + && getVisualTitle().equals(o.getVisualTitle()) && getIcon().equals(o.getIcon()); } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/SortNodeEnum.java b/app/src/main/java/com/kunzisoft/keepass/database/SortNodeEnum.java index 8ffab7775..b921c24a1 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/SortNodeEnum.java +++ b/app/src/main/java/com/kunzisoft/keepass/database/SortNodeEnum.java @@ -109,8 +109,8 @@ public enum SortNodeEnum { new EntryNameComparator(ascending), object1, object2, - object1.getDisplayTitle() - .compareToIgnoreCase(object2.getDisplayTitle())); + object1.getTitle() + .compareToIgnoreCase(object2.getTitle())); } } diff --git a/app/src/main/java/com/kunzisoft/keepass/dialogs/GroupEditDialogFragment.java b/app/src/main/java/com/kunzisoft/keepass/dialogs/GroupEditDialogFragment.java index ac1bbbf6d..8151b4312 100644 --- a/app/src/main/java/com/kunzisoft/keepass/dialogs/GroupEditDialogFragment.java +++ b/app/src/main/java/com/kunzisoft/keepass/dialogs/GroupEditDialogFragment.java @@ -35,8 +35,8 @@ import android.widget.Toast; import com.kunzisoft.keepass.R; import com.kunzisoft.keepass.app.App; +import com.kunzisoft.keepass.database.PwGroup; import com.kunzisoft.keepass.database.PwIcon; -import com.kunzisoft.keepass.database.PwNode; import com.kunzisoft.keepass.icons.IconPackChooser; import static com.kunzisoft.keepass.dialogs.GroupEditDialogFragment.EditGroupDialogAction.CREATION; @@ -76,9 +76,9 @@ public class GroupEditDialogFragment extends DialogFragment return fragment; } - public static GroupEditDialogFragment build(PwNode group) { + public static GroupEditDialogFragment build(PwGroup group) { Bundle bundle = new Bundle(); - bundle.putString(KEY_NAME, group.getDisplayTitle()); + bundle.putString(KEY_NAME, group.getName()); bundle.putParcelable(KEY_ICON_ID, group.getIcon()); bundle.putInt(KEY_ACTION_ID, UPDATE.ordinal()); GroupEditDialogFragment fragment = new GroupEditDialogFragment(); diff --git a/app/src/main/res/layout-v23/fingerprint_show.xml b/app/src/main/res/layout-v23/fingerprint_show.xml index 16532183c..cf650fd04 100644 --- a/app/src/main/res/layout-v23/fingerprint_show.xml +++ b/app/src/main/res/layout-v23/fingerprint_show.xml @@ -32,6 +32,6 @@ android:layout_marginStart="24dp" android:layout_marginEnd="18dp" android:layout_toStartOf="@+id/fingerprint_image" - style="@style/KeepassDXStyle.TextAppearance.DefaultTextOnPrimary" + style="@style/KeepassDXStyle.TextAppearance.Default.TextOnPrimary" android:gravity="center_vertical|start" /> diff --git a/app/src/main/res/layout/entry_view.xml b/app/src/main/res/layout/entry_view.xml index 1fc478d0c..9677b4aab 100644 --- a/app/src/main/res/layout/entry_view.xml +++ b/app/src/main/res/layout/entry_view.xml @@ -53,7 +53,7 @@ android:layout_marginLeft="10dp" android:layout_marginStart="10dp" android:layout_gravity="start|center_vertical" - style="@style/KeepassDXStyle.TextAppearance.TitleTextOnPrimary" /> + style="@style/KeepassDXStyle.TextAppearance.Title.TextOnPrimary" /> diff --git a/app/src/main/res/layout/list_nodes_entry.xml b/app/src/main/res/layout/list_nodes_entry.xml index 435bfc35a..bd17d4334 100644 --- a/app/src/main/res/layout/list_nodes_entry.xml +++ b/app/src/main/res/layout/list_nodes_entry.xml @@ -52,6 +52,7 @@ android:layout_height="wrap_content" android:layout_width="wrap_content" android:lines="1" + android:singleLine="true" style="@style/KeepassDXStyle.TextAppearance.Default" /> diff --git a/app/src/main/res/layout/list_nodes_group.xml b/app/src/main/res/layout/list_nodes_group.xml index d163373a1..98a507b5f 100644 --- a/app/src/main/res/layout/list_nodes_group.xml +++ b/app/src/main/res/layout/list_nodes_group.xml @@ -64,6 +64,7 @@ android:layout_height="wrap_content" android:gravity="center_vertical" android:lines="1" + android:singleLine="true" style="@style/KeepassDXStyle.TextAppearance.Title" /> \ No newline at end of file diff --git a/app/src/main/res/layout/list_nodes_with_add_button.xml b/app/src/main/res/layout/list_nodes_with_add_button.xml index 7b6cb5bdb..99c89f152 100644 --- a/app/src/main/res/layout/list_nodes_with_add_button.xml +++ b/app/src/main/res/layout/list_nodes_with_add_button.xml @@ -69,7 +69,7 @@ android:layout_height="wrap_content" android:text="@string/search_results" android:visibility="gone" - style="@style/KeepassDXStyle.TextAppearance.DefaultTextOnPrimary" /> + style="@style/KeepassDXStyle.TextAppearance.Default.TextOnPrimary" /> + style="@style/KeepassDXStyle.TextAppearance.Title.TextOnPrimary" /> diff --git a/app/src/main/res/layout/password.xml b/app/src/main/res/layout/password.xml index 22d03cd29..11c4b941d 100644 --- a/app/src/main/res/layout/password.xml +++ b/app/src/main/res/layout/password.xml @@ -75,7 +75,7 @@ tools:targetApi="lollipop" > + + android:layout_toRightOf="@+id/entry_text" + android:layout_toEndOf="@+id/entry_text" /> \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml index 9e7426b4b..4f61c0a0e 100644 --- a/app/src/main/res/values-v21/styles.xml +++ b/app/src/main/res/values-v21/styles.xml @@ -21,7 +21,7 @@ - \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index d588489f3..8a5e64c05 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -201,13 +201,14 @@ - - - @@ -266,7 +267,7 @@ -