浏览代码

server list optimized on home screen TV so that delay shouldn't happen when opening server list screen on TV

Khubaib 9 月之前
父节点
当前提交
6913e263bf

+ 1 - 1
.idea/deploymentTargetSelector.xml

@@ -4,7 +4,7 @@
     <selectionStates>
       <SelectionState runConfigName="app">
         <option name="selectionMode" value="DROPDOWN" />
-        <DropdownSelection timestamp="2024-07-18T13:47:51.214529097Z">
+        <DropdownSelection timestamp="2024-07-18T15:11:26.301183634Z">
           <Target type="DEFAULT_BOOT">
             <handle>
               <DeviceId pluginId="Default" identifier="serial=192.168.108.28:5555;connection=909aac42" />

+ 46 - 4
app/src/main/java/com/vpn/fastestvpnservice/screensTV/HomeScreenTV.kt

@@ -1,5 +1,6 @@
 package com.vpn.fastestvpnservice.screensTV
 
+//import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.act
 import android.content.Context
 import android.os.Build
 import android.util.Log
@@ -45,6 +46,7 @@ import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.rememberUpdatedState
+import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
@@ -86,20 +88,16 @@ import com.vpn.fastestvpnservice.beans.Server
 import com.vpn.fastestvpnservice.beans.isDarkTheme
 import com.vpn.fastestvpnservice.constants.smartConnect
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
-import com.vpn.fastestvpnservice.interfaces.ServerCallbacks
 import com.vpn.fastestvpnservice.interfaces.ServerCallbacksTV
 import com.vpn.fastestvpnservice.navigation.isFirstItemPressed
 import com.vpn.fastestvpnservice.navigation.isHomeScreenPressed
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.ShowProtocolDialog
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.ShowServerDialog
-//import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.act
-import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.homeViewModel1
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.isServerDialog
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.navHostController1
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.protocolObj
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.serverObj
 import com.vpn.fastestvpnservice.screens.serverListViewModelSplash
-import com.vpn.fastestvpnservice.sealedClass.Screen
 import com.vpn.fastestvpnservice.sealedClass.ScreenTV
 import com.vpn.fastestvpnservice.ui.theme.customTypography
 import com.vpn.fastestvpnservice.utils.Utils
@@ -112,6 +110,18 @@ import de.blinkt.openvpn.core.App
 lateinit var vpnConnectionsUtil: VPNConnectionsUtil
 var isProtocolDialog: MutableState<Boolean> = mutableStateOf(false)
 
