From f0c3baa3bddc6f2610431d254e426213566fe860 Mon Sep 17 00:00:00 2001 From: white Date: Mon, 8 Dec 2025 11:44:15 +0300 Subject: [PATCH 1/4] change NoHostsCard and it's logic, added getAllStrategies(prefs).isEmpty() testing --- .../zaprett/ui/viewmodel/StrategySelectionViewModel.kt | 4 ++-- app/src/main/res/values-ru/strings.xml | 4 ++-- app/src/main/res/values/strings.xml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/cherret/zaprett/ui/viewmodel/StrategySelectionViewModel.kt b/app/src/main/java/com/cherret/zaprett/ui/viewmodel/StrategySelectionViewModel.kt index 688c047..eec4bbd 100644 --- a/app/src/main/java/com/cherret/zaprett/ui/viewmodel/StrategySelectionViewModel.kt +++ b/app/src/main/java/com/cherret/zaprett/ui/viewmodel/StrategySelectionViewModel.kt @@ -188,8 +188,8 @@ class StrategySelectionViewModel(application: Application) : AndroidViewModel(ap } fun checkHosts() { - if (getActiveLists(prefs).isEmpty()) noHostsCard.value = true - Log.d("getActiveLists.isEmpty", getActiveLists(prefs).isEmpty().toString()) + if (getActiveLists(prefs).isEmpty() || getAllStrategies(prefs).isEmpty()) noHostsCard.value = true + Log.d("getActiveLists.isEmpty || getAllStrategies.isEmpty", getActiveLists(prefs).isEmpty().toString()) } fun startVpn() { ContextCompat.startForegroundService(context, Intent(context, ByeDpiVpnService::class.java).apply { action = "START_VPN" }) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index ee205aa..540ad2c 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -114,8 +114,8 @@ Введите таймаут пробы Информация "В этом разделе настроек приложения представлен перебор стратегий\n Подбор проходит среди скачанных стратегий, поэтому заранее скачайте из репозитория или добавьте из файловой системы интересующие вас стратегии для сравнения. \n Перед началом так же выберете один или несколько листов доменов на вкладке \"Листы\", затем нажмите на \"Начать подбор\". Не используйте для перебора списки с большим количеством доменов." - Нет активных листов - Не обнаружено активных списков хостов, включите один или несколько, иначе подбор не сработает + Нет включенных листов/стратегий + Не обнаружено активных списков хостов, либо доступных стратегий. Включите один или несколько, или скачайте стратегии для проверки, иначе подбор не сработает Доступные домены Нет разрешения на доступ к файлам Сброс настроек diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 138b14b..cab57c6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -119,8 +119,8 @@ Enter probe timeout Tip This section of the application settings allows you to iterate through strategies.\n The selection is based on downloaded strategies, so download the strategies you\'re interested in from the repository or add them from the file system for comparison.\n Before starting, select one or more domain lists in the \"Lists\" tab, then click \"Start selection\". Avoid using lists with a large number of domains. - No active hosts - No active host lists found, please enable one or more, otherwise the selection will not work + No active hosts/strategies + No active host lists or available strategies were found. Please enable one or more, or download strategies for testing, otherwise the selection will not work. Available domains Missing permission to access files Reset settings From efb60d0c93165a39f57c12160c5ab5854d9c373c Mon Sep 17 00:00:00 2001 From: CherretGit Date: Mon, 8 Dec 2025 16:02:44 +0700 Subject: [PATCH 2/4] fix shadow --- .../zaprett/ui/screen/StrategySelectionScreen.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/cherret/zaprett/ui/screen/StrategySelectionScreen.kt b/app/src/main/java/com/cherret/zaprett/ui/screen/StrategySelectionScreen.kt index d971fbb..f5d0a0b 100644 --- a/app/src/main/java/com/cherret/zaprett/ui/screen/StrategySelectionScreen.kt +++ b/app/src/main/java/com/cherret/zaprett/ui/screen/StrategySelectionScreen.kt @@ -11,9 +11,12 @@ import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.ExperimentalMaterial3Api @@ -25,7 +28,6 @@ import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily @@ -46,7 +48,9 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf +import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.unit.dp import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController @@ -149,8 +153,13 @@ fun StrategySelectionScreen(navController: NavController, vpnLauncher: ActivityR snackbarHost = { SnackbarHost(snackbarHostState) }, content = { paddingValues -> LazyColumn ( + contentPadding = PaddingValues( + top = paddingValues.calculateTopPadding(), + bottom = paddingValues.calculateBottomPadding() + 40.dp + ), modifier = Modifier - .padding(paddingValues) + .navigationBarsPadding() + .fillMaxSize() ) { item { Row ( From 87a9740aad05535c744edfcfb465c7690693ba2d Mon Sep 17 00:00:00 2001 From: CherretGit Date: Mon, 8 Dec 2025 16:04:52 +0700 Subject: [PATCH 3/4] remove unused import --- .../ui/screen/StrategySelectionScreen.kt | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/cherret/zaprett/ui/screen/StrategySelectionScreen.kt b/app/src/main/java/com/cherret/zaprett/ui/screen/StrategySelectionScreen.kt index f5d0a0b..9deedd5 100644 --- a/app/src/main/java/com/cherret/zaprett/ui/screen/StrategySelectionScreen.kt +++ b/app/src/main/java/com/cherret/zaprett/ui/screen/StrategySelectionScreen.kt @@ -17,40 +17,39 @@ import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBarsPadding -import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Scaffold -import androidx.compose.material3.SnackbarHost -import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBar -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.Font -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.sp import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.Info import androidx.compose.material3.AlertDialog +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.Icon import androidx.compose.material3.IconButton +import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController From 77823252f257fbf8bb9214b3832950735ed2e170 Mon Sep 17 00:00:00 2001 From: white Date: Mon, 8 Dec 2025 12:07:38 +0300 Subject: [PATCH 4/4] add autostop on strategy testing error --- .../zaprett/ui/viewmodel/StrategySelectionViewModel.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/com/cherret/zaprett/ui/viewmodel/StrategySelectionViewModel.kt b/app/src/main/java/com/cherret/zaprett/ui/viewmodel/StrategySelectionViewModel.kt index eec4bbd..60137c0 100644 --- a/app/src/main/java/com/cherret/zaprett/ui/viewmodel/StrategySelectionViewModel.kt +++ b/app/src/main/java/com/cherret/zaprett/ui/viewmodel/StrategySelectionViewModel.kt @@ -122,16 +122,20 @@ class StrategySelectionViewModel(application: Application) : AndroidViewModel(ap } suspend fun performTest() { val targets = readActiveListsLines() + var stopTest : Boolean = false; for (index in strategyStates.indices) { val current = strategyStates[index] + if (stopTest) break strategyStates[index] = current.copy(status = StrategyTestingStatus.Testing) enableStrategy(current.path, prefs) if (prefs.getBoolean("use_module", false)) { getStatus { if (it) stopService { error -> _errorFlow.value = error + if (error.isNotEmpty()) stopTest = true } } startService { error -> _errorFlow.value = error + if (error.isNotEmpty()) stopTest = true } try { val progress = countReachable(index, targets) @@ -143,6 +147,7 @@ class StrategySelectionViewModel(application: Application) : AndroidViewModel(ap } finally { stopService { error -> _errorFlow.value = error + if (error.isNotEmpty()) stopTest = true } disableStrategy(current.path, prefs) }