Skip to content

Commit 7fb3d78

Browse files
committed
Split UI extensions
1 parent 235fe9a commit 7fb3d78

5 files changed

Lines changed: 54 additions & 44 deletions

File tree

app-android/app/src/main/kotlin/com/algoritmico/passepartout/PassepartoutVpnService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import com.algoritmico.passepartout.injection.lastTunnelPreferences
2020
import com.algoritmico.passepartout.injection.lastTunnelProfile
2121
import com.algoritmico.passepartout.injection.JSON
2222
import com.algoritmico.passepartout.injection.Tags
23-
import com.algoritmico.passepartout.ui.theme.NotificationTransferFormatter
23+
import com.algoritmico.passepartout.ui.models.NotificationTransferFormatter
2424
import io.partout.PartoutVpnServiceRuntime
2525
import io.partout.abi.PartoutException
2626
import io.partout.models.TaggedProfile

app-android/app/src/main/kotlin/com/algoritmico/passepartout/extensions/AppProfileExtensions.kt

Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
// SPDX-FileCopyrightText: 2026 Davide De Rosa
2+
//
3+
// SPDX-License-Identifier: GPL-3.0
4+
15
package com.algoritmico.passepartout.extensions
26

3-
import com.algoritmico.passepartout.models.AppProfileStatus
4-
import com.algoritmico.passepartout.models.ProfileTransfer
57
import io.partout.extensions.encodedPassword
68
import io.partout.extensions.isInteractive
79
import io.partout.models.OpenVPNCredentials
@@ -11,7 +13,6 @@ import io.partout.models.TaggedModuleOpenVPN
1113
import io.partout.models.TaggedProfile
1214
import kotlinx.serialization.json.JsonObject
1315
import kotlinx.serialization.json.jsonPrimitive
14-
import java.util.Locale
1516

1617
val TaggedProfile.fingerprint: String?
1718
get() = (userInfo as? JsonObject)
@@ -67,40 +68,3 @@ fun TaggedProfile.withInteractiveOpenVPNCredentials(
6768
}
6869
)
6970
}
70-
71-
fun AppProfileStatus.statusText(): String {
72-
return when (this) {
73-
AppProfileStatus.disconnected -> "Inactive"
74-
AppProfileStatus.connecting -> "Activating"
75-
AppProfileStatus.connected -> "Active"
76-
AppProfileStatus.disconnecting -> "Deactivating"
77-
}
78-
}
79-
80-
fun ProfileTransfer.transferText(): String {
81-
return "${received.toLong().formatDataUnit()}${sent.toLong().formatDataUnit()}"
82-
}
83-
84-
private fun Long.formatDataUnit(): String {
85-
val value = coerceAtLeast(0L)
86-
if (value == 0L) {
87-
return "0B"
88-
}
89-
if (value < KILOBYTE) {
90-
return "${value}B"
91-
}
92-
return when {
93-
value >= GIGABYTE / 10L -> value.formatDecimalDataUnit(GIGABYTE, "GB")
94-
value >= MEGABYTE / 10L -> value.formatDecimalDataUnit(MEGABYTE, "MB")
95-
else -> "${value / KILOBYTE}kB"
96-
}
97-
}
98-
99-
private fun Long.formatDecimalDataUnit(unitSize: Long, unit: String): String {
100-
val count = toDouble() / unitSize.toDouble()
101-
return String.format(Locale.US, "%.2f%s", count, unit)
102-
}
103-
104-
private const val KILOBYTE = 1024L
105-
private const val MEGABYTE = KILOBYTE * 1024L
106-
private const val GIGABYTE = MEGABYTE * 1024L

app-android/app/src/main/kotlin/com/algoritmico/passepartout/ui/app/ProfileContainerView.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@ import androidx.compose.ui.graphics.Color
4747
import androidx.compose.ui.platform.LocalContext
4848
import androidx.compose.ui.text.font.FontWeight
4949
import androidx.compose.ui.unit.dp
50-
import com.algoritmico.passepartout.extensions.statusText
51-
import com.algoritmico.passepartout.extensions.transferText
5250
import com.algoritmico.passepartout.injection.throwIfCancellation
5351
import com.algoritmico.passepartout.models.AppProfileHeader
5452
import com.algoritmico.passepartout.models.AppProfileStatus
@@ -60,6 +58,8 @@ import com.algoritmico.passepartout.observables.ProfileObservable
6058
import com.algoritmico.passepartout.observables.TunnelObservable
6159
import com.algoritmico.passepartout.ui.alerts.InteractiveOpenVPNView
6260
import com.algoritmico.passepartout.ui.alerts.VpnPermissionDeniedAlert
61+
import com.algoritmico.passepartout.ui.models.statusText
62+
import com.algoritmico.passepartout.ui.models.transferText
6363
import io.partout.models.TaggedProfile
6464
import kotlinx.coroutines.launch
6565

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// SPDX-FileCopyrightText: 2026 Davide De Rosa
2+
//
3+
// SPDX-License-Identifier: GPL-3.0
4+
5+
package com.algoritmico.passepartout.ui.models
6+
7+
import com.algoritmico.passepartout.models.AppProfileStatus
8+
import com.algoritmico.passepartout.models.ProfileTransfer
9+
import java.util.Locale
10+
11+
fun AppProfileStatus.statusText(): String {
12+
return when (this) {
13+
AppProfileStatus.disconnected -> "Inactive"
14+
AppProfileStatus.connecting -> "Activating"
15+
AppProfileStatus.connected -> "Active"
16+
AppProfileStatus.disconnecting -> "Deactivating"
17+
}
18+
}
19+
20+
fun ProfileTransfer.transferText(): String {
21+
return "${received.toLong().formatDataUnit()}${sent.toLong().formatDataUnit()}"
22+
}
23+
24+
private fun Long.formatDataUnit(): String {
25+
val value = coerceAtLeast(0L)
26+
if (value == 0L) {
27+
return "0B"
28+
}
29+
if (value < KILOBYTE) {
30+
return "${value}B"
31+
}
32+
return when {
33+
value >= GIGABYTE / 10L -> value.formatDecimalDataUnit(GIGABYTE, "GB")
34+
value >= MEGABYTE / 10L -> value.formatDecimalDataUnit(MEGABYTE, "MB")
35+
else -> "${value / KILOBYTE}kB"
36+
}
37+
}
38+
39+
private fun Long.formatDecimalDataUnit(unitSize: Long, unit: String): String {
40+
val count = toDouble() / unitSize.toDouble()
41+
return String.format(Locale.US, "%.2f%s", count, unit)
42+
}
43+
44+
private const val KILOBYTE = 1024L
45+
private const val MEGABYTE = KILOBYTE * 1024L
46+
private const val GIGABYTE = MEGABYTE * 1024L

app-android/app/src/main/kotlin/com/algoritmico/passepartout/ui/theme/NotificationTransferFormatter.kt renamed to app-android/app/src/main/kotlin/com/algoritmico/passepartout/ui/models/NotificationTransferFormatter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//
33
// SPDX-License-Identifier: GPL-3.0
44

5-
package com.algoritmico.passepartout.ui.theme
5+
package com.algoritmico.passepartout.ui.models
66

77
import android.os.SystemClock
88
import io.partout.models.DataCount

0 commit comments

Comments
 (0)