Browse Source

Used viewmodel for connect button state...

Khubaib 1 year ago
parent
commit
a8804f3309

+ 45 - 0
.idea/appInsightsSettings.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AppInsightsSettings">
+    <option name="tabSettings">
+      <map>
+        <entry key="Android Vitals">
+          <value>
+            <InsightsFilterSettings>
+              <option name="connection">
+                <ConnectionSetting>
+                  <option name="appId" value="com.vpn.fastestvpnservice" />
+                </ConnectionSetting>
+              </option>
+              <option name="failureTypes">
+                <list>
+                  <option value="FATAL" />
+                </list>
+              </option>
+              <option name="signal" value="SIGNAL_UNSPECIFIED" />
+              <option name="timeIntervalDays" value="SEVEN_DAYS" />
+              <option name="visibilityType" value="ALL" />
+            </InsightsFilterSettings>
+          </value>
+        </entry>
+        <entry key="Firebase Crashlytics">
+          <value>
+            <InsightsFilterSettings>
+              <option name="connection">
+                <ConnectionSetting>
+                  <option name="appId" value="PLACEHOLDER" />
+                  <option name="mobileSdkAppId" value="" />
+                  <option name="projectId" value="" />
+                  <option name="projectNumber" value="" />
+                </ConnectionSetting>
+              </option>
+              <option name="signal" value="SIGNAL_UNSPECIFIED" />
+              <option name="timeIntervalDays" value="THIRTY_DAYS" />
+              <option name="visibilityType" value="ALL" />
+            </InsightsFilterSettings>
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
+</project>

+ 5 - 4
app/src/main/java/com/vpn/fastestvpnservice/beans/SubscriptionDataList.kt

