Преглед на файлове

worked on smart connect functionality

Khubaib преди 1 година
родител
ревизия
281b45c753

+ 14 - 1
.idea/deploymentTargetDropDown.xml

@@ -6,7 +6,20 @@
         <State />
       </entry>
       <entry key="app">
-        <State />
+        <State>
+          <targetSelectedWithDropDown>
+            <Target>
+              <type value="QUICK_BOOT_TARGET" />
+              <deviceKey>
+                <Key>
+                  <type value="VIRTUAL_DEVICE_PATH" />
+                  <value value="$USER_HOME$/.android/avd/Small_Phone_API_27.avd" />
+                </Key>
+              </deviceKey>
+            </Target>
+          </targetSelectedWithDropDown>
+          <timeTargetWasSelectedWithDropDown value="2024-04-21T20:41:59.164670454Z" />
+        </State>
       </entry>
     </value>
   </component>

+ 2 - 0
app/src/main/java/com/vpn/fastestvpnservice/beans/Dark_Light_Theme.kt

@@ -12,3 +12,5 @@ var isDarkTheme: MutableState<Boolean> = mutableStateOf(false)
 var selectedtheme: MutableState<String> = mutableStateOf(themesList[0])
 
 val filterList = listOf<String>("Popularity", "Alphabetically")
+
+var toChangeServer: MutableState<Boolean> = mutableStateOf(false)

+ 15 - 3
app/src/main/java/com/vpn/fastestvpnservice/customItems/CountryItem.kt

@@ -68,6 +68,9 @@ import com.vpn.fastestvpnservice.utils.Utils
 import com.stealthcopter.networktools.Ping
 import com.stealthcopter.networktools.ping.PingResult
 import com.stealthcopter.networktools.ping.PingStats
+import com.vpn.fastestvpnservice.beans.smartList
+import com.vpn.fastestvpnservice.beans.toChangeServer
+import com.vpn.fastestvpnservice.constants.smartConnect
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.onServer
 import com.vpn.fastestvpnservice.sealedClass.BottomBarScreen
