|
@@ -28,6 +28,7 @@ import androidx.compose.foundation.lazy.LazyColumn
|
|
|
import androidx.compose.foundation.lazy.items
|
|
|
import androidx.compose.foundation.pager.HorizontalPager
|
|
|
import androidx.compose.foundation.pager.rememberPagerState
|
|
|
+import androidx.compose.foundation.selection.selectable
|
|
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
|
import androidx.compose.material.icons.Icons
|
|
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
|
@@ -38,6 +39,7 @@ import androidx.compose.material3.MaterialTheme
|
|
|
import androidx.compose.material3.ModalBottomSheet
|
|
|
import androidx.compose.material3.RadioButton
|
|
|
import androidx.compose.material3.RadioButtonDefaults
|
|
|
+import androidx.compose.material3.ScrollableTabRow
|
|
|
import androidx.compose.material3.SearchBar
|
|
|
import androidx.compose.material3.SearchBarDefaults
|
|
|
import androidx.compose.material3.Surface
|
|
@@ -77,6 +79,7 @@ import androidx.compose.ui.res.painterResource
|
|
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
|
|
import com.vpn.fastestvpnservice.R
|
|
|
import com.vpn.fastestvpnservice.beans.Server
|
|
|
+import com.vpn.fastestvpnservice.beans.filterList
|
|
|
import com.vpn.fastestvpnservice.customItems.CountryItem
|
|
|
import com.vpn.fastestvpnservice.customItems.ServerItem
|
|
|
import com.vpn.fastestvpnservice.customItems.ServerSearchItem
|
|
@@ -91,6 +94,7 @@ import com.vpn.fastestvpnservice.viewmodels.ServerListViewModel
|
|
|
import com.vpn.fastestvpnservice.viewmodels.SplashViewModel
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
|
|
+var isAlphabetList: MutableState<Boolean> = mutableStateOf(false)
|
|
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
|
|
|
@Composable
|
|
|
fun ServerList(
|
|
@@ -104,7 +108,7 @@ fun ServerList(
|
|
|
ServerListViewModel(context = context)
|
|
|
}
|
|
|
val basePreferenceHelper = BasePreferenceHelper(context)
|
|
|
-
|
|
|
+ isAlphabetList.value = basePreferenceHelper.getFilterList() != filterList[0]
|
|
|
Box(
|
|
|
modifier = Modifier
|
|
|
.fillMaxSize()
|
|
@@ -319,21 +323,9 @@ fun ColumnScope.ShowRecommendedList(
|
|
|
|
|
|
}
|
|
|
|
|
|
-// recommendedList.forEachIndexed { index, server ->
|
|
|
-// Log.d("test_server recm", "$index ${server.server_name}")
|
|
|
-// }
|
|
|
-//
|
|
|
-// smartLocationList.forEachIndexed { index, server ->
|
|
|
-// Log.d("test_server smart", "$index ${server.server_name}")
|
|
|
-// }
|
|
|
-
|
|
|
val liveServerData = serverListViewModel.liveDataGetServerData.observeAsState().value
|
|
|
- val favList = serverListViewModel.liveDataGetFavList.observeAsState().value
|
|
|
+ var favList = serverListViewModel.liveDataGetFavList.observeAsState().value
|
|
|
|
|
|
-
|
|
|
-// favList?.forEachIndexed { index, server ->
|
|
|
-// Log.d("test_server favList", "$index ${server.server_name}")
|
|
|
-// }
|
|
|
LazyColumn(
|
|
|
modifier = Modifier
|
|
|
.padding(top = 14.dp),
|
|
@@ -365,26 +357,21 @@ fun ColumnScope.ShowRecommendedList(
|
|
|
)
|
|
|
}
|
|
|
}
|
|
|
- val fav = prefHelper.getServerData()
|
|
|
-// fav.forEachIndexed { index, serverData ->
|
|
|
-// Log.d("getServerData", serverData.name.toString())
|
|
|
-// }
|
|
|
-// val filterData1 = fav.get(2).servers?.let {
|
|
|
-// serverListViewModel.filterServersByStreamingServers(
|
|
|
-// it
|
|
|
-// )
|
|
|
-// }
|
|
|
-
|
|
|
-// val favList = serverListViewModel.getFavList()
|
|
|
-
|
|
|
|
|
|
favList?.let {
|
|
|
+// var favFilterList = favList
|
|
|
+// if (isAlphabetList.value) {
|
|
|
+// favFilterList.sortBy {
|
|
|
+// it.server_name
|
|
|
+// }
|
|
|
+// } else {
|
|
|
+// favFilterList = it
|
|
|
+// }
|
|
|
items(items = favList) { server ->
|
|
|
ServerItem(server, navHostController)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/* Smart List */
|
|
|
item {
|
|
|
Row(
|
|
@@ -413,13 +400,6 @@ fun ColumnScope.ShowRecommendedList(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// val smart = prefHelper.getServerData()
|
|
|
-// val filterData2 = smart.get(1).servers?.let {
|
|
|
-// serverListViewModel.filterServersByStreamingServers(
|
|
|
-// it
|
|
|
-// )
|
|
|
-// }
|
|
|
-
|
|
|
items(items = smartLocationList) { server ->
|
|
|
ServerItem(server, navHostController)
|
|
|
}
|
|
@@ -508,7 +488,6 @@ fun ColumnScope.ShowRecommendedList(
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
@OptIn(ExperimentalFoundationApi::class)
|
|
@@ -519,12 +498,6 @@ fun ColumnScope.ShowAllLocationsList(
|
|
|
navHostController: NavHostController
|
|
|
) {
|
|
|
val serverData = basePreferenceHelper.getServerData()
|
|
|
-// val filterData = serverData.get(0).servers?.let {
|
|
|
-// serverListViewModel.filterServersByISO(
|
|
|
-// it
|
|
|
-// )
|
|
|
-// }
|
|
|
-
|
|
|
val pagerState = rememberPagerState(pageCount = { serverData.size })
|
|
|
val selectedIndex by remember { derivedStateOf { pagerState.currentPage } }
|
|
|
var indexTab = serverListViewModel.liveDataPagerIndex.observeAsState().value
|
|
@@ -533,11 +506,7 @@ fun ColumnScope.ShowAllLocationsList(
|
|
|
val context = LocalContext.current
|
|
|
var filterServersList: ArrayList<Server> = ArrayList<Server>()
|
|
|
|
|
|
-// serverData.forEachIndexed { index, server ->
|
|
|
-// Log.d("test_data", "${server.name} ${server.servers?.size} -> ${serverData.size}")
|
|
|
-// }
|
|
|
-
|
|
|
- androidx.compose.material3.ScrollableTabRow(
|
|
|
+ ScrollableTabRow(
|
|
|
selectedTabIndex = selectedIndex,
|
|
|
containerColor = Color.Transparent,
|
|
|
modifier = Modifier
|
|
@@ -560,8 +529,7 @@ fun ColumnScope.ShowAllLocationsList(
|
|
|
var color by remember { mutableStateOf(Color.Transparent) }
|
|
|
var alpha by remember { mutableFloatStateOf(1F) }
|
|
|
|
|
|
- color =
|
|
|
- if (selectedIndex == index1)
|
|
|
+ color = if (selectedIndex == index1)
|
|
|
colorResource(id = R.color.light_blue_2)
|
|
|
else MaterialTheme.colorScheme.primary
|
|
|
alpha = if (selectedIndex == index1)
|
|
@@ -570,12 +538,10 @@ fun ColumnScope.ShowAllLocationsList(
|
|
|
Tab(
|
|
|
selected = selectedIndex == index1,
|
|
|
onClick = {
|
|
|
+ Log.d("serverTabPager_index", "$index1")
|
|
|
// serverListViewModel.setPagerIndex(index1)
|
|
|
scope.launch {
|
|
|
pagerState.animateScrollToPage(index1)
|
|
|
-// Toast.makeText(
|
|
|
-// context, "indexTab = $indexTab , index1 = $index1", Toast.LENGTH_SHORT
|
|
|
-// ).show()
|
|
|
// val filterServersData =
|
|
|
// if (data[index1].name?.lowercase().toString() == "servers") {
|
|
|
// data.get(index1).servers?.let {
|
|
@@ -680,13 +646,13 @@ fun ColumnScope.ShowAllLocationsList(
|
|
|
filterServersList = if (data[serverTabPager].name?.lowercase().toString() == "servers") {
|
|
|
data.get(serverTabPager).servers?.let {
|
|
|
serverListViewModel.filterServersByISO(
|
|
|
- it
|
|
|
+ it, isAlphabetList.value
|
|
|
)
|
|
|
}!!
|
|
|
} else {
|
|
|
data.get(serverTabPager).servers?.let {
|
|
|
serverListViewModel.filterServersByStreamingServers(
|
|
|
- it
|
|
|
+ it, isAlphabetList.value
|
|
|
)
|
|
|
}!!
|
|
|
}
|
|
@@ -806,8 +772,7 @@ fun ColumnScope.ShowSearchBar(
|
|
|
|
|
|
var isFilter by remember { mutableStateOf(false) }
|
|
|
val sheetState = rememberModalBottomSheetState()
|
|
|
- val filterList = listOf("Popularity", "Alphabetically")
|
|
|
- var selectedFilterList by remember { mutableStateOf(filterList[0]) }
|
|
|
+ var selectedFilterList by remember { mutableStateOf(basePreferenceHelper.getFilterList()) }
|
|
|
val scope = rememberCoroutineScope()
|
|
|
|
|
|
SearchBar(
|
|
@@ -915,18 +880,15 @@ fun ColumnScope.ShowSearchBar(
|
|
|
.fillMaxWidth()
|
|
|
.background(Color.Transparent)
|
|
|
.padding(start = 2.dp)
|
|
|
-// .selectable(
|
|
|
-// selected = selectedProtocol == protocol,
|
|
|
-// onClick = {
|
|
|
-// selectedProtocol = protocol
|
|
|
-// },
|
|
|
-// )
|
|
|
-// .indication(
|
|
|
-// indication = null,
|
|
|
-// interactionSource = remember {
|
|
|
-// MutableInteractionSource()
|
|
|
-// }
|
|
|
-// )
|
|
|
+ .selectable(
|
|
|
+ selected = filter == selectedFilterList,
|
|
|
+ onClick = {
|
|
|
+ selectedFilterList = filter
|
|
|
+ basePreferenceHelper.saveFilterList(filter)
|
|
|
+ isAlphabetList.value = filter != filterList[0]
|
|
|
+ isFilter = false
|
|
|
+ },
|
|
|
+ )
|
|
|
,
|
|
|
verticalAlignment = Alignment.CenterVertically
|
|
|
) {
|
|
@@ -934,7 +896,9 @@ fun ColumnScope.ShowSearchBar(
|
|
|
selected = filter == selectedFilterList,
|
|
|
onClick = {
|
|
|
selectedFilterList = filter
|
|
|
-
|
|
|
+ basePreferenceHelper.saveFilterList(filter)
|
|
|
+ isAlphabetList.value = filter != filterList[0]
|
|
|
+ isFilter = false
|
|
|
},
|
|
|
colors = RadioButtonDefaults.colors(
|
|
|
selectedColor = colorResource(id = R.color.radio_button_blue),
|