summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson90@gmail.com>2023-10-09 08:17:55 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-10-13 11:03:58 +0200
commitd4f8725e7d508af530cd1b3134f20aa73733c96a (patch)
tree4c2ecfc3f5781fb1e410ec56f8a3f0d42705fee5 /android
parentbd2bdbedd280ca84a543472143c959d655651a73 (diff)
downloadmullvadvpn-d4f8725e7d508af530cd1b3134f20aa73733c96a.tar.xz
mullvadvpn-d4f8725e7d508af530cd1b3134f20aa73733c96a.zip
Refactor capitalizeFirstCharOfEachWord to model
Diffstat (limited to 'android')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeviceRemovalDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModel.kt3
-rw-r--r--android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/CommonStringExtensions.kt6
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/model/AccountExpiry.kt17
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/model/DeviceState.kt8
7 files changed, 26 insertions, 17 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeviceRemovalDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeviceRemovalDialog.kt
index e55a549e27..4cbbc0d292 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeviceRemovalDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeviceRemovalDialog.kt
@@ -26,7 +26,6 @@ import androidx.compose.ui.unit.sp
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.component.HtmlText
import net.mullvad.mullvadvpn.compose.component.textResource
-import net.mullvad.mullvadvpn.lib.common.util.capitalizeFirstCharOfEachWord
import net.mullvad.mullvadvpn.lib.theme.Dimens
import net.mullvad.mullvadvpn.model.Device
@@ -60,7 +59,7 @@ fun ShowDeviceRemovalDialog(onDismiss: () -> Unit, onConfirm: () -> Unit, device
val htmlFormattedDialogText =
textResource(
id = R.string.max_devices_confirm_removal_description,
- device.name.capitalizeFirstCharOfEachWord()
+ device.name
)
HtmlText(htmlFormattedString = htmlFormattedDialogText, textSize = 16.sp.value)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt
index 46ee51640b..71f79e55b5 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt
@@ -37,7 +37,6 @@ import net.mullvad.mullvadvpn.compose.component.NavigateBackIconButton
import net.mullvad.mullvadvpn.compose.component.ScaffoldWithMediumTopBar
import net.mullvad.mullvadvpn.compose.dialog.DeviceNameInfoDialog
import net.mullvad.mullvadvpn.constant.IS_PLAY_BUILD
-import net.mullvad.mullvadvpn.lib.common.util.capitalizeFirstCharOfEachWord
import net.mullvad.mullvadvpn.lib.common.util.openAccountPageInBrowser
import net.mullvad.mullvadvpn.lib.theme.AppTheme
import net.mullvad.mullvadvpn.lib.theme.Dimens
@@ -112,7 +111,7 @@ fun AccountScreen(
Row(verticalAlignment = Alignment.CenterVertically) {
InformationView(
- content = uiState.deviceName?.capitalizeFirstCharOfEachWord() ?: "",
+ content = uiState.deviceName ?: "",
whenMissing = MissingPolicy.SHOW_SPINNER
)
IconButton(
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt
index 37669a9851..7e76040ac4 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt
@@ -30,7 +30,6 @@ import net.mullvad.mullvadvpn.compose.component.ScaffoldWithTopBar
import net.mullvad.mullvadvpn.compose.dialog.ShowDeviceRemovalDialog
import net.mullvad.mullvadvpn.compose.state.DeviceListItemUiState
import net.mullvad.mullvadvpn.compose.state.DeviceListUiState
-import net.mullvad.mullvadvpn.lib.common.util.capitalizeFirstCharOfEachWord
import net.mullvad.mullvadvpn.lib.common.util.parseAsDateTime
import net.mullvad.mullvadvpn.lib.theme.AlphaInactive
import net.mullvad.mullvadvpn.lib.theme.AlphaTopBar
@@ -196,7 +195,7 @@ fun DeviceListScreen(
state.deviceUiItems.forEach { deviceUiState ->
ListItem(
text =
- deviceUiState.device.name.capitalizeFirstCharOfEachWord(),
+ deviceUiState.device.name,
subText =
deviceUiState.device.created.parseAsDateTime()?.let {
creationDate ->
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModel.kt
index fe2ddcb66a..6c9b2ea75d 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModel.kt
@@ -18,7 +18,6 @@ import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.compose.state.WelcomeUiState
import net.mullvad.mullvadvpn.constant.ACCOUNT_EXPIRY_POLL_INTERVAL
-import net.mullvad.mullvadvpn.lib.common.util.capitalizeFirstCharOfEachWord
import net.mullvad.mullvadvpn.model.TunnelState
import net.mullvad.mullvadvpn.repository.AccountRepository
import net.mullvad.mullvadvpn.repository.DeviceRepository
@@ -61,7 +60,7 @@ class WelcomeViewModel(
WelcomeUiState(
tunnelState = tunnelState,
accountNumber = deviceState.token(),
- deviceName = deviceState.deviceName()?.capitalizeFirstCharOfEachWord()
+ deviceName = deviceState.deviceName()
)
}
}
diff --git a/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/CommonStringExtensions.kt b/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/CommonStringExtensions.kt
index f46664e929..06a2de9148 100644
--- a/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/CommonStringExtensions.kt
+++ b/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/CommonStringExtensions.kt
@@ -7,12 +7,6 @@ private const val EXPIRY_FORMAT = "YYYY-MM-dd HH:mm:ss z"
private const val BIG_DOT_CHAR = "●"
private const val SPACE_CHAR = ' '
-fun String.capitalizeFirstCharOfEachWord(): String {
- return split(" ")
- .joinToString(" ") { word -> word.replaceFirstChar { firstChar -> firstChar.uppercase() } }
- .trimEnd()
-}
-
fun String.parseAsDateTime(): DateTime? {
return try {
DateTime.parse(this, DateTimeFormat.forPattern(EXPIRY_FORMAT))
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/model/AccountExpiry.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/model/AccountExpiry.kt
index a91ce46148..f5738ec21d 100644
--- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/model/AccountExpiry.kt
+++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/model/AccountExpiry.kt
@@ -1,15 +1,28 @@
package net.mullvad.mullvadvpn.model
import android.os.Parcelable
+import kotlin.time.Duration.Companion.milliseconds
+import kotlin.time.DurationUnit
import kotlinx.parcelize.Parcelize
import org.joda.time.DateTime
sealed class AccountExpiry : Parcelable {
- @Parcelize data class Available(val expiryDateTime: DateTime) : AccountExpiry()
+ @Parcelize
+ data class Available(val expiryDateTime: DateTime) : AccountExpiry() {
+ override fun daysLeft(): Int =
+ (expiryDateTime.toInstant().millis - DateTime.now().toInstant().millis)
+ .milliseconds
+ .toInt(DurationUnit.DAYS)
+ }
- @Parcelize object Missing : AccountExpiry()
+ @Parcelize
+ data object Missing : AccountExpiry()
fun date(): DateTime? {
return (this as? Available)?.expiryDateTime
}
+
+ open fun daysLeft(): Int? {
+ return (this as? Available)?.daysLeft()
+ }
}
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/model/DeviceState.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/model/DeviceState.kt
index 440d03de55..2af9b01362 100644
--- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/model/DeviceState.kt
+++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/model/DeviceState.kt
@@ -19,10 +19,16 @@ sealed class DeviceState : Parcelable {
}
fun deviceName(): String? {
- return (this as? LoggedIn)?.accountAndDevice?.device?.name
+ return (this as? LoggedIn)?.accountAndDevice?.device?.name?.capitalizeFirstCharOfEachWord()
}
fun token(): String? {
return (this as? LoggedIn)?.accountAndDevice?.account_token
}
}
+
+private fun String.capitalizeFirstCharOfEachWord(): String {
+ return split(" ")
+ .joinToString(" ") { word -> word.replaceFirstChar { firstChar -> firstChar.uppercase() } }
+ .trimEnd()
+}