فهرست منبع

Implemented server api on TV and get response on settings screen then set country data and recommended server on shared prefs

Khubaib 8 ماه پیش
والد
کامیت
afb2c0b656

+ 2 - 2
.idea/deploymentTargetSelector.xml

@@ -4,10 +4,10 @@
     <selectionStates>
       <SelectionState runConfigName="app">
         <option name="selectionMode" value="DROPDOWN" />
-        <DropdownSelection timestamp="2024-09-11T11:33:27.739232601Z">
+        <DropdownSelection timestamp="2024-09-12T09:58:09.025375703Z">
           <Target type="DEFAULT_BOOT">
             <handle>
-              <DeviceId pluginId="PhysicalDevice" identifier="serial=1C051FDF60048Z" />
+              <DeviceId pluginId="LocalEmulator" identifier="path=/home/ubuntu/.android/avd/Television_1080p_API_31.avd" />
             </handle>
           </Target>
         </DropdownSelection>

BIN
app/release/app-release.apk


+ 8 - 3
app/src/main/java/com/vpn/fastestvpnservice/screensTV/HomeScreenTV.kt

@@ -360,30 +360,35 @@ fun HomeTV(
         isHomeScreenPressed.value = false
     }
 
-    var isLaunched by rememberSaveable { mutableStateOf(true) }
+    var isLaunched by remember { mutableStateOf(true) }
 
     if (isLaunched) {
-        Log.d("test_launch","liveDataGetServersGlobal")
-        val countries = serverListViewModelSplash.liveDataGetServersGlobal.value
+        Log.d("test_lingual_splash", "isLaunched - true")
+        val countries = serverListViewModelSplash.liveDataGetServersGlobal.observeAsState().value
         countries?.forEachIndexed { index, serverData ->
             Log.d("test_serverlist_tv","$index ${serverData?.name} ${serverData?.servers?.size}")
             if (serverData?.name?.equals("Servers") == true) {
+                Log.d("test_serverlist_tv","$index ${serverData?.name}")
                 serverData.servers?.let { locations = it }
                 if (locations.size > 0) isLocationsEnabled.value = true
             }
             else if (serverData?.name?.equals("Dedicated IP") == true) {
+                Log.d("test_serverlist_tv","$index ${serverData?.name}")
                 serverData.servers?.let { dedicatedIP = it }
                 if (dedicatedIP.size > 0) isDedicatedIpEnabled.value = true
             }
             else if (serverData?.name?.equals("Streaming") == true) {
+                Log.d("test_serverlist_tv","$index ${serverData?.name}")
                 serverData.servers?.let { streaming = it }
                 if (streaming.size > 0) isStreamingEnabled.value = true
             }
             else if (serverData?.name?.equals("D-VPN") == true) {
+                Log.d("test_serverlist_tv","$index ${serverData?.name}")
                 serverData.servers?.let { dvpn = it }
                 if (dvpn.size > 0) isDvpnEnabled.value = true
             }
             else if (serverData?.name?.equals("P2P") == true) {
+                Log.d("test_serverlist_tv","$index ${serverData?.name}")
                 serverData.servers?.let { p2p = it }
                 if (p2p.size > 0) isP2pEnabled.value = true
             }

+ 63 - 2
app/src/main/java/com/vpn/fastestvpnservice/screensTV/SettingsScreenTV.kt

@@ -4,6 +4,7 @@ import android.app.Activity
 import android.app.LocaleManager
 import android.content.Context
 import android.content.Intent
+import android.location.Location
 import android.os.Build
 import android.os.Bundle
 import android.os.Handler
@@ -96,6 +97,7 @@ import androidx.navigation.NavHostController
 import androidx.navigation.compose.currentBackStackEntryAsState
 import com.vpn.fastestvpnservice.R
 import com.vpn.fastestvpnservice.beans.Protocol
+import com.vpn.fastestvpnservice.beans.Server
 import com.vpn.fastestvpnservice.beans.isDarkTheme
 import com.vpn.fastestvpnservice.beans.languages
 import com.vpn.fastestvpnservice.beans.themesList
@@ -141,6 +143,7 @@ fun SettingsTV(navHostController: NavHostController) {
     }
     val vpnConnectionsUtil = VPNConnectionsUtil(context, activityGlobal, homeViewModel)
     var settingsString by remember { mutableStateOf(context.getString(R.string.settings)) }
+    val basePreferenceHelper = BasePreferenceHelper(context)
 
     if (isSettingsScreenPressed.value) {
         LaunchedEffect(Unit) {
@@ -263,6 +266,64 @@ fun SettingsTV(navHostController: NavHostController) {
                 ) {
                     settingsString = it
                 }
+
+                val serversResponse = splashViewModelSplash.liveDataServerData.observeAsState().value
+                serversResponse?.let { data ->
+                    Log.d("test_lingual_splash", "serversResponse - in")
+                    if (data.status) {
+                        Log.d("test_lingual_splash", "serversResponse - true")
+                        serverListViewModelSplash.setCountryDataTV()
+                        val smartLocationList: MutableList<Server> = ArrayList<Server>()
+                        basePreferenceHelper.getServerData().get(0).servers?.let {
+                            val serverDataLocation = it
+
+                            val distinctdatanotnull =
+                                serverDataLocation.filter {   // servers's lt and lt not be null
+                                    it.lt != null && it.lg != null
+                                }
+
+                            val distinctdata =
+                                distinctdatanotnull.distinctBy { // servers's lt filter, no same lt of a server
+                                    it.lt
+                                }
+
+                            val result = FloatArray(1)
+                            val ipinfo = basePreferenceHelper.getIpinfo()
+
+                            distinctdata.forEachIndexed { index, server ->
+                                val lat1 = ipinfo?.latitute
+                                val lon1 = ipinfo?.longitude
+                                val lat2 = server.lt
+                                val lon2 = server.lg
+
+                                if (lat1 != null && lat2 != null && lon1 != null && lon2 != null) {
+                                    Location.distanceBetween(lat1, lon1, lat2, lon2, result)
+                                }
+
+                                val distance: Float = result[0]
+                                distinctdata.get(index).distance = distance
+
+                            }
+
+                            val sortedDistance = distinctdata.sortedBy {
+                                it.distance
+                            }
+
+                            if (sortedDistance.isNotEmpty()) {
+                                for (i in 0..0) {
+                                    smartLocationList.add(sortedDistance.get(i))
+                                }
+                            }
+
+                            smartLocationList.forEach {
+//                            prefHelper.setSmartServerObject(it)
+                                basePreferenceHelper.setRecommendedServerObject(it)
+                                Log.d("test_lingual_splash", "L:: server = ${it.server_name}")
+                            }
+                        }
+                    }
+                    splashViewModelSplash.mutableLiveDataServerData.value = null
+                }
             }
         }
     }
@@ -1568,7 +1629,7 @@ fun AddLanguageTV(
                                         }
 
                                         splashViewModelSplash.serverDataApi()
-                                        isLanguageSheetOpen = false
+//                                        isLanguageSheetOpen = false
                                     },
                                 )
 //                                    .indication(
@@ -1608,7 +1669,7 @@ fun AddLanguageTV(
                                     }
 
                                     splashViewModelSplash.serverDataApi()
-                                    isLanguageSheetOpen = false
+//                                    isLanguageSheetOpen = false
                                 },
                                 colors = RadioButtonDefaults.colors(
                                     selectedColor = colorResource(id = R.color.radio_button_blue),

+ 2 - 0
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/ServerListViewModel.kt

@@ -261,6 +261,8 @@ class ServerListViewModel(context: Context): ViewModel() {
             serverDataGlobal?.servers?.let { serversListAllGlobal.addAll(it) }
         }
 
+        Log.d("test_lingual_splash", "serversListGlobalTV - ${serversListGlobalTV.size}")
+
         _mutableLiveDataGetServersGlobal.value = serversListGlobalTV
         mutableLiveDataAllServers.value = serversListAllGlobal
     }