From c8205c4c59fe10318d79040de1d6766b5d3b7abb Mon Sep 17 00:00:00 2001 From: Zane Schepke Date: Mon, 19 Feb 2024 08:45:52 -0500 Subject: [PATCH] fix: ui tunnel display bug Fixes a bug where turning on auto tunneling hides the first tunnel in the app. Closes #116 --- .../wireguardautotunnel/ui/MainActivity.kt | 40 +++--- .../ui/screens/config/ConfigScreen.kt | 98 ++++++++++---- .../ui/screens/main/MainScreen.kt | 126 ++++++++++-------- .../ui/screens/settings/SettingsScreen.kt | 8 +- .../ui/screens/support/SupportScreen.kt | 4 +- app/src/main/res/values/strings.xml | 8 ++ buildSrc/src/main/kotlin/Constants.kt | 4 +- .../android/en-US/changelogs/33700.txt | 2 + gradle/libs.versions.toml | 3 +- 9 files changed, 188 insertions(+), 105 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/33700.txt diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/MainActivity.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/MainActivity.kt index f2012af..c3622f9 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/MainActivity.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/MainActivity.kt @@ -153,24 +153,25 @@ class MainActivity : AppCompatActivity() { {} }, ) { padding -> - Column(modifier = Modifier.padding(padding)) { if (notificationPermissionState != null && !notificationPermissionState.status.isGranted) { - PermissionRequestFailedScreen( - onRequestAgain = { - val intentSettings = - Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) - intentSettings.data = - Uri.fromParts( - Constants.URI_PACKAGE_SCHEME, - this@MainActivity.packageName, - null, - ) - startActivity(intentSettings) - }, - message = getString(R.string.notification_permission_required), - getString(R.string.open_settings), - ) - return@Scaffold + Column(modifier = Modifier.padding(padding)) { + PermissionRequestFailedScreen( + onRequestAgain = { + val intentSettings = + Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) + intentSettings.data = + Uri.fromParts( + Constants.URI_PACKAGE_SCHEME, + this@MainActivity.packageName, + null, + ) + startActivity(intentSettings) + }, + message = getString(R.string.notification_permission_required), + getString(R.string.open_settings), + ) + return@Scaffold + } } NavHost(navController, startDestination = Screen.Main.route) { composable( @@ -186,14 +187,17 @@ class MainActivity : AppCompatActivity() { Screen.Settings.route, ) { SettingsScreen( + padding = padding, showSnackbarMessage = { message -> showSnackBarMessage(message) }, focusRequester = focusRequester, ) +// } composable( Screen.Support.route, ) { SupportScreen( + padding = padding, focusRequester = focusRequester, showSnackbarMessage = { message -> showSnackBarMessage(message) }, ) @@ -202,6 +206,7 @@ class MainActivity : AppCompatActivity() { val id = it.arguments?.getString("id") if (!id.isNullOrBlank()) { ConfigScreen( + padding = padding, navController = navController, id = id, showSnackbarMessage = { message -> @@ -212,7 +217,6 @@ class MainActivity : AppCompatActivity() { } } } - } } } } diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigScreen.kt index 6721de8..b75a879 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigScreen.kt @@ -7,6 +7,7 @@ import androidx.compose.foundation.focusGroup import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight @@ -61,6 +62,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.VisualTransformation @@ -88,6 +90,7 @@ import kotlinx.coroutines.delay ) @Composable fun ConfigScreen( + padding: PaddingValues, viewModel: ConfigViewModel = hiltViewModel(), focusRequester: FocusRequester, navController: NavController, @@ -125,13 +128,16 @@ fun ConfigScreen( val fillMaxWidth = .85f val screenPadding = 5.dp - val applicationButtonText = { - "Tunneling apps: " + + val applicationButtonText = buildAnnotatedString { + append(stringResource(id = R.string.tunneling_apps)) + append(": ") if (uiState.isAllApplicationsEnabled) { - "all" + append(stringResource(id = R.string.all)) } else { - "${uiState.checkedPackageNames.size} " + - (if (uiState.include) "included" else "excluded") + append("${uiState.checkedPackageNames.size} ") + (if (uiState.include) append(stringResource(id = R.string.included)) else append( + stringResource(id = R.string.excluded), + )) } } @@ -164,13 +170,17 @@ fun ConfigScreen( shape = RoundedCornerShape(12.dp), color = MaterialTheme.colorScheme.surface, modifier = - Modifier.fillMaxWidth() + Modifier + .fillMaxWidth() .fillMaxHeight(if (uiState.isAllApplicationsEnabled) 1 / 5f else 4 / 5f), ) { - Column(modifier = Modifier.fillMaxWidth()) { + Column(modifier = Modifier + .fillMaxWidth()) { Row( modifier = - Modifier.fillMaxWidth().padding(horizontal = 20.dp, vertical = 7.dp), + Modifier + .fillMaxWidth() + .padding(horizontal = 20.dp, vertical = 7.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween, ) { @@ -183,7 +193,8 @@ fun ConfigScreen( if (!uiState.isAllApplicationsEnabled) { Row( modifier = - Modifier.fillMaxWidth() + Modifier + .fillMaxWidth() .padding(horizontal = 20.dp, vertical = 7.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween, @@ -215,7 +226,8 @@ fun ConfigScreen( } Row( modifier = - Modifier.fillMaxWidth() + Modifier + .fillMaxWidth() .padding(horizontal = 20.dp, vertical = 7.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween, @@ -232,7 +244,9 @@ fun ConfigScreen( Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween, - modifier = Modifier.fillMaxSize().padding(5.dp), + modifier = Modifier + .fillMaxSize() + .padding(5.dp), ) { Row(modifier = Modifier.fillMaxWidth(fillMaxWidth)) { val drawable = @@ -275,7 +289,9 @@ fun ConfigScreen( } Row( verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.fillMaxSize().padding(top = 5.dp), + modifier = Modifier + .fillMaxSize() + .padding(top = 5.dp), horizontalArrangement = Arrangement.Center, ) { TextButton(onClick = { showApplicationsDialog = false }) { @@ -327,7 +343,11 @@ fun ConfigScreen( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Top, modifier = - Modifier.verticalScroll(rememberScrollState()).weight(1f, true).fillMaxSize(), + Modifier + .verticalScroll(rememberScrollState()) + .weight(1f, true) + .fillMaxSize() + .padding(padding), ) { Surface( tonalElevation = 2.dp, @@ -336,16 +356,20 @@ fun ConfigScreen( color = MaterialTheme.colorScheme.surface, modifier = (if (WireGuardAutoTunnel.isRunningOnAndroidTv()) { - Modifier.fillMaxHeight(fillMaxHeight).fillMaxWidth(fillMaxWidth) + Modifier + .fillMaxHeight(fillMaxHeight) + .fillMaxWidth(fillMaxWidth) } else { Modifier.fillMaxWidth(fillMaxWidth) }) - .padding(top = 50.dp, bottom = 10.dp), + .padding(bottom = 10.dp), ) { Column( horizontalAlignment = Alignment.Start, verticalArrangement = Arrangement.Top, - modifier = Modifier.padding(15.dp).focusGroup(), + modifier = Modifier + .padding(15.dp) + .focusGroup(), ) { SectionTitle( stringResource(R.string.interface_), @@ -357,10 +381,14 @@ fun ConfigScreen( keyboardActions = keyboardActions, label = stringResource(R.string.name), hint = stringResource(R.string.tunnel_name).lowercase(), - modifier = Modifier.fillMaxWidth().focusRequester(focusRequester), + modifier = Modifier + .fillMaxWidth() + .focusRequester(focusRequester), ) OutlinedTextField( - modifier = Modifier.fillMaxWidth().clickable { showAuthPrompt = true }, + modifier = Modifier + .fillMaxWidth() + .clickable { showAuthPrompt = true }, value = uiState.interfaceProxy.privateKey, visualTransformation = if ((id == Constants.MANUAL_TUNNEL_CONFIG_ID) || isAuthenticated) @@ -388,7 +416,9 @@ fun ConfigScreen( ) OutlinedTextField( modifier = - Modifier.fillMaxWidth().focusRequester(FocusRequester.Default), + Modifier + .fillMaxWidth() + .focusRequester(FocusRequester.Default), value = uiState.interfaceProxy.publicKey, enabled = false, onValueChange = {}, @@ -421,7 +451,9 @@ fun ConfigScreen( keyboardActions = keyboardActions, label = stringResource(R.string.addresses), hint = stringResource(R.string.comma_separated_list), - modifier = Modifier.fillMaxWidth(3 / 5f).padding(end = 5.dp), + modifier = Modifier + .fillMaxWidth(3 / 5f) + .padding(end = 5.dp), ) ConfigurationTextBox( value = uiState.interfaceProxy.listenPort, @@ -439,7 +471,9 @@ fun ConfigScreen( keyboardActions = keyboardActions, label = stringResource(R.string.dns_servers), hint = stringResource(R.string.comma_separated_list), - modifier = Modifier.fillMaxWidth(3 / 5f).padding(end = 5.dp), + modifier = Modifier + .fillMaxWidth(3 / 5f) + .padding(end = 5.dp), ) ConfigurationTextBox( value = uiState.interfaceProxy.mtu, @@ -452,11 +486,13 @@ fun ConfigScreen( } Row( verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.fillMaxSize().padding(top = 5.dp), + modifier = Modifier + .fillMaxSize() + .padding(top = 5.dp), horizontalArrangement = Arrangement.Center, ) { TextButton(onClick = { showApplicationsDialog = true }) { - Text(applicationButtonText()) + Text(applicationButtonText.text) } } } @@ -469,7 +505,9 @@ fun ConfigScreen( color = MaterialTheme.colorScheme.surface, modifier = (if (WireGuardAutoTunnel.isRunningOnAndroidTv()) { - Modifier.fillMaxHeight(fillMaxHeight).fillMaxWidth(fillMaxWidth) + Modifier + .fillMaxHeight(fillMaxHeight) + .fillMaxWidth(fillMaxWidth) } else { Modifier.fillMaxWidth(fillMaxWidth) }) @@ -478,12 +516,16 @@ fun ConfigScreen( Column( horizontalAlignment = Alignment.Start, verticalArrangement = Arrangement.Top, - modifier = Modifier.padding(horizontal = 15.dp).padding(bottom = 10.dp), + modifier = Modifier + .padding(horizontal = 15.dp) + .padding(bottom = 10.dp), ) { Row( horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.fillMaxWidth().padding(horizontal = 5.dp), + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 5.dp), ) { SectionTitle( stringResource(R.string.peer), @@ -566,7 +608,9 @@ fun ConfigScreen( Row( horizontalArrangement = Arrangement.SpaceEvenly, verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.fillMaxSize().padding(bottom = 140.dp), + modifier = Modifier + .fillMaxSize() + .padding(bottom = 140.dp), ) { Row( verticalAlignment = Alignment.CenterVertically, diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/MainScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/MainScreen.kt index 5fa25c3..8378bad 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/MainScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/MainScreen.kt @@ -13,6 +13,7 @@ import androidx.compose.animation.fadeOut import androidx.compose.animation.slideInVertically import androidx.compose.animation.slideOutVertically import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.focusable import androidx.compose.foundation.gestures.ScrollableDefaults @@ -80,6 +81,7 @@ import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel @@ -287,8 +289,9 @@ fun MainScreen( horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, modifier = - Modifier.requiredWidth(LocalConfiguration.current.screenWidthDp.dp) - .padding(end = 5.dp), + Modifier + .requiredWidth(LocalConfiguration.current.screenWidthDp.dp) + .padding(end = 5.dp) ) { Row { Icon( @@ -299,8 +302,15 @@ fun MainScreen( if (uiState.settings.isAutoTunnelPaused) Color.Gray else mint, ) + val autoTunnelingLabel = buildAnnotatedString { + append(stringResource(id = R.string.auto_tunneling)) + append(": ") + if(uiState.settings.isAutoTunnelPaused) append(stringResource(id = R.string.paused)) else append( + stringResource(id = R.string.active), + ) + } Text( - "Auto-tunneling: ${if (uiState.settings.isAutoTunnelPaused) "paused" else "active"}", + autoTunnelingLabel.text, style = typography.bodyLarge, modifier = Modifier.padding(start = 10.dp), ) @@ -310,14 +320,14 @@ fun MainScreen( onClick = { viewModel.resumeAutoTunneling() }, modifier = Modifier.padding(end = 10.dp), ) { - Text("Resume") + Text(stringResource(id = R.string.resume)) } else TextButton( onClick = { viewModel.pauseAutoTunneling() }, modifier = Modifier.padding(end = 10.dp), ) { - Text("Pause") + Text(stringResource(id = R.string.pause)) } } }, @@ -334,17 +344,18 @@ fun MainScreen( var fobColor by remember { mutableStateOf(secondaryColor) } FloatingActionButton( modifier = - (if ( - WireGuardAutoTunnel.isRunningOnAndroidTv() && - uiState.tunnels.isEmpty() - ) - Modifier.focusRequester(focusRequester) - else Modifier) - .onFocusChanged { - if (WireGuardAutoTunnel.isRunningOnAndroidTv()) { - fobColor = if (it.isFocused) hoverColor else secondaryColor - } - }, + (if ( + WireGuardAutoTunnel.isRunningOnAndroidTv() && + uiState.tunnels.isEmpty() + ) + Modifier.focusRequester(focusRequester) + else Modifier) + .padding(bottom = 90.dp) + .onFocusChanged { + if (WireGuardAutoTunnel.isRunningOnAndroidTv()) { + fobColor = if (it.isFocused) hoverColor else secondaryColor + } + }, onClick = { showBottomSheet = true }, containerColor = fobColor, shape = RoundedCornerShape(16.dp), @@ -362,7 +373,9 @@ fun MainScreen( Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, - modifier = Modifier.fillMaxSize().padding(innerPadding), + modifier = Modifier + .fillMaxSize() + .padding(innerPadding), ) { Text(text = stringResource(R.string.no_tunnels), fontStyle = FontStyle.Italic) } @@ -375,12 +388,13 @@ fun MainScreen( // Sheet content Row( modifier = - Modifier.fillMaxWidth() - .clickable { - showBottomSheet = false - tunnelFileImportResultLauncher.launch(Constants.ALLOWED_FILE_TYPES) - } - .padding(10.dp), + Modifier + .fillMaxWidth() + .clickable { + showBottomSheet = false + tunnelFileImportResultLauncher.launch(Constants.ALLOWED_FILE_TYPES) + } + .padding(10.dp), ) { Icon( Icons.Filled.FileOpen, @@ -396,23 +410,24 @@ fun MainScreen( HorizontalDivider() Row( modifier = - Modifier.fillMaxWidth() - .clickable { - scope.launch { - showBottomSheet = false - val scanOptions = ScanOptions() - scanOptions.setDesiredBarcodeFormats(ScanOptions.QR_CODE) - scanOptions.setOrientationLocked(true) - scanOptions.setPrompt( - context.getString(R.string.scanning_qr) - ) - scanOptions.setBeepEnabled(false) - scanOptions.captureActivity = - CaptureActivityPortrait::class.java - scanLauncher.launch(scanOptions) - } + Modifier + .fillMaxWidth() + .clickable { + scope.launch { + showBottomSheet = false + val scanOptions = ScanOptions() + scanOptions.setDesiredBarcodeFormats(ScanOptions.QR_CODE) + scanOptions.setOrientationLocked(true) + scanOptions.setPrompt( + context.getString(R.string.scanning_qr) + ) + scanOptions.setBeepEnabled(false) + scanOptions.captureActivity = + CaptureActivityPortrait::class.java + scanLauncher.launch(scanOptions) } - .padding(10.dp), + } + .padding(10.dp), ) { Icon( Icons.Filled.QrCode, @@ -428,14 +443,15 @@ fun MainScreen( HorizontalDivider() Row( modifier = - Modifier.fillMaxWidth() - .clickable { - showBottomSheet = false - navController.navigate( - "${Screen.Config.route}/${Constants.MANUAL_TUNNEL_CONFIG_ID}", - ) - } - .padding(10.dp), + Modifier + .fillMaxWidth() + .clickable { + showBottomSheet = false + navController.navigate( + "${Screen.Config.route}/${Constants.MANUAL_TUNNEL_CONFIG_ID}", + ) + } + .padding(10.dp), ) { Icon( Icons.Filled.Create, @@ -454,9 +470,11 @@ fun MainScreen( horizontalAlignment = Alignment.Start, verticalArrangement = Arrangement.Top, modifier = - Modifier.fillMaxWidth() - .fillMaxHeight(.90f) - .overscroll(ScrollableDefaults.overscrollEffect()), + Modifier + .fillMaxWidth() + .fillMaxHeight(.90f) + .overscroll(ScrollableDefaults.overscrollEffect()) + .padding(innerPadding), state = rememberLazyListState(0, uiState.tunnels.count()), userScrollEnabled = true, reverseLayout = true, @@ -496,14 +514,18 @@ fun MainScreen( Icons.Rounded.Star, stringResource(R.string.status), tint = leadingIconColor, - modifier = Modifier.padding(end = 10.dp).size(20.dp), + modifier = Modifier + .padding(end = 10.dp) + .size(20.dp), ) } else { Icon( Icons.Rounded.Circle, stringResource(R.string.status), tint = leadingIconColor, - modifier = Modifier.padding(end = 15.dp).size(15.dp), + modifier = Modifier + .padding(end = 15.dp) + .size(15.dp), ) } }, diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt index 86e4634..4e59c67 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt @@ -20,6 +20,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize @@ -93,6 +94,7 @@ import java.io.File ) @Composable fun SettingsScreen( + padding: PaddingValues, viewModel: SettingsViewModel = hiltViewModel(), showSnackbarMessage: (String) -> Unit, focusRequester: FocusRequester @@ -246,7 +248,7 @@ fun SettingsScreen( Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Top, - modifier = Modifier.fillMaxSize().verticalScroll(scrollState), + modifier = Modifier.fillMaxSize().verticalScroll(scrollState).padding(padding), ) { Icon( Icons.Rounded.LocationOff, @@ -312,7 +314,7 @@ fun SettingsScreen( Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, - modifier = Modifier.fillMaxSize(), + modifier = Modifier.fillMaxSize().padding(padding), ) { Text( stringResource(R.string.one_tunnel_required), @@ -327,7 +329,7 @@ fun SettingsScreen( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Top, modifier = - Modifier.fillMaxSize().verticalScroll(scrollState).clickable( + Modifier.fillMaxSize().padding(padding).verticalScroll(scrollState).clickable( indication = null, interactionSource = interactionSource, ) { diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt index 50eab8a..62f347a 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize @@ -56,6 +57,7 @@ import com.zaneschepke.wireguardautotunnel.util.Event @Composable fun SupportScreen( + padding: PaddingValues, viewModel: SupportViewModel = hiltViewModel(), showSnackbarMessage: (String) -> Unit, focusRequester: FocusRequester @@ -102,7 +104,7 @@ fun SupportScreen( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Top, modifier = - Modifier.fillMaxSize() + Modifier.fillMaxSize().padding(padding) .verticalScroll(rememberScrollState()) .focusable() ) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cb6c60a..75528b1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -167,4 +167,12 @@ Delete tunnel Are you sure you would like to delete this tunnel? Yes + Resume + Pause + paused + active + Tunneling apps + included + excluded + all \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Constants.kt b/buildSrc/src/main/kotlin/Constants.kt index 15a82fb..df0f671 100644 --- a/buildSrc/src/main/kotlin/Constants.kt +++ b/buildSrc/src/main/kotlin/Constants.kt @@ -1,7 +1,7 @@ object Constants { - const val VERSION_NAME = "3.3.6" + const val VERSION_NAME = "3.3.7" const val JVM_TARGET = "17" - const val VERSION_CODE = 33600 + const val VERSION_CODE = 33700 const val TARGET_SDK = 34 const val MIN_SDK = 26 const val APP_ID = "com.zaneschepke.wireguardautotunnel" diff --git a/fastlane/metadata/android/en-US/changelogs/33700.txt b/fastlane/metadata/android/en-US/changelogs/33700.txt new file mode 100644 index 0000000..b9819ec --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/33700.txt @@ -0,0 +1,2 @@ +What's new: +- Tunnel display UI bug fix \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3967c52..b2906d3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -97,5 +97,4 @@ zxing-android-embedded = { module = "com.journeyapps:zxing-android-embedded", ve android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hiltAndroid" } -ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } -androidLibrary = { id = "com.android.library", version.ref = "androidGradlePlugin" } \ No newline at end of file +ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } \ No newline at end of file