浏览代码

server's ping not updating while scrolling - Sol-1

Khubaib 11 月之前
父节点
当前提交
5901e2c302

+ 2 - 2
.idea/deploymentTargetSelector.xml

@@ -4,10 +4,10 @@
     <selectionStates>
       <SelectionState runConfigName="app">
         <option name="selectionMode" value="DROPDOWN" />
-        <DropdownSelection timestamp="2024-05-10T09:58:03.892802568Z">
+        <DropdownSelection timestamp="2024-05-13T08:04:29.646466132Z">
           <Target type="DEFAULT_BOOT">
             <handle>
-              <DeviceId pluginId="LocalEmulator" identifier="path=/home/ubuntu/.android/avd/Pixel_C_API_34.avd" />
+              <DeviceId pluginId="Default" identifier="serial=1C051FDF60048Z;connection=2cee8a90" />
             </handle>
           </Target>
         </DropdownSelection>

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

@@ -221,10 +221,10 @@ fun ServerItem(server: Server, navHostController: NavHostController, serverPing:
 }
 
 @Composable
-fun FavoriteServerItem(server: Server, navHostController: NavHostController) {
+fun FavoriteServerItem(server: Server, navHostController: NavHostController, serverPing: Int) {
     val context = LocalContext.current
     val basePreferenceHelper = BasePreferenceHelper(context)
-    var serverListViewModel: ServerListViewModel = viewModel {
+    val serverListViewModel: ServerListViewModel = viewModel {
         ServerListViewModel(context = context)
     }
     val splashViewModel: SplashViewModel = viewModel{
@@ -655,13 +655,13 @@ fun ServerItemPreview() {
 @Preview
 @Composable
 fun FavoriteServerItemPreview() {
-    FavoriteServerItem(server = favListServer[0], rememberNavController())
+    FavoriteServerItem(server = favListServer[0], rememberNavController(), 0)
 }
 
 @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
 @Composable
 fun FavoriteServerItemPreviewDark() {
-    FavoriteServerItem(server = favListServer[0], rememberNavController())
+    FavoriteServerItem(server = favListServer[0], rememberNavController(), 0)
 }
 
 @Preview

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

@@ -2,6 +2,7 @@ package com.vpn.fastestvpnservice.screens
 
 import android.content.res.Configuration
 import android.location.Location
+import android.os.Handler
 import android.os.Looper
 import android.util.Log
 import androidx.compose.foundation.ExperimentalFoundationApi
@@ -49,11 +50,13 @@ import androidx.compose.material3.TextFieldDefaults
 import androidx.compose.material3.rememberModalBottomSheetState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.MutableState
 import androidx.compose.runtime.derivedStateOf
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.runtime.mutableFloatStateOf
+import androidx.compose.runtime.mutableIntStateOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCoroutineScope
@@ -353,6 +356,15 @@ fun ColumnScope.ShowRecommendedList(
         var favList = serverListViewModel.liveDataGetFavList.observeAsState().value
         favList = serverListViewModel.getFavList(isAlphabetList.value)
 
+        var ping by rememberSaveable { mutableIntStateOf(0) }
+
+        fun updatePing(newPing: Int) {
+            ping = newPing
+        }
+
+
+
+
         LazyColumn(
             modifier = Modifier
                 .padding(top = 14.dp),
@@ -399,7 +411,9 @@ fun ColumnScope.ShowRecommendedList(
                     }
                 }
 
+
                 items(items = favFilterList) { server ->
+
                     ServerItem(server, navHostController, server.ping)
                 }
             }
@@ -528,6 +542,7 @@ fun ColumnScope.ShowRecommendedList(
     }
 }
 
+
 @OptIn(ExperimentalFoundationApi::class)
 @Composable
 fun ColumnScope.ShowAllLocationsList(

+ 32 - 15
app/src/main/java/com/vpn/fastestvpnservice/screens/accountScreensAll/FavoriteServersScreen.kt

@@ -1,7 +1,8 @@
 package com.vpn.fastestvpnservice.screens.accountScreensAll
 
 import android.content.res.Configuration
-import android.util.Log
+import android.os.Handler
+import android.os.Looper
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.LocalOverscrollConfiguration
 import androidx.compose.foundation.background
@@ -24,10 +25,10 @@ import androidx.compose.material3.MaterialTheme
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.getValue
+import androidx.compose.runtime.key
 import androidx.compose.runtime.livedata.observeAsState
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.mutableIntStateOf
+import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
@@ -35,24 +36,18 @@ import androidx.compose.ui.graphics.Color
 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.font.FontWeight
-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.stealthcopter.networktools.Ping
+import com.stealthcopter.networktools.ping.PingResult
+import com.stealthcopter.networktools.ping.PingStats
 import com.vpn.fastestvpnservice.R
-import com.vpn.fastestvpnservice.beans.favList
+import com.vpn.fastestvpnservice.beans.Server
 import com.vpn.fastestvpnservice.customItems.FavoriteServerItem
-import com.vpn.fastestvpnservice.customItems.ServerItem
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
-import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.onServer
-import com.vpn.fastestvpnservice.sealedClass.BottomBarScreen
-import com.vpn.fastestvpnservice.sealedClass.Screen
-import com.vpn.fastestvpnservice.viewmodels.HomeViewModel
 import com.vpn.fastestvpnservice.viewmodels.ServerListViewModel
 
 @OptIn(ExperimentalFoundationApi::class)
@@ -84,6 +79,7 @@ fun FavoriteServers(navHostController: NavHostController) {
                 .background(Color.Transparent)
         ) {
             val favoriteServers = serverListViewModel.liveDataGetFavList.observeAsState().value
+            var ping by rememberSaveable { mutableIntStateOf(0) }
 
             CompositionLocalProvider(
                 LocalOverscrollConfiguration provides null
@@ -103,7 +99,11 @@ fun FavoriteServers(navHostController: NavHostController) {
 
                     favoriteServers?.let {
                         items(items = favoriteServers) {server ->
-                            FavoriteServerItem(server = server, navHostController)
+//                            calPing(server) {
+//                                server.ping = it
+////                                if (server.ping != 0) ping = it
+//                            }
+                            FavoriteServerItem(server = server, navHostController, server.ping)
                         }
                     }
 
@@ -113,6 +113,23 @@ fun FavoriteServers(navHostController: NavHostController) {
     }
 }
 
+fun calPing(server: Server, updatePing: (Int) -> Unit) {
+    Ping.onAddress(server.ip as String).setTimeOutMillis(1000).doPing(
+        object : Ping.PingListener{
+            override fun onResult(pingResult: PingResult?) {
+                Handler(Looper.getMainLooper()).post {
+                    pingResult?.let {
+                        updatePing(it.timeTaken.toInt())
+                    }
+                }
+            }
+
+            override fun onError(e: Exception?) {}
+            override fun onFinished(pingStats: PingStats?) {}
+        }
+    )
+}
+
 @Composable
 fun BoxScope.HeaderRowFS(
     navHostController: NavHostController) {