Prechádzať zdrojové kódy

working on serverlist-country items list..

Khubaib 1 rok pred
rodič
commit
33ec2bac3a

+ 1 - 3
app/build.gradle.kts

@@ -109,9 +109,7 @@ dependencies {
     implementation("androidx.navigation:navigation-fragment:2.7.7")
     implementation("androidx.appcompat:appcompat:1.6.1")
     implementation("com.google.android.material:material:1.11.0")
-
-
-
+    implementation("com.google.accompanist:accompanist-pager-indicators:0.30.1")
 
     // Ping
     implementation("com.github.stealthcopter:AndroidNetworkTools:0.4.5.3")

+ 22 - 47
app/src/main/java/com/vpn/fastestvpnservice/customItems/CountryItem.kt

@@ -96,7 +96,6 @@ fun CountryItem(server: Server, category: String, navHostController: NavHostCont
         val splashViewModel: SplashViewModel = viewModel{
             SplashViewModel(context)
         }
-
         val scope = rememberCoroutineScope()
         val homeViewModel: HomeViewModel = viewModel {
             HomeViewModel(context, scope)
@@ -104,7 +103,6 @@ fun CountryItem(server: Server, category: String, navHostController: NavHostCont
         var isCountryServerClicked by remember {
             mutableStateOf(false)
         }
-
         if (isCountryServerClicked) {
             Log.d("ServerCallbacks", "isServerClicked $isCountryServerClicked")
             onServer.onServerSelected(context, homeViewModel,
@@ -114,11 +112,9 @@ fun CountryItem(server: Server, category: String, navHostController: NavHostCont
             )
             navHostController.popBackStack()
         }
-
         var isServerServerClicked by remember {
             mutableStateOf(false)
         }
-
         if (isServerServerClicked) {
             Log.d("ServerCallbacks", "isServerClicked $isServerServerClicked")
             onServer.onServerSelected(
@@ -131,32 +127,15 @@ fun CountryItem(server: Server, category: String, navHostController: NavHostCont
             navHostController.popBackStack()
         }
 
-//        Log.d("test_countrySize", "countrySize $countrySize")
-
-//        LaunchedEffect(key1 = Unit) {
-//            Log.d("test_countrySize", "countrySize LE() $countrySize")
-//            if (countrySize == 0) {
-//                Log.d("test_countrySize", "countrySize==0 $countrySize")
-//                countrySize = server.totalServers
-//            }
-//        }
-
         countrySize.let { size ->
                     if (size > 1) {
                         var locationsSize: Int = 0
-//                        server.totalServers.let {
-//                            locationsSize = it
-//                        }
-
                         val countriesServersData = basePreferenceHelper.getServerData().get(0).servers
                         countriesServersData?.let {
                             val serversGroup = serverListViewModel.getServerGroupList(server, it)
 //                            Log.d("test_compose_servers", "${server.server_name} = ${serversGroup.size}")
                             locationsSize = serversGroup.size
                         }
-
-
-                        Log.d("test_server_size", "${server.server_name} $locationsSize")
                         Column {
                             /* Country Location's Row */
                             Row(
@@ -205,7 +184,7 @@ fun CountryItem(server: Server, category: String, navHostController: NavHostCont
                                         .align(Alignment.CenterVertically)
                                 )
                                 Spacer(modifier = Modifier.weight(1F))
-                                Text(text = "${locationsSize} locations",
+                                Text(text = "$locationsSize locations",
                                     style = MaterialTheme.typography.bodySmall,
                                     color = colorResource(id = R.color.dark_blue_gray_text),
                                     modifier = Modifier
@@ -246,26 +225,6 @@ fun CountryItem(server: Server, category: String, navHostController: NavHostCont
                     }
                     else {
                         Log.d("test_return_ping","C[1]=> " + server.server_name + server.ping)
-
-//                    Log.d("test_servers_count", "${server.server_name} ${server.countryServers?.size}")
-                        /* Country Location's Row -> 1 Location() */
-
-//                        var ping by remember { mutableIntStateOf(0) }
-//                        Ping.onAddress(server.ip as String).setTimeOutMillis(1000).doPing(
-//                            object : Ping.PingListener{
-//                                override fun onResult(pingResult: PingResult?) {
-//                                    android.os.Handler(Looper.getMainLooper()).post {
-//                                        val ping = pingResult?.timeTaken?.toInt()!!
-//                                        server.ping = ping
-//                                        Log.d("test_ping", "ping = $ping")
-//                                    }
-//                                }
-//
-//                                override fun onError(e: Exception?) {}
-//                                override fun onFinished(pingStats: PingStats?) {}
-//                            }
-//                        )
-
                         Row(
                             verticalAlignment = Alignment.Top,
                             horizontalArrangement = Arrangement.Start,
@@ -311,7 +270,7 @@ fun CountryItem(server: Server, category: String, navHostController: NavHostCont
                                 text = "${server.ping} ms",
                                 style = MaterialTheme.typography.displayMedium,
                                 color = colorResource(id = R.color.blue_text),
-                                        modifier = Modifier
+                                modifier = Modifier
                                     .padding(end = 30.dp, bottom = 18.dp)
                                     .align(Alignment.CenterVertically)
                             )
@@ -350,20 +309,36 @@ fun CountryItem(server: Server, category: String, navHostController: NavHostCont
                                 )
                             }
                         }
+
+//                    Log.d("test_servers_count", "${server.server_name} ${server.countryServers?.size}")
+                        /* Country Location's Row -> 1 Location() */
+
+//                        var ping by remember { mutableIntStateOf(0) }
+//                        Ping.onAddress(server.ip as String).setTimeOutMillis(1000).doPing(
+//                            object : Ping.PingListener{
+//                                override fun onResult(pingResult: PingResult?) {
+//                                    android.os.Handler(Looper.getMainLooper()).post {
+//                                        val ping = pingResult?.timeTaken?.toInt()!!
+//                                        server.ping = ping
+//                                        Log.d("test_ping", "ping = $ping")
+//                                    }
+//                                }
+//
+//                                override fun onError(e: Exception?) {}
+//                                override fun onFinished(pingStats: PingStats?) {}
+//                            }
+//                        )
                     }
                 }
-
             Surface(
                 modifier = Modifier
                     .padding(start = 0.dp, end = 0.dp)
                     .height(1.dp)
                     .fillMaxWidth()
                     .alpha(0.6F)
-                    .align(Alignment.BottomCenter)
-                ,
+                    .align(Alignment.BottomCenter),
                 color = colorResource(id = R.color.gray_icon)
             ) {}
-
     }
 }
 

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

@@ -520,8 +520,9 @@ fun ColumnScope.ShowAllLocationsList(
     navHostController: NavHostController
 ) {
     val serverData = basePreferenceHelper.getServerData()
-    val pagerState = rememberPagerState(pageCount = { serverData.size })
+    val pagerState = rememberPagerState(pageCount = {serverData.size})
     val selectedIndex by remember { derivedStateOf { pagerState.currentPage } }
+    var selectedTabIndex by rememberSaveable { mutableStateOf(0) }
     var indexTab = serverListViewModel.liveDataPagerIndex.observeAsState().value
     val scope = rememberCoroutineScope()
     val data = basePreferenceHelper.getServerData()
@@ -541,7 +542,8 @@ fun ColumnScope.ShowAllLocationsList(
         indicator = { selectedTab ->
             TabRowDefaults.Indicator(
                 modifier = Modifier.tabIndicatorOffset(selectedTab[selectedIndex]),
-                color = colorResource(id = R.color.light_blue_2)
+                color = colorResource(id = R.color.light_blue_2),
+                height = 1.dp
             )
         },
 //                                divider = {}
@@ -560,9 +562,10 @@ fun ColumnScope.ShowAllLocationsList(
             Tab(
                 selected = selectedIndex == index1,
                 onClick = {
-                    Log.d("serverTabPager_index", "$index1")
+//                    Log.d("serverTabPager_index", "$index1")
 //                    serverListViewModel.setPagerIndex(index1)
                     scope.launch {
+                        selectedTabIndex = index1
                         pagerState.animateScrollToPage(index1)
 //                        val filterServersData =
 //                            if (data[index1].name?.lowercase().toString() == "servers") {
@@ -589,8 +592,9 @@ fun ColumnScope.ShowAllLocationsList(
                 selectedContentColor = Color.White,
                 unselectedContentColor = Color.White,
                 text = {
+                    val locationTabName = if (locationTab.name?.lowercase() == "servers") "Countries" else locationTab.name
                     Text(
-                        text = locationTab.name!!,
+                        text = locationTabName ?: "",
                         style = MaterialTheme.typography.customTypography2.labelMedium,
                         color = color,
                         modifier = Modifier
@@ -612,11 +616,6 @@ fun ColumnScope.ShowAllLocationsList(
 //    var isServersListExpanded by rememberSaveable { mutableStateOf(List(data.size) {true}) }
     val isServersListExpanded by rememberSaveable { mutableStateOf(true) }
 
-//    val rotationState by animateFloatAsState(
-//        targetValue = if (isCountriesExpanded) 180f else 0f,
-//        label = if (isCountriesExpanded) "Show Less" else "Show More"
-//    )
-
     HorizontalPager(
         state = pagerState,
         modifier = Modifier
@@ -625,57 +624,77 @@ fun ColumnScope.ShowAllLocationsList(
             .background(Color.Transparent),
         userScrollEnabled = false
     ) { serverTabPager ->
-        Log.d("serverTabPager = ", "$serverTabPager")
         CompositionLocalProvider(
             LocalOverscrollConfiguration provides null
         ) {
-            Column(
-                modifier = Modifier.fillMaxSize()
-            ) {
-//                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]
-////                    }
-//                }
+            Column(modifier = Modifier.fillMaxSize()) {
+                Log.d("serverTabPager = ", "serverTabPager: $serverTabPager , selectedTabIndex: $selectedTabIndex")
 
                 CompositionLocalProvider(
                     LocalOverscrollConfiguration provides null
-                ) {
-                    Log.d("test_compose_servers", "serverTabPager = $serverTabPager")
-                    filterServersList = if (
-                        data[serverTabPager].name?.lowercase().toString() == "servers") {
-                        data.get(serverTabPager).servers?.let {
+                ) { filterServersList = if (
+                        data[selectedTabIndex].name?.lowercase().toString() == "servers") {
+                        data.get(selectedTabIndex).servers?.let {
                             serverListViewModel.filterServersByISO(
                                 it, isAlphabetList.value
                             )
                         }!!
                     } else {
-                        data.get(serverTabPager).servers?.let {
+                        data.get(selectedTabIndex).servers?.let {
                             serverListViewModel.filterServersByStreamingServers(
                                 it, isAlphabetList.value
                             )
                         }!!
                     }
 
+                    Log.d("filterServersList", "filterServersList: ${filterServersList.size}")
+
                     LazyColumn() {
                         items(items = filterServersList, itemContent = {country ->
-                            CountryItem(server = country, data[serverTabPager].name!!,
-                                navHostController )
+                            ServerItem(server = country, navHostController )
                         })
                     }
-
                 }
+
+//                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]
+////                    }
+//                }
             }
         }
+
+
+        val splashViewModel: SplashViewModel = viewModel{
+            SplashViewModel(context)
+        }
+        val searchListViewModel: SearchListViewModel = viewModel{
+            SearchListViewModel(context, serverListViewModel, splashViewModel)
+        }
+
+//        CompositionLocalProvider(
+//            LocalOverscrollConfiguration provides null
+//        ) {
+//            LazyColumn(
+//                modifier = Modifier
+//                    .padding(top = 0.dp, bottom = 0.dp),
+//            ) {
+//                val searchServersList = searchListViewModel.countriesList.value
+//                items(items = searchServersList!!) { server ->
+////                    ServerSearchItem(server, navHostController = navHostController)
+//                    CountryItem(server = server, category = "", navHostController = navHostController)
+//                }
+//            }
+//        }
     }
 }
 

+ 4 - 1
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/ServerListViewModel.kt

@@ -331,13 +331,16 @@ class ServerListViewModel(context: Context): ViewModel() {
                     distinctBy.get(index).totalServers = 1
 
 //                    distinctBy.get(index).countryServers = entry.value
-
                 }
             }
         }
 
         val filterList = distinctBy as ArrayList<Server>
 
+        filterList.forEachIndexed { index, server ->
+            Log.d("test_servers_total", "${server.server_name} ${server.totalServers}")
+        }
+
         if (isAlphabet) {
             filterList.sortBy {
                 it.server_name