Skip to content

Commit b1b8d84

Browse files
committed
Add Play Store link for not-installed apps
Tapping a "Not Installed" app card now opens the Play Store listing so users can install it directly. Falls back to browser if Play Store is unavailable.
1 parent e07dd4e commit b1b8d84

2 files changed

Lines changed: 28 additions & 2 deletions

File tree

app/src/main/java/com/cashpilot/android/ui/screen/DashboardScreen.kt

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.cashpilot.android.ui.screen
22

33
import android.content.Intent
4+
import android.net.Uri
45
import android.provider.Settings as AndroidSettings
56
import android.text.format.DateUtils
67
import androidx.compose.animation.animateColorAsState
78
import androidx.compose.foundation.BorderStroke
9+
import androidx.compose.foundation.clickable
810
import androidx.compose.foundation.layout.Arrangement
911
import androidx.compose.foundation.layout.Column
1012
import androidx.compose.foundation.layout.PaddingValues
@@ -377,6 +379,7 @@ private fun PermissionBanner(viewModel: MainViewModel) {
377379

378380
@Composable
379381
private fun AppCard(info: AppDisplayInfo) {
382+
val context = LocalContext.current
380383
val borderColor = when (info.state) {
381384
AppState.RUNNING -> RunningGreen
382385
AppState.STOPPED -> StoppedRed
@@ -392,7 +395,30 @@ private fun AppCard(info: AppDisplayInfo) {
392395
Card(
393396
modifier = Modifier
394397
.fillMaxWidth()
395-
.alpha(cardAlpha),
398+
.alpha(cardAlpha)
399+
.then(
400+
if (info.state == AppState.NOT_INSTALLED) {
401+
Modifier.clickable {
402+
val intent = Intent(
403+
Intent.ACTION_VIEW,
404+
Uri.parse("market://details?id=${info.app.packageName}"),
405+
)
406+
try {
407+
context.startActivity(intent)
408+
} catch (_: Exception) {
409+
// Fall back to browser if Play Store not available
410+
context.startActivity(
411+
Intent(
412+
Intent.ACTION_VIEW,
413+
Uri.parse("https://play.google.com/store/apps/details?id=${info.app.packageName}"),
414+
),
415+
)
416+
}
417+
}
418+
} else {
419+
Modifier
420+
},
421+
),
396422
border = if (info.state != AppState.NOT_INSTALLED) {
397423
BorderStroke(1.5.dp, borderColor)
398424
} else {

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<string name="state_running">Running</string>
4141
<string name="state_stopped">Stopped</string>
4242
<string name="state_disabled">Disabled</string>
43-
<string name="state_not_installed">Not installed</string>
43+
<string name="state_not_installed">Not installed — tap to install</string>
4444
<string name="state_last_active">Last: %s</string>
4545
<string name="notification_active">Notification active</string>
4646
</resources>

0 commit comments

Comments
 (0)