From 5fc2de68376ecb1d53b08e523798ec830eecbaca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Marti=CC=81n?= Date: Fri, 3 Sep 2021 12:12:15 +0200 Subject: [PATCH] Added IntEnum support for UserSettings --- CHANGELOG.md | 8 +++ user-settings/build.gradle.kts | 2 +- user-settings/data/build.gradle.kts | 2 +- .../data/extension/UserSettingsMapper.kt | 31 +++++---- user-settings/domain/build.gradle.kts | 2 +- .../domain/entity/UserSettings.kt | 69 +++++++++++++++++-- .../domain/usecase/GetSettingsTest.kt | 10 +-- .../usecase/PerformUpdateLoginPasswordTest.kt | 10 +-- .../usecase/PerformUpdateRecoveryEmailTest.kt | 10 +-- user-settings/presentation/build.gradle.kts | 2 +- .../PasswordManagementViewModelTest.kt | 10 +-- .../UpdateRecoveryEmailViewModelTest.kt | 10 +-- 12 files changed, 116 insertions(+), 50 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 591a84d11..de1d7d3ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## User Settings [1.15.1] + +Sep 20, 2021 + +### New Features + +- Added IntEnum support for UserSettings. + ## Test Android Instrumented [1.15.1] Sep 12, 2021 diff --git a/user-settings/build.gradle.kts b/user-settings/build.gradle.kts index cfc917fe1..bda308f83 100644 --- a/user-settings/build.gradle.kts +++ b/user-settings/build.gradle.kts @@ -23,7 +23,7 @@ plugins { kotlin("android") } -libVersion = Version(1, 15, 0) +libVersion = Version(1, 15, 1) android() diff --git a/user-settings/data/build.gradle.kts b/user-settings/data/build.gradle.kts index c7c235737..03fa3352a 100644 --- a/user-settings/data/build.gradle.kts +++ b/user-settings/data/build.gradle.kts @@ -24,7 +24,7 @@ plugins { kotlin("plugin.serialization") } -libVersion = Version(1, 15, 0) +libVersion = Version(1, 15, 1) android() diff --git a/user-settings/data/src/main/kotlin/me/proton/core/usersettings/data/extension/UserSettingsMapper.kt b/user-settings/data/src/main/kotlin/me/proton/core/usersettings/data/extension/UserSettingsMapper.kt index 65f96b22f..49aac83f5 100644 --- a/user-settings/data/src/main/kotlin/me/proton/core/usersettings/data/extension/UserSettingsMapper.kt +++ b/user-settings/data/src/main/kotlin/me/proton/core/usersettings/data/extension/UserSettingsMapper.kt @@ -37,6 +37,7 @@ import me.proton.core.usersettings.domain.entity.RecoverySetting import me.proton.core.usersettings.domain.entity.TwoFASetting import me.proton.core.usersettings.domain.entity.U2FKeySetting import me.proton.core.usersettings.domain.entity.UserSettings +import me.proton.core.usersettings.domain.entity.UserSettings.* import me.proton.core.util.kotlin.toBoolean import me.proton.core.util.kotlin.toInt @@ -50,14 +51,14 @@ internal fun UserSettingsResponse.fromResponse(userId: UserId) = UserSettings( twoFA = twoFA?.fromResponse(), news = news, locale = locale, - logAuth = logAuth, + logAuth = LogAuth.enumOf(logAuth), invoiceText = invoiceText, - density = density, + density = Density.enumOf(density), theme = theme, themeType = themeType, - weekStart = weekStart, - dateFormat = dateFormat, - timeFormat = timeFormat, + weekStart = WeekStart.enumOf(weekStart), + dateFormat = DateFormat.enumOf(dateFormat), + timeFormat = TimeFormat.enumOf(timeFormat), welcome = welcome.toBoolean(), earlyAccess = earlyAccess.toBoolean(), flags = flags?.fromResponse() @@ -83,14 +84,14 @@ internal fun UserSettingsEntity.fromEntity() = UserSettings( twoFA = twoFA?.fromEntity(), news = news, locale = locale, - logAuth = logAuth, + logAuth = LogAuth.enumOf(logAuth), invoiceText = invoiceText, - density = density, + density = Density.enumOf(density), theme = theme, themeType = themeType, - weekStart = weekStart, - dateFormat = dateFormat, - timeFormat = timeFormat, + weekStart = WeekStart.enumOf(weekStart), + dateFormat = DateFormat.enumOf(dateFormat), + timeFormat = TimeFormat.enumOf(timeFormat), welcome = welcome, earlyAccess = earlyAccess, flags = flags?.fromEntity() @@ -104,14 +105,14 @@ internal fun UserSettings.toEntity() = UserSettingsEntity( twoFA = twoFA?.toEntity(), news = news, locale = locale, - logAuth = logAuth, + logAuth = logAuth?.value, invoiceText = invoiceText, - density = density, + density = density?.value, theme = theme, themeType = themeType, - weekStart = weekStart, - dateFormat = dateFormat, - timeFormat = timeFormat, + weekStart = weekStart?.value, + dateFormat = dateFormat?.value, + timeFormat = timeFormat?.value, welcome = welcome, earlyAccess = earlyAccess, flags = flags?.toEntity() diff --git a/user-settings/domain/build.gradle.kts b/user-settings/domain/build.gradle.kts index f259ae8ff..3fc8d23ed 100644 --- a/user-settings/domain/build.gradle.kts +++ b/user-settings/domain/build.gradle.kts @@ -23,7 +23,7 @@ plugins { kotlin("jvm") } -libVersion = Version(1, 15, 0) +libVersion = Version(1, 15, 1) dependencies { diff --git a/user-settings/domain/src/main/kotlin/me/proton/core/usersettings/domain/entity/UserSettings.kt b/user-settings/domain/src/main/kotlin/me/proton/core/usersettings/domain/entity/UserSettings.kt index f0119e340..f06be9fb9 100644 --- a/user-settings/domain/src/main/kotlin/me/proton/core/usersettings/domain/entity/UserSettings.kt +++ b/user-settings/domain/src/main/kotlin/me/proton/core/usersettings/domain/entity/UserSettings.kt @@ -19,6 +19,7 @@ package me.proton.core.usersettings.domain.entity import me.proton.core.domain.entity.UserId +import me.proton.core.domain.type.IntEnum data class UserSettings( val userId: UserId, @@ -28,18 +29,74 @@ data class UserSettings( val twoFA: TwoFASetting?, val news: Int?, val locale: String?, - val logAuth: Int?, + val logAuth: IntEnum?, val invoiceText: String?, - val density: Int?, + val density: IntEnum?, val theme: String?, val themeType: Int?, - val weekStart: Int?, - val dateFormat: Int?, - val timeFormat: Int?, + val weekStart: IntEnum?, + val dateFormat: IntEnum?, + val timeFormat: IntEnum?, val welcome: Boolean?, val earlyAccess: Boolean?, val flags: Flags? -) +) { + enum class LogAuth(val value: Int) { + Disabled(0), + Basic(1), + Advanced(2); + + companion object { + val map = values().associateBy { it.value } + fun enumOf(value: Int?) = value?.let { IntEnum(it, map[it]) } + } + } + + enum class Density(val value: Int) { + Comfortable(0), + Compact(1); + + companion object { + val map = values().associateBy { it.value } + fun enumOf(value: Int?) = value?.let { IntEnum(it, map[it]) } + } + } + + enum class WeekStart(val value: Int) { + Default(0), + Monday(1), + Saturday(6), + Sunday(7); + + companion object { + val map = values().associateBy { it.value } + fun enumOf(value: Int?) = value?.let { IntEnum(it, map[it]) } + } + } + + enum class DateFormat(val value: Int) { + Default(0), + DayMonthYear(1), + MonthDayYear(2), + YearMonthDay(3); + + companion object { + val map = values().associateBy { it.value } + fun enumOf(value: Int?) = value?.let { IntEnum(it, map[it]) } + } + } + + enum class TimeFormat(val value: Int) { + Default(0), + TwentyFourHours(1), + TwelveHours(2); + + companion object { + val map = values().associateBy { it.value } + fun enumOf(value: Int?) = value?.let { IntEnum(it, map[it]) } + } + } +} data class RecoverySetting( val value: String?, diff --git a/user-settings/domain/src/test/kotlin/me/proton/core/usersettings/domain/usecase/GetSettingsTest.kt b/user-settings/domain/src/test/kotlin/me/proton/core/usersettings/domain/usecase/GetSettingsTest.kt index 08234efe7..d26d62878 100644 --- a/user-settings/domain/src/test/kotlin/me/proton/core/usersettings/domain/usecase/GetSettingsTest.kt +++ b/user-settings/domain/src/test/kotlin/me/proton/core/usersettings/domain/usecase/GetSettingsTest.kt @@ -50,13 +50,13 @@ class GetSettingsTest { password = PasswordSetting(mode = 1, expirationTime = null), news = 0, locale = "en", - logAuth = 1, - density = 1, + logAuth = UserSettings.LogAuth.enumOf(1), + density = UserSettings.Density.enumOf(1), invoiceText = "", - dateFormat = 1, - timeFormat = 2, + dateFormat = UserSettings.DateFormat.enumOf(1), + timeFormat = UserSettings.TimeFormat.enumOf(2), themeType = 1, - weekStart = 7, + weekStart = UserSettings.WeekStart.enumOf(7), welcome = true, earlyAccess = true, theme = "test-theme", diff --git a/user-settings/domain/src/test/kotlin/me/proton/core/usersettings/domain/usecase/PerformUpdateLoginPasswordTest.kt b/user-settings/domain/src/test/kotlin/me/proton/core/usersettings/domain/usecase/PerformUpdateLoginPasswordTest.kt index 3ec7e037b..fb7a931aa 100644 --- a/user-settings/domain/src/test/kotlin/me/proton/core/usersettings/domain/usecase/PerformUpdateLoginPasswordTest.kt +++ b/user-settings/domain/src/test/kotlin/me/proton/core/usersettings/domain/usecase/PerformUpdateLoginPasswordTest.kt @@ -104,13 +104,13 @@ class PerformUpdateLoginPasswordTest { password = PasswordSetting(mode = 1, expirationTime = null), news = 0, locale = "en", - logAuth = 1, - density = 1, + logAuth = UserSettings.LogAuth.enumOf(1), + density = UserSettings.Density.enumOf(1), invoiceText = "", - dateFormat = 1, - timeFormat = 2, + dateFormat = UserSettings.DateFormat.enumOf(1), + timeFormat = UserSettings.TimeFormat.enumOf(2), themeType = 1, - weekStart = 7, + weekStart = UserSettings.WeekStart.enumOf(7), welcome = true, earlyAccess = true, theme = "test-theme", diff --git a/user-settings/domain/src/test/kotlin/me/proton/core/usersettings/domain/usecase/PerformUpdateRecoveryEmailTest.kt b/user-settings/domain/src/test/kotlin/me/proton/core/usersettings/domain/usecase/PerformUpdateRecoveryEmailTest.kt index 92fb8e40b..4fc485a31 100644 --- a/user-settings/domain/src/test/kotlin/me/proton/core/usersettings/domain/usecase/PerformUpdateRecoveryEmailTest.kt +++ b/user-settings/domain/src/test/kotlin/me/proton/core/usersettings/domain/usecase/PerformUpdateRecoveryEmailTest.kt @@ -69,13 +69,13 @@ class PerformUpdateRecoveryEmailTest { password = PasswordSetting(mode = 1, expirationTime = null), news = 0, locale = "en", - logAuth = 1, - density = 1, + logAuth = UserSettings.LogAuth.enumOf(1), + density = UserSettings.Density.enumOf(1), invoiceText = "", - dateFormat = 1, - timeFormat = 2, + dateFormat = UserSettings.DateFormat.enumOf(1), + timeFormat = UserSettings.TimeFormat.enumOf(2), themeType = 1, - weekStart = 7, + weekStart = UserSettings.WeekStart.enumOf(7), welcome = true, earlyAccess = true, theme = "test-theme", diff --git a/user-settings/presentation/build.gradle.kts b/user-settings/presentation/build.gradle.kts index 41e0347ac..75b873be6 100644 --- a/user-settings/presentation/build.gradle.kts +++ b/user-settings/presentation/build.gradle.kts @@ -27,7 +27,7 @@ plugins { id("dagger.hilt.android.plugin") } -libVersion = Version(1, 15, 0) +libVersion = Version(1, 15, 1) android(useDataBinding = true) diff --git a/user-settings/presentation/src/test/kotlin/me/proton/core/usersettings/presentation/viewmodel/PasswordManagementViewModelTest.kt b/user-settings/presentation/src/test/kotlin/me/proton/core/usersettings/presentation/viewmodel/PasswordManagementViewModelTest.kt index cb727ee2a..83fa632d2 100644 --- a/user-settings/presentation/src/test/kotlin/me/proton/core/usersettings/presentation/viewmodel/PasswordManagementViewModelTest.kt +++ b/user-settings/presentation/src/test/kotlin/me/proton/core/usersettings/presentation/viewmodel/PasswordManagementViewModelTest.kt @@ -67,13 +67,13 @@ class PasswordManagementViewModelTest : ArchTest, CoroutinesTest { password = PasswordSetting(mode = 1, expirationTime = null), news = 0, locale = "en", - logAuth = 1, - density = 1, + logAuth = UserSettings.LogAuth.enumOf(1), + density = UserSettings.Density.enumOf(1), invoiceText = "", - dateFormat = 1, - timeFormat = 2, + dateFormat = UserSettings.DateFormat.enumOf(1), + timeFormat = UserSettings.TimeFormat.enumOf(2), themeType = 1, - weekStart = 7, + weekStart = UserSettings.WeekStart.enumOf(7), welcome = true, earlyAccess = true, theme = "test-theme", diff --git a/user-settings/presentation/src/test/kotlin/me/proton/core/usersettings/presentation/viewmodel/UpdateRecoveryEmailViewModelTest.kt b/user-settings/presentation/src/test/kotlin/me/proton/core/usersettings/presentation/viewmodel/UpdateRecoveryEmailViewModelTest.kt index be98a0e60..2d90d2fc2 100644 --- a/user-settings/presentation/src/test/kotlin/me/proton/core/usersettings/presentation/viewmodel/UpdateRecoveryEmailViewModelTest.kt +++ b/user-settings/presentation/src/test/kotlin/me/proton/core/usersettings/presentation/viewmodel/UpdateRecoveryEmailViewModelTest.kt @@ -65,13 +65,13 @@ class UpdateRecoveryEmailViewModelTest : ArchTest, CoroutinesTest { password = PasswordSetting(mode = 1, expirationTime = null), news = 0, locale = "en", - logAuth = 1, - density = 1, + logAuth = UserSettings.LogAuth.enumOf(1), + density = UserSettings.Density.enumOf(1), invoiceText = "", - dateFormat = 1, - timeFormat = 2, + dateFormat = UserSettings.DateFormat.enumOf(1), + timeFormat = UserSettings.TimeFormat.enumOf(2), themeType = 1, - weekStart = 7, + weekStart = UserSettings.WeekStart.enumOf(7), welcome = true, earlyAccess = true, theme = "test-theme",