فهرست منبع

set ui for Home TV

Khubaib 9 ماه پیش
والد
کامیت
b91664897f

+ 8 - 6
app/src/main/java/com/vpn/fastestvpnservice/navigation/CustomBottomBarTV.kt

@@ -118,6 +118,7 @@ fun BottomBarNavTV(
     val navBackStackEntry = navHostController.currentBackStackEntryAsState()
     var currentDestination = navBackStackEntry.value?.destination
     var screen: BottomBarScreen = BottomBarScreen.Home
+    val topPadding = 5.dp
 
     when (selectedItemIndex.value) {
         0 -> {
@@ -192,10 +193,11 @@ fun BottomBarNavTV(
     ) {
         Row(
             modifier = Modifier
-                .height(60.dp)
+                .height(55.dp)
                 .fillMaxWidth(fraction = 0.5f)
+                .padding(horizontal = 20.dp)
                 .background(colorResource(id = R.color.background_color_gray)),
-            horizontalArrangement = Arrangement.SpaceEvenly,
+            horizontalArrangement = Arrangement.SpaceBetween,
             verticalAlignment = Alignment.CenterVertically
         ) {
             Surface(
@@ -228,7 +230,7 @@ fun BottomBarNavTV(
                     tint = color,
                     modifier = Modifier
                         .size(55.dp, 55.dp)
-                        .padding(top = 9.dp, bottom = 4.dp)
+                        .padding(top = topPadding, bottom = 4.dp)
                         .alpha(alpha)
                 )
             }
@@ -261,7 +263,7 @@ fun BottomBarNavTV(
                     tint = color,
                     modifier = Modifier
                         .size(55.dp, 55.dp)
-                        .padding(top = 9.dp, bottom = 4.dp)
+                        .padding(top = topPadding, bottom = 4.dp)
                         .alpha(alpha)
                 )
             }
@@ -295,7 +297,7 @@ fun BottomBarNavTV(
                     tint = color,
                     modifier = Modifier
                         .size(55.dp, 55.dp)
-                        .padding(top = 9.dp, bottom = 4.dp)
+                        .padding(top = topPadding, bottom = 4.dp)
                         .alpha(alpha)
                 )
             }
@@ -328,7 +330,7 @@ fun BottomBarNavTV(
                     tint = color,
                     modifier = Modifier
                         .size(55.dp, 55.dp)
-                        .padding(top = 9.dp, bottom = 4.dp)
+                        .padding(top = topPadding, bottom = 4.dp)
                         .alpha(alpha)
                 )
             }

+ 198 - 47
app/src/main/java/com/vpn/fastestvpnservice/screensTV/HomeScreenTV.kt

@@ -2,6 +2,7 @@ package com.vpn.fastestvpnservice.screensTV
 
 import android.content.Context
 import android.util.Log
+import android.widget.Toast
 import androidx.compose.foundation.BorderStroke
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.background
@@ -13,7 +14,9 @@ import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.BoxScope
 import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.ColumnScope
 import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.RowScope
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxSize
@@ -32,12 +35,14 @@ import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Surface
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.DisposableEffect
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
 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.rememberUpdatedState
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
@@ -57,13 +62,19 @@ import androidx.compose.ui.input.key.onKeyEvent
 import androidx.compose.ui.input.key.type
 import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalLifecycleOwner
 import androidx.compose.ui.res.colorResource
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.unit.TextUnit
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import androidx.constraintlayout.compose.ConstraintLayout
 import androidx.constraintlayout.compose.Dimension
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleEventObserver
+import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.viewmodel.compose.viewModel
 import androidx.navigation.NavHostController
 import com.vpn.fastestvpnservice.R
@@ -72,14 +83,15 @@ import com.vpn.fastestvpnservice.constants.smartConnect
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
 import com.vpn.fastestvpnservice.navigation.isFirstItemPressed
 import com.vpn.fastestvpnservice.navigation.isHomeScreenPressed
-import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.AddText
-import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.ColumnText
 import com.vpn.fastestvpnservice.ui.theme.customTypography
 import com.vpn.fastestvpnservice.utils.Utils
+import com.vpn.fastestvpnservice.utils.VPNConnectionsUtil
 import com.vpn.fastestvpnservice.utils.isTablet
 import com.vpn.fastestvpnservice.viewmodels.HomeViewModel
 import de.blinkt.openvpn.core.App
 
+lateinit var vpnConnectionsUtil: VPNConnectionsUtil
+
 @Composable
 fun HomeTV(navHostController: NavHostController) {
 
@@ -97,6 +109,65 @@ fun HomeTV(navHostController: NavHostController) {
     val focusRequester3 = remember { FocusRequester() }
     var isButtonFocused by remember { mutableStateOf(false) }
 
+    OnLifecycleEvent { owner, event ->
+        when (event) {
+            Lifecycle.Event.ON_RESUME -> {
+                Log.d("test_home_resume", "ON_RESUME: Home Screen!")
+
+//                try {
+//                    App.backend?.runningTunnelNames
+//                } catch (e: Exception) {
+//                    val back = GoBackend(context)
+//                    App.setBackend(back)
+//                    App.backend = App.getBackend()
+//                }
+//                vpnConnectionsUtil.onResumeCallBack()
+
+                homeViewModel.getIp()
+
+//                var filterServerByConnectionCount = Server()
+//                if (prefHelper.getServerObject() != null) {
+//                    prefHelper.getServerObject()?.let {
+//                        filterServerByConnectionCount = it
+//                    }
+//                } else {
+//                    val smartServer = basePreferenceHelper.getSmartServerObject()
+//                    smartServer?.let {
+//                        filterServerByConnectionCount = it
+//                    }
+//                }
+//
+//                server = filterServerByConnectionCount
+//
+////                splashViewModel.serverDataApi()
+//                homeViewModel.validatePassword(
+//                    prefHelper.getUser()?.userinfo?.email.toString(),
+//                    prefHelper.getPassword().toString(),
+//                    "android",
+//                    Build.VERSION.RELEASE
+//                )
+            }
+
+            Lifecycle.Event.ON_PAUSE -> {
+                Log.d("test_home_resume", "ON_PAUSE: Home Screen!")
+//                vpnConnectionsUtil.onPauseCallBack()
+            }
+
+            Lifecycle.Event.ON_STOP -> {
+                Log.d("test_home_resume", "ON_STOP: Home Screen!")
+//                vpnConnectionsUtil.onStopCallBack()
+            }
+
+            Lifecycle.Event.ON_DESTROY -> {
+                Log.d("test_home_resume", "ON_DESTROY: Home Screen!")
+//                vpnConnectionsUtil.onPauseCallBack()
+            }
+            else -> {
+                Log.d("test_home_resume", "else: Home Screen!")
+            }
+        }
+    }
+
     if (isHomeScreenPressed.value) {
         LaunchedEffect(key1 = Unit) {
             focusRequester1.requestFocus()
@@ -118,7 +189,7 @@ fun HomeTV(navHostController: NavHostController) {
         // 1st box
         ConstraintLayout(modifier = Modifier
             .fillMaxSize()
-            .weight(0.6f)
+            .weight(0.65f)
             .background(Color.Transparent)
         )
         {
@@ -162,11 +233,11 @@ fun HomeTV(navHostController: NavHostController) {
                     modifier = Modifier
                         .fillMaxWidth()
                         .fillMaxHeight()
-                        .padding(bottom = 115.dp)
+                        .padding(bottom = 70.dp)
 //                            .offset(y = -(118).dp)
                         .background(Color.Transparent),
                     horizontalAlignment = Alignment.CenterHorizontally,
-                    verticalArrangement = if (isTablet()) Arrangement.Bottom else Arrangement.SpaceEvenly
+                    verticalArrangement = Arrangement.Top
                 ) {
                     val serverObj = basePreferenceHelper.getConnectedServer()
                     val serverDis = basePreferenceHelper.getIpinfo()
@@ -231,38 +302,40 @@ fun HomeTV(navHostController: NavHostController) {
                             )
                         }
                     }
-                    if (isConnect == App.CONNECTED) {
-                        AddText(
-                            text = "Connected",
-                            size = 18.sp,
-//                            color = MaterialTheme.colorScheme.surfaceContainerHigh,
-                            color = colorResource(id = R.color.light_blue_2),
-                            style = MaterialTheme.typography.customTypography.displaySmall.copy(
-                                fontSize = if (isTablet()) 24.sp else 18.sp
+                    when (isConnect) {
+                        App.CONNECTED -> {
+                            AddText(
+                                text = "Connected",
+                                size = 18.sp,
+                //                            color = MaterialTheme.colorScheme.surfaceContainerHigh,
+                                color = colorResource(id = R.color.light_blue_2),
+                                style = MaterialTheme.typography.customTypography.displaySmall.copy(
+                                    fontSize = if (isTablet()) 24.sp else 18.sp
+                                )
                             )
-                        )
-                    }
-                    else if (isConnect == App.DISCONNECTED) {
-                        AddText(
-                            text = "Disconnected",
-                            size = 18.sp,
-//                            color = MaterialTheme.colorScheme.surfaceTint,
-                            color = colorResource(id = R.color.maroon_text),
-                            style = MaterialTheme.typography.customTypography.displaySmall.copy(
-                                fontSize = if (isTablet()) 24.sp else 18.sp
+                        }
+                        App.DISCONNECTED -> {
+                            AddText(
+                                text = "Disconnected",
+                                size = 18.sp,
+                //                            color = MaterialTheme.colorScheme.surfaceTint,
+                                color = colorResource(id = R.color.maroon_text),
+                                style = MaterialTheme.typography.customTypography.displaySmall.copy(
+                                    fontSize = if (isTablet()) 24.sp else 18.sp
+                                )
                             )
-                        )
-                    }
-                    else if (isConnect == App.CONNECTING) {
-                        AddText(
-                            text = "Connecting...",
-                            size = 18.sp,
-//                            color = MaterialTheme.colorScheme.surfaceTint,
-                            color = colorResource(id = R.color.maroon_text),
-                            style = MaterialTheme.typography.customTypography.displaySmall.copy(
-                                fontSize = if (isTablet()) 24.sp else 18.sp
+                        }
+                        App.CONNECTING -> {
+                            AddText(
+                                text = "Connecting...",
+                                size = 18.sp,
+                //                            color = MaterialTheme.colorScheme.surfaceTint,
+                                color = colorResource(id = R.color.maroon_text),
+                                style = MaterialTheme.typography.customTypography.displaySmall.copy(
+                                    fontSize = if (isTablet()) 24.sp else 18.sp
+                                )
                             )
-                        )
+                        }
                     }
                 }
             }
@@ -273,8 +346,8 @@ fun HomeTV(navHostController: NavHostController) {
                         bottom.linkTo(firstComposable.bottom)
                         start.linkTo(parent.start)
                         end.linkTo(parent.end)
-                        width = Dimension.value(234.dp)
-                        height = Dimension.value(234.dp)
+                        width = Dimension.value(180.dp)
+                        height = Dimension.value(180.dp)
                     }
                     .background(Color.Transparent)
             ) {
@@ -339,7 +412,7 @@ fun HomeTV(navHostController: NavHostController) {
                     },
                     modifier = Modifier
                         .padding(bottom = 0.dp)
-                        .size(200.dp)
+                        .size(180.dp)
                         .onKeyEvent {
                             when (it.key) {
                                 Key.DirectionDown -> {
@@ -406,10 +479,9 @@ fun HomeTV(navHostController: NavHostController) {
         Box(
             modifier = Modifier
                 .background(colorResource(id = R.color.background_color_gray))
-//                .background(Color.Blue)
                 .fillMaxSize()
-                .weight(0.4f)
-//                .background(Color.Gray),
+                .weight(0.35f)
+//                .background(Color.Transparent),
         ) {
             Column(
                 modifier = Modifier.fillMaxSize(),
@@ -420,7 +492,7 @@ fun HomeTV(navHostController: NavHostController) {
                     modifier = Modifier
                         .fillMaxWidth(fraction = if (isTablet()) 0.5f else 1f)
                         .padding(horizontal = 20.dp)
-                        .padding(vertical = 5.dp)
+                        .padding(vertical = 2.dp)
                         .height(100.dp)
                         .border(
                             border = BorderStroke(2.dp, colorResource(id = R.color.white)),
@@ -539,19 +611,21 @@ fun HomeTV(navHostController: NavHostController) {
                 Box(
                     modifier = Modifier
                         .fillMaxWidth(fraction = if (isTablet()) 0.5f else 1f)
-                        .padding(horizontal = 20.dp, vertical = 5.dp)
+                        .padding(horizontal = 20.dp, vertical = 2.dp)
                         .padding(top = 0.dp)
                         .height(60.dp)
                         .onKeyEvent {
-                                if (it.type == KeyEventType.KeyDown && it.key == Key.DirectionDown) {
+                            if (it.type == KeyEventType.KeyDown && it.key == Key.DirectionDown) {
 //                                    Toast
 //                                        .makeText(
 //                                            context, "KeyDown & DirectionDown", Toast.LENGTH_SHORT
 //                                        )
 //                                        .show()
-                                    isFirstItemPressed.value = true
-                                    true
-                                } else { false }
+                                isFirstItemPressed.value = true
+                                true
+                            } else {
+                                false
+                            }
                         }
                         .onFocusChanged {
                             isLayoutFocused = it.isFocused
@@ -696,7 +770,10 @@ fun BoxScope.AddRowSmartTV(
 //                                ).show()
                                 true
                             }
-                            else -> { false }
+
+                            else -> {
+                                false
+                            }
                         }
                     }
                     .focusRequester(focusRequester2)
@@ -808,6 +885,80 @@ fun BoxScope.AddRowSelectServerTV(navHostController: NavHostController, isTablet
 
     }
 }
+
+@Composable
+fun ColumnScope.AddText(
+    text: String,
+    size: TextUnit,
+    color: Color,
+    style: TextStyle
+) {
+    Text(
+        text = text,
+        style = style,
+        color = color,
+        modifier = Modifier.padding(bottom = if (isTablet()) 15.dp else 0.dp)
+    )
+}
+
+@Composable
+fun ColumnScope.ColumnText(
+    text: String,
+    color: Color,
+    size: TextUnit,
+    style: TextStyle
+) {
+    Surface(
+        modifier = Modifier.padding(start = 0.dp),
+        color = Color.Transparent
+    ) {
+        Text(text = text,
+            style = style,
+            color = color,
+            maxLines = 1,
+            modifier = Modifier
+                .padding(start = 0.dp, end = 0.dp)
+                .weight(1f)
+        )
+    }
+}
+@Composable
+fun RowScope.AddText(
+    text: String,
+    size: TextUnit,
+    color: Color,
+    isTablet: Boolean
+) {
+    Text(
+        text = text,
+        style = MaterialTheme.typography.labelMedium.copy(
+            fontSize = if (isTablet()) 22.sp else 16.sp
+        ),
+        color = color,
+        modifier = Modifier.padding(bottom = if (isTablet()) 15.dp else 0.dp)
+    )
+}
+@Composable
+fun OnLifecycleEvent(onEvent: (
+    owner: LifecycleOwner,
+    event: Lifecycle.Event
+) -> Unit) {
+    val eventHandler = rememberUpdatedState(onEvent)
+    val lifecycleOwner = rememberUpdatedState(LocalLifecycleOwner.current)
+
+    DisposableEffect(lifecycleOwner.value) {
+        val lifecycle = lifecycleOwner.value.lifecycle
+        val observer = LifecycleEventObserver { owner, event ->
+            eventHandler.value(owner, event)
+        }
+
+        lifecycle.addObserver(observer)
+        onDispose {
+            lifecycle.removeObserver(observer)
+        }
+    }
+}
+
 @Composable
 fun pinkBackgroundTV(): Painter {
     return if (isDarkTheme.value) painterResource(id = R.drawable.darkpinkbackground)