Skip to content

Commit 3c27d58

Browse files
committed
SystemCleaner: Show dates and allow preview for trashed files and screenshots
1 parent 8c62cca commit 3c27d58

File tree

3 files changed

+73
-5
lines changed

3 files changed

+73
-5
lines changed

app/src/main/java/eu/darken/sdmse/systemcleaner/ui/details/filtercontent/FilterContentViewModel.kt

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,31 @@
11
package eu.darken.sdmse.systemcleaner.ui.details.filtercontent
22

3+
import android.os.Bundle
34
import androidx.lifecycle.SavedStateHandle
5+
import androidx.navigation.NavDirections
46
import dagger.hilt.android.lifecycle.HiltViewModel
7+
import eu.darken.sdmse.R
58
import eu.darken.sdmse.common.SingleLiveEvent
69
import eu.darken.sdmse.common.coroutine.DispatcherProvider
710
import eu.darken.sdmse.common.debug.logging.Logging.Priority.INFO
811
import eu.darken.sdmse.common.debug.logging.log
912
import eu.darken.sdmse.common.debug.logging.logTag
13+
import eu.darken.sdmse.common.previews.PreviewFragmentArgs
14+
import eu.darken.sdmse.common.previews.PreviewOptions
1015
import eu.darken.sdmse.common.progress.Progress
1116
import eu.darken.sdmse.common.uix.ViewModel3
1217
import eu.darken.sdmse.main.core.taskmanager.TaskManager
1318
import eu.darken.sdmse.systemcleaner.core.SystemCleaner
1419
import eu.darken.sdmse.systemcleaner.core.filter.filterIdentifier
1520
import eu.darken.sdmse.systemcleaner.core.filter.stock.EmptyDirectoryFilter
21+
import eu.darken.sdmse.systemcleaner.core.filter.stock.ScreenshotsFilter
22+
import eu.darken.sdmse.systemcleaner.core.filter.stock.TrashedFilter
1623
import eu.darken.sdmse.systemcleaner.core.tasks.SystemCleanerProcessingTask
1724
import eu.darken.sdmse.systemcleaner.ui.details.filtercontent.elements.FilterContentElementFileVH
1825
import eu.darken.sdmse.systemcleaner.ui.details.filtercontent.elements.FilterContentElementHeaderVH
19-
import kotlinx.coroutines.flow.*
26+
import kotlinx.coroutines.flow.combine
27+
import kotlinx.coroutines.flow.filterNotNull
28+
import kotlinx.coroutines.flow.map
2029
import javax.inject.Inject
2130

2231
@HiltViewModel
@@ -51,6 +60,8 @@ class FilterContentViewModel @Inject constructor(
5160

5261
val sorted = when (filterContent.identifier) {
5362
EmptyDirectoryFilter::class.filterIdentifier -> filterContent.items.sortedBy { it.path.path }
63+
TrashedFilter::class.filterIdentifier -> filterContent.items.sortedByDescending { it.lookup.modifiedAt }
64+
ScreenshotsFilter::class.filterIdentifier -> filterContent.items.sortedBy { it.lookup.modifiedAt }
5465
else -> filterContent.items.sortedByDescending { it.expectedGain }
5566
}
5667

@@ -59,6 +70,26 @@ class FilterContentViewModel @Inject constructor(
5970
filterContent = filterContent,
6071
match = item,
6172
onItemClick = { delete(setOf(it)) },
73+
onThumbnailClick = when (filterContent.identifier) {
74+
TrashedFilter::class.filterIdentifier, ScreenshotsFilter::class.filterIdentifier -> {
75+
{
76+
object : NavDirections {
77+
override val actionId: Int = R.id.goToPreview
78+
override val arguments: Bundle = PreviewFragmentArgs(
79+
PreviewOptions(item.path)
80+
).toBundle()
81+
82+
}.navigate()
83+
}
84+
}
85+
86+
else -> null
87+
},
88+
showDate = when (filterContent.identifier) {
89+
TrashedFilter::class.filterIdentifier -> true
90+
ScreenshotsFilter::class.filterIdentifier -> true
91+
else -> false
92+
}
6293
)
6394
}.run { elements.addAll(this) }
6495

