Skip to content

Commit 8373f2a

Browse files
committed
feat: polish off in app updates
add hidden check for updates functionality in settings Signed-off-by: Brandon McAnsh <[email protected]>
1 parent 50876b8 commit 8373f2a

File tree

8 files changed

+48
-8
lines changed

8 files changed

+48
-8
lines changed

apps/flipcash/core/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,4 +437,5 @@
437437

438438
<string name="title_updateRequired">Update Required</string>
439439
<string name="subtitle_updateRequired">The latest features of Flipcash require you to update to the latest version</string>
440+
<string name="action_updateNow">Update Now</string>
440441
</resources>

apps/flipcash/features/appupdates/src/main/kotlin/com/flipcash/app/updates/UpdateRequiredView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ fun UpdateRequiredBlockingView(
7070
appUpdater.startUpdate()
7171
}
7272
},
73-
text = stringResource(id = R.string.action_unlockCode),
73+
text = stringResource(id = R.string.action_updateNow),
7474
buttonState = ButtonState.Filled
7575
)
7676
}

apps/flipcash/features/menu/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ dependencies {
5252
implementation(Libs.compose_material)
5353
implementation(Libs.compose_materialIconsExtended)
5454

55+
implementation(project(":apps:flipcash:shared:appupdates"))
5556
implementation(project(":apps:flipcash:shared:authentication"))
5657
implementation(project(":apps:flipcash:shared:featureflags"))
5758
implementation(project(":apps:flipcash:shared:menu"))

apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuScreenContent.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import androidx.compose.material.Text
2727
import androidx.compose.runtime.Composable
2828
import androidx.compose.runtime.getValue
2929
import androidx.compose.runtime.remember
30+
import androidx.compose.runtime.rememberCoroutineScope
3031
import androidx.compose.ui.Alignment
3132
import androidx.compose.ui.Alignment.Companion.CenterVertically
3233
import androidx.compose.ui.Modifier
@@ -38,21 +39,28 @@ import androidx.compose.ui.text.style.TextAlign
3839
import androidx.compose.ui.unit.dp
3940
import androidx.lifecycle.compose.collectAsStateWithLifecycle
4041
import com.flipcash.app.menu.MenuList
42+
import com.flipcash.app.menu.internal.MenuScreenViewModel.Event
4143
import com.flipcash.app.onramp.AddCashRow
44+
import com.flipcash.app.updates.LocalAppUpdater
4245
import com.flipcash.features.menu.R
4346
import com.getcode.navigation.core.LocalCodeNavigator
4447
import com.getcode.theme.CodeTheme
4548
import com.getcode.ui.components.AppBarDefaults
4649
import com.getcode.ui.components.AppBarWithTitle
50+
import com.getcode.ui.core.noRippleClickable
4751
import com.getcode.ui.core.rememberedClickable
4852
import com.getcode.ui.core.verticalScrollStateGradient
4953
import com.getcode.ui.theme.CodeScaffold
5054
import com.getcode.ui.utils.plus
55+
import kotlinx.coroutines.launch
5156

5257
@Composable
5358
internal fun MenuScreenContent(viewModel: MenuScreenViewModel) {
5459
val state by viewModel.stateFlow.collectAsStateWithLifecycle()
5560
val navigator = LocalCodeNavigator.current
61+
val appUpdater = LocalAppUpdater.current
62+
val composeScope = rememberCoroutineScope()
63+
5664
CodeScaffold(
5765
topBar = {
5866
AppBarWithTitle(
@@ -84,6 +92,9 @@ internal fun MenuScreenContent(viewModel: MenuScreenViewModel) {
8492
modifier = Modifier
8593
.fillMaxWidth()
8694
.align(Alignment.Center)
95+
.noRippleClickable {
96+
composeScope.launch { appUpdater.checkForUpdate() }
97+
}
8798
.navigationBarsPadding()
8899
.padding(bottom = CodeTheme.dimens.grid.x3),
89100
text = stringResource(

apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuScreenViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.flipcash.app.menu.MenuItem
1313
import com.flipcash.app.onramp.ConfirmationEvent
1414
import com.flipcash.app.onramp.OnRampAmount
1515
import com.flipcash.app.onramp.OnRampAmountController
16+
import com.flipcash.app.updates.AppUpdateController
1617
import com.flipcash.features.menu.R
1718
import com.flipcash.services.analytics.AnalyticsEvent
1819
import com.flipcash.services.analytics.FlipcashAnalyticsService

apps/flipcash/features/scanner/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ dependencies {
5555

5656
implementation(project(":apps:flipcash:core"))
5757
implementation(project(":apps:flipcash:shared:appsettings"))
58+
implementation(project(":apps:flipcash:shared:appupdates"))
5859
implementation(project(":apps:flipcash:shared:bills"))
5960
implementation(project(":apps:flipcash:shared:bill-customization"))
6061
implementation(project(":apps:flipcash:shared:session"))

apps/flipcash/features/scanner/src/main/kotlin/com/flipcash/app/scanner/internal/bills/BillContainerView.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import com.flipcash.app.session.BillDeterminationResult
4747
import com.flipcash.app.session.Grabbed
4848
import com.flipcash.app.session.LocalSessionController
4949
import com.flipcash.app.session.PutInWallet
50+
import com.flipcash.app.updates.LocalAppUpdater
5051
import com.flipcash.features.scanner.R
5152
import com.getcode.manager.BottomBarAction
5253
import com.getcode.manager.BottomBarManager
@@ -124,6 +125,10 @@ internal fun BillContainer(
124125
// waiting for result
125126
}
126127

128+
LocalAppUpdater.current.availableUpdate.value != null -> {
129+
// waiting for update
130+
}
131+
127132
state.isCameraPermissionGranted == true || state.isCameraPermissionGranted == null -> {
128133
if (state.autoStartCamera == null) {
129134
// waiting for result

apps/flipcash/shared/appupdates/src/main/kotlin/com/flipcash/app/updates/internal/GooglePlayAppUpdateController.kt

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,21 @@ class GooglePlayAppUpdateController @Inject constructor(
4747
tag = "App Updates",
4848
message = "Checking for available updates"
4949
)
50+
51+
val minimumVersionFromServer = userManager.userFlags?.minimumVersion ?: Int.MIN_VALUE
52+
53+
if (versionInfo.versionCode >= minimumVersionFromServer) {
54+
trace(
55+
tag = "App Updates",
56+
message = "Forced update is not required: ${versionInfo.versionCode} >= $minimumVersionFromServer",
57+
metadata = {
58+
"current version" to versionInfo.versionCode
59+
"minimum version" to minimumVersionFromServer
60+
}
61+
)
62+
return
63+
}
64+
5065
val task = appUpdateManager.appUpdateInfo
5166

5267
task.addOnSuccessListener { update ->
@@ -66,22 +81,27 @@ class GooglePlayAppUpdateController @Inject constructor(
6681
rawAppUpdateInfo = update
6782
)
6883

69-
val minimumVersionFromServer = userManager.userFlags?.minimumVersion ?: Int.MIN_VALUE
84+
_availableUpdate.update { availableUpdate }
7085

71-
if (versionInfo.versionCode >= minimumVersionFromServer) {
86+
if (availableUpdate.availableVersionCode > versionInfo.versionCode) {
7287
trace(
7388
tag = "App Updates",
74-
message = "Forced update is not required",
89+
message = "New update available",
7590
metadata = {
7691
"current version" to versionInfo.versionCode
77-
"minimum version" to minimumVersionFromServer
92+
"available version" to availableUpdate.availableVersionCode
93+
"update priority" to update.updatePriority()
94+
"bytes downloaded" to update.bytesDownloaded()
95+
"total bytes to download" to update.totalBytesToDownload()
7896
}
7997
)
80-
return@addOnSuccessListener
98+
} else {
99+
trace(
100+
tag = "App Updates",
101+
message = "No new update available: ${versionInfo.versionCode} - ${availableUpdate.availableVersionCode}"
102+
)
81103
}
82104

83-
_availableUpdate.update { availableUpdate }
84-
85105
if (update.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
86106
// in-app update is already in progress, resume it
87107
scope.launch {

0 commit comments

Comments
 (0)