@@ -25,12 +25,13 @@ data class SubscriptionPackageList(
 
 val subscriptionPackageList = listOf(
     SubscriptionPackageList(
-        "Yearly", "Auto-Renewable",
-        "Unlimited Access For Twelve Month", "Rs 6,900", mutableStateOf(true)
-    ),
-    SubscriptionPackageList(
         "Pro Monthly", "Auto-Renewable",
         "Unlimited Access For A Month", "Rs 550", mutableStateOf(false)),
+    SubscriptionPackageList(
+        "Yearly", "Auto-Renewable",
+        "Unlimited Access For Twelve Month", "Rs 6,900", mutableStateOf(true)
+    )
+
 //    SubscriptionPackageList(
 //            "Lifetime", "Auto-Renewable",
 //    "Unlimited Access For Lifetime", "Rs 12,000", mutableStateOf(false))

+ 21 - 53
app/src/main/java/com/vpn/fastestvpnservice/customItems/SubscriptionPackageItem.kt

@@ -24,6 +24,7 @@ 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.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
@@ -46,12 +47,14 @@ import com.vpn.fastestvpnservice.R
 import com.vpn.fastestvpnservice.beans.SubscriptionPackageList
 import com.vpn.fastestvpnservice.beans.subscriptionPackageList
 import com.vpn.fastestvpnservice.viewmodels.SubscriptionViewModel
+import kotlinx.coroutines.launch
 import java.util.Random
 
 var getPosition: Int = 0
 
 @Composable
 fun SubscriptionPackageItem(item: SubscriptionPackageList, position: Int, activity: ComponentActivity) {
+    Log.d("test_plan_product", "SPI[$position] -> ${item.packageDuration} ${item.isSelected.value}")
 
     val context = LocalContext.current
     var selectedPosition by remember { mutableIntStateOf(0) }
@@ -62,6 +65,8 @@ fun SubscriptionPackageItem(item: SubscriptionPackageList, position: Int, activi
         SubscriptionViewModel(context = context, activity)
     }
 
+    val scope = rememberCoroutineScope()
+
 //    val num4 = subscriptionViewModel.mutableLiveDataNumber.value
 //    Log.d("test_num_viewmodel", "num4 = $num4 , random = $random")
 
@@ -83,68 +88,31 @@ fun SubscriptionPackageItem(item: SubscriptionPackageList, position: Int, activi
                 shape = RoundedCornerShape(24.dp),
                 color = Color.White
             )
-            .clickable {
-//                subscriptionViewModel.setNumber(random)
-            }
             .pointerInput(Unit) {
                 detectTapGestures {
-
-//                    if (selectedPosition == position)
-//                    {
-//                        Log.d("test_plan", "True : selectedPosition = $selectedPosition position = $position" )
-//                    }
-//                    else {
-//                        Log.d("test_plan", "False : selectedPosition = $selectedPosition position = $position" )
-//                        selectedPosition = position
-//                        Log.d("test_plan", "Update  selectedPosition: $selectedPosition" )
-//                        subscriptionPackageList.forEachIndexed { index, subscriptionPackageList ->
-//                            if (selectedPosition == index) {
-//                                Log.d("test_plan", "True Inside : selectedPosition = $selectedPosition index = $index" )
-//                                subscriptionPackageList.isSelected.value = true
-//                            }
-//                            else {
-//                                Log.d("test_plan", "False Inside : selectedPosition = $selectedPosition index = $index" )
-//                                subscriptionPackageList.isSelected.value = false
-//                            }
-//                        }
-//                    }
-
+                    Log.d("test_plan", "Same position ${item.packageDuration} ${item.isSelected.value} :: selectedPosition = $selectedPosition position = $position")
                     if (!item.isSelected.value) {
-//                        Log.d("test_plan", "False : selectedPosition = $selectedPosition position = $position" )
-                        selectedPosition = position
+                            selectedPosition = position
+                        Log.d("test_plan", "False : selectedPosition = $selectedPosition position = $position" )
 
                         // uncomment this below
-                        subscriptionViewModel.mutableLiveDataProducts.value?.let { it1 ->
-                            subscriptionViewModel.setProductsData(
-                                it1
-                            )
-                        }
-
-//                        val featuresSize = subscriptionViewModel.liveDataProducts.value
-//                        Log.d(
-//                            "test_api_response_p",
-//                            "Products selectedPosition = $selectedPosition ," +
-//                                    "features size = ${featuresSize?.data?.get(selectedPosition)?.features?.size}"
-//                        )
+//                        subscriptionViewModel.mutableLiveDataProducts.value?.let { it1 ->
+//                            subscriptionViewModel.setProductsData(
+//                                it1
+//                            )
+//                        }
 
-                        subscriptionPackageList.forEachIndexed { index, subscriptionPackageList ->
-//                            if (selectedPosition == index) {
-//                                Log.d("test_plan", "True Inside : selectedPosition = $selectedPosition index = $index" )
-//                                subscriptionPackageList.isSelected.value = true
-//                            }
-//                            else {
-//                                Log.d("test_plan", "False Inside : selectedPosition = $selectedPosition index = $index" )
-//                                subscriptionPackageList.isSelected.value = false
-//                            }
-//                            Log.d("test_plan", "Update ${subscriptionPackageList.packageDuration} $index $position" )
+//                            subscriptionViewModel.setNumber(random)
 
-                            subscriptionPackageList.isSelected.value = index == position
+                            subscriptionPackageList.forEachIndexed { index, subscriptionPackageList ->
 
-                            getPosition = position
-//                            Log.d("test_plan", "Update ${subscriptionPackageList.packageDuration} ${subscriptionPackageList.isSelected.value}" )
+                            Log.d("test_plan", "Update ${subscriptionPackageList.packageDuration} $index $position" )
 
-                        }
+                                subscriptionPackageList.isSelected.value = index == position
 
+                                getPosition = position
+                            Log.d("test_plan", "Update[2] ${subscriptionPackageList.packageDuration} ${subscriptionPackageList.isSelected.value}" )
+                            }
                     }
                 }
             },
@@ -164,7 +132,7 @@ fun SubscriptionPackageItem(item: SubscriptionPackageList, position: Int, activi
                 modifier = Modifier
                     .fillMaxWidth()
             ) {
-                Text(text = item.packageDuration,
+                Text(text = item.packageDuration + " : " + item.isSelected.value + " : " + selectedPosition,
                     style = TextStyle(
                         color = if (item.isSelected.value) colorResource(
                             id = R.color.blue_text) else colorResource(

+ 7 - 4
app/src/main/java/com/vpn/fastestvpnservice/screens/accountScreensAll/SubscriptionScreen.kt

@@ -151,8 +151,8 @@ fun SubscriptionScreen(navHostController: NavHostController, activity: Component
                 CompositionLocalProvider(
                     LocalOverscrollConfiguration provides null
                 ) {
-                    val num3 = subscriptionViewModel.liveDataNumber.observeAsState().value
-                    Log.d("test_num_viewmodel", "num3 = $num3")
+//                    val num3 = subscriptionViewModel.liveDataNumber.observeAsState().value
+//                    Log.d("test_num_viewmodel", "num3 = $num3")
 
                     val productsData = subscriptionViewModel.liveDataProducts.observeAsState().value
 
@@ -176,9 +176,12 @@ fun SubscriptionScreen(navHostController: NavHostController, activity: Component
                                     }
 
                                     item { Spacer(modifier = Modifier.height(20.dp)) }
-                                    itemsIndexed(items = subscriptionPackageList) {position, plan ->
+
+                                    itemsIndexed(items = subscriptionPackageList) { position, plan ->
+                                        Log.d("test_plan_product", "SS[$position] -> ${plan.packageDuration} ${plan.isSelected.value}")
                                         SubscriptionPackageItem(item = plan, position, activity)
                                     }
+
                                     item { Spacer(modifier = Modifier.height(20.dp)) }
                                 }
                             }
@@ -204,7 +207,7 @@ fun SubscriptionScreen(navHostController: NavHostController, activity: Component
 //                Log.d("SubscriptionViewModel", "liveData ${skuDetailsListsSubs.value}")
                 val random = Random.nextInt(999)
 //                subscriptionViewModel.setNumber(1)
-                subscriptionViewModel.mutableLiveDataNumber.value = random
+                subscriptionViewModel.mutableLiveDataNumber.postValue(random)
 
                 subscriptionViewModel.startConnection(selectedPosition)
 

+ 17 - 16
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/HomeScreen.kt

@@ -72,6 +72,7 @@ import  androidx.compose.runtime.setValue
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.rememberUpdatedState
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.graphics.painter.Painter
@@ -104,10 +105,13 @@ fun Home(navHostController: NavHostController, activity: ComponentActivity) {
 
     val context = LocalContext.current
     val basePreferenceHelper = BasePreferenceHelper(context)
-    var isConnect by remember { mutableStateOf(basePreferenceHelper.getConnectState()) }
+
+//    var isConnect by remember { mutableStateOf(basePreferenceHelper.getConnectState()) }
+
     val prefHelper = BasePreferenceHelper(context)
+    val scope = rememberCoroutineScope()
     val homeViewModel: HomeViewModel = viewModel{
-        HomeViewModel(context)
+        HomeViewModel(context, scope)
     }
     val serverListViewModel: ServerListViewModel = viewModel{
         ServerListViewModel(context)
@@ -116,9 +120,12 @@ fun Home(navHostController: NavHostController, activity: ComponentActivity) {
         SplashViewModel(context)
     }
     var server: Server = Server()
-    val wireGuardConnection = WireGuardConnection(context, activity)
+    val wireGuardConnection = WireGuardConnection(context, activity, homeViewModel)
 
-    OnLifecycleEvent{owner, event ->
+    val isConnect: Boolean = homeViewModel.isConnect.observeAsState().value == true
+    Log.d("isConnect_State", "$isConnect")
+
+        OnLifecycleEvent{owner, event ->
         when(event) {
             Lifecycle.Event.ON_RESUME -> {
                 Log.d("test_home_resume", "ON_RESUME: Home Screen!")
@@ -220,10 +227,9 @@ fun Home(navHostController: NavHostController, activity: ComponentActivity) {
             )
         }
 
-
-
         IconButton(
             onClick = {
+                Log.d("isConnect_State", "onClick{} -> $isConnect")
 
                 if (isConnect) {
                     wireGuardConnection.stopVpn()
@@ -231,15 +237,10 @@ fun Home(navHostController: NavHostController, activity: ComponentActivity) {
                     wireGuardConnection.startVpn()
                 }
 
-                isConnect = !isConnect
-                basePreferenceHelper.setConnectState(isConnect)
-//                homeViewModel.getIp()
-
-//                server.let {
-//                    serverViewModel.updateFavServer(server)
-//                }
-
+//                isConnect = !isConnect
+//                homeViewModel.setConnectState(!isConnect)
 
+//                basePreferenceHelper.setConnectState(isConnect)
 
             },
             modifier = Modifier
@@ -276,9 +277,9 @@ fun Home(navHostController: NavHostController, activity: ComponentActivity) {
             val serverObj = basePreferenceHelper.getServerObject()
             val serverDis = basePreferenceHelper.getIpinfo()
 
-            val ip = if (isConnect) serverObj?.ip else serverDis?.query
+            val ipInfo = if (isConnect) serverObj?.ip else serverDis?.query
             AddText(
-                text = "$ip",
+                text = "$ipInfo",
                 size = 18.sp,
                 color = MaterialTheme.colorScheme.primary
             )

+ 8 - 1
app/src/main/java/com/vpn/fastestvpnservice/utils/WireGuardConnection.kt

@@ -5,11 +5,13 @@ import android.content.Intent
 import android.os.AsyncTask
 import android.util.Log
 import androidx.core.app.ComponentActivity
+import androidx.lifecycle.viewmodel.compose.viewModel
 import com.google.gson.Gson
 import com.google.gson.reflect.TypeToken
 import com.vpn.fastestvpnservice.application.App
 import com.vpn.fastestvpnservice.constants.AppEnum
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
+import com.vpn.fastestvpnservice.viewmodels.HomeViewModel
 import com.wireguard.android.backend.Backend
 import com.wireguard.android.backend.GoBackend
 import com.wireguard.android.backend.Tunnel
@@ -26,17 +28,19 @@ class WireGuardConnection {
     var context: Context
     var activity: ComponentActivity
     var basePreferenceHelper: BasePreferenceHelper
+    var homeViewModel: HomeViewModel
 
     var backend: Backend? = null
     final var peerBuilder = Peer.Builder()
     final var tunnel: Tunnel = WgTunnel()
     lateinit var tunnelStatus: Tunnel.State
 
-    constructor(context: Context, activity: ComponentActivity) {
+    constructor(context: Context, activity: ComponentActivity, homeViewModel: HomeViewModel) {
         this.context = context
         this.activity = activity
         this.basePreferenceHelper = BasePreferenceHelper(context)
         this.backend = GoBackend(context)
+        this.homeViewModel = homeViewModel
     }
 
     fun startVpn() {
@@ -88,10 +92,12 @@ class WireGuardConnection {
             try {
                 if (isUp) {
                     App.tunnelStatus = Tunnel.State.UP
+                    homeViewModel.setConnectState(true)
                     Log.d("test_wg", "tunnelStatus if = ${App.tunnelStatus}")
 
                 } else {
                     App.tunnelStatus = Tunnel.State.DOWN
+                    homeViewModel.setConnectState(false)
                     Log.d("test_wg", "tunnelStatus else = ${App.tunnelStatus}")
                 }
 
@@ -120,6 +126,7 @@ class WireGuardConnection {
 //                        App.setBackend(back)
 //                        App.backend = App.getBackend()
 //                    }
+//                homeViewModel.setConnectState(true)
 
             } catch (e: java.lang.Exception) {
                 e.printStackTrace()

+ 18 - 2
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/HomeViewModel.kt

@@ -14,10 +14,15 @@ import com.vpn.fastestvpnservice.beans.TokenResponse
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
 import com.vpn.fastestvpnservice.retrofit.RetrofitNetworkHandling
 import com.vpn.fastestvpnservice.retrofit.WebServiceFactory
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
 import retrofit2.Call
 
-class HomeViewModel constructor(context: Context): ViewModel() {
+class HomeViewModel constructor(context: Context, scope: CoroutineScope): ViewModel() {
     var prefHelper: BasePreferenceHelper = BasePreferenceHelper(context)
+    var scope: CoroutineScope
+
     val mutableLiveDataIpInfo = MutableLiveData<IpInfo?>()
 
     var _mutableLiveDataValidate = MutableLiveData<DataResponse<TokenResponse>>()
@@ -29,10 +34,21 @@ class HomeViewModel constructor(context: Context): ViewModel() {
 
     init {
         prefHelper = BasePreferenceHelper(context)
+        this.scope = scope
     }
 
     fun setConnectState(state: Boolean) {
-        _isConnect.value = state
+        Log.d("isConnect_State", "setConnectState1:: $state")
+
+        _isConnect.postValue(state)
+
+//        scope.launch(Dispatchers.Main) {
+//            _isConnect.value = state
+//        }
+
+        Log.d("isConnect_State", "setConnectState2:: $state")
+        prefHelper.setConnectState(state)
+        Log.d("isConnect_State", "setConnectState3:: $state")
     }
 
     fun getIp() {

+ 3 - 3
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/SubscriptionViewModel.kt

@@ -53,7 +53,9 @@ class SubscriptionViewModel constructor(context: Context, activity: ComponentAct
     }
 
     fun setNumber(num: Int) {
-        mutableLiveDataNumber.value = num
+        Log.d("test_plan", "[1] num = $num")
+        mutableLiveDataNumber.postValue(num)
+        Log.d("test_plan", "[2] num = $num")
     }
 
     fun setProductsData(products: DataResponse<ArrayList<ProductFeatures>>) {
@@ -99,8 +101,6 @@ class SubscriptionViewModel constructor(context: Context, activity: ComponentAct
         )
     }
 
-
-
     val tag = "SubscriptionViewModel"
     val prefHelper = BasePreferenceHelper(context)
     private var skuDetailsList: List<SkuDetails>? = null