@@ -325,9 +328,18 @@ fun ColumnScope.ExpandableRow(
                                 interactionSource = remember { MutableInteractionSource() }
                             ) {
                                 if (serverInfo.enable == 1) {
-                                    serverInfoObj.value = serverInfo
+
+                                    if (toChangeServer.value) {
+                                        Log.d("test_change_Server", "true-Change")
+                                        basePreferenceHelper.saveSmartList(smartConnect[2])
+                                        basePreferenceHelper.setSmartServerObject(serverInfo)
+                                        navHostController.popBackStack()
+                                    } else {
+                                        Log.d("test_change_Server", "false : Connect")
+                                        serverInfoObj.value = serverInfo
 //                                    basePreferenceHelper.setServerObject(serverInfo)
-                                    isExpServerClicked = true
+                                        isExpServerClicked = true
+                                    }
                                 } else {
                                     basePreferenceHelper.setSubscriptionServerObject(serverInfo)
                                     Screen.Subscription.isTrue = true
@@ -337,7 +349,7 @@ fun ColumnScope.ExpandableRow(
                                 }
                             }
                     ) {
-                        Text(text = serverInfo.server_name!!,
+                        Text(text = "${serverInfo.server_name}",
                             style = MaterialTheme.typography.labelMedium,
                             color = MaterialTheme.colorScheme.onSecondary,
                             modifier = Modifier

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

@@ -3,9 +3,6 @@ package com.vpn.fastestvpnservice.customItems
 import android.content.res.Configuration
 import android.os.Looper
 import android.util.Log
-import android.widget.Toast
-import androidx.compose.foundation.BorderStroke
-import androidx.compose.foundation.Image
 import androidx.compose.foundation.background
 import androidx.compose.foundation.border
 import androidx.compose.foundation.clickable
@@ -14,15 +11,11 @@ import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.layout.wrapContentHeight
-import androidx.compose.foundation.layout.wrapContentWidth
 import androidx.compose.foundation.shape.CircleShape
-import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.material3.Icon
 import androidx.compose.material3.IconButton
 import androidx.compose.material3.MaterialTheme
@@ -31,44 +24,35 @@ import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
-import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.runtime.mutableIntStateOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCoroutineScope
-import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.alpha
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.draw.paint
-import androidx.compose.ui.draw.scale
-import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.Shape
 import androidx.compose.ui.layout.ContentScale
 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.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.MainActivity
 import com.vpn.fastestvpnservice.R
 import com.vpn.fastestvpnservice.beans.Server
-import com.vpn.fastestvpnservice.beans.ServerList
-import com.vpn.fastestvpnservice.beans.favList
 import com.vpn.fastestvpnservice.beans.favListServer
+import com.vpn.fastestvpnservice.beans.toChangeServer
+import com.vpn.fastestvpnservice.constants.smartConnect
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
-import com.vpn.fastestvpnservice.helpers.UIHelper
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.onServer
 import com.vpn.fastestvpnservice.sealedClass.BottomBarScreen
 import com.vpn.fastestvpnservice.sealedClass.Screen
@@ -77,8 +61,6 @@ import com.vpn.fastestvpnservice.viewmodels.HomeViewModel
 import com.vpn.fastestvpnservice.viewmodels.SearchListViewModel
 import com.vpn.fastestvpnservice.viewmodels.ServerListViewModel
 import com.vpn.fastestvpnservice.viewmodels.SplashViewModel
-import kotlinx.coroutines.delay
-import java.lang.Exception
 
 @Composable
 fun ServerItem(server: Server, navHostController: NavHostController, serverPing: Int = 0) {
@@ -129,8 +111,14 @@ fun ServerItem(server: Server, navHostController: NavHostController, serverPing:
                     interactionSource = remember { MutableInteractionSource() }
                 ) {
                     if (server.enable == 1) {
+                        if (toChangeServer.value) {
+                            basePreferenceHelper.saveSmartList(smartConnect[2])
+                            basePreferenceHelper.setSmartServerObject(server)
+                            navHostController.popBackStack()
+                        } else {
+                            isServerClicked = true
+                        }
 //                        basePreferenceHelper.setServerObject(server)
-                        isServerClicked = true
                     } else {
                         basePreferenceHelper.setSubscriptionServerObject(server)
                         Screen.Subscription.isTrue = true
@@ -138,7 +126,6 @@ fun ServerItem(server: Server, navHostController: NavHostController, serverPing:
                             Screen.Subscription.route
                         )
                     }
-
                 }
         ) {
             var ping by remember { mutableIntStateOf(0) }
@@ -183,7 +170,7 @@ fun ServerItem(server: Server, navHostController: NavHostController, serverPing:
                         contentScale = ContentScale.FillBounds
                     )
             )
-            Text(text = server.server_name!!,
+            Text(text = "${server.server_name}",
                 style = MaterialTheme.typography.labelMedium,
                 color = MaterialTheme.colorScheme.primary,
                 modifier = Modifier
@@ -452,8 +439,14 @@ fun ServerSearchItem(
                     interactionSource = remember { MutableInteractionSource() }
                 ) {
                     if (server.enable == 1) {
+                        if (toChangeServer.value) {
+                            basePreferenceHelper.saveSmartList(smartConnect[2])
+                            basePreferenceHelper.setSmartServerObject(server)
+                            navHostController.popBackStack()
+                        } else {
+                            isSearchServerClicked = isServerCallbackShown
+                        }
 //                        basePreferenceHelper.setServerObject(server)
-                        isSearchServerClicked = isServerCallbackShown
 
                         if (!isServerCallbackShown) {
                             onServerDisable()
@@ -599,8 +592,9 @@ fun ServerSpecificItem(
                     interactionSource = remember { MutableInteractionSource() }
                 ) {
                     if (server.enable == 1) {
-                        MainActivity.isSelectedServersShown = true
-                        basePreferenceHelper.setServerObject(server)
+//                        MainActivity.isSelectedServersShown = true
+//                        basePreferenceHelper.setServerObject(server)
+                        basePreferenceHelper.saveSmartList(smartConnect[2])
                         basePreferenceHelper.setSmartServerObject(server)
                         onServerDisable()
                     } else {

+ 1 - 1
app/src/main/java/com/vpn/fastestvpnservice/screens/LoginScreen.kt

@@ -682,7 +682,7 @@ fun ColumnScope.SignInButton(
                         }
 
                         smartLocationList.forEach {
-                            prefHelper.setSmartServerObject(it)
+//                            prefHelper.setSmartServerObject(it)
                             prefHelper.setRecommendedServerObject(it)
                             Log.d("smartLocationList", "L:: server = ${it.server_name}")
                         }

+ 1 - 1
app/src/main/java/com/vpn/fastestvpnservice/screens/SignUpScreen.kt

@@ -813,7 +813,7 @@ fun ColumnScope.SignUpButton(
                     }
 
                     smartLocationList.forEach {
-                        prefHelper.setSmartServerObject(it)
+//                        prefHelper.setSmartServerObject(it)
                         prefHelper.setRecommendedServerObject(it)
                         Log.d("smartLocationList", "S:: server = ${it.server_name}")
                     }

+ 3 - 2
app/src/main/java/com/vpn/fastestvpnservice/screens/SplashScreen.kt

@@ -156,7 +156,7 @@ fun Splash(navHostController: NavHostController) {
             }
 
             smartLocationList.forEach {
-                basePreferenceHelper.setSmartServerObject(it)
+//                basePreferenceHelper.setSmartServerObject(it)
                 basePreferenceHelper.setRecommendedServerObject(it)
                 Log.d("smartLocationList", "SS:: server = ${it.server_name}")
             }
@@ -179,10 +179,11 @@ fun Splash(navHostController: NavHostController) {
     val delay: Long = if (isLoggedIn) 1000 else 2000
 
     LaunchedEffect(key1 = true) {
-        splashViewModel.serverDataApi()
+//        splashViewModel.serverDataApi()
         delay(delay)
 
         if (isLoggedIn) {
+            splashViewModel.serverDataApi()
             navHostController.popBackStack()
             navHostController.navigate(Screen.BottomBarMainScreen.route)
         } else {

+ 70 - 617
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/HomeScreen.kt

@@ -106,6 +106,7 @@ import de.blinkt.openvpn.core.App
 import com.vpn.fastestvpnservice.beans.Protocol
 import com.vpn.fastestvpnservice.beans.Server
 import com.vpn.fastestvpnservice.beans.isDarkTheme
+import com.vpn.fastestvpnservice.beans.toChangeServer
 import com.vpn.fastestvpnservice.constants.AppEnum
 import com.vpn.fastestvpnservice.constants.smartConnect
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
@@ -149,9 +150,10 @@ lateinit var vpnConnectionsUtil: VPNConnectionsUtil
         Log.d("ServerCallbacks", "onServerSelected called!")
 
         val lastServer = basePreferenceHelper.getConnectedServer()
+         val connectState = basePreferenceHelper.getConnectState()
         if (isServerDialogShown) {
             Log.d("ServerCallbacks", "onServerSelected true!")
-            if (wg.isVPNConnected()) {
+            if (connectState == 2) {
                 Log.d("ServerCallbacks", "onServerSelected isVPNConnected!")
                 if (lastServer?.id != server.id) {
                     isServerDialog.value = true
@@ -176,17 +178,22 @@ lateinit var vpnConnectionsUtil: VPNConnectionsUtil
 
     }
 
-     override fun onChangeProtocol(protocol: Protocol, context: Context, serverListViewModel: ServerListViewModel) {
+     override fun onChangeProtocol(
+         protocol: Protocol,
+         context: Context,
+         serverListViewModel: ServerListViewModel
+     ) {
          val prefHelper = BasePreferenceHelper(context)
          val wg = VPNConnectionsUtil(context, act , homeViewModel1)
          protocolObj.value = protocol
+         val connectState = prefHelper.getConnectState()
 
          if (getEnableProtocols(protocol.title, prefHelper)) {
              Log.d("OnChangeProtocol", "getEnableProtocols yes!")
 
              if (prefHelper.getProtocol().index != protocol.index) {
 
-                 if (wg.isVPNConnected()) {
+                 if (connectState == 2) {
                      navHostController1.popBackStack()
                      isProtocolDialog.value = true
                  }
@@ -218,27 +225,6 @@ lateinit var vpnConnectionsUtil: VPNConnectionsUtil
 
  }
 
- val ikev2Callback = object : IKEv2Callbacks {
-     override fun ServerNotResponding(context: Context, homeViewModel: HomeViewModel) {
-         Log.d("ServerNotResponding", "Home -> ")
-         val wg = VPNConnectionsUtil(context, act , homeViewModel)
-         wg.onResumeCallBack()
-
-         val basePreferenceHelper = BasePreferenceHelper(context)
-         if (basePreferenceHelper.getProtocol().index == 0) {
-             Log.d("ServerNotResponding", "Auto -> ${wg.isBound}")
-         } else {
-             Log.d("ServerNotResponding", "IKEv2 -> ${wg.isBound}")
-             Toast.makeText(
-                 context,
-                 context.getString(R.string.server_not_responding),
-                 Toast.LENGTH_SHORT
-             ).show()
-         }
-     }
-
- }
-
 @OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class)
 @Composable
 fun Home(
@@ -292,7 +278,7 @@ fun Home(
                     }
                 }
 
-                prefHelper.setServerObject(filterServerByConnectionCount)
+//                prefHelper.setServerObject(filterServerByConnectionCount)
 
                 val widgetIntent = Intent(context, SimpleAppWidget::class.java)
                 widgetIntent.action = SimpleAppWidget.ACTION_CHANGE_SERVER
@@ -352,6 +338,21 @@ fun Home(
             .background(MaterialTheme.colorScheme.background)
             .fillMaxSize(),
     ) {
+        if (isServerDialog.value) {
+            ShowServerDialog(
+                basePreferenceHelper,
+                vpnConnectionsUtil
+            )
+        }
+
+        if (isProtocolDialog.value) {
+            ShowProtocolDialog(
+                basePreferenceHelper,
+                vpnConnectionsUtil,
+                serverListViewModel
+            )
+        }
+
 
         // 1st box
         Box(
@@ -598,18 +599,20 @@ fun Home(
                     val selectedSmartList = basePreferenceHelper.getSmartList()
                     when(selectedSmartList) {
                         smartConnect[0] -> {
-                            smartServer = basePreferenceHelper.getSmartServerObject()
+                            smartServer = basePreferenceHelper.getRecommendedServerObject()
                         }
                         smartConnect[1] -> {
-                            smartServer = basePreferenceHelper.getServerObject()
+                            smartServer = basePreferenceHelper.getSmartServerObject()
+                        }
+                        smartConnect[2] -> {
+                            smartServer = basePreferenceHelper.getSmartServerObject()
                         }
-                        smartConnect[2] -> {}
                         else -> {}
                     }
                     Button(
                         onClick = {
                             Log.d("test_button", "onClick Smart Connect ${smartServer?.server_name}")
-                            basePreferenceHelper.setServerObject(smartServer)
+//                            basePreferenceHelper.setSmartServerObject(smartServer)
                             basePreferenceHelper.setConnectedServer(smartServer)
                             if (isConnect == App.CONNECTED || isConnect == App.CONNECTING) {
                                 Log.d("isConnect_State_vpn", "stopVPN")
@@ -679,564 +682,9 @@ fun Home(
 }
 
 
-
-@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class)
-@Composable
-fun Home2(
-    navHostController: NavHostController,
-    activity: ComponentActivity,
-    settingsNavHostController: NavHostController
-) {
-
-    Log.d("OnChangeProtocol", "Home called!")
-    navHostController1 = navHostController
-
-    val context = LocalContext.current
-    val basePreferenceHelper = BasePreferenceHelper(context)
-    act = activity
-
-//    var isConnect by remember { mutableStateOf(basePreferenceHelper.getConnectState()) }
-
-    val prefHelper = BasePreferenceHelper(context)
-    val scope = rememberCoroutineScope()
-    val homeViewModel: HomeViewModel = viewModel{
-        HomeViewModel(context, scope)
-    }
-    val serverListViewModel: ServerListViewModel = viewModel{
-        ServerListViewModel(context)
-    }
-    val splashViewModel: SplashViewModel = viewModel{
-        SplashViewModel(context)
-    }
-    var server: Server = Server()
-    vpnConnectionsUtil = VPNConnectionsUtil(context, activity, homeViewModel)
-//    val wg = VPNConnectionsUtil(context, activity, homeViewModel)
-    homeViewModel1 = homeViewModel
-
-
-    var isConnect: Int? = homeViewModel.isConnect.observeAsState().value
-    Log.d("isConnect_State", "live: $isConnect")
-    isConnect = basePreferenceHelper.getConnectState()
-    Log.d("isConnect_State", "$isConnect prefs => ${basePreferenceHelper.getConnectState()}")
-
-    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
-                    }
-                }
-
-                prefHelper.setServerObject(filterServerByConnectionCount)
-
-                val widgetIntent = Intent(context, SimpleAppWidget::class.java)
-                widgetIntent.action = SimpleAppWidget.ACTION_CHANGE_SERVER
-                context.sendBroadcast(widgetIntent)
-
-                server = filterServerByConnectionCount
-
-//                splashViewModel.serverDataApi()
-                homeViewModel.validatePassword(
-                    prefHelper.getUser()?.userinfo?.email.toString(),
-                    prefHelper.getPassword().toString(),
-                    "android",
-                    android.os.Build.VERSION.RELEASE
-                )
-            }
-            Lifecycle.Event.ON_PAUSE -> {
-                Log.d("test_home_resume", "ON_PAUSE: Home Screen!")
-                vpnConnectionsUtil.onPauseCallBack()
-
-                val widgetIntent = Intent(context, SimpleAppWidget::class.java)
-                widgetIntent.action = SimpleAppWidget.ACTION_CHANGE_SERVER
-                context.sendBroadcast(widgetIntent)
-
-            }
-            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!")
-            }
-        }
-    }
-
-    val ip = homeViewModel.mutableLiveDataIpInfo.observeAsState().value
-    val validateResponse = homeViewModel.liveDataValidate.observeAsState().value
-    validateResponse?.let {
-        Log.d("test_api_validate", "home => ${it.status} ${it.message}")
-
-        if (!it.status) {
-            basePreferenceHelper.setLoggedInState(false)
-            basePreferenceHelper.clearAllData()
-            settingsNavHostController.popBackStack()
-            settingsNavHostController.navigate(Screen.Started.route)
-        }
-
-        homeViewModel._mutableLiveDataValidate.value = null
-    }
-
-//    LaunchedEffect(key1 = Unit){
-//        homeViewModel.validatePassword(
-//            prefHelper.getUser()?.userinfo?.email.toString(),
-//            prefHelper.getPassword().toString(),
-//            "android",
-//            android.os.Build.VERSION.RELEASE
-//        )
-//    }
-
-    Box(
-        modifier = Modifier
-            .background(MaterialTheme.colorScheme.background)
-            .fillMaxSize(),
-    ) {
-
-        Image(
-            modifier = Modifier
-                .fillMaxWidth()
-                .align(Alignment.TopStart)
-                .height(300.dp)
-                .padding(top = 0.dp),
-            painter = if (isConnect == App.CONNECTED) blueBackground() else pinkBackground(),
-            contentDescription = "Home Map",
-            contentScale = ContentScale.FillBounds,
-        )
-
-        Image(
-            modifier = Modifier
-                .fillMaxWidth()
-                .align(Alignment.TopStart)
-                .padding(top = 30.dp)
-                .alpha(if (isDarkTheme.value) 0.1F else 0.6F),
-            painter = painterResource(id = R.drawable.map_home3x),
-            contentDescription = "Home Map",
-            contentScale = ContentScale.FillWidth,
-        )
-
-
-        if (isServerDialog.value) {
-            ShowServerDialog(
-                basePreferenceHelper,
-                vpnConnectionsUtil
-            )
-        }
-
-        if (isProtocolDialog.value) {
-            ShowProtocolDialog(
-                basePreferenceHelper,
-                vpnConnectionsUtil,
-                serverListViewModel
-            )
-        }
-
-        IconButton(
-            onClick = {
-                Log.d("isConnect_State", "onClick{} -> $isConnect")
-                Log.d("isConnect_State_vpn", "onClick{} -> $isConnect")
-
-                prefHelper.getProduct()?.identifier.let {
-                    val identifier = it
-
-                    if (identifier == AppEnum.FREE.key) {
-                        Log.d("isConnect_State", "identifier -> $identifier")
-                        Screen.Subscription.isTrue = true
-                        navHostController.navigate(
-                            Screen.Subscription.route
-                        )
-
-                    } else {
-                        prefHelper.getServerObject()?.let {
-                            prefHelper.setConnectedServer(it)
-                        }
-                        Log.d("isConnect_State", "identifier -> $identifier")
-                        if (isConnect == App.CONNECTED || isConnect == App.CONNECTING) {
-                            Log.d("isConnect_State_vpn", "stopVPN")
-                            vpnConnectionsUtil.stopVpn()
-                            homeViewModel.getIp()
-                        } else {
-                            Log.d("isConnect_State_vpn", "startVPN")
-                            vpnConnectionsUtil.startVpn()
-                        }
-
-                        val widgetIntent = Intent(context, SimpleAppWidget::class.java)
-                        widgetIntent.action = SimpleAppWidget.ACTION_CHANGE_SERVER
-                        context.sendBroadcast(widgetIntent)
-                    }
-                }
-
-            },
-            modifier = Modifier
-                .align(Alignment.TopCenter)
-                .padding(top = 80.dp)
-                .fillMaxSize()
-                .size(235.dp)
-            ,
-        )
-        {
-            if (isConnect == App.CONNECTED) {
-                Image(
-                    painter = if (isDarkTheme.value) painterResource(id = R.drawable.iv_connect_dark)
-                    else painterResource(id = R.drawable.iv_connect),
-                    contentDescription = "Home Map",
-                    contentScale = ContentScale.FillBounds,
-                    modifier = Modifier.size(235.dp)
-                )
-            } else {
-                Image(
-                    painter = if (isDarkTheme.value) painterResource(id = R.drawable.iv_disconnect_dark)
-                    else painterResource(id = R.drawable.iv_disconnect),
-                    contentDescription = "Home Map",
-                    contentScale = ContentScale.FillBounds,
-                    modifier = Modifier.size(235.dp)
-                )
-            }
-
-        }
-        Column(
-            verticalArrangement = Arrangement.SpaceEvenly,
-            horizontalAlignment = Alignment.CenterHorizontally,
-            modifier = Modifier
-                .fillMaxWidth()
-                .background(Color.Transparent)
-                .align(Alignment.TopStart)
-                .padding(top = 40.dp)
-                .height(125.dp),
-        ) {
-            val serverObj = basePreferenceHelper.getConnectedServer()
-            val serverDis = basePreferenceHelper.getIpinfo()
-
-            var ipInfo = homeViewModel.mutableLiveDataIpInfo.observeAsState().value?.query
-            ipInfo = if (isConnect == App.CONNECTED) serverObj?.ip.toString() else serverDis?.query
-            AddText(
-                text = "$ipInfo",
-                size = 18.sp,
-                color = MaterialTheme.colorScheme.primary,
-                style = MaterialTheme.typography.customTypography.headlineLarge
-            )
-            Row(
-            ) {
-                if (isConnect == App.CONNECTED) {
-                    val image = Utils.getDrawable(context, serverObj?.iso)
-                    if (image != 0) {
-                        Image(
-                            painter = painterResource(id = image),
-                            contentDescription = "Country",
-                            modifier = Modifier
-                                .padding(end = 6.dp)
-                                .size(20.dp)
-                                .clip(CircleShape)
-                                .paint(
-                                    painter = painterResource(id = image),
-                                    contentScale = ContentScale.FillHeight
-                                )
-                        )
-                    }
-                    AddText(
-                        text = "${serverObj?.server_name ?: ""}, ${serverObj?.country ?: ""}",
-                        size = 16.sp,
-                        color = MaterialTheme.colorScheme.primary,
-                    )
-                } else {
-                    val image = Utils.getDrawable(context, serverDis?.countryCode)
-                    Log.d("image_logo", "$image ${serverDis?.countryCode}")
-                    if (image != 0) {
-                        Image(
-                            painter = painterResource(id = image),
-                            contentDescription = "Server",
-                            modifier = Modifier
-                                .padding(end = 6.dp)
-                                .size(20.dp)
-                                .clip(CircleShape)
-                                .paint(
-                                    painter = painterResource(id = image),
-                                    contentScale = ContentScale.FillHeight
-                                )
-                        )
-                    }
-                    AddText(
-                        text = "${serverDis?.city ?: ""}, ${serverDis?.country ?: ""}",
-                        size = 16.sp,
-                        color = MaterialTheme.colorScheme.primary
-                    )
-                }
-            }
-            if (isConnect == App.CONNECTED) {
-                AddText(
-                    text = "Connected",
-                    size = 18.sp,
-                    color = MaterialTheme.colorScheme.surfaceContainerHigh,
-                    style = MaterialTheme.typography.customTypography.displaySmall
-                )
-            }
-            else if (isConnect == App.DISCONNECTED) {
-                AddText(
-                    text = "Disconnected",
-                    size = 18.sp,
-                    color = MaterialTheme.colorScheme.surfaceTint,
-                    style = MaterialTheme.typography.customTypography.displaySmall
-                )
-            }
-            else if (isConnect == App.CONNECTING) {
-                AddText(
-                    text = "Connecting...",
-                    size = 18.sp,
-                    color = MaterialTheme.colorScheme.surfaceTint,
-                    style = MaterialTheme.typography.customTypography.displaySmall
-                )
-            }
-        }
-
-        CompositionLocalProvider(
-            LocalOverscrollConfiguration provides null
-        ) {
-            Column(
-                modifier = Modifier
-                    .align(Alignment.TopCenter)
-                    .padding(top = 425.dp, bottom = 10.dp)
-                    .verticalScroll(rememberScrollState())
-                    .fillMaxSize()
-            ) {
-                /* Smart Connect Box*/
-//                if (isConnect == App.CONNECTED) {
-//
-//                    /* Commenting so far because It's remaining... */
-//                    Box(
-//                        modifier = Modifier
-//                            .fillMaxWidth()
-//                            .padding(16.dp)
-//                            .padding(top = 0.dp)
-//                            .height(110.dp)
-////                    .border(
-////                        border = BorderStroke(0.dp, Color.Blue),
-////                        shape = RoundedCornerShape(28.dp)
-////                    )
-//                            .background(
-//                                color = Color.Transparent
-//                            ),
-//                    ) {
-//                        Row(
-//                            modifier = Modifier
-//                                .padding(0.dp)
-//                                .background(Color.Transparent),
-//                            horizontalArrangement = Arrangement.SpaceAround,
-//                            verticalAlignment = Alignment.CenterVertically
-//                        ) {
-//                            Surface(
-//                                modifier = Modifier
-//                                    .weight(1f)
-//                                    .background(Color.Transparent)
-//                                    .fillMaxHeight()
-//                                    .padding(end = 5.dp),
-//                                shape = RoundedCornerShape(24.dp)
-//
-//                            ) {
-//                                Column(
-//                                    modifier = Modifier
-//                                        .background(Color.White),
-//                                    verticalArrangement = Arrangement.SpaceEvenly,
-//                                    horizontalAlignment = Alignment.CenterHorizontally
-//                                ) {
-//                                    Image(
-//                                        painter = painterResource(id = R.drawable.greenarrow3x),
-//                                        contentDescription = "Green Arrow",
-//                                        modifier = Modifier
-//                                            .size(30.dp)
-//                                    )
-//                                    Text(
-//                                        text = "Download",
-//                                        style = MaterialTheme.typography.customTypography.displayMedium,
-//                                        modifier = Modifier.alpha(0.6F)
-//                                    )
-//                                    Row(
-//                                        horizontalArrangement = Arrangement.SpaceAround,
-//                                        verticalAlignment = Alignment.CenterVertically
-//                                    ) {
-//                                        Text(
-//                                            text = "30.68",
-//                                            style = MaterialTheme.typography.customTypography.displayLarge
-//                                        )
-//                                        Text(
-//                                            text = "  MB/S",
-//                                            style = MaterialTheme.typography.customTypography2.labelSmall,
-//                                            modifier = Modifier.alpha(0.5F)
-//                                        )
-//                                    }
-//                                }
-//                            }
-//                            Surface(
-//                                modifier = Modifier
-//                                    .weight(1f)
-//                                    .background(Color.Transparent)
-//                                    .fillMaxHeight()
-//                                    .padding(start = 5.dp),
-//                                shape = RoundedCornerShape(24.dp)
-//                            ) {
-//                                Column(
-//                                    modifier = Modifier
-//                                        .background(Color.White),
-//                                    verticalArrangement = Arrangement.SpaceEvenly,
-//                                    horizontalAlignment = Alignment.CenterHorizontally
-//                                ) {
-//                                    Image(
-//                                        painter = painterResource(id = R.drawable.yellowarrow3x),
-//                                        contentDescription = "Green Arrow",
-//                                        modifier = Modifier
-//                                            .size(30.dp)
-//                                    )
-//                                    Text(
-//                                        text = "Upload",
-//                                        style = MaterialTheme.typography.customTypography.displayMedium,
-//                                        modifier = Modifier.alpha(0.6F)
-//                                    )
-//                                    Row(
-//                                        horizontalArrangement = Arrangement.SpaceAround,
-//                                        verticalAlignment = Alignment.CenterVertically
-//                                    ) {
-//                                        Text(
-//                                            text = "12.11",
-//                                            style = MaterialTheme.typography.customTypography.displayLarge
-//
-//                                        )
-//                                        Text(
-//                                            text = "  MB/S",
-//                                            style = MaterialTheme.typography.customTypography2.labelSmall,
-//                                            modifier = Modifier.alpha(0.5F)
-//                                        )
-//                                    }
-//                                }
-//                            }
-//                        }
-//                    }
-//                }
-//                else { }
-
-                Box(
-                    modifier = Modifier
-                        .fillMaxWidth()
-                        .padding(20.dp)
-                        .padding(top = 0.dp)
-                        .height(120.dp)
-                        .border(
-                            border = BorderStroke(2.dp, MaterialTheme.colorScheme.onBackground),
-                            shape = RoundedCornerShape(28.dp)
-                        )
-                        .background(
-                            shape = RoundedCornerShape(28.dp),
-                            color = MaterialTheme.colorScheme.onBackground
-                        ),
-                ) {
-                    AddRowSmart(navHostController, basePreferenceHelper, context)
-                    var smartServer = basePreferenceHelper.getSmartServerObject()
-                    val selectedSmartList = basePreferenceHelper.getSmartList()
-                    when(selectedSmartList) {
-                        smartConnect[0] -> {
-                            smartServer = basePreferenceHelper.getSmartServerObject()
-                        }
-                        smartConnect[1] -> {
-                            smartServer = basePreferenceHelper.getServerObject()
-                        }
-                        smartConnect[2] -> {}
-                        else -> {}
-                    }
-                    Button(
-                        onClick = {
-                            Log.d("test_button", "onClick Smart Connect ${smartServer?.server_name}")
-                            basePreferenceHelper.setServerObject(smartServer)
-                            basePreferenceHelper.setConnectedServer(smartServer)
-                            if (isConnect == App.CONNECTED || isConnect == App.CONNECTING) {
-                                Log.d("isConnect_State_vpn", "stopVPN")
-                                vpnConnectionsUtil.stopVpn()
-                                Handler().postDelayed(Runnable {
-                                    vpnConnectionsUtil.startVpn()
-                                }, 500)
-                                homeViewModel.getIp()
-                            } else {
-                                Log.d("isConnect_State_vpn", "startVPN")
-                                vpnConnectionsUtil.startVpn()
-                            }
-
-//                                navHostController.navigate(
-//                                    BottomBarScreen.Settings.route
-//                                )
-//                                BottomBarScreen.Settings.isTrue = true
-
-                        },
-                        modifier = Modifier
-                            .padding(start = 14.dp, end = 14.dp, bottom = 12.dp, top = 16.dp)
-                            .align(Alignment.BottomCenter)
-                            .background(colorResource(id = R.color.transparent))
-                            .fillMaxWidth()
-                            .height(40.dp),
-                        shape = RoundedCornerShape(16.dp),
-                        colors = ButtonDefaults.buttonColors(
-                            contentColor = colorResource(id = R.color.white),
-                            containerColor = colorResource(id = R.color.blue_text),
-                        ),
-                    ) {
-                        Text(
-                            text = "Smart Connect",
-                            style = MaterialTheme.typography.customTypography.labelLarge,
-                            modifier = Modifier.background(Color.Transparent)
-                        )
-                    }
-                }
-
-                /* Select Server Box*/
-//                if (isConnect != App.CONNECTED) { }
-
-                Box(
-                    modifier = Modifier
-                        .fillMaxWidth()
-                        .padding(horizontal = 20.dp, vertical = 5.dp)
-                        .padding(bottom = 0.dp)
-                        .height(70.dp)
-                        .border(
-                            border = BorderStroke(2.dp, MaterialTheme.colorScheme.onBackground),
-                            shape = RoundedCornerShape(28.dp)
-                        )
-                        .background(
-                            shape = RoundedCornerShape(28.dp),
-                            color = MaterialTheme.colorScheme.onBackground
-                        ),
-                    contentAlignment = Alignment.CenterStart,
-                ) {
-                    AddRowSelectServer(navHostController)
-                }
-            }
-        }
-
-    }
-
-}
-
 @OptIn(ExperimentalMaterial3Api::class)
 @Composable
-fun BoxScope.ShowServerDialog(
+fun ColumnScope.ShowServerDialog(
     prefHelper: BasePreferenceHelper,
     wg: VPNConnectionsUtil
 ) {
@@ -1363,7 +811,7 @@ fun BoxScope.ShowServerDialog(
 
 @OptIn(ExperimentalMaterial3Api::class)
 @Composable
-fun BoxScope.ShowProtocolDialog(
+fun ColumnScope.ShowProtocolDialog(
     prefHelper: BasePreferenceHelper,
     wg: VPNConnectionsUtil,
     serverListViewModel: ServerListViewModel
@@ -1562,48 +1010,51 @@ fun BoxScope.AddRowSmart(
 ) {
     val smart = basePreferenceHelper.getSmartServerObject()
     val recommended = basePreferenceHelper.getRecommendedServerObject()
-    val recently = basePreferenceHelper.getServerObject()
-    val anySpecific = basePreferenceHelper.getServerObject()
+    val recently = basePreferenceHelper.getSmartServerObject()
+    val anySpecific = basePreferenceHelper.getSmartServerObject()
+
     val ipInfo = basePreferenceHelper.getIpinfo()
     val selectedSmartList = basePreferenceHelper.getSmartList()
-    var selectedServer = basePreferenceHelper.getServerObject()
+    var selectedServer = basePreferenceHelper.getSmartServerObject()
     var selectedSmartServer = basePreferenceHelper.getSmartServerObject()
 
-    Log.d("smartLocationList", "Home:: server = ${anySpecific?.server_name}")
+    Log.d("smartLocationList", "Home:: server = ${recently?.server_name}")
     var icon = Utils.getDrawable(context, selectedServer?.iso)
 
-    if (MainActivity.isSelectedServersShown) {
-        selectedServer = basePreferenceHelper.getServerObject()
-        icon = Utils.getDrawable(context, selectedServer?.iso)
+//    if (MainActivity.isSelectedServersShown) {
+//        selectedServer = basePreferenceHelper.getServerObject()
+//        icon = Utils.getDrawable(context, selectedServer?.iso)
+//
+//        when(selectedSmartList) {
+//            smartConnect[0] -> {
+//                selectedSmartServer = recommended
+//            }
+//        }
+//
+//    } else {
+//
+//    }
 
-        when(selectedSmartList) {
-            smartConnect[0] -> {
-                selectedSmartServer = recommended
-            }
+    when(selectedSmartList) {
+        smartConnect[0] -> {
+            icon = Utils.getDrawable(context, recommended?.iso)
+            selectedServer = recommended
+            selectedSmartServer = recommended
         }
-
-    } else {
-        when(selectedSmartList) {
-            smartConnect[0] -> {
-                icon = Utils.getDrawable(context, smart?.iso)
-                selectedServer = smart
-                selectedSmartServer = recommended
-            }
-            smartConnect[1] -> {
-                icon = Utils.getDrawable(context, recently?.iso)
-                selectedServer = recently
-                selectedSmartServer = recently
-            }
-            smartConnect[2] -> {
-                icon = Utils.getDrawable(context, anySpecific?.iso)
-                selectedServer = anySpecific
-                selectedSmartServer = anySpecific
-            }
-            else -> {}
+        smartConnect[1] -> {
+            icon = Utils.getDrawable(context, recently?.iso)
+            selectedServer = recently
+            selectedSmartServer = recently
+        }
+        smartConnect[2] -> {
+            icon = Utils.getDrawable(context, anySpecific?.iso)
+            selectedServer = anySpecific
+            selectedSmartServer = anySpecific
         }
+        else -> {}
     }
 
-    basePreferenceHelper.setSmartServerObject(selectedSmartServer)
+//    basePreferenceHelper.setSmartServerObject(selectedSmartServer)
 
     Row(
         modifier = Modifier
@@ -1661,6 +1112,7 @@ fun BoxScope.AddRowSmart(
                     MaterialTheme.colorScheme.surfaceContainerLow
                 ),
                 onClick = {
+                    toChangeServer.value = true
                     navHostController.navigate(
                         Screen.ServerList.route
                     )
@@ -1681,6 +1133,7 @@ fun BoxScope.AddRowSelectServer(navHostController: NavHostController) {
             .background(Color.Transparent)
             .pointerInput(Unit) {
                 detectTapGestures {
+                    toChangeServer.value = false
                     navHostController.navigate(
                         Screen.ServerList.route
                     )

+ 24 - 5
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/SettingsScreen.kt

@@ -918,6 +918,8 @@ fun ColumnScope.AddRowSettingsSmart(
                 .height(250.dp)
                 .padding(start = 0.dp, top = 10.dp),
             ) {
+                val selectedSmartList = basePreferenceHelper.getSmartList()
+                val smartServer = basePreferenceHelper.getSmartServerObject()
                 Column(
                     verticalArrangement = Arrangement.Top,
                     horizontalAlignment = Alignment.Start
@@ -974,14 +976,31 @@ fun ColumnScope.AddRowSettingsSmart(
                                     selectedColor = colorResource(id = R.color.radio_button_blue),
                                     unselectedColor = colorResource(id = R.color.gray_icon),)
                             )
-                            Text(text = smart,
-                                modifier = Modifier.padding(start = 12.dp),
-                                color = MaterialTheme.colorScheme.primary,
-                                style = MaterialTheme.typography.bodySmall
-                            )
+                            Column {
+                                Text(text = smart,
+                                    modifier = Modifier.padding(start = 12.dp),
+                                    color = MaterialTheme.colorScheme.primary,
+                                    style = MaterialTheme.typography.bodySmall
+                                )
+                                if (smart == smartConnect[2]) {
+                                    if (selectedSmartList == smartConnect[2]) {
+                                        Log.d("smartLocationList Row", smart)
+                                        Text(text = "${smartServer?.server_name}",
+                                            modifier = Modifier.padding(start = 12.dp),
+//                                            color = MaterialTheme.colorScheme.primary,
+                                            style = MaterialTheme.typography.labelLarge.copy(
+                                                fontSize = 12.sp,
+                                                color = colorResource(id = R.color.gray_icon)
+                                            )
+                                        )
+                                    }
+                                }
+                            }
                         }
                     }
+
                 }
+
             }
         }
     }

+ 6 - 1
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/SplashViewModel.kt

@@ -60,8 +60,13 @@ class SplashViewModel constructor(context: Context): ViewModel() {
                             data.data?.let { preferenceHelper.saveServerData(it)
                             }
                             data.wireguard?.let {wg ->
-                                preferenceHelper.saveWireGuard(wg)
                                 Log.d("test_wg_data", "Splash:: ${wg.ip} ${wg.key}")
+                                if (wg.ip?.isNotEmpty() == true && wg.key?.isNotEmpty() == true){
+                                    Log.d("test_wg_data", "WG isNotEmpty")
+                                    preferenceHelper.saveWireGuard(wg)
+                                } else {
+                                    Log.d("test_wg_data", "WG isEmpty")
+                                }
                             }
                             data.product?.let {
 //                            Log.d("test_api_response", it.productName.toString())