diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/10@3x.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/10@3x.jpg deleted file mode 100644 index b87b0c0487..0000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/10@3x.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/10@3x.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/10@3x.png new file mode 100644 index 0000000000..a3df3d0ab0 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/10@3x.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/11@3x.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/11@3x.jpg deleted file mode 100644 index 3d4359fd21..0000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/11@3x.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/11@3x.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/11@3x.png new file mode 100644 index 0000000000..80088c363c Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/11@3x.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/1@3x.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/1@3x.jpg deleted file mode 100644 index dd0daa50a4..0000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/1@3x.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/1@3x.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/1@3x.png new file mode 100644 index 0000000000..3ceb44bb6d Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/1@3x.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/2@3x.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/2@3x.jpg deleted file mode 100644 index 3444d8c62b..0000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/2@3x.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/2@3x.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/2@3x.png new file mode 100644 index 0000000000..2066881d4f Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/2@3x.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/3@3x.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/3@3x.jpg deleted file mode 100644 index cf1fa5228a..0000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/3@3x.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/3@3x.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/3@3x.png new file mode 100644 index 0000000000..1ef151ff13 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/3@3x.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/4@3x.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/4@3x.jpg deleted file mode 100644 index 9a483ea65b..0000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/4@3x.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/4@3x.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/4@3x.png new file mode 100644 index 0000000000..1bf269556b Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/4@3x.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/5@3x.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/5@3x.jpg deleted file mode 100644 index 9d4ca6e466..0000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/5@3x.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/5@3x.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/5@3x.png new file mode 100644 index 0000000000..7778f7124f Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/5@3x.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/6@3x.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/6@3x.jpg deleted file mode 100644 index 15028b3698..0000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/6@3x.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/6@3x.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/6@3x.png new file mode 100644 index 0000000000..4fe3ce98c0 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/6@3x.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/7@3x.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/7@3x.jpg deleted file mode 100644 index 539641713b..0000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/7@3x.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/7@3x.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/7@3x.png new file mode 100644 index 0000000000..8b2922c73f Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/7@3x.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/8@3x.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/8@3x.jpg deleted file mode 100644 index 2e26e86689..0000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/8@3x.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/8@3x.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/8@3x.png new file mode 100644 index 0000000000..b53d36f680 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/8@3x.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/9@3x.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/9@3x.jpg deleted file mode 100644 index 11cad6ee54..0000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/9@3x.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/9@3x.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/9@3x.png new file mode 100644 index 0000000000..c1bfb187e9 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/9@3x.png differ diff --git a/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/MainActivity.kt b/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/MainActivity.kt index 0991427a68..7b3427a5a8 100644 --- a/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/MainActivity.kt +++ b/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/MainActivity.kt @@ -62,7 +62,6 @@ import net.nymtech.nymvpn.ui.screens.settings.appearance.display.DisplayScreen import net.nymtech.nymvpn.ui.screens.settings.appearance.language.LanguageScreen import net.nymtech.nymvpn.ui.screens.settings.credential.CredentialScreen import net.nymtech.nymvpn.ui.screens.settings.developer.DeveloperScreen -import net.nymtech.nymvpn.ui.screens.settings.feedback.FeedbackScreen import net.nymtech.nymvpn.ui.screens.settings.legal.LegalScreen import net.nymtech.nymvpn.ui.screens.settings.legal.licenses.LicensesScreen import net.nymtech.nymvpn.ui.screens.settings.logs.LogsScreen @@ -225,7 +224,6 @@ class MainActivity : AppCompatActivity() { } composable { LogsScreen(appViewModel) } composable { SupportScreen(appViewModel) } - composable { FeedbackScreen(appViewModel) } composable { LegalScreen(appViewModel) } composable { CredentialScreen(appState, appViewModel) diff --git a/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/Route.kt b/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/Route.kt index 490f057df4..e8d4fcb3fb 100644 --- a/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/Route.kt +++ b/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/Route.kt @@ -36,9 +36,6 @@ sealed class Route { @Serializable data object Logs : Route() - @Serializable - data object Feedback : Route() - @Serializable data object Support : Route() diff --git a/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/SettingsScreen.kt b/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/SettingsScreen.kt index 522f657415..ae9514923c 100644 --- a/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/SettingsScreen.kt +++ b/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/SettingsScreen.kt @@ -200,22 +200,18 @@ fun SettingsScreen(appViewModel: AppViewModel, appUiState: AppUiState, viewModel ) SurfaceSelectionGroupButton( listOf( - SelectionItem( - ImageVector.vectorResource(R.drawable.feedback), - { - val icon = Icons.AutoMirrored.Outlined.ArrowRight - Icon(icon, icon.name, Modifier.size(iconSize)) - }, - title = { Text(stringResource(R.string.feedback), style = MaterialTheme.typography.bodyLarge.copy(MaterialTheme.colorScheme.onSurface)) }, - onClick = { navController.navigate(Route.Feedback) }, - ), SelectionItem( ImageVector.vectorResource(R.drawable.support), { val icon = Icons.AutoMirrored.Outlined.ArrowRight Icon(icon, icon.name, Modifier.size(iconSize)) }, - title = { Text(stringResource(R.string.support), style = MaterialTheme.typography.bodyLarge.copy(MaterialTheme.colorScheme.onSurface)) }, + title = { + Text( + stringResource(R.string.support_and_feedback), + style = MaterialTheme.typography.bodyLarge.copy(MaterialTheme.colorScheme.onSurface), + ) + }, onClick = { navController.navigate(Route.Support) }, ), SelectionItem( diff --git a/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/credential/CredentialScreen.kt b/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/credential/CredentialScreen.kt index 9beff3cbbf..353354ed1e 100644 --- a/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/credential/CredentialScreen.kt +++ b/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/credential/CredentialScreen.kt @@ -165,24 +165,17 @@ fun CredentialScreen(appUiState: AppUiState, appViewModel: AppViewModel, viewMod modifier = Modifier .padding( - horizontal = 24.dp.scaledWidth(), vertical = 24.dp.scaledHeight(), ), ) { Text( - text = stringResource(id = R.string.welcome_exclaim), + text = stringResource(id = R.string.welcome_to_nym), style = MaterialTheme.typography.headlineSmall, color = MaterialTheme.colorScheme.onBackground, ) Text( - text = stringResource(id = R.string.recovery_phrase_message), + text = stringResource(id = R.string.enter_access_code), style = MaterialTheme.typography.bodyLarge, - color = MaterialTheme.colorScheme.onSurface, - textAlign = TextAlign.Center, - ) - Text( - text = stringResource(id = R.string.recovery_phrase_disclaimer), - style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant, textAlign = TextAlign.Center, ) @@ -193,7 +186,11 @@ fun CredentialScreen(appUiState: AppUiState, appViewModel: AppViewModel, viewMod ) { CustomTextField( placeholder = { - Text(stringResource(R.string.mnemonic_example), style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurfaceVariant) + Column { + Text(stringResource(R.string.access_code), style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurfaceVariant) + Text("") + Text(stringResource(R.string.mnemonic_example), style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurfaceVariant) + } }, value = mnemonic, onValueChange = { @@ -273,7 +270,7 @@ fun CredentialScreen(appUiState: AppUiState, appViewModel: AppViewModel, viewMod annotation = appUiState.managerState.accountLinks?.signUp ?: stringResource(R.string.create_account_url), ) withStyle(style = SpanStyle(color = MaterialTheme.colorScheme.primary)) { - append(stringResource(id = R.string.create_account)) + append(stringResource(id = R.string.get_access_code)) } pop() } diff --git a/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/feedback/FeedbackScreen.kt b/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/feedback/FeedbackScreen.kt deleted file mode 100644 index 809ec48ec8..0000000000 --- a/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/feedback/FeedbackScreen.kt +++ /dev/null @@ -1,129 +0,0 @@ -package net.nymtech.nymvpn.ui.screens.settings.feedback - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack -import androidx.compose.material.icons.automirrored.outlined.ArrowRight -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.res.vectorResource -import androidx.compose.ui.unit.dp -import net.nymtech.nymvpn.R -import net.nymtech.nymvpn.ui.AppViewModel -import net.nymtech.nymvpn.ui.common.buttons.surface.SelectionItem -import net.nymtech.nymvpn.ui.common.buttons.surface.SurfaceSelectionGroupButton -import net.nymtech.nymvpn.ui.common.navigation.LocalNavController -import net.nymtech.nymvpn.ui.common.navigation.NavBarState -import net.nymtech.nymvpn.ui.common.navigation.NavIcon -import net.nymtech.nymvpn.ui.common.navigation.NavTitle -import net.nymtech.nymvpn.ui.theme.iconSize -import net.nymtech.nymvpn.util.extensions.openWebUrl -import net.nymtech.nymvpn.util.extensions.scaledHeight -import net.nymtech.nymvpn.util.extensions.scaledWidth - -@Composable -fun FeedbackScreen(appViewModel: AppViewModel) { - val context = LocalContext.current - val navController = LocalNavController.current - - LaunchedEffect(Unit) { - appViewModel.onNavBarStateChange( - NavBarState( - title = { NavTitle(stringResource(R.string.feedback)) }, - leading = { - NavIcon(Icons.AutoMirrored.Filled.ArrowBack) { - navController.popBackStack() - } - }, - ), - ) - } - - Column( - horizontalAlignment = Alignment.Start, - verticalArrangement = Arrangement.spacedBy(24.dp, Alignment.Top), - modifier = - Modifier - .verticalScroll(rememberScrollState()) - .fillMaxSize() - .padding(top = 24.dp.scaledHeight()) - .padding(horizontal = 24.dp.scaledWidth()), - ) { - SurfaceSelectionGroupButton( - listOf( - SelectionItem( - leadingIcon = ImageVector.vectorResource(R.drawable.github), - { - val icon = Icons.AutoMirrored.Outlined.ArrowRight - Icon(icon, icon.name, Modifier.size(iconSize)) - }, - title = { Text(stringResource(R.string.open_github), style = MaterialTheme.typography.bodyLarge.copy(MaterialTheme.colorScheme.onSurface)) }, - onClick = { - context.openWebUrl( - context.getString(R.string.github_issues_url), - ) - }, - ), - ), - ) - SurfaceSelectionGroupButton( - listOf( - SelectionItem( - leadingIcon = ImageVector.vectorResource(R.drawable.send), - { - val icon = Icons.AutoMirrored.Outlined.ArrowRight - Icon(icon, icon.name, Modifier.size(iconSize)) - }, - title = { Text(stringResource(R.string.send_feedback), style = MaterialTheme.typography.bodyLarge.copy(MaterialTheme.colorScheme.onSurface)) }, - onClick = { - context.openWebUrl(context.getString(R.string.contact_url)) - }, - ), - ), - ) - SurfaceSelectionGroupButton( - listOf( - SelectionItem( - leadingIcon = ImageVector.vectorResource(R.drawable.matrix), - { - val icon = Icons.AutoMirrored.Outlined.ArrowRight - Icon(icon, icon.name, Modifier.size(iconSize)) - }, - title = { Text(stringResource(R.string.join_matrix), style = MaterialTheme.typography.bodyLarge.copy(MaterialTheme.colorScheme.onSurface)) }, - onClick = { - context.openWebUrl(context.getString(R.string.matrix_url)) - }, - ), - ), - ) - SurfaceSelectionGroupButton( - listOf( - SelectionItem( - leadingIcon = ImageVector.vectorResource(R.drawable.discord), - { - val icon = Icons.AutoMirrored.Outlined.ArrowRight - Icon(icon, icon.name, Modifier.size(iconSize)) - }, - title = { Text(stringResource(R.string.join_discord), style = MaterialTheme.typography.bodyLarge.copy(MaterialTheme.colorScheme.onSurface)) }, - onClick = { - context.openWebUrl(context.getString(R.string.discord_url)) - }, - ), - ), - ) - } -} diff --git a/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/support/SupportScreen.kt b/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/support/SupportScreen.kt index 0d3363bebb..0f75c16e5f 100644 --- a/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/support/SupportScreen.kt +++ b/nym-vpn-android/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/support/SupportScreen.kt @@ -84,8 +84,27 @@ fun SupportScreen(appViewModel: AppViewModel) { val icon = Icons.AutoMirrored.Outlined.ArrowRight Icon(icon, icon.name, Modifier.size(iconSize)) }, - title = { Text(stringResource(R.string.contact_support), style = MaterialTheme.typography.bodyLarge.copy(MaterialTheme.colorScheme.onSurface)) }, - onClick = { context.openWebUrl(context.getString(R.string.contact_url)) }, + title = { Text(stringResource(R.string.get_in_touch), style = MaterialTheme.typography.bodyLarge.copy(MaterialTheme.colorScheme.onSurface)) }, + onClick = { + context.openWebUrl(context.getString(R.string.contact_url)) + }, + ), + ), + ) + SurfaceSelectionGroupButton( + listOf( + SelectionItem( + leadingIcon = ImageVector.vectorResource(R.drawable.github), + { + val icon = Icons.AutoMirrored.Outlined.ArrowRight + Icon(icon, icon.name, Modifier.size(iconSize)) + }, + title = { Text(stringResource(R.string.open_github), style = MaterialTheme.typography.bodyLarge.copy(MaterialTheme.colorScheme.onSurface)) }, + onClick = { + context.openWebUrl( + context.getString(R.string.github_issues_url), + ) + }, ), ), ) diff --git a/nym-vpn-android/app/src/main/res/values/strings.xml b/nym-vpn-android/app/src/main/res/values/strings.xml index c5619d709b..d127ff57c1 100644 --- a/nym-vpn-android/app/src/main/res/values/strings.xml +++ b/nym-vpn-android/app/src/main/res/values/strings.xml @@ -199,4 +199,10 @@ To add this device, go to your account\'s \'Devices\' page, remove one of the existing devices, and then log in on this device with your recovery phrase. Manage your devices Close + Please enter your anonymous Access Code. + Welcome to NymVPN + Get Access Code + 24-word-access-code + + Get in touch diff --git a/nym-vpn-android/core/src/main/java/net/nymtech/vpn/backend/NymBackend.kt b/nym-vpn-android/core/src/main/java/net/nymtech/vpn/backend/NymBackend.kt index d7dd0456b2..289959fed3 100644 --- a/nym-vpn-android/core/src/main/java/net/nymtech/vpn/backend/NymBackend.kt +++ b/nym-vpn-android/core/src/main/java/net/nymtech/vpn/backend/NymBackend.kt @@ -100,15 +100,19 @@ class NymBackend private constructor(val context: Context) : Backend, TunnelStat } suspend fun waitForInit() { - val startTime = System.currentTimeMillis() - val timeout = 5000L - while (System.currentTimeMillis() - startTime < timeout) { - if (initialized.get()) { - return + runCatching { + val startTime = System.currentTimeMillis() + val timeout = 5000L + while (System.currentTimeMillis() - startTime < timeout) { + if (initialized.get()) { + return + } + delay(10) } - delay(10) + throw TimeoutException("Failed to initialize backend") + }.onFailure { + Timber.e(it) } - throw TimeoutException("Failed to initialize backend") } private suspend fun initEnvironment(environment: Tunnel.Environment) {