|
@@ -22,6 +22,7 @@ import androidx.compose.foundation.text.KeyboardOptions
|
|
import androidx.compose.foundation.verticalScroll
|
|
import androidx.compose.foundation.verticalScroll
|
|
import androidx.compose.material3.Icon
|
|
import androidx.compose.material3.Icon
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.MaterialTheme
|
|
|
|
+import androidx.compose.material3.SnackbarHostState
|
|
import androidx.compose.material3.Surface
|
|
import androidx.compose.material3.Surface
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.material3.TextField
|
|
import androidx.compose.material3.TextField
|
|
@@ -32,6 +33,7 @@ import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.livedata.observeAsState
|
|
import androidx.compose.runtime.livedata.observeAsState
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.remember
|
|
import androidx.compose.runtime.remember
|
|
|
|
+import androidx.compose.runtime.rememberCoroutineScope
|
|
import androidx.compose.runtime.setValue
|
|
import androidx.compose.runtime.setValue
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.Modifier
|
|
@@ -47,7 +49,9 @@ import androidx.compose.ui.unit.sp
|
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
|
import androidx.navigation.NavHostController
|
|
import androidx.navigation.NavHostController
|
|
import com.vpn.fastestvpnservice.R
|
|
import com.vpn.fastestvpnservice.R
|
|
|
|
+import com.vpn.fastestvpnservice.constants.AppEnum
|
|
import com.vpn.fastestvpnservice.customItems.ServerItemTV
|
|
import com.vpn.fastestvpnservice.customItems.ServerItemTV
|
|
|
|
+import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
|
|
import com.vpn.fastestvpnservice.screens.isSearchModelInitialized
|
|
import com.vpn.fastestvpnservice.screens.isSearchModelInitialized
|
|
import com.vpn.fastestvpnservice.screens.searchListViewModelSplash
|
|
import com.vpn.fastestvpnservice.screens.searchListViewModelSplash
|
|
import com.vpn.fastestvpnservice.screens.serverListViewModelSplash
|
|
import com.vpn.fastestvpnservice.screens.serverListViewModelSplash
|
|
@@ -55,13 +59,27 @@ import com.vpn.fastestvpnservice.ui.theme.customTypography
|
|
import com.vpn.fastestvpnservice.viewmodels.SearchListViewModel
|
|
import com.vpn.fastestvpnservice.viewmodels.SearchListViewModel
|
|
import com.vpn.fastestvpnservice.viewmodels.ServerListViewModel
|
|
import com.vpn.fastestvpnservice.viewmodels.ServerListViewModel
|
|
import com.vpn.fastestvpnservice.viewmodels.SplashViewModel
|
|
import com.vpn.fastestvpnservice.viewmodels.SplashViewModel
|
|
|
|
+import com.vpn.fastestvpnservice.views.ShowCustomSnackBar
|
|
import kotlinx.coroutines.delay
|
|
import kotlinx.coroutines.delay
|
|
|
|
+import kotlinx.coroutines.launch
|
|
|
|
|
|
@Composable
|
|
@Composable
|
|
fun ServerListTV(navHostController: NavHostController) {
|
|
fun ServerListTV(navHostController: NavHostController) {
|
|
val context = LocalContext.current
|
|
val context = LocalContext.current
|
|
var textChanged by remember { mutableStateOf("") }
|
|
var textChanged by remember { mutableStateOf("") }
|
|
val keyboardController = LocalSoftwareKeyboardController.current
|
|
val keyboardController = LocalSoftwareKeyboardController.current
|
|
|
|
+ val snackBarStateRed = remember { SnackbarHostState() }
|
|
|
|
+ val coroutineScope = rememberCoroutineScope()
|
|
|
|
+ val basePreferenceHelper = BasePreferenceHelper(context)
|
|
|
|
+
|
|
|
|
+ var isFreeAccount: Boolean = false
|
|
|
|
+ basePreferenceHelper.getProduct()?.identifier?.let {
|
|
|
|
+ if (it == AppEnum.FREE.key) {
|
|
|
|
+ isFreeAccount = true
|
|
|
|
+ } else {
|
|
|
|
+ isFreeAccount = false
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
if (!isSearchModelInitialized) {
|
|
if (!isSearchModelInitialized) {
|
|
splashViewModelSplash = viewModel {
|
|
splashViewModelSplash = viewModel {
|
|
@@ -84,6 +102,16 @@ fun ServerListTV(navHostController: NavHostController) {
|
|
.padding(bottom = 0.dp)
|
|
.padding(bottom = 0.dp)
|
|
|
|
|
|
) {
|
|
) {
|
|
|
|
+ ShowCustomSnackBar(snackBarStateRed, R.color.Red, R.color.white)
|
|
|
|
+
|
|
|
|
+ LaunchedEffect(key1 = Unit) {
|
|
|
|
+ if (isFreeAccount) {
|
|
|
|
+ coroutineScope.launch {
|
|
|
|
+ snackBarStateRed.showSnackbar(context.getString(R.string.email_field_req))
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
HeaderRowSL(navHostController = navHostController, title = context.getString(R.string.locations_cap))
|
|
HeaderRowSL(navHostController = navHostController, title = context.getString(R.string.locations_cap))
|
|
|
|
|
|
TextField(
|
|
TextField(
|
|
@@ -95,7 +123,7 @@ fun ServerListTV(navHostController: NavHostController) {
|
|
color = MaterialTheme.colorScheme.primary
|
|
color = MaterialTheme.colorScheme.primary
|
|
),
|
|
),
|
|
modifier = Modifier
|
|
modifier = Modifier
|
|
- .padding(top = 60.dp, end = 0.dp)
|
|
|
|
|
|
+ .padding(top = 104.dp, end = 0.dp)
|
|
.padding(horizontal = 0.dp)
|
|
.padding(horizontal = 0.dp)
|
|
.fillMaxWidth(fraction = 0.5f)
|
|
.fillMaxWidth(fraction = 0.5f)
|
|
.align(Alignment.TopCenter)
|
|
.align(Alignment.TopCenter)
|
|
@@ -170,7 +198,7 @@ fun ServerListTV(navHostController: NavHostController) {
|
|
Column(
|
|
Column(
|
|
modifier = Modifier
|
|
modifier = Modifier
|
|
.fillMaxSize()
|
|
.fillMaxSize()
|
|
- .padding(top = 130.dp, start = 24.dp, end = 24.dp, bottom = 24.dp)
|
|
|
|
|
|
+ .padding(top = 174.dp, start = 24.dp, end = 24.dp, bottom = 24.dp)
|
|
.verticalScroll(rememberScrollState())
|
|
.verticalScroll(rememberScrollState())
|
|
.background(Color.Transparent)
|
|
.background(Color.Transparent)
|
|
) {
|
|
) {
|
|
@@ -286,7 +314,7 @@ fun ServerListTV(navHostController: NavHostController) {
|
|
Column(
|
|
Column(
|
|
modifier = Modifier
|
|
modifier = Modifier
|
|
.fillMaxSize()
|
|
.fillMaxSize()
|
|
- .padding(top = 130.dp, start = 24.dp, end = 24.dp, bottom = 24.dp)
|
|
|
|
|
|
+ .padding(top = 174.dp, start = 24.dp, end = 24.dp, bottom = 24.dp)
|
|
.verticalScroll(rememberScrollState())
|
|
.verticalScroll(rememberScrollState())
|
|
.background(Color.Transparent)
|
|
.background(Color.Transparent)
|
|
) {
|
|
) {
|
|
@@ -387,7 +415,7 @@ fun BoxScope.HeaderRowSL(
|
|
// }
|
|
// }
|
|
Surface(
|
|
Surface(
|
|
modifier = Modifier
|
|
modifier = Modifier
|
|
- .padding(start = 14.dp, top = 16.dp)
|
|
|
|
|
|
+ .padding(start = 14.dp, top = 60.dp)
|
|
.height(32.dp)
|
|
.height(32.dp)
|
|
.align(Alignment.TopStart)
|
|
.align(Alignment.TopStart)
|
|
.padding(5.dp),
|
|
.padding(5.dp),
|