+var isLocationsEnabled: MutableState<Boolean> = mutableStateOf(false)
+var isDedicatedIpEnabled: MutableState<Boolean> = mutableStateOf(false)
+var isStreamingEnabled: MutableState<Boolean> = mutableStateOf(false)
+var isDvpnEnabled: MutableState<Boolean> = mutableStateOf(false)
+var isP2pEnabled: MutableState<Boolean> = mutableStateOf(false)
+
+var locations: MutableList<Server> = ArrayList<Server>()
+var dedicatedIP: MutableList<Server> = ArrayList<Server>()
+var streaming: MutableList<Server> = ArrayList<Server>()
+var dvpn: MutableList<Server> = ArrayList<Server>()
+var p2p: MutableList<Server> = ArrayList<Server>()
+
 val onServerTV = object : ServerCallbacksTV {
 
     @Composable
@@ -324,6 +334,38 @@ fun HomeTV(navHostController: NavHostController, settingsNavHostController: NavH
         isHomeScreenPressed.value = false
     }
 
+    var isLaunched by rememberSaveable { mutableStateOf(true) }
+
+    if (isLaunched) {
+        Log.d("test_launch","liveDataGetServersGlobal")
+        val countries = serverListViewModelSplash.liveDataGetServersGlobal.value
+        countries?.forEachIndexed { index, serverData ->
+            Log.d("test_serverlist_tv","$index ${serverData?.name} ${serverData?.servers?.size}")
+            if (serverData?.name?.equals("Servers") == true) {
+                serverData.servers?.let { locations = it }
+                if (locations.size > 0) isLocationsEnabled.value = true
+            }
+            else if (serverData?.name?.equals("Dedicated IP") == true) {
+                serverData.servers?.let { dedicatedIP = it }
+                if (dedicatedIP.size > 0) isDedicatedIpEnabled.value = true
+            }
+            else if (serverData?.name?.equals("Streaming") == true) {
+                serverData.servers?.let { streaming = it }
+                if (streaming.size > 0) isStreamingEnabled.value = true
+            }
+            else if (serverData?.name?.equals("D-VPN") == true) {
+                serverData.servers?.let { dvpn = it }
+                if (dvpn.size > 0) isDvpnEnabled.value = true
+            }
+            else if (serverData?.name?.equals("P2P") == true) {
+                serverData.servers?.let { p2p = it }
+                if (p2p.size > 0) isP2pEnabled.value = true
+            }
+        }
+        isLaunched = false
+    }
+
+
 //    BackHandler {
 //        Toast.makeText(
 //            context, "BackHandler Home TV", Toast.LENGTH_SHORT

+ 78 - 86
app/src/main/java/com/vpn/fastestvpnservice/screensTV/ServerListScreenTV.kt

@@ -60,69 +60,61 @@ fun ServerListTV(navHostController: NavHostController) {
     ) {
         HeaderRowSL(navHostController = navHostController)
 
-//        var locations = ArrayList<Server>()
-//        var dedicatedIP = ArrayList<Server>()
-//        var streaming = ArrayList<Server>()
-//        var dvpn = ArrayList<Server>()
-//        var p2p = ArrayList<Server>()
+//        var locations by remember { mutableStateOf(ArrayList<Server>()) }
+//        var dedicatedIP by remember { mutableStateOf(ArrayList<Server>()) }
+//        var streaming by remember { mutableStateOf(ArrayList<Server>()) }
+//        var dvpn by remember { mutableStateOf(ArrayList<Server>()) }
+//        var p2p by remember { mutableStateOf(ArrayList<Server>()) }
 
-        var locations by remember { mutableStateOf(ArrayList<Server>()) }
-        var dedicatedIP by remember { mutableStateOf(ArrayList<Server>()) }
-        var streaming by remember { mutableStateOf(ArrayList<Server>()) }
-        var dvpn by remember { mutableStateOf(ArrayList<Server>()) }
-        var p2p by remember { mutableStateOf(ArrayList<Server>()) }
+//        var isLocationsEnabled by remember { mutableStateOf(false) }
+//        var isDedicatedIpEnabled by remember { mutableStateOf(false) }
+//        var isStreamingEnabled by remember { mutableStateOf(false) }
+//        var isDvpnEnabled by remember { mutableStateOf(false) }
+//        var isP2pEnabled by remember { mutableStateOf(false) }
 
-
-        var isLocationsEnabled by remember { mutableStateOf(false) }
-        var isDedicatedIpEnabled by remember { mutableStateOf(false) }
-        var isStreamingEnabled by remember { mutableStateOf(false) }
-        var isDvpnEnabled by remember { mutableStateOf(false) }
-        var isP2pEnabled by remember { mutableStateOf(false) }
-
-        LaunchedEffect(key1 = Unit) {
-            val countries = serverListViewModelSplash.liveDataGetServersGlobal.value
-            countries?.forEachIndexed { index, serverData ->
-                Log.d("test_serverlist_tv","$index ${serverData?.name} ${serverData?.servers?.size}")
-                if (serverData?.name?.equals("Servers") == true) {
-                    serverData.servers?.let { locations = it }
-                    if (locations.size > 0) isLocationsEnabled = true
-                }
-                else if (serverData?.name?.equals("Dedicated IP") == true) {
-                    serverData.servers?.let { dedicatedIP = it }
-                    if (dedicatedIP.size > 0) isDedicatedIpEnabled = true
-                }
-                else if (serverData?.name?.equals("Streaming") == true) {
-                    serverData.servers?.let { streaming = it }
-                    if (streaming.size > 0) isStreamingEnabled = true
-                }
-                else if (serverData?.name?.equals("D-VPN") == true) {
-                    serverData.servers?.let { dvpn = it }
-                    if (dvpn.size > 0) isDvpnEnabled = true
-                }
-                else if (serverData?.name?.equals("P2P") == true) {
-                    serverData.servers?.let { p2p = it }
-                    if (p2p.size > 0) isP2pEnabled = true
-                }
-            }
-        }
+//        LaunchedEffect(key1 = Unit) {
+//            val countries = serverListViewModelSplash.liveDataGetServersGlobal.value
+//            countries?.forEachIndexed { index, serverData ->
+//                Log.d("test_serverlist_tv","$index ${serverData?.name} ${serverData?.servers?.size}")
+//                if (serverData?.name?.equals("Servers") == true) {
+//                    serverData.servers?.let { locations = it }
+//                    if (locations.size > 0) isLocationsEnabled.value = true
+//                }
+//                else if (serverData?.name?.equals("Dedicated IP") == true) {
+//                    serverData.servers?.let { dedicatedIP = it }
+//                    if (dedicatedIP.size > 0) isDedicatedIpEnabled.value = true
+//                }
+//                else if (serverData?.name?.equals("Streaming") == true) {
+//                    serverData.servers?.let { streaming = it }
+//                    if (streaming.size > 0) isStreamingEnabled.value = true
+//                }
+//                else if (serverData?.name?.equals("D-VPN") == true) {
+//                    serverData.servers?.let { dvpn = it }
+//                    if (dvpn.size > 0) isDvpnEnabled.value = true
+//                }
+//                else if (serverData?.name?.equals("P2P") == true) {
+//                    serverData.servers?.let { p2p = it }
+//                    if (p2p.size > 0) isP2pEnabled.value = true
+//                }
+//            }
+//        }
 
         Column(
             modifier = Modifier
                 .fillMaxSize()
-                .padding(top = 80.dp, start = 24.dp, end = 24.dp, bottom = 24.dp)
+                .padding(top = 60.dp, start = 24.dp, end = 24.dp, bottom = 24.dp)
                 .verticalScroll(rememberScrollState())
                 .background(Color.Transparent)
         ) {
             val topPadding = 25.dp
-            Spacer(modifier = Modifier.height(0.dp))
 
-            if (isLocationsEnabled) {
+            if (isLocationsEnabled.value) {
                 Text(
-                    text = "Top Locations ${locations.size}",
+                    text = "Top Locations",
                     style = MaterialTheme.typography.labelLarge,
                     color = colorResource(id = R.color.dark_blue_gray_text),
                     modifier = Modifier
-                        .padding(top = topPadding, start = 0.dp)
+                        .padding(top = 0.dp, start = 0.dp)
                         .focusable()
                 )
                 LazyRow(
@@ -135,7 +127,7 @@ fun ServerListTV(navHostController: NavHostController) {
                     })
                 }
             }
-            if (isDedicatedIpEnabled) {
+            if (isDedicatedIpEnabled.value) {
                 Text(
                     text = "Dedicated IP",
                     style = MaterialTheme.typography.labelLarge,
@@ -153,7 +145,7 @@ fun ServerListTV(navHostController: NavHostController) {
                     })
                 }
             }
-            if (isStreamingEnabled) {
+            if (isStreamingEnabled.value) {
                 Text(
                     text = "Streaming",
                     style = MaterialTheme.typography.labelLarge,
@@ -171,7 +163,7 @@ fun ServerListTV(navHostController: NavHostController) {
                     })
                 }
             }
-            if (isDvpnEnabled) {
+            if (isDvpnEnabled.value) {
                 Text(
                     text = "D-VPN",
                     style = MaterialTheme.typography.labelLarge,
@@ -189,7 +181,7 @@ fun ServerListTV(navHostController: NavHostController) {
                     })
                 }
             }
-            if (isP2pEnabled) {
+            if (isP2pEnabled.value) {
                 Text(
                     text = "P2P",
                     style = MaterialTheme.typography.labelLarge,
@@ -214,44 +206,44 @@ fun ServerListTV(navHostController: NavHostController) {
 @Composable
 fun BoxScope.HeaderRowSL(
     navHostController: NavHostController) {
-    val focusRequester1 = remember { FocusRequester() }
-    var isButtonFocused by remember { mutableStateOf(false) }
-    LaunchedEffect(key1 = Unit) {
-        focusRequester1.requestFocus()
-    }
+//    val focusRequester1 = remember { FocusRequester() }
+//    var isButtonFocused by remember { mutableStateOf(false) }
+//    LaunchedEffect(key1 = Unit) {
+//        focusRequester1.requestFocus()
+//    }
 
-    IconButton(
-        onClick = {
-            navHostController.popBackStack()
-        },
-        modifier = Modifier
-            .align(Alignment.TopStart)
-            .padding(top = 25.dp)
-            .padding(start = 16.dp)
-            .size(30.dp, 32.dp)
-            .background(if (isButtonFocused) Color.LightGray else Color.Transparent)
-            .focusRequester(focusRequester1)
-            .onFocusChanged {
-                isButtonFocused = it.isFocused
-            }
-            .focusable()
-            .clickable {
-                navHostController.popBackStack()
-            }
-    ) {
-        Icon(
-            imageVector = Icons.AutoMirrored.Filled.ArrowBack,
-            contentDescription = "Arrow-Back",
-            tint = colorResource(id = R.color.dark_blue_gray_text),
-//            tint = MaterialTheme.colorScheme.primary,
-            modifier = Modifier.size(30.dp, 32.dp)
-        )
-    }
+//    IconButton(
+//        onClick = {
+//            navHostController.popBackStack()
+//        },
+//        modifier = Modifier
+//            .align(Alignment.TopStart)
+//            .padding(top = 25.dp)
+//            .padding(start = 16.dp)
+//            .size(30.dp, 32.dp)
+//            .background(if (isButtonFocused) Color.LightGray else Color.Transparent)
+//            .focusRequester(focusRequester1)
+//            .onFocusChanged {
+//                isButtonFocused = it.isFocused
+//            }
+//            .focusable()
+//            .clickable {
+//                navHostController.popBackStack()
+//            }
+//    ) {
+//        Icon(
+//            imageVector = Icons.AutoMirrored.Filled.ArrowBack,
+//            contentDescription = "Arrow-Back",
+//            tint = colorResource(id = R.color.dark_blue_gray_text),
+////            tint = MaterialTheme.colorScheme.primary,
+//            modifier = Modifier.size(30.dp, 32.dp)
+//        )
+//    }
     Surface(
         modifier = Modifier
-            .padding(top = 25.dp)
+            .padding(start = 14.dp, top = 16.dp)
             .height(32.dp)
-            .align(Alignment.TopCenter)
+            .align(Alignment.TopStart)
             .padding(5.dp),
         color = colorResource(id = R.color.transparent)
     ) {