mirror of
https://github.com/CherretGit/zaprett-app.git
synced 2025-12-10 05:29:37 +05:00
useModule to view model
This commit is contained in:
1
.idea/vcs.xml
generated
1
.idea/vcs.xml
generated
@@ -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" />
|
||||
|
||||
@@ -71,6 +71,7 @@ cargo {
|
||||
module = "../rust"
|
||||
libname = "byedpi"
|
||||
targets = listOf("arm", "arm64", "x86", "x86_64")
|
||||
profile = "release"
|
||||
}
|
||||
|
||||
tasks.preBuild {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user