|
@@ -57,8 +57,9 @@ import com.google.gson.reflect.TypeToken
|
|
|
import com.vpn.fastestvpnservice.R
|
|
|
import com.vpn.fastestvpnservice.beans.SelectApplicationEntry
|
|
|
import com.vpn.fastestvpnservice.beans.SplitTunnelData
|
|
|
-import com.vpn.fastestvpnservice.beans.splitTunnelList2
|
|
|
+import com.vpn.fastestvpnservice.constants.splitList
|
|
|
import com.vpn.fastestvpnservice.customItems.SplitTunnelingItem
|
|
|
+import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
|
|
|
import java.util.ArrayList
|
|
|
import java.util.SortedSet
|
|
|
import java.util.TreeSet
|
|
@@ -130,9 +131,11 @@ fun SplitTunneling(navHostController: NavHostController) {
|
|
|
|
|
|
@Composable
|
|
|
fun ColumnScope.ShowRadioButtons() {
|
|
|
- val splitList = listOf("All apps use the VPN", "Only allow selected apps to use the vpn",
|
|
|
- "Do not allow selected apps to use the vpn")
|
|
|
- var selectedList by remember { mutableStateOf(splitList[0]) }
|
|
|
+ val context = LocalContext.current
|
|
|
+ val prefHelper = BasePreferenceHelper(context = context)
|
|
|
+
|
|
|
+
|
|
|
+ var selectedList by remember { mutableStateOf(prefHelper.getSplitPosition()) }
|
|
|
|
|
|
Spacer(modifier = Modifier.height(15.dp))
|
|
|
|
|
@@ -142,12 +145,13 @@ fun ColumnScope.ShowRadioButtons() {
|
|
|
.fillMaxWidth()
|
|
|
.background(Color.Transparent)
|
|
|
.padding(top = 0.dp)
|
|
|
- .selectable(
|
|
|
- selected = selectedList == list,
|
|
|
- onClick = {
|
|
|
- selectedList = list
|
|
|
- },
|
|
|
- )
|
|
|
+ .selectable(
|
|
|
+ selected = selectedList == list,
|
|
|
+ onClick = {
|
|
|
+ selectedList = list
|
|
|
+ prefHelper.saveSplitPosition(list)
|
|
|
+ },
|
|
|
+ )
|
|
|
// .indication(
|
|
|
// indication = null,
|
|
|
// interactionSource = remember {
|
|
@@ -160,6 +164,7 @@ fun ColumnScope.ShowRadioButtons() {
|
|
|
RadioButton(selected = list == selectedList,
|
|
|
onClick = {
|
|
|
selectedList = list
|
|
|
+ prefHelper.saveSplitPosition(list)
|
|
|
},
|
|
|
colors = RadioButtonDefaults.colors(
|
|
|
selectedColor = colorResource(
|
|
@@ -188,13 +193,22 @@ fun ColumnScope.ShowRadioButtons() {
|
|
|
color = colorResource(id = R.color.gray_icon)
|
|
|
) {}
|
|
|
|
|
|
- val context = LocalContext.current
|
|
|
val apps: ArrayList<SelectApplicationEntry> = ArrayList()
|
|
|
val apps2: ArrayList<SelectApplicationEntry> = ArrayList()
|
|
|
val seen: SortedSet<String> = TreeSet()
|
|
|
var selectedAppsList = ArrayList<String>()
|
|
|
var selectedAppsListNoVpn = ArrayList<String>()
|
|
|
|
|
|
+ if (!prefHelper.getSplitTunneledApps().equals("")) {
|
|
|
+ val type = object : TypeToken<ArrayList<String>>() {}.type
|
|
|
+ selectedAppsList = Gson().fromJson(prefHelper.getSplitTunneledApps(), type)
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!prefHelper.getSplitTunneledAppsNoVpn().equals("")) {
|
|
|
+ val type = object : TypeToken<ArrayList<String>>() {}.type
|
|
|
+ selectedAppsListNoVpn = Gson().fromJson(prefHelper.getSplitTunneledAppsNoVpn(), type)
|
|
|
+ }
|
|
|
+
|
|
|
val mPackageManager: PackageManager = context.packageManager
|
|
|
|
|
|
for (info in mPackageManager.getInstalledApplications(PackageManager.GET_META_DATA)) { /* skip apps that can't access the network anyway */
|
|
@@ -208,6 +222,23 @@ fun ColumnScope.ShowRadioButtons() {
|
|
|
if (info.packageName == context.packageName) continue
|
|
|
val entry = SelectApplicationEntry(mPackageManager, info, false)
|
|
|
|
|
|
+ prefHelper.getSplitPosition().let {
|
|
|
+ when (it){
|
|
|
+ splitList[1] -> {
|
|
|
+ if (!prefHelper.getSplitTunneledApps().equals("")) {
|
|
|
+ entry.setSelected(mutableStateOf(selectedAppsList.contains(info.packageName))) //= selectedAppsList!!.contains(info.packageName)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ splitList[2] -> {
|
|
|
+ if (!prefHelper.getSplitTunneledAppsNoVpn().equals("")) {
|
|
|
+ entry.setSelected(mutableStateOf(selectedAppsListNoVpn.contains(info.packageName))) //= selectedAppsList!!.contains(info.packageName)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Log.d("test_splittunnel_data", "${entry.getInfo()?.name}")
|
|
|
+
|
|
|
Log.d("entry split", entry.toString())
|
|
|
|
|
|
apps.add(entry)
|
|
@@ -225,6 +256,21 @@ fun ColumnScope.ShowRadioButtons() {
|
|
|
if (info.packageName == context.packageName) continue
|
|
|
val entry = SelectApplicationEntry(mPackageManager, info, false)
|
|
|
|
|
|
+ prefHelper.getSplitPosition().let {
|
|
|
+ when (it){
|
|
|
+ splitList[1] -> {
|
|
|
+ if (!prefHelper.getSplitTunneledApps().equals("")) {
|
|
|
+ entry.setSelected(mutableStateOf(selectedAppsList.contains(info.packageName))) //= selectedAppsList!!.contains(info.packageName)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ splitList[2] -> {
|
|
|
+ if (!prefHelper.getSplitTunneledAppsNoVpn().equals("")) {
|
|
|
+ entry.setSelected(mutableStateOf(selectedAppsListNoVpn.contains(info.packageName))) //= selectedAppsList!!.contains(info.packageName)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
apps.add(entry)
|
|
|
apps2.add(entry)
|
|
|
seen.add(info.packageName)
|
|
@@ -255,8 +301,6 @@ fun ColumnScope.ShowRadioButtons() {
|
|
|
@Composable
|
|
|
fun ColumnScope.ShowSplitTunnelList(list: List<SelectApplicationEntry>) {
|
|
|
|
|
|
-
|
|
|
-
|
|
|
Box(modifier = Modifier
|
|
|
.padding(top = 5.dp)
|
|
|
.fillMaxSize()
|
|
@@ -264,7 +308,7 @@ fun ColumnScope.ShowSplitTunnelList(list: List<SelectApplicationEntry>) {
|
|
|
) {
|
|
|
LazyColumn() {
|
|
|
items(items = list) { app ->
|
|
|
- SplitTunnelingItem(app)
|
|
|
+ SplitTunnelingItem(app, list)
|
|
|
}
|
|
|
}
|
|
|
}
|