Quellcode durchsuchen

working on fav logic, it is customized globally, showing pre loaded data list

Khubaib vor 10 Monaten
Ursprung
Commit
33c8f62399

+ 1 - 1
.idea/deploymentTargetSelector.xml

@@ -4,7 +4,7 @@
     <selectionStates>
       <SelectionState runConfigName="app">
         <option name="selectionMode" value="DROPDOWN" />
-        <DropdownSelection timestamp="2024-06-03T13:55:17.119019345Z">
+        <DropdownSelection timestamp="2024-06-03T15:23:28.987469254Z">
           <Target type="DEFAULT_BOOT">
             <handle>
               <DeviceId pluginId="PhysicalDevice" identifier="serial=1C051FDF60048Z" />

+ 5 - 0
app/src/main/java/com/vpn/fastestvpnservice/beans/ServerData.kt

@@ -10,4 +10,9 @@ class ServerData(
     var name: String? = null,
     @SerializedName("servers")
     var servers: ArrayList<Server>? = null,
+)
+
+class ServerDataGlobal(
+    var name: String? = null,
+    var servers: ArrayList<Server>? = null
 )

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

@@ -225,12 +225,12 @@ fun ServerItem(server: Server, navHostController: NavHostController, serverPing:
 fun FavoriteServerItem(server: Server, navHostController: NavHostController, serverPing: Int) {
     val context = LocalContext.current
     val basePreferenceHelper = BasePreferenceHelper(context)
-    val serverListViewModel: ServerListViewModel = viewModel {
-        ServerListViewModel(context = context)
-    }
-    val splashViewModel: SplashViewModel = viewModel{
-        SplashViewModel(context)
-    }
+//    val serverListViewModel: ServerListViewModel = viewModel {
+//        ServerListViewModel(context = context)
+//    }
+//    val splashViewModel: SplashViewModel = viewModel{
+//        SplashViewModel(context)
+//    }
 
     val scope = rememberCoroutineScope()
     val homeViewModel: HomeViewModel = viewModel {
@@ -320,7 +320,6 @@ fun FavoriteServerItem(server: Server, navHostController: NavHostController, ser
                         painter = painterResource(id = icon),
                         contentScale = ContentScale.FillBounds
                     )
-
             )
 
             Text(text = server.server_name!!,
@@ -340,12 +339,10 @@ fun FavoriteServerItem(server: Server, navHostController: NavHostController, ser
             )
 //            Spacer(modifier = Modifier.weight(1F))
 
-
-
             IconButton(
                 onClick = {
                     isFavorite = !isFavorite!!
-                    serverListViewModel.favAndUnFav(server)
+                    serverListViewModelSplash.favAndUnFav(server)
                           },
                 modifier = Modifier
                     .padding(bottom = 18.dp, end = 0.dp)
@@ -392,15 +389,15 @@ fun ServerSearchItem(
     val context = LocalContext.current
     val scope = rememberCoroutineScope()
     val basePreferenceHelper = BasePreferenceHelper(context)
-    val serverListViewModel: ServerListViewModel = viewModel {
-        ServerListViewModel(context = context)
-    }
-    val splashViewModel: SplashViewModel = viewModel{
-        SplashViewModel(context)
-    }
-    val searchListViewModel: SearchListViewModel = viewModel{
-        SearchListViewModel(context, serverListViewModel, splashViewModel)
-    }
+//    val serverListViewModel: ServerListViewModel = viewModel {
+//        ServerListViewModel(context = context)
+//    }
+//    val splashViewModel: SplashViewModel = viewModel{
+//        SplashViewModel(context)
+//    }
+//    val searchListViewModel: SearchListViewModel = viewModel{
+//        SearchListViewModel(context, serverListViewModel, splashViewModel)
+//    }
     val homeViewModel: HomeViewModel = viewModel{
         HomeViewModel(context, scope)
     }
@@ -526,7 +523,7 @@ fun ServerSearchItem(
                     .size(25.dp),
                 onClick = {
                 isFavorite = !isFavorite!!
-                serverListViewModel.favAndUnFav(server)
+                serverListViewModelSplash.favAndUnFav(server)
             }) {
                 Icon(
                     painter = if (isServerFavourited) painterResource(
@@ -560,18 +557,18 @@ fun ServerSpecificItem(
     val context = LocalContext.current
     val scope = rememberCoroutineScope()
     val basePreferenceHelper = BasePreferenceHelper(context)
-    val serverListViewModel: ServerListViewModel = viewModel {
-        ServerListViewModel(context = context)
-    }
-    val splashViewModel: SplashViewModel = viewModel{
-        SplashViewModel(context)
-    }
-    val searchListViewModel: SearchListViewModel = viewModel{
-        SearchListViewModel(context, serverListViewModel, splashViewModel)
-    }
-    val homeViewModel: HomeViewModel = viewModel{
-        HomeViewModel(context, scope)
-    }
+//    val serverListViewModel: ServerListViewModel = viewModel {
+//        ServerListViewModel(context = context)
+//    }
+//    val splashViewModel: SplashViewModel = viewModel{
+//        SplashViewModel(context)
+//    }
+//    val searchListViewModel: SearchListViewModel = viewModel{
+//        SearchListViewModel(context, serverListViewModel, splashViewModel)
+//    }
+//    val homeViewModel: HomeViewModel = viewModel{
+//        HomeViewModel(context, scope)
+//    }
     var isSearchServerClicked by remember {
         mutableStateOf(false)
     }

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

@@ -586,21 +586,21 @@ fun ColumnScope.ShowAllLocationsList(
 //    var isServersListExpanded by rememberSaveable { mutableStateOf(List(data.size) {true}) }
     val isServersListExpanded by rememberSaveable { mutableStateOf(true) }
 
-    filterServersList = if (
-        data[selectedTabIndex].name?.lowercase().toString() == "servers") {
-        data.get(selectedTabIndex).servers?.let {
-            serverListViewModel.filterServersByISO(
-                it, isAlphabetList.value
-            )
-        }!!
-    } else {
-        Log.d("test_fav_server_logic", "filterServersList else{}")
-        data.get(selectedTabIndex).servers?.let {
-            serverListViewModel.filterServersByStreamingServers(
-                it, isAlphabetList.value
-            )
-        }!!
-    }
+//    filterServersList = if (
+//        data[selectedTabIndex].name?.lowercase().toString() == "servers") {
+//        data.get(selectedTabIndex).servers?.let {
+//            serverListViewModel.filterServersByISO(
+//                it, isAlphabetList.value
+//            )
+//        }!!
+//    } else {
+//        Log.d("test_fav_server_logic", "filterServersList else{}")
+//        data.get(selectedTabIndex).servers?.let {
+//            serverListViewModel.filterServersByStreamingServers(
+//                it, isAlphabetList.value
+//            )
+//        }!!
+//    }
 
 //    filterServersList.forEachIndexed { index, server ->
 //        calculatePing(server) {
@@ -630,24 +630,24 @@ fun ColumnScope.ShowAllLocationsList(
                     var pingResult: Int = 0
 //                    Log.d("filterServersList", "filterServersList: ${filterServersList.size}")
 
-                    val countries = serverListViewModelSplash.liveDataGetCountryServers.observeAsState().value
+                    val countries = serverListViewModelSplash.liveDataGetServersGlobal.observeAsState().value
                     when (selectedTabIndex) {
                         0 -> {
                             LazyColumn() {
-                                items(items = filterServersList, itemContent = {country ->
-                                    CountryItem(server = country, "servers", country.totalServers, navHostController)
-                                })
+                                countries?.get(selectedTabIndex)?.servers?.let {
+                                    items(items = it, itemContent = { country ->
+                                        CountryItem(server = country, "servers", country.totalServers, navHostController)
+                                    })
+                                }
                             }
                         }
                         else -> {
                             LazyColumn() {
-                                items(items = filterServersList, itemContent = {country ->
-//                                    CalculatePing(country, onPingResult = {
-//                                        Log.d("test_ping_stream", "SLS : ${country.server_name} ${it}")
-//                                        pingResult = it
-//                                    })
-                                    ServerItem(server = country, navHostController, country.ping)
-                                })
+                                countries?.get(selectedTabIndex)?.servers?.let {
+                                    items(items = it, itemContent = {country ->
+                                        ServerItem(server = country, navHostController, country.ping)
+                                    })
+                                }
                             }
                         }
                     }

+ 11 - 15
app/src/main/java/com/vpn/fastestvpnservice/screens/SplashScreen.kt

@@ -57,6 +57,8 @@ import androidx.navigation.NavHostController
 import androidx.navigation.compose.rememberNavController
 import com.vpn.fastestvpnservice.R
 import com.vpn.fastestvpnservice.beans.Server
+import com.vpn.fastestvpnservice.beans.ServerData
+import com.vpn.fastestvpnservice.beans.ServerDataGlobal
 import com.vpn.fastestvpnservice.beans.isDarkTheme
 import com.vpn.fastestvpnservice.beans.serversListTest
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
@@ -70,6 +72,7 @@ var recommendedListGlobal: ArrayList<Server> = ArrayList<Server>()
 val smartLocationListGlobal: ArrayList<Server> = ArrayList<Server>()
 val countryListTestGlobal: ArrayList<Server> = ArrayList<Server>()
 var countriesListGlobal: ArrayList<Server> = ArrayList<Server>()
+var serversListGlobal: ArrayList<ServerDataGlobal?> = ArrayList<ServerDataGlobal?>()
 
 lateinit var splashViewModelSplash: SplashViewModel
 lateinit var serverListViewModelSplash: ServerListViewModel
@@ -143,21 +146,15 @@ fun Splash(navHostController: NavHostController) {
             SearchListViewModel(context, serverListViewModelSplash, splashViewModelSplash)
         }
 
-        val data = serverListViewModelSplash.liveDataTest.observeAsState().value
-        Log.d("test_live_data", "Num SS = $data")
-        serverListViewModelSplash._mutableLiveDataTest.value = 1
-
-        val allServers: ArrayList<Server> = ArrayList<Server>()
-        basePreferenceHelper.getServerData().let {
-            it.forEachIndexed { index, serverData ->
-                serverData.servers?.forEachIndexed { indexes, server ->
-                    allServers.add(indexes, server)
-                }
-            }
-        }
+//        val allServers: ArrayList<Server> = ArrayList<Server>()
+//        basePreferenceHelper.getServerData().let {
+//            it.forEachIndexed { index, serverData ->
+//                serverData.servers?.forEachIndexed { indexes, server ->
+//                    allServers.add(indexes, server)
+//                }
+//            }
+//        }
 
-        val serverData = basePreferenceHelper.getServerData()
-//        serverListViewModel.filterServersAllCategoryPing(serverData)
     }
     val delay: Long = if (isLoggedIn) 1000 else 2000
 
@@ -166,7 +163,6 @@ fun Splash(navHostController: NavHostController) {
         delay(delay)
 
         if (isLoggedIn) {
-//
             serverListViewModelSplash.setRecommendedSmartServers()
             serverListViewModelSplash.setCountryData()
             splashViewModel.serverDataApi()

+ 7 - 6
app/src/main/java/com/vpn/fastestvpnservice/screens/accountScreensAll/FavoriteServersScreen.kt

@@ -54,16 +54,17 @@ import com.vpn.fastestvpnservice.R
 import com.vpn.fastestvpnservice.beans.Server
 import com.vpn.fastestvpnservice.customItems.FavoriteServerItem
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
+import com.vpn.fastestvpnservice.screens.serverListViewModelSplash
 import com.vpn.fastestvpnservice.viewmodels.ServerListViewModel
 
 @OptIn(ExperimentalFoundationApi::class)
 @Composable
 fun FavoriteServers(navHostController: NavHostController) {
-    val context = LocalContext.current
-    val basePreferenceHelper = BasePreferenceHelper(context)
-    val serverListViewModel: ServerListViewModel = viewModel{
-        ServerListViewModel(context)
-    }
+//    val context = LocalContext.current
+//    val basePreferenceHelper = BasePreferenceHelper(context)
+//    val serverListViewModel: ServerListViewModel = viewModel{
+//        ServerListViewModel(context)
+//    }
 
     Box(
         modifier = Modifier
@@ -89,7 +90,7 @@ fun FavoriteServers(navHostController: NavHostController) {
                 .fillMaxSize()
                 .background(Color.Transparent)
         ) {
-            val favoriteServers = serverListViewModel.liveDataGetFavList.observeAsState().value
+            val favoriteServers = serverListViewModelSplash.liveDataGetFavList.observeAsState().value
             var ping by rememberSaveable { mutableIntStateOf(0) }
 
             CompositionLocalProvider(

+ 14 - 11
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/HomeScreen.kt

@@ -91,6 +91,7 @@ import com.vpn.fastestvpnservice.constants.smartConnect
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
 import com.vpn.fastestvpnservice.interfaces.NetworkSpeedCallback
 import com.vpn.fastestvpnservice.interfaces.ServerCallbacks
+import com.vpn.fastestvpnservice.screens.serverListViewModelSplash
 import com.vpn.fastestvpnservice.sealedClass.Screen
 import com.vpn.fastestvpnservice.ui.theme.customTypography
 import com.vpn.fastestvpnservice.utils.Utils
@@ -125,9 +126,9 @@ lateinit var vpnConnectionsUtil: VPNConnectionsUtil
         onClick: () -> Unit, isServerDialogShown: Boolean, server: Server) {
         val wg = VPNConnectionsUtil(context, act ,homeViewModel)
         val basePreferenceHelper = BasePreferenceHelper(context)
-         val serverListViewModel: ServerListViewModel = viewModel{
-             ServerListViewModel(context)
-         }
+//         val serverListViewModel: ServerListViewModel = viewModel{
+//             ServerListViewModel(context)
+//         }
 
         Log.d("ServerCallbacks", "onServerSelected called!")
 
@@ -146,7 +147,7 @@ lateinit var vpnConnectionsUtil: VPNConnectionsUtil
                     basePreferenceHelper.setServerObject(server)
                 }
             } else {
-                serverListViewModel.setRecentlyConnectedServer(server)
+                serverListViewModelSplash.setRecentlyConnectedServer(server)
 
 //                val recentList = basePreferenceHelper.getRecentlyList()
 //                val tempList = ArrayList<Server>()
@@ -253,9 +254,10 @@ fun Home(
     val homeViewModel: HomeViewModel = viewModel{
         HomeViewModel(context, scope)
     }
-    val serverListViewModel: ServerListViewModel = viewModel{
-        ServerListViewModel(context)
-    }
+//    val serverListViewModel: ServerListViewModel = viewModel{
+//        ServerListViewModel(context)
+//    }
+    val serverListViewModel = serverListViewModelSplash
     vpnConnectionsUtil = VPNConnectionsUtil(context, activity, homeViewModel)
     homeViewModel1 = homeViewModel
     var isConnect: Int? = homeViewModel.isConnect.observeAsState().value
@@ -769,9 +771,9 @@ fun ColumnScope.ShowServerDialog(
     ) {
         val lastServer = prefHelper.getConnectedServer()
         val context = LocalContext.current
-        val serverListViewModel: ServerListViewModel = viewModel {
-            ServerListViewModel(context)
-        }
+//        val serverListViewModel: ServerListViewModel = viewModel {
+//            ServerListViewModel(context)
+//        }
         Surface(
             color = colorResource(id = R.color.white),
             modifier = Modifier
@@ -837,7 +839,7 @@ fun ColumnScope.ShowServerDialog(
                             isServerDialog.value = false
                             prefHelper.setServerObject(serverObj.value)
                             prefHelper.setConnectedServer(serverObj.value)
-                            serverListViewModel.setRecentlyConnectedServer(serverObj.value)
+                            serverListViewModelSplash.setRecentlyConnectedServer(serverObj.value)
                             wg.stopVpn()
                             Handler().postDelayed(Runnable {
                                 wg.startVpn()
@@ -1157,6 +1159,7 @@ fun BoxScope.AddRowSmart(
                         .size(40.dp)
                         .weight(1f)
                         .clip(CircleShape)
+                        .border(1.dp, colorResource(id = R.color.gray_opac_04), CircleShape)
                         .paint(
                             painter = painterResource(id = icon),
                             contentScale = ContentScale.FillBounds

+ 42 - 9
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/ServerListViewModel.kt

@@ -15,6 +15,7 @@ import com.stealthcopter.networktools.ping.PingStats
 import com.vpn.fastestvpnservice.beans.Protocol
 import com.vpn.fastestvpnservice.beans.Server
 import com.vpn.fastestvpnservice.beans.ServerData
+import com.vpn.fastestvpnservice.beans.ServerDataGlobal
 import com.vpn.fastestvpnservice.beans.ServerProtocol
 import com.vpn.fastestvpnservice.beans.ServerResponse
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
@@ -24,6 +25,7 @@ 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.serversListGlobal
 import com.vpn.fastestvpnservice.screens.smartLocationListGlobal
 import retrofit2.Call
 
@@ -57,8 +59,8 @@ 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 _mutableLiveDataGetServersGlobal = MutableLiveData<ArrayList<ServerDataGlobal?>?>()
+    var liveDataGetServersGlobal: LiveData<ArrayList<ServerDataGlobal?>?> = _mutableLiveDataGetServersGlobal
 
     var _mutableLiveDataGetServerData = MutableLiveData<ArrayList<ServerData>>(getServerData())
     var liveDataGetServerData: LiveData<ArrayList<ServerData>> = _mutableLiveDataGetServerData
@@ -154,15 +156,31 @@ class ServerListViewModel(context: Context): ViewModel() {
 
         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
+        data.forEachIndexed { index, serverData ->
+//            Log.d("test_serverData", "$index: ${serverData.name} => ${serverData.servers?.size}")
+
+            if (data[index].name?.lowercase().toString() == "servers") {
+                data[index].servers?.let {
+                    val servers = serverListViewModelSplash.filterServersByISO(
+                        it, isAlphabetList.value
+                    )
+                    serversListGlobal.add(index, ServerDataGlobal(serverData.name, servers))
+                }
+            } else {
+                data[index].servers?.let {
+                    val servers = serverListViewModelSplash.filterServersByStreamingServers(
+                        it, isAlphabetList.value
+                    )
+                    serversListGlobal.add(index, ServerDataGlobal(serverData.name, servers))
+                }
             }
         }
+
+        serversListGlobal.forEachIndexed { index, serverData ->
+            Log.d("test_serverData G", "$index: ${serverData?.name} => ${serverData?.servers?.size}")
+        }
+
+        _mutableLiveDataGetServersGlobal.value = serversListGlobal
     }
     fun calculatePing(server: Server, onPingResult: (Int) -> Unit) {
         Ping.onAddress(server.ip as String).setTimeOutMillis(1000).doPing(
@@ -634,6 +652,8 @@ class ServerListViewModel(context: Context): ViewModel() {
     fun updateFavServer(server: Server) {
         server.isFavourited = server.isFavourited != true
         val serverData = preferencesHelper.getServerData()
+        val serverData2 = liveDataGetServersGlobal.value
+        val filterServersList = ArrayList<ServerDataGlobal>()
 
         serverData.forEachIndexed { i, serverDataList ->
             serverDataList.servers?.let {serverList ->
@@ -646,9 +666,22 @@ class ServerListViewModel(context: Context): ViewModel() {
                 }
             }
         }
+        serverData2?.forEachIndexed { i, serverDataList ->
+            serverDataList?.servers?.let {serverList ->
+                serverList.forEachIndexed { index, obj ->
+                    if (obj.id == server.id) {
+//                        Log.d("test_serverData_Fav","if => index[$i]:: obj.id ${obj.id} , server = ${server.server_name}")
+//                        obj.isFavourited = obj.isFavourited != true
+                        serverList.set(index, server)
+                    }
+                }
+            }
+        }
+
 
         preferencesHelper.saveServerData(serverData)
         _mutableLiveDataGetFavList.value = getFavList()
+        _mutableLiveDataGetServersGlobal.value = serverData2
     }
 
     fun setRecentlyConnectedServer(server: Server) {