Browse Source

working on server list, lagging...

Khubaib 11 months ago
parent
commit
bc65056d25

BIN
app/release/app-release-3.2.7.2.apk


+ 31 - 6
app/src/main/java/com/vpn/fastestvpnservice/beans/SplitTunnelList.kt

@@ -10,16 +10,41 @@ data class SplitTunnelData(
     var isSelected: Boolean
 )
 
+val serversListTest =
+    Server(
+        id = 3,
+    continent= "Europe",
+country= "France",
+state= "Paris",
+city= "Paris",
+name= "France",
+server_name= "Paris",
+dns= "fr.jumptoserver.com",
+iso= "FR",
+country_sort= 1000,
+lt= 48.8714,
+lg= 2.32141,
+ip= "146.70.40.99",
+port= 4443,
+protocol= "UDP",
+ipsec= "",
+active= true,
+flag= "https=//fastestvpn.com/flags/fr.png",
+connection_count= 23,
+wg_key= "658QxufMbjOTmB61Z7f+c7Rjg7oqWLnepTalqBERjF0=",
+enable= 1,
+    )
+
 
 //val splitTunnelList1 = listOf(
-//    SplitTunnelData(R.drawable.adaptive3x, "Adaptive Connectivity Services", mutableStateOf(false)),
-//    SplitTunnelData(R.drawable.accessibility3x, "Android Accessibility Suite", mutableStateOf(false)),
-//    SplitTunnelData(R.drawable.calculator3x, "Calculator", mutableStateOf(false))
+//    SplitTunnelData(R.drawable.adaptive3x, Adaptive Connectivity Services, mutableStateOf(false)),
+//    SplitTunnelData(R.drawable.accessibility3x, Android Accessibility Suite, mutableStateOf(false)),
+//    SplitTunnelData(R.drawable.calculator3x, Calculator, mutableStateOf(false))
 //)
 
 //val splitTunnelList2 = listOf(
-//    SplitTunnelData(R.drawable.adaptive3x, "Adaptive Connectivity Services", mutableStateOf(false)),
-//    SplitTunnelData(R.drawable.accessibility3x, "Android Accessibility Suite", mutableStateOf(false)),
-//    SplitTunnelData(R.drawable.calculator3x, "Calculator", mutableStateOf(false))
+//    SplitTunnelData(R.drawable.adaptive3x, Adaptive Connectivity Services, mutableStateOf(false)),
+//    SplitTunnelData(R.drawable.accessibility3x, Android Accessibility Suite, mutableStateOf(false)),
+//    SplitTunnelData(R.drawable.calculator3x, Calculator, mutableStateOf(false))
 //)
 

+ 204 - 224
app/src/main/java/com/vpn/fastestvpnservice/customItems/CountryItem.kt

@@ -1,13 +1,9 @@
 package com.vpn.fastestvpnservice.customItems
 
-import android.os.Looper
 import android.util.Log
-import android.widget.Toast
-import androidx.compose.foundation.Image
 import androidx.compose.foundation.background
 import androidx.compose.foundation.border
 import androidx.compose.foundation.clickable
-import androidx.compose.foundation.gestures.detectTapGestures
 import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
@@ -15,13 +11,10 @@ import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.ColumnScope
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.lazy.LazyColumn
-import androidx.compose.foundation.lazy.items
 import androidx.compose.foundation.shape.CircleShape
 import androidx.compose.material3.Icon
 import androidx.compose.material3.IconButton
@@ -45,41 +38,31 @@ import androidx.compose.ui.draw.alpha
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.draw.paint
 import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.res.colorResource
 import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.text.TextStyle
-import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
 import androidx.lifecycle.viewmodel.compose.viewModel
 import androidx.navigation.NavHostController
 import androidx.navigation.compose.rememberNavController
-import com.vpn.fastestvpnservice.R
-import com.vpn.fastestvpnservice.beans.CountryServerList
-import com.vpn.fastestvpnservice.beans.Server
-import com.vpn.fastestvpnservice.beans.allLocationsList
-import com.vpn.fastestvpnservice.beans.favList
-import com.vpn.fastestvpnservice.beans.favListServer
-import com.vpn.fastestvpnservice.utils.Utils
 import com.stealthcopter.networktools.Ping
 import com.stealthcopter.networktools.ping.PingResult
 import com.stealthcopter.networktools.ping.PingStats
-import com.vpn.fastestvpnservice.beans.smartList
+import com.vpn.fastestvpnservice.R
+import com.vpn.fastestvpnservice.beans.Server
+import com.vpn.fastestvpnservice.beans.favListServer
 import com.vpn.fastestvpnservice.beans.toChangeServer
 import com.vpn.fastestvpnservice.constants.smartConnect
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.onServer
-import com.vpn.fastestvpnservice.sealedClass.BottomBarScreen
+import com.vpn.fastestvpnservice.screens.serverListViewModelSplash
 import com.vpn.fastestvpnservice.sealedClass.Screen
