Skip to content

Commit 1e0b043

Browse files
committed
add app+data size to sort+filter sheet
1 parent d192e22 commit 1e0b043

File tree

3 files changed

+76
-28
lines changed

3 files changed

+76
-28
lines changed

src/main/java/com/machiav3lli/backup/sheets/SortFilterSheet.kt

+56-22
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
*/
1818
package com.machiav3lli.backup.sheets
1919

20+
import android.text.format.Formatter
2021
import androidx.compose.foundation.layout.Arrangement
22+
import androidx.compose.foundation.layout.Column
2123
import androidx.compose.foundation.layout.PaddingValues
2224
import androidx.compose.foundation.layout.Row
2325
import androidx.compose.foundation.layout.fillMaxSize
@@ -44,6 +46,8 @@ import androidx.compose.ui.platform.rememberNestedScrollInteropConnection
4446
import androidx.compose.ui.res.stringResource
4547
import androidx.compose.ui.unit.dp
4648
import com.machiav3lli.backup.BACKUP_FILTER_DEFAULT
49+
import com.machiav3lli.backup.CHIP_SIZE_APP
50+
import com.machiav3lli.backup.CHIP_SIZE_DATA
4751
import com.machiav3lli.backup.MAIN_FILTER_DEFAULT
4852
import com.machiav3lli.backup.OABX
4953
import com.machiav3lli.backup.R
@@ -69,9 +73,11 @@ import com.machiav3lli.backup.ui.compose.item.ElevatedActionButton
6973
import com.machiav3lli.backup.ui.compose.item.ExpandableBlock
7074
import com.machiav3lli.backup.ui.compose.item.RoundButton
7175
import com.machiav3lli.backup.ui.compose.item.SwitchChip
76+
import com.machiav3lli.backup.ui.compose.recycler.InfoChipsBlock
7277
import com.machiav3lli.backup.ui.compose.recycler.MultiSelectableChipGroup
7378
import com.machiav3lli.backup.ui.compose.recycler.SelectableChipGroup
7479
import com.machiav3lli.backup.ui.item.ChipItem
80+
import com.machiav3lli.backup.ui.item.InfoChipItem
7581
import com.machiav3lli.backup.updatedFilterChipItems
7682
import com.machiav3lli.backup.utils.applyFilter
7783
import com.machiav3lli.backup.utils.getStats
@@ -101,28 +107,56 @@ fun SortFilterSheet(onDismiss: () -> Unit) {
101107
containerColor = Color.Transparent,
102108
),
103109
headlineContent = {
104-
Row(
105-
modifier = Modifier
106-
.fillMaxWidth()
107-
.padding(vertical = 8.dp),
108-
horizontalArrangement = Arrangement.spacedBy(4.dp),
109-
verticalAlignment = Alignment.CenterVertically
110-
) {
111-
DoubleVerticalText(
112-
upperText = currentStats().first.toString(),
113-
bottomText = stringResource(id = R.string.stats_apps),
114-
modifier = Modifier.weight(1f)
115-
)
116-
DoubleVerticalText(
117-
upperText = currentStats().second.toString(),
118-
bottomText = stringResource(id = R.string.stats_backups),
119-
modifier = Modifier.weight(1f)
120-
)
121-
DoubleVerticalText(
122-
upperText = currentStats().third.toString(),
123-
bottomText = stringResource(id = R.string.stats_updated),
124-
modifier = Modifier.weight(1f)
125-
)
110+
Column {
111+
Row(
112+
modifier = Modifier
113+
.fillMaxWidth()
114+
.padding(vertical = 8.dp),
115+
horizontalArrangement = Arrangement.spacedBy(4.dp),
116+
verticalAlignment = Alignment.CenterVertically
117+
) {
118+
val stats = currentStats()
119+
DoubleVerticalText(
120+
upperText = stats.nApps.toString(),
121+
bottomText = stringResource(id = R.string.stats_apps),
122+
modifier = Modifier.weight(1f)
123+
)
124+
DoubleVerticalText(
125+
upperText = stats.nBackups.toString(),
126+
bottomText = stringResource(id = R.string.stats_backups),
127+
modifier = Modifier.weight(1f)
128+
)
129+
DoubleVerticalText(
130+
upperText = stats.nUpdated.toString(),
131+
bottomText = stringResource(id = R.string.stats_updated),
132+
modifier = Modifier.weight(1f)
133+
)
134+
}
135+
Row(
136+
modifier = Modifier
137+
.fillMaxWidth()
138+
.padding(vertical = 8.dp),
139+
horizontalArrangement = Arrangement.spacedBy(4.dp),
140+
verticalAlignment = Alignment.CenterVertically
141+
) {
142+
val stats = currentStats()
143+
InfoChipsBlock(list = listOf(
144+
InfoChipItem(
145+
flag = CHIP_SIZE_APP,
146+
text = stringResource(id = R.string.app_size) + " " + Formatter.formatFileSize(
147+
LocalContext.current,
148+
stats.szApps ?: 0
149+
),
150+
),
151+
InfoChipItem(
152+
flag = CHIP_SIZE_DATA,
153+
text = stringResource(id = R.string.data_size) + " " + Formatter.formatFileSize(
154+
LocalContext.current,
155+
stats.szData ?: 0
156+
),
157+
),
158+
))
159+
}
126160
}
127161
},
128162
trailingContent = {

src/main/java/com/machiav3lli/backup/ui/compose/item/MainPackageItem.kt

+2
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ fun Confirmation(
122122
fun DataPartsSelector(
123123
result: MutableIntState,
124124
) {
125+
//TODO hg42 add sizes
126+
125127
batchModes.forEach { (mode, name) ->
126128
DropdownMenuItem(
127129
leadingIcon = {

src/main/java/com/machiav3lli/backup/utils/ItemUtils.kt

+18-6
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,28 @@ import com.machiav3lli.backup.ui.compose.theme.ColorUpdated
4545
import com.machiav3lli.backup.ui.compose.theme.ColorUser
4646
import com.machiav3lli.backup.ui.item.InfoChipItem
4747

48-
fun getStats(appsList: List<Package>): Triple<Int, Int, Int> {
49-
var backupsNumber = 0
50-
var updatedNumber = 0
48+
data class AppStats(
49+
val nApps: Int,
50+
val nBackups: Int,
51+
val nUpdated: Int,
52+
val szApps: Long,
53+
val szData: Long
54+
)
55+
56+
fun getStats(appsList: List<Package>): AppStats { //TODO hg42 we actually want the separate parts, need to find an api
57+
var nBackups = 0
58+
var nUpdated = 0
59+
var szApps = 0L
60+
var szData = 0L
5161
appsList.forEach {
5262
if (it.hasBackups) {
53-
backupsNumber += it.numberOfBackups
54-
if (it.isUpdated) updatedNumber += 1
63+
nBackups += it.numberOfBackups
64+
if (it.isUpdated) nUpdated += 1
5565
}
66+
szApps += it.appBytes
67+
szData += it.dataBytes
5668
}
57-
return Triple(appsList.size, backupsNumber, updatedNumber)
69+
return AppStats(appsList.size, nBackups, nUpdated, szApps, szData)
5870
}
5971

6072
fun PackageManager.getInstalledPackageInfosWithPermissions() =

0 commit comments

Comments
 (0)