From 94577d9848b0e1bac629ead46e3a52852854487d Mon Sep 17 00:00:00 2001 From: darken Date: Sun, 19 Jan 2025 14:23:38 +0100 Subject: [PATCH] Improve CorpseFinder details screen * Highlight hints with different colors to draw more attention * Rearrange layout * Add little icon that indicates if the corpse is a file or a folder --- .../corpse/elements/CorpseElementHeaderVH.kt | 30 +++++++++-- .../ui/list/CorpseFinderListRowVH.kt | 27 +++++++--- .../corpsefinder_corpse_element_header.xml | 10 ++++ .../res/layout/corpsefinder_list_item.xml | 54 +++++++++++-------- 4 files changed, 88 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/eu/darken/sdmse/corpsefinder/ui/details/corpse/elements/CorpseElementHeaderVH.kt b/app/src/main/java/eu/darken/sdmse/corpsefinder/ui/details/corpse/elements/CorpseElementHeaderVH.kt index 9d5b1bbe3..83c609efc 100644 --- a/app/src/main/java/eu/darken/sdmse/corpsefinder/ui/details/corpse/elements/CorpseElementHeaderVH.kt +++ b/app/src/main/java/eu/darken/sdmse/corpsefinder/ui/details/corpse/elements/CorpseElementHeaderVH.kt @@ -4,6 +4,7 @@ import android.text.format.Formatter import android.view.ViewGroup import androidx.core.view.isGone import eu.darken.sdmse.R +import eu.darken.sdmse.common.files.FileType import eu.darken.sdmse.common.lists.binding import eu.darken.sdmse.common.lists.selection.SelectableItem import eu.darken.sdmse.corpsefinder.core.Corpse @@ -30,7 +31,16 @@ class CorpseElementHeaderVH(parent: ViewGroup) : pathValue.text = corpse.lookup.userReadablePath.get(context) typeIcon.setImageResource(corpse.filterType.iconRes) typeValue.text = getString(corpse.filterType.labelRes) + + sizeIcon.setImageResource( + when { + corpse.lookup.fileType == FileType.DIRECTORY -> R.drawable.ic_folder + corpse.lookup.fileType == FileType.FILE -> R.drawable.ic_file + else -> R.drawable.file_question + } + ) sizeVaule.text = Formatter.formatFileSize(context, corpse.size) + ownersValue.text = if (corpse.ownerInfo.owners.isNotEmpty()) { corpse.ownerInfo.owners.joinToString("\n") { it.pkgId.name } } else { @@ -39,10 +49,22 @@ class CorpseElementHeaderVH(parent: ViewGroup) : hintsLabel.isGone = corpse.riskLevel == RiskLevel.NORMAL hintsValue.isGone = corpse.riskLevel == RiskLevel.NORMAL - hintsValue.text = when (corpse.riskLevel) { - RiskLevel.NORMAL -> "" - RiskLevel.KEEPER -> getString(R.string.corpsefinder_corpse_hint_keeper) - RiskLevel.COMMON -> getString(R.string.corpsefinder_corpse_hint_common) + + when (corpse.riskLevel) { + RiskLevel.NORMAL -> hintsValue.apply { + text = "" + setTextColor(getColorForAttr(com.google.android.material.R.attr.colorPrimary)) + } + + RiskLevel.KEEPER -> hintsValue.apply { + text = getString(R.string.corpsefinder_corpse_hint_keeper) + setTextColor(getColorForAttr(com.google.android.material.R.attr.colorSecondary)) + } + + RiskLevel.COMMON -> hintsValue.apply { + text = getString(R.string.corpsefinder_corpse_hint_common) + setTextColor(getColorForAttr(com.google.android.material.R.attr.colorTertiary)) + } } diff --git a/app/src/main/java/eu/darken/sdmse/corpsefinder/ui/list/CorpseFinderListRowVH.kt b/app/src/main/java/eu/darken/sdmse/corpsefinder/ui/list/CorpseFinderListRowVH.kt index 3f50e3a8c..28cf64910 100644 --- a/app/src/main/java/eu/darken/sdmse/corpsefinder/ui/list/CorpseFinderListRowVH.kt +++ b/app/src/main/java/eu/darken/sdmse/corpsefinder/ui/list/CorpseFinderListRowVH.kt @@ -4,6 +4,7 @@ import android.text.format.Formatter import android.view.ViewGroup import androidx.core.view.isVisible import eu.darken.sdmse.R +import eu.darken.sdmse.common.files.FileType import eu.darken.sdmse.common.lists.binding import eu.darken.sdmse.common.lists.selection.SelectableVH import eu.darken.sdmse.corpsefinder.core.Corpse @@ -41,22 +42,32 @@ class CorpseFinderListRowVH(parent: ViewGroup) : secondary.text = corpse.lookup.userReadablePath.get(context).removeSuffix(primary.text) when (corpse.riskLevel) { - RiskLevel.NORMAL -> { - tertiary.isVisible = false + RiskLevel.NORMAL -> tertiary.apply { + isVisible = false + setTextColor(getColorForAttr(com.google.android.material.R.attr.colorPrimary)) } - RiskLevel.KEEPER -> { - tertiary.text = getString(R.string.corpsefinder_corpse_hint_keeper) - tertiary.isVisible = true + RiskLevel.KEEPER -> tertiary.apply { + text = getString(R.string.corpsefinder_corpse_hint_keeper) + isVisible = true + setTextColor(getColorForAttr(com.google.android.material.R.attr.colorSecondary)) } - RiskLevel.COMMON -> { - tertiary.text = getString(R.string.corpsefinder_corpse_hint_common) - tertiary.isVisible = true + RiskLevel.COMMON -> tertiary.apply { + text = getString(R.string.corpsefinder_corpse_hint_common) + isVisible = true + setTextColor(getColorForAttr(com.google.android.material.R.attr.colorTertiary)) } } areaInfo.text = getString(corpse.filterType.labelRes) + sizeIcon.setImageResource( + when { + corpse.lookup.fileType == FileType.DIRECTORY -> R.drawable.ic_folder + corpse.lookup.fileType == FileType.FILE -> R.drawable.ic_file + else -> R.drawable.file_question + } + ) size.text = StringBuilder().apply { if (corpse.content.isNotEmpty()) { append(getQuantityString(eu.darken.sdmse.common.R.plurals.result_x_items, corpse.content.size)) diff --git a/app/src/main/res/layout/corpsefinder_corpse_element_header.xml b/app/src/main/res/layout/corpsefinder_corpse_element_header.xml index 1fd0244a4..4b9113e58 100644 --- a/app/src/main/res/layout/corpsefinder_corpse_element_header.xml +++ b/app/src/main/res/layout/corpsefinder_corpse_element_header.xml @@ -68,6 +68,16 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/path_value" /> + + @@ -43,36 +43,31 @@ app:layout_constraintTop_toBottomOf="@id/primary" tools:text="/storage/emulated/0/Android/data/eu.darken.sdmse" /> - - + + + +