From 499a862bfc1044da2b07ec6703f184e225bab1cb Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 30 Jun 2023 17:50:13 +0200 Subject: [PATCH] Add application version to the setting screen. --- .../kotlin/io/element/android/x/di/AppModule.kt | 1 + .../android/features/analytics/test/TestData.kt | 1 + .../impl/root/CreateRoomRootPresenterTests.kt | 1 + .../impl/root/PreferencesRootPresenter.kt | 13 +++++++++++-- .../preferences/impl/root/PreferencesRootState.kt | 1 + .../impl/root/PreferencesRootStateProvider.kt | 1 + .../preferences/impl/root/PreferencesRootView.kt | 15 +++++++++++++++ .../impl/root/PreferencesRootPresenterTest.kt | 3 ++- .../android/libraries/core/meta/BuildMeta.kt | 1 + 9 files changed, 34 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt index 729603c4d7..89ab50d32a 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt @@ -77,6 +77,7 @@ object AppModule { applicationId = BuildConfig.APPLICATION_ID, lowPrivacyLoggingEnabled = false, // TODO EAx Config.LOW_PRIVACY_LOG_ENABLE, versionName = BuildConfig.VERSION_NAME, + versionCode = BuildConfig.VERSION_CODE, gitRevision = "TODO", // BuildConfig.GIT_REVISION, gitRevisionDate = "TODO", // BuildConfig.GIT_REVISION_DATE, gitBranchName = "TODO", // BuildConfig.GIT_BRANCH_NAME, diff --git a/features/analytics/test/src/main/kotlin/io/element/android/features/analytics/test/TestData.kt b/features/analytics/test/src/main/kotlin/io/element/android/features/analytics/test/TestData.kt index b23a4ab3b0..0c3631c476 100644 --- a/features/analytics/test/src/main/kotlin/io/element/android/features/analytics/test/TestData.kt +++ b/features/analytics/test/src/main/kotlin/io/element/android/features/analytics/test/TestData.kt @@ -26,6 +26,7 @@ val A_BUILD_META = BuildMeta( applicationId = "", lowPrivacyLoggingEnabled = false, versionName = "", + versionCode = 0, gitRevision = "", gitRevisionDate = "", gitBranchName = "", diff --git a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt index 359fb5955b..8d0a22e999 100644 --- a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt +++ b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt @@ -192,6 +192,7 @@ private fun aBuildMeta() = applicationName = "An Application", lowPrivacyLoggingEnabled = true, versionName = "", + versionCode = 0, gitRevision = "", gitBranchName = "", gitRevisionDate = "", diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt index 211b7d4c3e..871ff98442 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt @@ -25,13 +25,16 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.res.stringResource import io.element.android.features.logout.api.LogoutPreferencePresenter import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType import io.element.android.libraries.matrix.api.user.CurrentUserProvider import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.verification.SessionVerificationService import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus +import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import javax.inject.Inject @@ -40,7 +43,7 @@ class PreferencesRootPresenter @Inject constructor( private val logoutPresenter: LogoutPreferencePresenter, private val currentUserProvider: CurrentUserProvider, private val sessionVerificationService: SessionVerificationService, - private val buildType: BuildType, + private val buildMeta: BuildMeta, ) : Presenter { @Composable @@ -58,11 +61,17 @@ class PreferencesRootPresenter @Inject constructor( derivedStateOf { sessionVerifiedStatus == SessionVerifiedStatus.NotVerified } } + val version = stringResource( + id = CommonStrings.settings_version_number, + buildMeta.versionName, + buildMeta.versionCode.toString() + ) val logoutState = logoutPresenter.present() - val showDeveloperSettings = buildType != BuildType.RELEASE + val showDeveloperSettings = buildMeta.buildType != BuildType.RELEASE return PreferencesRootState( logoutState = logoutState, myUser = matrixUser.value, + version = version, showCompleteVerification = sessionIsNotVerified, showDeveloperSettings = showDeveloperSettings ) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootState.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootState.kt index c412eadde1..8760550fd0 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootState.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootState.kt @@ -22,6 +22,7 @@ import io.element.android.libraries.matrix.api.user.MatrixUser data class PreferencesRootState( val logoutState: LogoutPreferenceState, val myUser: MatrixUser?, + val version: String, val showCompleteVerification: Boolean, val showDeveloperSettings: Boolean ) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootStateProvider.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootStateProvider.kt index 051800e8cd..4f9626bcbd 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootStateProvider.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootStateProvider.kt @@ -21,6 +21,7 @@ import io.element.android.features.logout.api.aLogoutPreferenceState fun aPreferencesRootState() = PreferencesRootState( logoutState = aLogoutPreferenceState(), myUser = null, + version = "Version 1.1 (1)", showCompleteVerification = true, showDeveloperSettings = true ) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt index 07a4fca15f..fcd874d49a 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt @@ -16,6 +16,8 @@ package io.element.android.features.preferences.impl.root +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.DeveloperMode import androidx.compose.material.icons.outlined.BugReport @@ -25,7 +27,9 @@ import androidx.compose.material.icons.outlined.VerifiedUser import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.unit.dp import io.element.android.features.logout.api.LogoutPreferenceView import io.element.android.features.preferences.impl.user.UserPreferences import io.element.android.libraries.designsystem.components.preferences.PreferenceText @@ -34,8 +38,10 @@ import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.preview.LargeHeightPreview import io.element.android.libraries.designsystem.theme.components.Divider +import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.MatrixUserProvider +import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.ui.strings.CommonStrings @Composable @@ -86,6 +92,15 @@ fun PreferencesRootView( LogoutPreferenceView( state = state.logoutState, ) + Text( + modifier = Modifier + .fillMaxWidth() + .padding(top = 40.dp, bottom = 24.dp), + textAlign = TextAlign.Center, + text = state.version, + style = ElementTheme.typography.fontBodySmRegular, + color = ElementTheme.materialColors.secondary, + ) } } diff --git a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt index 040fda17d1..fa3d7163cf 100644 --- a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt +++ b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt @@ -41,13 +41,14 @@ class PreferencesRootPresenterTest { logoutPresenter, CurrentUserProvider(matrixClient), FakeSessionVerificationService(), - A_BUILD_META.buildType + A_BUILD_META ) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { val initialState = awaitItem() assertThat(initialState.myUser).isNull() + assertThat(initialState.version).isEqualTo("Version " + A_BUILD_META.versionName + " (" + A_BUILD_META.versionCode + ")") val loadedState = awaitItem() assertThat(loadedState.logoutState.logoutAction).isEqualTo(Async.Uninitialized) assertThat(loadedState.myUser).isEqualTo( diff --git a/libraries/core/src/main/kotlin/io/element/android/libraries/core/meta/BuildMeta.kt b/libraries/core/src/main/kotlin/io/element/android/libraries/core/meta/BuildMeta.kt index f816f13a39..aaf54cc0f8 100644 --- a/libraries/core/src/main/kotlin/io/element/android/libraries/core/meta/BuildMeta.kt +++ b/libraries/core/src/main/kotlin/io/element/android/libraries/core/meta/BuildMeta.kt @@ -23,6 +23,7 @@ data class BuildMeta( val applicationId: String, val lowPrivacyLoggingEnabled: Boolean, val versionName: String, + val versionCode: Int, val gitRevision: String, val gitRevisionDate: String, val gitBranchName: String,