+import com.vpn.fastestvpnservice.utils.Utils
 import com.vpn.fastestvpnservice.viewmodels.HomeViewModel
 import com.vpn.fastestvpnservice.viewmodels.ServerListViewModel
 import com.vpn.fastestvpnservice.viewmodels.SplashViewModel
-import java.lang.Exception
-import java.util.logging.Handler
 
 var serverInfoObj: MutableState<Server> = mutableStateOf(Server())
 
@@ -90,7 +73,6 @@ fun CountryItem(
     countryTotalServers: Int,
     navHostController: NavHostController
 ) {
-    Log.d("test_countrySize", "CountryItem Called ${server.server_name} ${server.totalServers}")
     Box(
         modifier = Modifier
             .fillMaxWidth()
@@ -103,12 +85,12 @@ fun CountryItem(
         val basePreferenceHelper = BasePreferenceHelper(context)
         val countrySize by rememberSaveable { mutableStateOf(server.totalServers) }
         var isServerExpanded by rememberSaveable { mutableStateOf(false) }
-        val serverListViewModel: ServerListViewModel = viewModel{
-            ServerListViewModel(context)
-        }
-        val splashViewModel: SplashViewModel = viewModel{
-            SplashViewModel(context)
-        }
+//        val serverListViewModel: ServerListViewModel = viewModel{
+//            ServerListViewModel(context)
+//        }
+//        val splashViewModel: SplashViewModel = viewModel{
+//            SplashViewModel(context)
+//        }
         val scope = rememberCoroutineScope()
         val homeViewModel: HomeViewModel = viewModel {
             HomeViewModel(context, scope)
@@ -136,25 +118,25 @@ fun CountryItem(
             navHostController.popBackStack()
         }
 
-        countrySize.let { size ->
+//        countrySize.let { size -> }
 
-            Column {
-                /* Country Location's Row */
-                Row(
-                    verticalAlignment = Alignment.Top,
-                    horizontalArrangement = Arrangement.Start,
-                    modifier = Modifier
-                        .fillMaxWidth()
-                        .padding(
-                            start = 16.dp, end = 12.dp, top = 12.dp
-                        )
-                        .clickable(
-                            indication = null,
-                            interactionSource = remember { MutableInteractionSource() }
-                        ) {
-                            isServerExpanded = !isServerExpanded
+        Column {
+            /* Country Location's Row */
+            Row(
+                verticalAlignment = Alignment.Top,
+                horizontalArrangement = Arrangement.Start,
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .padding(
+                        start = 16.dp, end = 12.dp, top = 12.dp
+                    )
+                    .clickable(
+                        indication = null,
+                        interactionSource = remember { MutableInteractionSource() }
+                    ) {
+                        isServerExpanded = !isServerExpanded
 
-                            // commenting, open server list, not connecting by tap on tab
+                        // commenting, open server list, not connecting by tap on tab
 //                            if (server.enable == 1) {
 ////                                basePreferenceHelper.setServerObject(server)
 //                                isCountryServerClicked = true
@@ -166,82 +148,81 @@ fun CountryItem(
 //                                )
 //                            }
 
-                        }
-                ) {
-                    val icon = if (server.enable == 1) Utils.getDrawable(context, server.iso)
-                    else Utils.getDrawableGray(context, server.iso)
+                    }
+            ) {
+                val icon = if (server.enable == 1) Utils.getDrawable(context, server.iso)
+                else Utils.getDrawableGray(context, server.iso)
 
-                    Icon(
-                        painter = painterResource(id = icon),
-                        contentDescription = "Server Logo",
-                        tint = Color.Unspecified,
-                        modifier = Modifier
-                            .padding(bottom = 16.dp)
-                            .size(24.dp)
-                            .clip(CircleShape)
-                            .border(1.dp, colorResource(id = R.color.gray_opac_04), CircleShape)
-                            .paint(
-                                painter = painterResource(id = icon),
-                                contentScale = ContentScale.FillBounds
-                            )
-                    )
-                    Text(text = server.country!!,
-                        style = MaterialTheme.typography.labelMedium,
-                        color = MaterialTheme.colorScheme.primary,
-                        modifier = Modifier
-                            .padding(start = 16.dp, bottom = 18.dp)
-                            .align(Alignment.CenterVertically)
-                    )
-                    Spacer(modifier = Modifier.weight(1F))
-                    Text(text = "$countryTotalServers locations",
-                        style = MaterialTheme.typography.bodySmall,
-                        color = colorResource(id = R.color.dark_blue_gray_text),
-                        modifier = Modifier
-                            .padding(end = 30.dp, bottom = 18.dp)
-                            .align(Alignment.CenterVertically)
-                            .alpha(0.4F)
-                    )
+                Icon(
+                    painter = painterResource(id = icon),
+                    contentDescription = "Server Logo",
+                    tint = Color.Unspecified,
+                    modifier = Modifier
+                        .padding(bottom = 16.dp)
+                        .size(24.dp)
+                        .clip(CircleShape)
+                        .border(1.dp, colorResource(id = R.color.gray_opac_04), CircleShape)
+                        .paint(
+                            painter = painterResource(id = icon),
+                            contentScale = ContentScale.FillBounds
+                        )
+                )
+                Text(text = server.country!!,
+                    style = MaterialTheme.typography.labelMedium,
+                    color = MaterialTheme.colorScheme.primary,
+                    modifier = Modifier
+                        .padding(start = 16.dp, bottom = 18.dp)
+                        .align(Alignment.CenterVertically)
+                )
+                Spacer(modifier = Modifier.weight(1F))
+                Text(text = "$countryTotalServers locations",
+                    style = MaterialTheme.typography.bodySmall,
+                    color = colorResource(id = R.color.dark_blue_gray_text),
+                    modifier = Modifier
+                        .padding(end = 30.dp, bottom = 18.dp)
+                        .align(Alignment.CenterVertically)
+                        .alpha(0.4F)
+                )
 //            Spacer(modifier = Modifier.weight(1F))
-                    Icon(
-                        modifier = Modifier
-                            .padding(bottom = 18.dp, end = 0.dp)
-                            .size(12.dp, 7.dp)
-                            .align(Alignment.CenterVertically)
-                            .clickable(
-                                indication = null,
-                                interactionSource = remember { MutableInteractionSource() }
-                            ) { isServerExpanded = !isServerExpanded },
+                Icon(
+                    modifier = Modifier
+                        .padding(bottom = 18.dp, end = 0.dp)
+                        .size(12.dp, 7.dp)
+                        .align(Alignment.CenterVertically)
+                        .clickable(
+                            indication = null,
+                            interactionSource = remember { MutableInteractionSource() }
+                        ) { isServerExpanded = !isServerExpanded },
 
-                        painter = if (isServerExpanded) painterResource(
-                            id = R.drawable.dragarrow3x) else painterResource(
-                            id = R.drawable.downarrow3x),
+                    painter = if (isServerExpanded) painterResource(
+                        id = R.drawable.dragarrow3x) else painterResource(
+                        id = R.drawable.downarrow3x),
 
-                        contentDescription = "Server Logo",
-                        tint = MaterialTheme.colorScheme.primary,
-                    )
-                }
+                    contentDescription = "Server Logo",
+                    tint = MaterialTheme.colorScheme.primary,
+                )
+            }
 
-                /* Country Expandable's Row */
+            /* Country Expandable's Row */
                 if (isServerExpanded) {
                     val countriesServersData1 = basePreferenceHelper.getServerData().get(0).servers
                     countriesServersData1?.let {
-                        val serversGroup = serverListViewModel.getServerGroupList(server, it)
+                        val serversGroup = serverListViewModelSplash.getServerGroupList(server, it)
                         ExpandableRow(server = serversGroup, navHostController)
                     }
 
                 }
-            }
-
-            Surface(
-                modifier = Modifier
-                    .padding(start = 0.dp, end = 0.dp)
-                    .height(1.dp)
-                    .fillMaxWidth()
-                    .alpha(0.6F)
-                    .align(Alignment.BottomCenter),
-                color = colorResource(id = R.color.gray_icon)
-            ) {}
         }
+
+        Surface(
+            modifier = Modifier
+                .padding(start = 0.dp, end = 0.dp)
+                .height(1.dp)
+                .fillMaxWidth()
+                .alpha(0.6F)
+                .align(Alignment.BottomCenter),
+            color = colorResource(id = R.color.gray_icon)
+        ) {}
     }
 }
 
@@ -252,10 +233,10 @@ fun ColumnScope.ExpandableRow(
 ) {
     val context = LocalContext.current
     val basePreferenceHelper = BasePreferenceHelper(context)
-    val serverListViewModel: ServerListViewModel = viewModel{
-        ServerListViewModel(context)
-    }
-    val splashViewModel: SplashViewModel = viewModel{ SplashViewModel(context) }
+//    val serverListViewModel: ServerListViewModel = viewModel{
+//        ServerListViewModel(context)
+//    }
+//    val splashViewModel: SplashViewModel = viewModel{ SplashViewModel(context) }
     val scope = rememberCoroutineScope()
     val homeViewModel: HomeViewModel = viewModel { HomeViewModel(context, scope) }
     var isExpServerClicked by remember { mutableStateOf(false) }
@@ -268,134 +249,133 @@ fun ColumnScope.ExpandableRow(
             )
             .background(Color.Transparent)
     ) {
-
         // Expandable Row
         server.let { serverData ->
-                serverData.forEachIndexed { index, serverInfo ->
-                    Log.d("serverInfo_ping", "serverInfo ${serverInfo.server_name} :: ${serverInfo.ping}")
+            serverData.forEachIndexed { index, serverInfo ->
+//                Log.d("serverInfo_ping", "serverInfo ${serverInfo.server_name} :: ${serverInfo.ping}")
 
-                    var isFavorite by rememberSaveable { mutableStateOf(serverInfo.isFavourited) }
-                    val isServerFavourited: Boolean = serverInfo.isFavourited == true
-                    Log.d("test-server_fav_d", "$isFavorite")
+                var isFavorite by rememberSaveable { mutableStateOf(serverInfo.isFavourited) }
+                val isServerFavourited: Boolean = serverInfo.isFavourited == true
+                Log.d("test-server_fav_d", "$isFavorite")
 
-                    if (isExpServerClicked) {
-                        onServer.onServerSelected(
-                            context,
-                            homeViewModel,
-                            onClick = {isExpServerClicked = false},
-                            true,
-                            serverInfoObj.value
-                        )
-                        navHostController.popBackStack()
-                    }
-
-                    var ping by rememberSaveable { mutableIntStateOf(0) }
+                if (isExpServerClicked) {
+                    onServer.onServerSelected(
+                        context,
+                        homeViewModel,
+                        onClick = {isExpServerClicked = false},
+                        true,
+                        serverInfoObj.value
+                    )
+                    navHostController.popBackStack()
+                }
 
-                    fun updatePing(newPing: Int) {
-                        ping = newPing
-                    }
+//                    var ping by rememberSaveable { mutableIntStateOf(0) }
+//
+//                    fun updatePing(newPing: Int) {
+//                        ping = newPing
+//                    }
+//
+//                    LaunchedEffect(key1 = Unit) {
+//                        Log.d("test_new_ping", "Inside LE")
+////                while (true) {
+//                        Ping.onAddress(serverInfo.ip as String).setTimeOutMillis(1000).doPing(
+//                            object : Ping.PingListener{
+//                                override fun onResult(pingResult: PingResult?) {
+//                                    pingResult?.let {
+//                                        Log.d("test_new_ping", "pingResult = ${it.timeTaken.toInt()}")
+//                                        if (ping == 0) updatePing(it.timeTaken.toInt())
+//                                    }
+//                                }
+//                                override fun onError(e: Exception?) {}
+//                                override fun onFinished(pingStats: PingStats?) {}
+//                            }
+//                        )
+////                    delay(3 * 1000)
+////                }
+//                    }
 
-                    LaunchedEffect(key1 = Unit) {
-                        Log.d("test_new_ping", "Inside LE")
-//                while (true) {
-                        Ping.onAddress(serverInfo.ip as String).setTimeOutMillis(1000).doPing(
-                            object : Ping.PingListener{
-                                override fun onResult(pingResult: PingResult?) {
-                                    pingResult?.let {
-                                        Log.d("test_new_ping", "pingResult = ${it.timeTaken.toInt()}")
-                                        if (ping == 0) updatePing(it.timeTaken.toInt())
-                                    }
-                                }
-                                override fun onError(e: Exception?) {}
-                                override fun onFinished(pingStats: PingStats?) {}
-                            }
+                Row(
+                    verticalAlignment = Alignment.CenterVertically,
+                    horizontalArrangement = Arrangement.Start,
+                    modifier = Modifier
+                        .fillMaxWidth()
+                        .padding(
+                            vertical = 15.dp
                         )
-//                    delay(3 * 1000)
-//                }
-                    }
-
-                    Row(
-                        verticalAlignment = Alignment.CenterVertically,
-                        horizontalArrangement = Arrangement.Start,
-                        modifier = Modifier
-                            .fillMaxWidth()
-                            .padding(
-                                vertical = 15.dp
-                            )
-                            .background(Color.Transparent)
-                            .clickable(
-                                indication = null,
-                                interactionSource = remember { MutableInteractionSource() }
-                            ) {
-                                if (serverInfo.enable == 1) {
+                        .background(Color.Transparent)
+                        .clickable(
+                            indication = null,
+                            interactionSource = remember { MutableInteractionSource() }
+                        ) {
+                            if (serverInfo.enable == 1) {
 
-                                    if (toChangeServer.value) {
-                                        Log.d("test_change_Server", "true-Change")
-                                        basePreferenceHelper.saveSmartList(smartConnect[2])
-                                        basePreferenceHelper.setSmartServerObject(serverInfo)
-                                        navHostController.popBackStack()
-                                    } else {
-                                        Log.d("test_change_Server", "false : Connect")
-                                        serverInfoObj.value = serverInfo
-//                                    basePreferenceHelper.setServerObject(serverInfo)
-                                        isExpServerClicked = true
-                                    }
+                                if (toChangeServer.value) {
+                                    Log.d("test_change_Server", "true-Change")
+                                    basePreferenceHelper.saveSmartList(smartConnect[2])
+                                    basePreferenceHelper.setSmartServerObject(serverInfo)
+                                    navHostController.popBackStack()
                                 } else {
-                                    basePreferenceHelper.setSubscriptionServerObject(serverInfo)
-                                    Screen.Subscription.isTrue = true
-                                    navHostController.navigate(
-                                        Screen.Subscription.route
-                                    )
+                                    Log.d("test_change_Server", "false : Connect")
+                                    serverInfoObj.value = serverInfo
+//                                    basePreferenceHelper.setServerObject(serverInfo)
+                                    isExpServerClicked = true
                                 }
+                            } else {
+                                basePreferenceHelper.setSubscriptionServerObject(serverInfo)
+                                Screen.Subscription.isTrue = true
+                                navHostController.navigate(
+                                    Screen.Subscription.route
+                                )
                             }
-                    ) {
-                        Text(text = "${serverInfo.server_name}",
-                            style = MaterialTheme.typography.labelMedium,
-                            color = MaterialTheme.colorScheme.onSecondary,
-                            modifier = Modifier
-                                .padding(start = 16.dp, bottom = 0.dp)
-                                .align(Alignment.CenterVertically)
-                                .alpha(0.4F)
-                        )
-                        Spacer(modifier = Modifier.weight(1F))
-                        Text(text = "$ping ms",
-                            style = MaterialTheme.typography.displayMedium,
-                            color = colorResource(id = R.color.blue_text),
-                            modifier = Modifier
-                                .padding(start = 0.dp, end = 30.dp)
-                                .align(Alignment.CenterVertically)
-                        )
-                        IconButton(
-                            modifier = Modifier
-                                .padding(bottom = 0.dp, end = 16.dp)
-                                .size(25.dp)
-                                .align(Alignment.CenterVertically),
-                            onClick = {
+                        }
+                ) {
+                    Text(text = "${serverInfo.server_name}",
+                        style = MaterialTheme.typography.labelMedium,
+                        color = MaterialTheme.colorScheme.onSecondary,
+                        modifier = Modifier
+                            .padding(start = 16.dp, bottom = 0.dp)
+                            .align(Alignment.CenterVertically)
+                            .alpha(0.4F)
+                    )
+                    Spacer(modifier = Modifier.weight(1F))
+                    Text(text = "${serverInfo.ping} ms",
+                        style = MaterialTheme.typography.displayMedium,
+                        color = colorResource(id = R.color.blue_text),
+                        modifier = Modifier
+                            .padding(start = 0.dp, end = 30.dp)
+                            .align(Alignment.CenterVertically)
+                    )
+                    IconButton(
+                        modifier = Modifier
+                            .padding(bottom = 0.dp, end = 16.dp)
+                            .size(25.dp)
+                            .align(Alignment.CenterVertically),
+                        onClick = {
                             isFavorite = !isFavorite!!
-                            serverListViewModel.favAndUnFav(serverInfo)
+                            serverListViewModelSplash.favAndUnFav(serverInfo)
                         }
+                    )
+                    {
+                        Icon(
+                            painter = if (isServerFavourited) painterResource(
+                                id = R.drawable.fav_server3x) else painterResource(
+                                id = R.drawable.unfav_server3x),
+                            contentDescription = "Server Logo",
+                            tint = Color.Unspecified,
+                            modifier = Modifier.size(22.dp, 21.dp)
                         )
-                        {
-                            Icon(
-                                painter = if (isServerFavourited) painterResource(
-                                    id = R.drawable.fav_server3x) else painterResource(
-                                    id = R.drawable.unfav_server3x),
-                                contentDescription = "Server Logo",
-                                tint = Color.Unspecified,
-                                modifier = Modifier.size(22.dp, 21.dp)
-                            )
-                        }
                     }
-                    Surface(
-                        modifier = Modifier
-                            .padding(top = 0.dp, end = 0.dp)
-                            .height(1.dp)
-                            .fillMaxWidth()
-                            .alpha(0.6F),
-                        color = colorResource(id = R.color.gray_icon)
-                    ) {}
                 }
+                Surface(
+                    modifier = Modifier
+                        .padding(top = 0.dp, end = 0.dp)
+                        .height(1.dp)
+                        .fillMaxWidth()
+                        .alpha(0.6F),
+                    color = colorResource(id = R.color.gray_icon)
+                ) {}
             }
+        }
     }
 }
 

+ 24 - 24
app/src/main/java/com/vpn/fastestvpnservice/customItems/ServerItem.kt

@@ -130,30 +130,30 @@ fun ServerItem(server: Server, navHostController: NavHostController, serverPing:
                     }
                 }
         ) {
-            var ping by rememberSaveable { mutableIntStateOf(0) }
-
-            fun updatePing(newPing: Int) {
-                ping = newPing
-            }
-
-            LaunchedEffect(key1 = Unit) {
-                Log.d("test_new_ping", "Inside LE")
-//                while (true) {
-                    Ping.onAddress(server.ip as String).setTimeOutMillis(1000).doPing(
-                        object : Ping.PingListener{
-                            override fun onResult(pingResult: PingResult?) {
-                                pingResult?.let {
-                                    Log.d("test_new_ping_t", "pingResult = ${it.timeTaken.toInt()}, ping = $ping")
-                                    if (ping == 0) updatePing(it.timeTaken.toInt())
-                                }
-                            }
-                            override fun onError(e: Exception?) {}
-                            override fun onFinished(pingStats: PingStats?) {}
-                        }
-                    )
-//                    delay(3 * 1000)
-//                }
-            }
+//            var ping by rememberSaveable { mutableIntStateOf(0) }
+//
+//            fun updatePing(newPing: Int) {
+//                ping = newPing
+//            }
+//
+//            LaunchedEffect(key1 = Unit) {
+//                Log.d("test_new_ping", "Inside LE")
+////                while (true) {
+//                    Ping.onAddress(server.ip as String).setTimeOutMillis(1000).doPing(
+//                        object : Ping.PingListener{
+//                            override fun onResult(pingResult: PingResult?) {
+//                                pingResult?.let {
+//                                    Log.d("test_new_ping_t", "pingResult = ${it.timeTaken.toInt()}, ping = $ping")
+//                                    if (ping == 0) updatePing(it.timeTaken.toInt())
+//                                }
+//                            }
+//                            override fun onError(e: Exception?) {}
+//                            override fun onFinished(pingStats: PingStats?) {}
+//                        }
+//                    )
+////                    delay(3 * 1000)
+////                }
+//            }
 
             val icon = if (server.enable == 1) Utils.getDrawable(context, server.iso)
             else Utils.getDrawableGray(context, server.iso)

+ 23 - 48
app/src/main/java/com/vpn/fastestvpnservice/screens/ServerListScreen.kt

@@ -87,6 +87,7 @@ import com.stealthcopter.networktools.ping.PingStats
 import com.vpn.fastestvpnservice.R
 import com.vpn.fastestvpnservice.beans.Server
 import com.vpn.fastestvpnservice.beans.filterList
+import com.vpn.fastestvpnservice.beans.serversListTest
 import com.vpn.fastestvpnservice.customItems.CountryItem
 import com.vpn.fastestvpnservice.customItems.ServerItem
 import com.vpn.fastestvpnservice.customItems.ServerSearchItem
@@ -285,26 +286,15 @@ fun ColumnScope.ShowRecommendedList(
         val recommendedList: MutableList<Server> = ArrayList<Server>()
         val smartLocationList: MutableList<Server> = ArrayList<Server>()
 
-        val data = serverListViewModelSplash.liveDataTest.observeAsState().value
-        Log.d("test_live_data", "Num SLS = $data")
-
-
-
-
-
-
         var favList = serverListViewModel.liveDataGetFavList.observeAsState().value
         favList = serverListViewModel.getFavList(isAlphabetList.value)
 
-        var ping by rememberSaveable { mutableIntStateOf(0) }
-
-        fun updatePing(newPing: Int) {
-            ping = newPing
-        }
-
-
+//        var ping by rememberSaveable { mutableIntStateOf(0) }
+//        fun updatePing(newPing: Int) {
+//            ping = newPing
+//        }
 
-        var recommended = serverListViewModelSplash.liveDataGetRecommendedServers.value
+        val recommended = serverListViewModelSplash.liveDataGetRecommendedServers.value
 
         LazyColumn(
             modifier = Modifier
@@ -351,7 +341,6 @@ fun ColumnScope.ShowRecommendedList(
                     }
                 }
                 items(items = favFilterList) { server ->
-
                     ServerItem(server, navHostController, server.ping)
                 }
             }
@@ -456,20 +445,23 @@ fun ColumnScope.ShowRecommendedList(
                 }
             }
 
-
+            var recommendedFilterList = ArrayList<Server>()
+            recommended?.let {
                 if (isAlphabetList.value) {
-                    recommended?.sortBy {
+                    recommendedFilterList = recommended
+                    recommendedFilterList.sortBy {
                         it.server_name
                     }
                 } else {
                     val recommended2 = serverListViewModelSplash.liveDataGetRecommendedServers.value
-                    recommended = recommended2
+                    if (recommended2 != null) {
+                        recommendedFilterList = recommended2
+                    }
                 }
+            }
 
-            recommended?.let {
-                items(items = it) { server ->
-                    ServerItem(server, navHostController, server.ping)
-                }
+            items(items = recommendedFilterList) { server ->
+                ServerItem(server, navHostController, server.ping)
             }
         }
     }
@@ -616,15 +608,15 @@ fun ColumnScope.ShowAllLocationsList(
             LocalOverscrollConfiguration provides null
         ) {
             Column(modifier = Modifier.fillMaxSize()) {
-                Log.d("serverTabPager = ", "serverTabPager: ${serverTabPager} , selectedTabIndex: $selectedTabIndex")
-
+//                Log.d("serverTabPager = ", "serverTabPager: ${serverTabPager} , selectedTabIndex: $selectedTabIndex")
                 CompositionLocalProvider(
                     LocalOverscrollConfiguration provides null
                 )
                 {
                     var pingResult: Int = 0
+//                    Log.d("filterServersList", "filterServersList: ${filterServersList.size}")
 
-                    Log.d("filterServersList", "filterServersList: ${filterServersList.size}")
+                    val countries = serverListViewModelSplash.liveDataGetCountryServers.observeAsState().value
                     when (selectedTabIndex) {
                         0 -> {
                             LazyColumn() {
@@ -636,33 +628,16 @@ fun ColumnScope.ShowAllLocationsList(
                         else -> {
                             LazyColumn() {
                                 items(items = filterServersList, itemContent = {country ->
-                                    CalculatePing(country, onPingResult = {
-                                        Log.d("test_ping_stream", "SLS : ${country.server_name} ${it}")
-                                        pingResult = it
-                                    })
+//                                    CalculatePing(country, onPingResult = {
+//                                        Log.d("test_ping_stream", "SLS : ${country.server_name} ${it}")
+//                                        pingResult = it
+//                                    })
                                     ServerItem(server = country, navHostController, country.ping)
-
-//                                        Log.d("test_fav_server_logic", "${country.server_name} ${it}")
                                 })
                             }
                         }
                     }
                 }
-
-//                var serverTitle by rememberSaveable { mutableStateOf("") }
-//                var icon by rememberSaveable { mutableStateOf(0) }
-
-//                serverTitle = serverData[serverTabPager].name!!
-//                icon = if (isServersListExpanded) R.drawable.dragarrow3x
-//                else R.drawable.downarrow3x
-
-//                ShowHeaderItem(serverTitle, icon, serverTabPager) {
-//                    isServersListExpanded = !isServersListExpanded
-//
-////                    isServersListExpanded = isServersListExpanded.toMutableList().also {
-////                        it[serverTabPager] = !isServersListExpanded[serverTabPager]
-////                    }
-//                }
             }
         }
     }

+ 6 - 2
app/src/main/java/com/vpn/fastestvpnservice/screens/SplashScreen.kt

@@ -58,6 +58,7 @@ import androidx.navigation.compose.rememberNavController
 import com.vpn.fastestvpnservice.R
 import com.vpn.fastestvpnservice.beans.Server
 import com.vpn.fastestvpnservice.beans.isDarkTheme
+import com.vpn.fastestvpnservice.beans.serversListTest
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
 import com.vpn.fastestvpnservice.sealedClass.Screen
 import com.vpn.fastestvpnservice.viewmodels.SearchListViewModel
@@ -65,8 +66,11 @@ import com.vpn.fastestvpnservice.viewmodels.ServerListViewModel
 import com.vpn.fastestvpnservice.viewmodels.SplashViewModel
 import kotlinx.coroutines.delay
 
-val recommendedListGlobal: ArrayList<Server> = ArrayList<Server>()
+var recommendedListGlobal: ArrayList<Server> = ArrayList<Server>()
 val smartLocationListGlobal: ArrayList<Server> = ArrayList<Server>()
+val countryListTestGlobal: ArrayList<Server> = ArrayList<Server>()
+var countriesListGlobal: ArrayList<Server> = ArrayList<Server>()
+
 lateinit var splashViewModelSplash: SplashViewModel
 lateinit var serverListViewModelSplash: ServerListViewModel
 lateinit var searchListViewModelSplash: SearchListViewModel
@@ -153,7 +157,6 @@ fun Splash(navHostController: NavHostController) {
         }
 
         val serverData = basePreferenceHelper.getServerData()
-
 //        serverListViewModel.filterServersAllCategoryPing(serverData)
     }
     val delay: Long = if (isLoggedIn) 1000 else 2000
@@ -165,6 +168,7 @@ fun Splash(navHostController: NavHostController) {
         if (isLoggedIn) {
 //
             serverListViewModelSplash.setRecommendedSmartServers()
+            serverListViewModelSplash.setCountryData()
             splashViewModel.serverDataApi()
             navHostController.popBackStack()
             navHostController.navigate(Screen.BottomBarMainScreen.route)

+ 33 - 3
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/ServerListViewModel.kt

@@ -20,8 +20,10 @@ import com.vpn.fastestvpnservice.beans.ServerResponse
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
 import com.vpn.fastestvpnservice.retrofit.RetrofitNetworkHandling
 import com.vpn.fastestvpnservice.retrofit.WebServiceFactory
+import com.vpn.fastestvpnservice.screens.countriesListGlobal
 import com.vpn.fastestvpnservice.screens.isAlphabetList
 import com.vpn.fastestvpnservice.screens.recommendedListGlobal
+import com.vpn.fastestvpnservice.screens.serverListViewModelSplash
 import com.vpn.fastestvpnservice.screens.smartLocationListGlobal
 import retrofit2.Call
 
@@ -34,6 +36,7 @@ class ServerListViewModel(context: Context): ViewModel() {
     val mutableLiveDataFavUnFav = MutableLiveData<ServerResponse?>()
 
     var mutableLiveDataGroupServers = MutableLiveData<ArrayList<Server>>()
+    var liveDataGroupServers: LiveData<ArrayList<Server>> = mutableLiveDataGroupServers
 
     var _mutableLiveDataTest = MutableLiveData<Int>(0)
     var liveDataTest: LiveData<Int> = _mutableLiveDataTest
@@ -54,6 +57,9 @@ class ServerListViewModel(context: Context): ViewModel() {
     var _mutableLiveDataGetRecommendedServers = MutableLiveData<ArrayList<Server>>()
     var liveDataGetRecommendedServers: LiveData<ArrayList<Server>> = _mutableLiveDataGetRecommendedServers
 
+    var _mutableLiveDataGetCountryServers = MutableLiveData<ArrayList<Server>>()
+    var liveDataGetCountryServers: LiveData<ArrayList<Server>> = _mutableLiveDataGetCountryServers
+
     var _mutableLiveDataGetServerData = MutableLiveData<ArrayList<ServerData>>(getServerData())
     var liveDataGetServerData: LiveData<ArrayList<ServerData>> = _mutableLiveDataGetServerData
 
@@ -113,6 +119,12 @@ class ServerListViewModel(context: Context): ViewModel() {
                 }
             }
 
+            if (isAlphabetList.value) {
+                recommendedListGlobal.sortBy {
+                    it.server_name
+                }
+            }
+
             _mutableLiveDataGetRecommendedServers.value = recommendedListGlobal
 
             if (sortedDistance.isNotEmpty()) {
@@ -134,6 +146,22 @@ class ServerListViewModel(context: Context): ViewModel() {
         }
 
     }
+
+    fun setCountryData() {
+        val data = preferencesHelper.getServerData()
+
+        var filterServersList = ArrayList<Server>()
+
+        if (data[0].name?.lowercase().toString() == "servers") {
+            data.get(0).servers?.let {
+                filterServersList = serverListViewModelSplash.filterServersByISO(
+                    it, isAlphabetList.value
+                )
+                countriesListGlobal = filterServersList
+                _mutableLiveDataGetCountryServers.value = countriesListGlobal
+            }
+        }
+    }
     fun calculatePing(server: Server, onPingResult: (Int) -> Unit) {
         Ping.onAddress(server.ip as String).setTimeOutMillis(1000).doPing(
             object : Ping.PingListener{
@@ -586,17 +614,19 @@ class ServerListViewModel(context: Context): ViewModel() {
 //        tempList.forEachIndexed { index, servers ->
 //            Log.d("tempList_servers", "${servers.server_name} , ${servers.country}")
 //        }
-        mutableLiveDataGroupServers.value = tempList
 
+        val tempList2 = ArrayList<Server>()
         tempList.forEachIndexed { index, server1 ->
             calculatePing(server1){
                 Log.d("serverInfo_ping", "serverInfo $it")
                 server1.ping = it
-                tempList.set(index, server1)
             }
+            tempList2.add(server1)
         }
 
-        return tempList
+        mutableLiveDataGroupServers.value = tempList2
+
+        return tempList2
     }
 
     fun updateFavServer(server: Server) {