useModule to view model

This commit is contained in:
CherretGit
2025-10-10 16:51:37 +07:00
parent cd44a09cfc
commit 44fbb5fa98
5 changed files with 48 additions and 51 deletions

1
.idea/vcs.xml generated
View File

@@ -2,7 +2,6 @@
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="$PROJECT_DIR$/app/src/main/cpp/byedpi" vcs="Git" />
<mapping directory="$PROJECT_DIR$/app/src/main/jni/hev-socks5-tunnel" vcs="Git" />
<mapping directory="$PROJECT_DIR$/app/src/main/jni/hev-socks5-tunnel/src/core" vcs="Git" />
<mapping directory="$PROJECT_DIR$/app/src/main/jni/hev-socks5-tunnel/third-part/hev-task-system" vcs="Git" />

View File

@@ -71,6 +71,7 @@ cargo {
module = "../rust"
libname = "byedpi"
targets = listOf("arm", "arm64", "x86", "x86_64")
profile = "release"
}
tasks.preBuild {

View File

@@ -97,7 +97,7 @@ fun SettingsScreen(navController: NavController, viewModel : SettingsViewModel =
val context = LocalContext.current
val sharedPreferences = remember { context.getSharedPreferences("settings", Context.MODE_PRIVATE) }
val editor = remember { sharedPreferences.edit() }
val useModule = remember { mutableStateOf(sharedPreferences.getBoolean("use_module", false)) }
val useModule = viewModel.useModule.collectAsState()
val updateOnBoot = remember { mutableStateOf(sharedPreferences.getBoolean("update_on_boot", true)) }
val autoRestart = viewModel.autoRestart.collectAsState()
val autoUpdate = remember { mutableStateOf(sharedPreferences.getBoolean("auto_update", true)) }
@@ -124,17 +124,11 @@ fun SettingsScreen(navController: NavController, viewModel : SettingsViewModel =
title = stringResource(R.string.btn_use_root),
checked = useModule.value,
onToggle = { isChecked ->
useModule(
viewModel.useModule(
context = context,
checked = isChecked,
openNoRootDialog = openNoRootDialog,
openNoModuleDialog = openNoModuleDialog
) { success ->
if (success) {
useModule.value = isChecked
if (!isChecked) stopService { }
}
}
openNoModuleDialog = openNoModuleDialog)
}
),
Setting.Toggle(
@@ -485,46 +479,6 @@ private fun ListBottomSheet(
}
}
private fun useModule(context: Context, checked: Boolean, openNoRootDialog: MutableState<Boolean>, openNoModuleDialog: MutableState<Boolean>, callback: (Boolean) -> Unit) {
val sharedPreferences = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
if (checked) {
checkRoot { hasRoot ->
if (hasRoot) {
checkModuleInstallation { hasModule ->
if (hasModule) {
editor.putBoolean("use_module", true)
.putBoolean("update_on_boot", true)
.apply()
if (ByeDpiVpnService.status == ServiceStatus.Connected) {
context.startService(Intent(context, ByeDpiVpnService::class.java).apply {
action = "STOP_VPN"
})
}
editor.remove("lists").apply()
editor.remove("active_strategy").apply()
editor.remove("applist").apply()
editor.remove("whitelist").apply()
editor.remove("blacklist").apply()
callback(true)
} else {
openNoModuleDialog.value = true
}
}
} else {
openNoRootDialog.value = true
}
}
} else {
editor.putBoolean("use_module", false)
.putBoolean("update_on_boot", false)
.apply()
callback(true)
}
}
@Composable

View File

@@ -50,7 +50,7 @@ class HomeViewModel(application: Application) : AndroidViewModel(application) {
var nfqwsVer = mutableStateOf(context.getString(R.string.unknown_text))
private set
var byedpiVer = mutableStateOf("0.17.2")
var byedpiVer = mutableStateOf("0.17.3")
private set
var serviceMode = mutableIntStateOf(R.string.service_mode_ciadpi)

View File

@@ -3,12 +3,18 @@ package com.cherret.zaprett.ui.viewmodel
import android.app.Application
import android.content.Context
import android.content.Context.MODE_PRIVATE
import android.content.Intent
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
import android.graphics.drawable.Drawable
import androidx.compose.runtime.MutableState
import androidx.lifecycle.AndroidViewModel
import com.cherret.zaprett.byedpi.ByeDpiVpnService
import com.cherret.zaprett.data.AppListType
import com.cherret.zaprett.data.ServiceStatus
import com.cherret.zaprett.utils.addPackageToList
import com.cherret.zaprett.utils.checkModuleInstallation
import com.cherret.zaprett.utils.checkRoot
import com.cherret.zaprett.utils.getAppList
import com.cherret.zaprett.utils.getStartOnBoot
import com.cherret.zaprett.utils.removePackageFromList
@@ -27,12 +33,15 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application
private val _selectedPackages = MutableStateFlow<Set<String>>(emptySet())
val selectedPackages: StateFlow<Set<String>> = _selectedPackages.asStateFlow()
private val _currentListType = MutableStateFlow(AppListType.Whitelist)
private val _useModule = MutableStateFlow(false)
val useModule: StateFlow<Boolean> = _useModule
private val _autoRestart = MutableStateFlow(false)
val autoRestart: StateFlow<Boolean> = _autoRestart
init {
refreshApplications()
_useModule.value = context.getSharedPreferences("settings", MODE_PRIVATE).getBoolean("use_module", false)
getStartOnBoot { value ->
_autoRestart.value = value
}
@@ -109,6 +118,40 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application
refreshApplications()
}
fun useModule(context: Context, checked: Boolean, openNoRootDialog: MutableState<Boolean>, openNoModuleDialog: MutableState<Boolean>) {
val sharedPreferences = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
if (checked) {
checkRoot { hasRoot ->
if (hasRoot) {
checkModuleInstallation { hasModule ->
if (hasModule) {
editor.putBoolean("use_module", true).apply()
if (ByeDpiVpnService.status == ServiceStatus.Connected) {
context.startService(Intent(context, ByeDpiVpnService::class.java).apply {
action = "STOP_VPN"
})
}
editor.remove("lists").apply()
editor.remove("active_strategy").apply()
editor.remove("applist").apply()
editor.remove("whitelist").apply()
editor.remove("blacklist").apply()
_useModule.value = true
} else {
openNoModuleDialog.value = true
}
}
} else {
openNoRootDialog.value = true
}
}
} else {
editor.putBoolean("use_module", false).apply()
_useModule.value = false
}
}
fun handleAutoRestart(context: Context) {
val sharedPreferences = context.getSharedPreferences("settings", MODE_PRIVATE)
if (sharedPreferences.getBoolean("use_module", false)) {