Add application version to the setting screen.

This commit is contained in:
Benoit Marty 2023-06-30 17:50:13 +02:00 committed by Benoit Marty
parent f325ffad12
commit e81d9c1ac9
9 changed files with 34 additions and 3 deletions

View file

@ -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<PreferencesRootState> {
@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
)

View file

@ -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
)

View file

@ -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
)

View file

@ -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,
)
}
}

View file

@ -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(