From a3e74f8ee5c8d5fdc6f76f57ea57196e14e52c7a Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 29 Aug 2019 13:15:59 +0200 Subject: [PATCH] Fix text size in list --- .../adapters/FileDatabaseHistoryAdapter.kt | 22 +++-- .../kunzisoft/keepass/adapters/NodeAdapter.kt | 89 ++++++++++++------- app/src/main/res/layout/item_file_row.xml | 69 +++++++++----- .../main/res/layout/item_list_nodes_entry.xml | 1 + .../main/res/layout/item_list_nodes_group.xml | 1 + app/src/main/res/values/styles.xml | 1 + 6 files changed, 114 insertions(+), 69 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/adapters/FileDatabaseHistoryAdapter.kt b/app/src/main/java/com/kunzisoft/keepass/adapters/FileDatabaseHistoryAdapter.kt index 3e02abe93..1615c35a8 100644 --- a/app/src/main/java/com/kunzisoft/keepass/adapters/FileDatabaseHistoryAdapter.kt +++ b/app/src/main/java/com/kunzisoft/keepass/adapters/FileDatabaseHistoryAdapter.kt @@ -31,7 +31,6 @@ import android.widget.TextView import android.widget.ViewSwitcher import com.kunzisoft.keepass.R import com.kunzisoft.keepass.app.database.FileDatabaseHistoryEntity -import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.utils.FileDatabaseInfo class FileDatabaseHistoryAdapter(private val context: Context) @@ -53,7 +52,6 @@ class FileDatabaseHistoryAdapter(private val context: Context) private val warningColor: Int init { - val typedValue = TypedValue() val theme = context.theme theme.resolveAttribute(R.attr.colorAccent, typedValue, true) @@ -76,14 +74,15 @@ class FileDatabaseHistoryAdapter(private val context: Context) holder.fileContainer.setOnCreateContextMenuListener(ContextMenuBuilder(fileHistoryEntity)) // Click item to open file if (fileItemOpenListener != null) - holder.fileContainer.setOnClickListener(FileItemClickListener(fileHistoryEntity)) + holder.fileContainer.setOnClickListener { + fileItemOpenListener?.invoke(fileHistoryEntity) + } // File alias holder.fileAlias.text = fileDatabaseInfo.retrieveDatabaseAlias(fileHistoryEntity.databaseAlias) // File path holder.filePath.text = Uri.decode(fileDatabaseInfo.fileUri.toString()) - holder.filePath.textSize = PreferencesUtil.getListTextSize(context) holder.filePreciseInfoContainer.visibility = if (fileDatabaseInfo.found()) { // Modification @@ -118,6 +117,10 @@ class FileDatabaseHistoryAdapter(private val context: Context) holder.fileMainSwitcher.showNext() } + holder.fileDeleteButton.setOnClickListener { + fileSelectClearListener?.invoke(fileHistoryEntity) + } + if (isExpanded) { mPreviousExpandedPosition = position } @@ -126,7 +129,8 @@ class FileDatabaseHistoryAdapter(private val context: Context) mExpandedPosition = if (isExpanded) -1 else position // Notify change - notifyItemChanged(mPreviousExpandedPosition) + if (mPreviousExpandedPosition < itemCount) + notifyItemChanged(mPreviousExpandedPosition) notifyItemChanged(position) } @@ -161,13 +165,6 @@ class FileDatabaseHistoryAdapter(private val context: Context) this.saveAliasListener = listener } - private inner class FileItemClickListener(private val fileDatabaseHistoryEntity: FileDatabaseHistoryEntity) : View.OnClickListener { - - override fun onClick(v: View) { - fileItemOpenListener?.invoke(fileDatabaseHistoryEntity) - } - } - private inner class ContextMenuBuilder(private val fileHistoryEntity: FileDatabaseHistoryEntity) : View.OnCreateContextMenuListener { private val mOnMyActionClickListener = MenuItem.OnMenuItemClickListener { item -> @@ -196,6 +193,7 @@ class FileDatabaseHistoryAdapter(private val context: Context) var fileExpandContainer: ViewGroup = itemView.findViewById(R.id.file_expand_container) var fileModifyButton: ImageView = itemView.findViewById(R.id.file_modify_button) + var fileDeleteButton: ImageView = itemView.findViewById(R.id.file_delete_button) var filePath: TextView = itemView.findViewById(R.id.file_path) var filePreciseInfoContainer: ViewGroup = itemView.findViewById(R.id.file_precise_info_container) var fileModification: TextView = itemView.findViewById(R.id.file_modification) diff --git a/app/src/main/java/com/kunzisoft/keepass/adapters/NodeAdapter.kt b/app/src/main/java/com/kunzisoft/keepass/adapters/NodeAdapter.kt index 581691bd8..dd803c0f9 100644 --- a/app/src/main/java/com/kunzisoft/keepass/adapters/NodeAdapter.kt +++ b/app/src/main/java/com/kunzisoft/keepass/adapters/NodeAdapter.kt @@ -45,10 +45,13 @@ class NodeAdapter private val nodeSortedList: SortedList private val inflater: LayoutInflater = LayoutInflater.from(context) - private var textSize: Float = 0.toFloat() - private var subtextSize: Float = 0.toFloat() - private var infoTextSize: Float = 0.toFloat() - private var iconSize: Float = 0.toFloat() + + private var calculateViewTypeTextSize = Array(2) { true} // number of view type + private var prefTextSize: Float = 0F + private var subtextSize: Float = 0F + private var infoTextSize: Float = 0F + private var numberChildrenTextSize: Float = 0F + private var iconSize: Float = 0F private var listSort: SortNodeEnum = SortNodeEnum.DB private var ascendingSort: Boolean = true private var groupsBeforeSort: Boolean = true @@ -122,19 +125,16 @@ class NodeAdapter } private fun assignPreferences() { - val textSizeDefault = java.lang.Float.parseFloat(context.getString(R.string.list_size_default)) - this.textSize = PreferencesUtil.getListTextSize(context) - this.subtextSize = context.resources.getInteger(R.integer.list_small_size_default) * textSize / textSizeDefault - this.infoTextSize = context.resources.getInteger(R.integer.list_tiny_size_default) * textSize / textSizeDefault - // Retrieve the icon size - val iconDefaultSize = context.resources.getDimension(R.dimen.list_icon_size_default) - this.iconSize = iconDefaultSize * textSize / textSizeDefault + this.prefTextSize = PreferencesUtil.getListTextSize(context) / java.lang.Float.parseFloat(context.getString(R.string.list_size_default)) this.listSort = PreferencesUtil.getListSort(context) this.ascendingSort = PreferencesUtil.getAscendingSort(context) this.groupsBeforeSort = PreferencesUtil.getGroupsBeforeSort(context) this.recycleBinBottomSort = PreferencesUtil.getRecycleBinBottomSort(context) this.showUserNames = PreferencesUtil.showUsernamesListEntries(context) this.showNumberEntries = PreferencesUtil.showNumberEntries(context) + + // Reinit textSize for all view type + calculateViewTypeTextSize.forEachIndexed { index, _ -> calculateViewTypeTextSize[index] = true } } /** @@ -212,16 +212,41 @@ class NodeAdapter return NodeViewHolder(view) } + private fun calculateTextSize(holder: NodeViewHolder, viewType: Int) { + if (calculateViewTypeTextSize[viewType]) { + this.subtextSize = holder.subText.textSize * prefTextSize + this.infoTextSize = holder.text.textSize * prefTextSize + holder.numberChildren?.let { + this.numberChildrenTextSize = it.textSize * prefTextSize + } + this.iconSize = context.resources.getDimension(R.dimen.list_icon_size_default) * prefTextSize + calculateViewTypeTextSize[viewType] = false + } + } + override fun onBindViewHolder(holder: NodeViewHolder, position: Int) { val subNode = nodeSortedList.get(position) + + calculateTextSize(holder, getItemViewType(position)) + // Assign image val iconColor = when (subNode.type) { Type.GROUP -> iconGroupColor Type.ENTRY -> iconEntryColor } - holder.icon.assignDatabaseIcon(mDatabase.drawFactory, subNode.icon, iconColor) + holder.icon.apply { + assignDatabaseIcon(mDatabase.drawFactory, subNode.icon, iconColor) + // Relative size of the icon + layoutParams?.apply { + height = iconSize.toInt() + width = iconSize.toInt() + } + } // Assign text - holder.text.text = subNode.title + holder.text.apply { + text = subNode.title + textSize = infoTextSize + } // Assign click holder.container.setOnClickListener { nodeClickCallback?.onNodeClick(subNode) } // Context menu @@ -230,36 +255,34 @@ class NodeAdapter ContextMenuBuilder(menuInflater, subNode, readOnly, isASearchResult, nodeMenuListener)) } - // Add username - holder.subText.text = "" - holder.subText.visibility = View.GONE - if (subNode.type == Type.ENTRY) { - val entry = subNode as EntryVersioned + // Add subText with username + holder.subText.apply { + text = "" + visibility = View.GONE + if (subNode.type == Type.ENTRY) { + val entry = subNode as EntryVersioned - mDatabase.startManageEntry(entry) + mDatabase.startManageEntry(entry) - holder.text.text = entry.getVisualTitle() + holder.text.text = entry.getVisualTitle() - val username = entry.username - if (showUserNames && username.isNotEmpty()) { - holder.subText.visibility = View.VISIBLE - holder.subText.text = username + val username = entry.username + if (showUserNames && username.isNotEmpty()) { + visibility = View.VISIBLE + text = username + } + + mDatabase.stopManageEntry(entry) } - - mDatabase.stopManageEntry(entry) + textSize = subtextSize } - // Assign image and text size - // Relative size of the icon - holder.icon.layoutParams?.height = iconSize.toInt() - holder.icon.layoutParams?.width = iconSize.toInt() - holder.text.textSize = textSize - holder.subText.textSize = subtextSize + // Add number of entries in groups if (subNode.type == Type.GROUP) { if (showNumberEntries) { holder.numberChildren?.apply { text = (subNode as GroupVersioned).getChildEntries(true).size.toString() - textSize = infoTextSize + textSize = numberChildrenTextSize visibility = View.VISIBLE } } else { diff --git a/app/src/main/res/layout/item_file_row.xml b/app/src/main/res/layout/item_file_row.xml index 15b5e9805..24424e59c 100644 --- a/app/src/main/res/layout/item_file_row.xml +++ b/app/src/main/res/layout/item_file_row.xml @@ -152,37 +152,58 @@ android:textStyle="italic"/> - + app:layout_constraintEnd_toEndOf="parent"> - + + + + + + + app:layout_constraintBottom_toBottomOf="parent" + android:tint="?android:attr/textColorHintInverse"/> diff --git a/app/src/main/res/layout/item_list_nodes_entry.xml b/app/src/main/res/layout/item_list_nodes_entry.xml index 68e237a15..dee99ab43 100644 --- a/app/src/main/res/layout/item_list_nodes_entry.xml +++ b/app/src/main/res/layout/item_list_nodes_entry.xml @@ -44,6 +44,7 @@ android:layout_marginRight="@dimen/image_list_margin" android:layout_marginEnd="@dimen/image_list_margin" android:scaleType="fitXY" + android:src="@drawable/ic_blank_32dp" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> diff --git a/app/src/main/res/layout/item_list_nodes_group.xml b/app/src/main/res/layout/item_list_nodes_group.xml index 06095afb0..18b33abbc 100644 --- a/app/src/main/res/layout/item_list_nodes_group.xml +++ b/app/src/main/res/layout/item_list_nodes_group.xml @@ -54,6 +54,7 @@ android:layout_marginStart="@dimen/image_list_margin" android:layout_marginRight="@dimen/image_list_margin" android:layout_marginEnd="@dimen/image_list_margin" + android:src="@drawable/ic_blank_32dp" android:scaleType="fitXY" android:layout_centerVertical="true" android:layout_toRightOf="@+id/group_arrow" diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index fe7178673..176aac056 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -266,6 +266,7 @@