From 461b08c41b07ad9df0f7aafb217ed99397257a1f Mon Sep 17 00:00:00 2001
From: Iva <103037123+kp-iva-nedeleva@users.noreply.github.com>
Date: Mon, 21 Oct 2024 08:24:44 +0300
Subject: [PATCH] Update screen updates (#81)
---
.../ui/src/main/res/values/strings.xml | 3 +-
features/splash/build.gradle.kts | 1 +
.../java/com/kape/splash/di/SplashModule.kt | 2 +-
.../java/com/kape/splash/ui/UpdateScreen.kt | 98 +++++++++++--------
.../com/kape/splash/ui/vm/SplashViewModel.kt | 7 ++
5 files changed, 70 insertions(+), 41 deletions(-)
diff --git a/capabilities/ui/src/main/res/values/strings.xml b/capabilities/ui/src/main/res/values/strings.xml
index fd343e2c..bd774cb2 100644
--- a/capabilities/ui/src/main/res/values/strings.xml
+++ b/capabilities/ui/src/main/res/values/strings.xml
@@ -442,6 +442,7 @@
Show Geo-located Regions
Upgrade Your Experience
- You\'re using an older version of PIA. Update your app now to enjoy an enhanced experience with all the latest features.
+ Your app is outdated. Please update to continue using the app.
Update Now
+ Tapping \"Update Now\" will disconnect the VPN.
\ No newline at end of file
diff --git a/features/splash/build.gradle.kts b/features/splash/build.gradle.kts
index 1d05bf9e..c146fe23 100644
--- a/features/splash/build.gradle.kts
+++ b/features/splash/build.gradle.kts
@@ -48,6 +48,7 @@ dependencies {
implementation(project(":core:router"))
implementation(project(":core:regions"))
implementation(project(":core:httpclient"))
+ implementation(project(":core:vpnconnect"))
implementation(project(":capabilities:ui"))
implementation(project(":capabilities:notifications"))
implementation(project(":capabilities:featureflags"))
diff --git a/features/splash/src/main/java/com/kape/splash/di/SplashModule.kt b/features/splash/src/main/java/com/kape/splash/di/SplashModule.kt
index 822c2c80..5d55b9bb 100644
--- a/features/splash/src/main/java/com/kape/splash/di/SplashModule.kt
+++ b/features/splash/src/main/java/com/kape/splash/di/SplashModule.kt
@@ -6,5 +6,5 @@ import org.koin.core.qualifier.named
import org.koin.dsl.module
val splashModule = module {
- viewModel { SplashViewModel(get(), get(), get(), get(), get(named("update-url"))) }
+ viewModel { SplashViewModel(get(), get(), get(), get(), get(named("update-url")), get()) }
}
\ No newline at end of file
diff --git a/features/splash/src/main/java/com/kape/splash/ui/UpdateScreen.kt b/features/splash/src/main/java/com/kape/splash/ui/UpdateScreen.kt
index 254f6aa2..5da39756 100644
--- a/features/splash/src/main/java/com/kape/splash/ui/UpdateScreen.kt
+++ b/features/splash/src/main/java/com/kape/splash/ui/UpdateScreen.kt
@@ -5,8 +5,10 @@ import android.net.Uri
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
@@ -26,6 +28,7 @@ import com.kape.splash.ui.vm.SplashViewModel
import com.kape.ui.R
import com.kape.ui.mobile.elements.PrimaryButton
import com.kape.ui.mobile.elements.Screen
+import com.kape.ui.mobile.text.OnboardingDescriptionPaymentText
import com.kape.ui.mobile.text.OnboardingDescriptionText
import com.kape.ui.mobile.text.OnboardingTitleText
import com.kape.ui.utils.LocalColors
@@ -41,53 +44,70 @@ fun UpdateScreen(viewModel: SplashViewModel = koinViewModel()) = Screen {
.padding(top = 64.dp)
.background(LocalColors.current.background),
verticalArrangement = Arrangement.SpaceBetween,
- horizontalAlignment = Alignment.CenterHorizontally,
) {
- Column(modifier = Modifier.widthIn(max = 520.dp)) {
- Image(
- painter = painterResource(id = R.drawable.shield),
- contentDescription = null,
- modifier = Modifier
- .padding(40.dp)
- .height(140.dp)
- .fillMaxWidth(),
- )
- Column(modifier = Modifier.semantics(mergeDescendants = true) { }) {
- OnboardingTitleText(
- content = stringResource(id = R.string.update_required_title),
+ Box(
+ modifier = Modifier
+ .widthIn(max = 520.dp)
+ .fillMaxHeight()
+ .weight(1f, true),
+ ) {
+ Column(
+ verticalArrangement = Arrangement.SpaceBetween,
+ ) {
+ Image(
+ painter = painterResource(id = R.drawable.shield),
+ contentDescription = null,
modifier = Modifier
- .fillMaxWidth()
- .padding(16.dp),
+ .padding(40.dp)
+ .height(200.dp)
+ .fillMaxWidth(),
)
+ Column(modifier = Modifier.semantics(mergeDescendants = true) { }) {
+ OnboardingTitleText(
+ content = stringResource(id = R.string.update_required_title),
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(16.dp),
+ )
+
+ OnboardingDescriptionText(
+ content = stringResource(id = R.string.update_required_message),
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(16.dp),
+ )
+ }
+ }
- OnboardingDescriptionText(
- content = stringResource(id = R.string.update_required_message),
+ Column(modifier = Modifier.align(Alignment.BottomCenter)) {
+ PrimaryButton(
+ text = stringResource(id = R.string.update_required_action),
modifier = Modifier
.fillMaxWidth()
- .padding(16.dp),
- )
- }
+ .padding(start = 16.dp, top = 4.dp, bottom = 36.dp, end = 16.dp)
+ .align(Alignment.CenterHorizontally),
+ ) {
+ viewModel.onUpdateClicked(
+ launchUpdate = { url ->
+ val launchIntent = Intent(Intent.ACTION_VIEW)
+ launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ launchIntent.data = Uri.parse(url)
+ // Silently fail if Google Play Store isn't installed.
+ if (launchIntent.resolveActivity(context.packageManager) != null) {
+ context.startActivity(launchIntent)
+ }
+ },
+ )
+ }
- Spacer(modifier = Modifier.weight(1f))
+ if (viewModel.isConnected()) {
+ OnboardingDescriptionPaymentText(
+ stringResource(R.string.update_required_info),
+ Modifier.align(Alignment.CenterHorizontally),
+ )
- PrimaryButton(
- text = stringResource(id = R.string.update_required_action),
- modifier = Modifier
- .fillMaxWidth()
- .padding(start = 16.dp, top = 4.dp, bottom = 36.dp, end = 16.dp)
- .align(Alignment.CenterHorizontally),
- ) {
- viewModel.onUpdateClicked(
- launchUpdate = { url ->
- val launchIntent = Intent(Intent.ACTION_VIEW)
- launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- launchIntent.data = Uri.parse(url)
- // Silently fail if Google Play Store isn't installed.
- if (launchIntent.resolveActivity(context.packageManager) != null) {
- context.startActivity(launchIntent)
- }
- },
- )
+ Spacer(modifier = Modifier.padding(bottom = 40.dp))
+ }
}
}
}
diff --git a/features/splash/src/main/java/com/kape/splash/ui/vm/SplashViewModel.kt b/features/splash/src/main/java/com/kape/splash/ui/vm/SplashViewModel.kt
index 5207b102..b870dcba 100644
--- a/features/splash/src/main/java/com/kape/splash/ui/vm/SplashViewModel.kt
+++ b/features/splash/src/main/java/com/kape/splash/ui/vm/SplashViewModel.kt
@@ -7,6 +7,7 @@ import com.kape.httpclient.domain.GetWebsiteDownloadLink
import com.kape.router.EnterFlow
import com.kape.router.ExitFlow
import com.kape.router.Router
+import com.kape.vpnconnect.domain.ConnectionUseCase
import com.kape.vpnregions.utils.RegionListProvider
import kotlinx.coroutines.launch
import org.koin.core.component.KoinComponent
@@ -17,6 +18,7 @@ class SplashViewModel(
private val forceUpdateUseCase: ForceUpdateUseCase,
private val getWebsiteDownloadLink: GetWebsiteDownloadLink,
private val appUpdateUrl: String,
+ private val connectionUseCase: ConnectionUseCase,
) : ViewModel(), KoinComponent {
private var updateUrl: String = ""
@@ -46,6 +48,11 @@ class SplashViewModel(
}
fun onUpdateClicked(launchUpdate: (updateUrl: String) -> Unit) {
+ viewModelScope.launch {
+ connectionUseCase.stopConnection().collect {}
+ }
launchUpdate(appUpdateUrl.ifEmpty { updateUrl })
}
+
+ fun isConnected(): Boolean = connectionUseCase.isConnected()
}
\ No newline at end of file