Skip to content

Commit 14a5fae

Browse files
SamiPr0claude
andcommitted
Show the installed version in the app
The app gave no way to tell which release is installed, so you could not tell whether an update went through. "Version x.y.z" now shows at the bottom of the sign-in screen and in the account dialog on Home. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 1d702c9 commit 14a5fae

6 files changed

Lines changed: 93 additions & 4 deletions

File tree

‎app/src/main/java/com/github/se/pooltrack/ui/account/AccountButton.kt‎

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.github.se.pooltrack.ui.account
22

3+
import androidx.compose.foundation.layout.Arrangement
4+
import androidx.compose.foundation.layout.Column
35
import androidx.compose.foundation.layout.RowScope
46
import androidx.compose.material.icons.Icons
57
import androidx.compose.material.icons.filled.Person
@@ -17,6 +19,7 @@ import androidx.compose.runtime.setValue
1719
import androidx.compose.ui.Modifier
1820
import androidx.compose.ui.platform.LocalContext
1921
import androidx.compose.ui.platform.testTag
22+
import androidx.compose.ui.unit.dp
2023
import androidx.lifecycle.viewmodel.compose.viewModel
2124

2225
object AccountButtonTestTags {
@@ -59,10 +62,13 @@ fun RowScope.AccountButton(onError: (String) -> Unit, viewModel: AccountViewMode
5962
modifier = Modifier.testTag(AccountButtonTestTags.SIGN_OUT_DIALOG),
6063
title = { Text("Signed in") },
6164
text = {
62-
Text(
63-
"Signed in as ${user.displayName ?: user.email ?: "your Google account"}. " +
64-
"Subscriptions and entries are backed up to the cloud."
65-
)
65+
Column(verticalArrangement = Arrangement.spacedBy(16.dp)) {
66+
Text(
67+
"Signed in as ${user.displayName ?: user.email ?: "your Google account"}. " +
68+
"Subscriptions and entries are backed up to the cloud."
69+
)
70+
AppVersionText()
71+
}
6672
},
6773
confirmButton = {
6874
TextButton(
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.github.se.pooltrack.ui.account
2+
3+
import androidx.compose.material3.MaterialTheme
4+
import androidx.compose.material3.Text
5+
import androidx.compose.runtime.Composable
6+
import androidx.compose.ui.Modifier
7+
import androidx.compose.ui.platform.testTag
8+
import com.github.se.pooltrack.BuildConfig
9+
10+
object AppVersionTextTestTags {
11+
const val VERSION = "AppVersionText"
12+
}
13+
14+
/**
15+
* The installed app's version, e.g. "Version 1.2.0", so the user can tell which release they run
16+
* and whether an update went through.
17+
*/
18+
@Composable
19+
fun AppVersionText(modifier: Modifier = Modifier, version: String = BuildConfig.VERSION_NAME) {
20+
Text(
21+
text = "Version $version",
22+
style = MaterialTheme.typography.labelMedium,
23+
color = MaterialTheme.colorScheme.onSurfaceVariant,
24+
modifier = modifier.testTag(AppVersionTextTestTags.VERSION),
25+
)
26+
}

‎app/src/main/java/com/github/se/pooltrack/ui/account/SignInScreen.kt‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ fun SignInScreen(viewModel: AccountViewModel = viewModel()) {
7575
) {
7676
Text("Sign in with Google")
7777
}
78+
AppVersionText(modifier = Modifier.padding(top = 32.dp))
7879
}
7980
}
8081
}

‎app/src/test/java/com/github/se/pooltrack/ui/account/AccountButtonTest.kt‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ package com.github.se.pooltrack.ui.account
22

33
import androidx.compose.foundation.layout.Row
44
import androidx.compose.ui.test.assertIsDisplayed
5+
import androidx.compose.ui.test.assertTextEquals
56
import androidx.compose.ui.test.hasContentDescription
67
import androidx.compose.ui.test.junit4.createComposeRule
78
import androidx.compose.ui.test.onNodeWithContentDescription
89
import androidx.compose.ui.test.onNodeWithTag
910
import androidx.compose.ui.test.onNodeWithText
1011
import androidx.compose.ui.test.performClick
12+
import com.github.se.pooltrack.BuildConfig
1113
import com.github.se.pooltrack.model.auth.AuthUser
1214
import com.github.se.pooltrack.utils.FakeAuthRepository
1315
import com.github.se.pooltrack.utils.FakeAuthRepository.Companion.ANONYMOUS_USER
@@ -74,6 +76,17 @@ class AccountButtonTest {
7476
composeRule.onNodeWithText("Close").assertIsDisplayed()
7577
}
7678

79+
@Test
80+
fun accountButton_dialogShowsTheInstalledVersion() {
81+
show(FakeAuthRepository(initialUser = GOOGLE_USER))
82+
83+
composeRule.onNodeWithTag(AccountButtonTestTags.BUTTON).performClick()
84+
85+
composeRule
86+
.onNodeWithTag(AppVersionTextTestTags.VERSION)
87+
.assertTextEquals("Version ${BuildConfig.VERSION_NAME}")
88+
}
89+
7790
@Test
7891
fun accountButton_dialogFallsBackToEmail_whenThereIsNoDisplayName() {
7992
val user = AuthUser("uid", displayName = null, email = "me@pool.io", isAnonymous = false)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.github.se.pooltrack.ui.account
2+
3+
import androidx.compose.ui.test.assertTextEquals
4+
import androidx.compose.ui.test.junit4.createComposeRule
5+
import androidx.compose.ui.test.onNodeWithTag
6+
import com.github.se.pooltrack.BuildConfig
7+
import org.junit.Rule
8+
import org.junit.Test
9+
import org.junit.runner.RunWith
10+
import org.robolectric.RobolectricTestRunner
11+
12+
@RunWith(RobolectricTestRunner::class)
13+
class AppVersionTextTest {
14+
15+
@get:Rule val composeRule = createComposeRule()
16+
17+
@Test
18+
fun appVersionText_showsTheGivenVersion() {
19+
composeRule.setContent { AppVersionText(version = "9.8.7") }
20+
21+
composeRule.onNodeWithTag(AppVersionTextTestTags.VERSION).assertTextEquals("Version 9.8.7")
22+
}
23+
24+
@Test
25+
fun appVersionText_defaultsToTheBuildVersion() {
26+
composeRule.setContent { AppVersionText() }
27+
28+
composeRule
29+
.onNodeWithTag(AppVersionTextTestTags.VERSION)
30+
.assertTextEquals("Version ${BuildConfig.VERSION_NAME}")
31+
}
32+
}

‎app/src/test/java/com/github/se/pooltrack/ui/account/SignInScreenTest.kt‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.github.se.pooltrack.ui.account
22

33
import androidx.compose.ui.test.assertIsDisplayed
4+
import androidx.compose.ui.test.assertTextEquals
45
import androidx.compose.ui.test.junit4.createComposeRule
56
import androidx.compose.ui.test.onNodeWithTag
67
import androidx.compose.ui.test.onNodeWithText
78
import androidx.compose.ui.test.performClick
9+
import com.github.se.pooltrack.BuildConfig
810
import com.github.se.pooltrack.utils.FakeAuthRepository
911
import com.github.se.pooltrack.utils.FakeAuthRepository.Companion.GOOGLE_USER
1012
import com.github.se.pooltrack.utils.MainDispatcherRule
@@ -39,6 +41,15 @@ class SignInScreenTest {
3941
composeRule.onNodeWithTag(SignInScreenTestTags.SIGN_IN_BUTTON).assertIsDisplayed()
4042
}
4143

44+
@Test
45+
fun signInScreen_showsTheInstalledVersion() {
46+
show(FakeAuthRepository())
47+
48+
composeRule
49+
.onNodeWithTag(AppVersionTextTestTags.VERSION)
50+
.assertTextEquals("Version ${BuildConfig.VERSION_NAME}")
51+
}
52+
4253
@Test
4354
fun signInButton_signsTheUserIn_whenGoogleSignInSucceeds() {
4455
val viewModel = show(FakeAuthRepository())

0 commit comments

Comments
 (0)