app/src/main/java/eu/darken/sdmse/systemcleaner/ui/details/filtercontent/elements/FilterContentElementFileVH.kt

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,19 @@ package eu.darken.sdmse.systemcleaner.ui.details.filtercontent.elements
33
import android.text.format.Formatter
44
import android.view.ViewGroup
55
import androidx.core.view.isGone
6+
import androidx.core.view.isVisible
67
import eu.darken.sdmse.R
78
import eu.darken.sdmse.common.coil.loadFilePreview
89
import eu.darken.sdmse.common.files.FileType
910
import eu.darken.sdmse.common.lists.binding
1011
import eu.darken.sdmse.common.lists.selection.SelectableVH
12+
import eu.darken.sdmse.common.toSystemTimezone
1113
import eu.darken.sdmse.databinding.SystemcleanerFiltercontentElementFileBinding
1214
import eu.darken.sdmse.systemcleaner.core.FilterContent
1315
import eu.darken.sdmse.systemcleaner.core.filter.SystemCleanerFilter
1416
import eu.darken.sdmse.systemcleaner.ui.details.filtercontent.FilterContentElementsAdapter
17+
import java.time.format.DateTimeFormatter
18+
import java.time.format.FormatStyle
1519

1620

1721
class FilterContentElementFileVH(parent: ViewGroup) :
@@ -35,10 +39,23 @@ class FilterContentElementFileVH(parent: ViewGroup) :
3539
payloads: List<Any>
3640
) -> Unit = binding { item ->
3741
lastItem = item
38-
icon.loadFilePreview(item.match.lookup)
42+
icon.apply {
43+
loadFilePreview(item.match.lookup)
44+
if (item.onThumbnailClick != null) {
45+
setOnClickListener { item.onThumbnailClick.invoke(item) }
46+
} else {
47+
setOnClickListener(null)
48+
}
49+
}
3950

4051
primary.text = item.match.lookup.userReadablePath.get(context)
4152

53+
secondary.apply {
54+
isVisible = item.showDate
55+
val formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
56+
text = item.match.lookup.modifiedAt.toSystemTimezone().format(formatter)
57+
}
58+
4259
size.apply {
4360
text = Formatter.formatShortFileSize(context, item.match.expectedGain)
4461
isGone = item.match.lookup.fileType != FileType.FILE
@@ -51,6 +68,8 @@ class FilterContentElementFileVH(parent: ViewGroup) :
5168
val filterContent: FilterContent,
5269
val match: SystemCleanerFilter.Match,
5370
val onItemClick: (Item) -> Unit,
71+
val onThumbnailClick: ((Item) -> Unit)? = null,
72+
val showDate: Boolean,
5473
) : FilterContentElementsAdapter.Item {
5574

5675
override val itemSelectionKey: String

app/src/main/res/layout/systemcleaner_filtercontent_element_file.xml

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,31 @@
2626
android:layout_marginStart="16dp"
2727
android:layout_marginTop="8dp"
2828
android:layout_marginEnd="16dp"
29-
android:layout_marginBottom="8dp"
30-
app:layout_constraintBottom_toBottomOf="parent"
29+
app:layout_constraintBottom_toTopOf="@id/secondary"
3130
app:layout_constraintEnd_toEndOf="parent"
3231
app:layout_constraintStart_toEndOf="@id/icon"
32+
app:layout_constraintVertical_chainStyle="packed"
3333
app:layout_constraintTop_toTopOf="parent"
34+
app:layout_goneMarginBottom="8dp"
3435
tools:text=".../some/happy/little/file" />
3536

37+
<com.google.android.material.textview.MaterialTextView
38+
android:id="@+id/secondary"
39+
style="@style/TextAppearance.Material3.LabelSmall"
40+
android:layout_width="0dp"
41+
android:layout_height="wrap_content"
42+
android:layout_marginStart="16dp"
43+
android:layout_marginEnd="16dp"
44+
android:visibility="gone"
45+
tools:visibility="visible"
46+
android:layout_marginBottom="8dp"
47+
android:gravity="end"
48+
app:layout_constraintBottom_toBottomOf="parent"
49+
app:layout_constraintEnd_toEndOf="parent"
50+
app:layout_constraintStart_toEndOf="@id/icon"
51+
app:layout_constraintTop_toBottomOf="@id/primary"
52+
tools:text="00:00 00.00.0000" />
53+
3654
<com.google.android.material.textview.MaterialTextView
3755
android:id="@+id/size"
3856
style="@style/TextAppearance.Material3.LabelSmall"
@@ -44,7 +62,7 @@
4462
android:ellipsize="end"
4563
android:gravity="center"
4664
android:singleLine="true"
47-
app:layout_constraintBottom_toBottomOf="@id/primary"
65+
app:layout_constraintBottom_toBottomOf="@id/secondary"
4866
app:layout_constraintEnd_toStartOf="@id/primary"
4967
app:layout_constraintStart_toStartOf="parent"
5068
app:layout_constraintTop_toBottomOf="@id/icon"

0 commit comments

Comments
 (0)