Sfoglia il codice sorgente

working on Subscription Screen, select plan logic [UI]...

Khubaib 1 anno fa
parent
commit
05ec3fed17

+ 32 - 11
app/src/main/java/com/vpn/fastestvpnservice/customItems/SubscriptionPackageItem.kt

@@ -1,5 +1,6 @@
 package com.vpn.fastestvpnservice.customItems
 
+import android.app.Activity
 import android.content.res.Configuration
 import android.util.Log
 import android.widget.Toast
@@ -49,6 +50,7 @@ import com.vpn.fastestvpnservice.beans.subscriptionPackageList
 import com.vpn.fastestvpnservice.viewmodels.SubscriptionViewModel
 import kotlinx.coroutines.launch
 import java.util.Random
+import kotlin.coroutines.coroutineContext
 
 var getPosition: Int = 0
 
@@ -90,10 +92,16 @@ fun SubscriptionPackageItem(item: SubscriptionPackageList, position: Int, activi
             )
             .pointerInput(Unit) {
                 detectTapGestures {
-                    Log.d("test_plan", "Same position ${item.packageDuration} ${item.isSelected.value} :: selectedPosition = $selectedPosition position = $position")
+                    Log.d(
+                        "test_plan",
+                        "Same position ${item.packageDuration} ${item.isSelected.value} :: selectedPosition = $selectedPosition position = $position"
+                    )
                     if (!item.isSelected.value) {
-                            selectedPosition = position
-                        Log.d("test_plan", "False : selectedPosition = $selectedPosition position = $position" )
+                        selectedPosition = position
+                        Log.d(
+                            "test_plan",
+                            "False : selectedPosition = $selectedPosition position = $position"
+                        )
 
                         // uncomment this below
 //                        subscriptionViewModel.mutableLiveDataProducts.value?.let { it1 ->
@@ -104,16 +112,28 @@ fun SubscriptionPackageItem(item: SubscriptionPackageList, position: Int, activi
 
 //                            subscriptionViewModel.setSelectedPosition(position)
 
-                            subscriptionPackageList.forEachIndexed { index, subscriptionPackageList ->
+                        val subscriptionPackageListData =
+                            subscriptionViewModel.selectPriceList.value
+                        subscriptionPackageListData?.forEachIndexed { index, subscriptionPackageList ->
 
-                            Log.d("test_plan", "Update ${subscriptionPackageList.packageDuration} $index $position" )
+                            Log.d(
+                                "test_plan",
+                                "Update ${subscriptionPackageList.packageDuration} $index $position"
+                            )
 
-                                subscriptionPackageList.isSelected.value = index == position
+                            subscriptionPackageList.isSelected.value = index == position
 
-                                getPosition = position
-                            Log.d("test_plan", "Update[2] ${subscriptionPackageList.packageDuration} ${subscriptionPackageList.isSelected.value}" )
-                            }
+                            getPosition = position
+                            SubscriptionViewModel.selectedPosition = position
+                            Log.d(
+                                "test_plan",
+                                "Update[2] ${subscriptionPackageList.packageDuration} ${subscriptionPackageList.isSelected.value}"
+                            )
+                        }
+
+//                        subscriptionViewModel.selectPriceList.postValue(subscriptionPackageListData)
                     }
+
                 }
             },
     )
@@ -132,7 +152,7 @@ fun SubscriptionPackageItem(item: SubscriptionPackageList, position: Int, activi
                 modifier = Modifier
                     .fillMaxWidth()
             ) {
-                Text(text = item.packageDuration + " : " + item.isSelected.value + " : " + selectedPosition,
+                Text(text = item.packageDuration + " " + item.isSelected.value,
                     style = TextStyle(
                         color = if (item.isSelected.value) colorResource(
                             id = R.color.blue_text) else colorResource(
@@ -189,7 +209,8 @@ fun SubscriptionPackageItem(item: SubscriptionPackageList, position: Int, activi
 }
 
 fun getSelectedPosition(): Int {
-    return getPosition
+
+    return SubscriptionViewModel.selectedPosition
 }
 
 @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)

+ 22 - 23
app/src/main/java/com/vpn/fastestvpnservice/screens/accountScreensAll/SubscriptionScreen.kt

@@ -107,17 +107,14 @@ fun SubscriptionScreen(navHostController: NavHostController, activity: Component
     var skuDetailsList: List<SkuDetails>? = null
     val basePreferenceHelper = BasePreferenceHelper(context)
 
-    val num1 = subscriptionViewModel.mutableLiveDataNumber.observeAsState().value
-    Log.d("test_num_viewmodel", "num1 = $num1")
     Box(
         modifier = Modifier
             .fillMaxSize()
             .background(MaterialTheme.colorScheme.background)
     ) {
-        val num2 = subscriptionViewModel.mutableLiveDataNumber.observeAsState().value
-        Log.d("test_num_viewmodel", "num2 = $num2")
 
         LaunchedEffect(key1 = true) {
+            Log.d("test_api_response_p", "Products API called!")
             subscriptionViewModel.getProducts()
         }
 
@@ -151,24 +148,28 @@ fun SubscriptionScreen(navHostController: NavHostController, activity: Component
                 CompositionLocalProvider(
                     LocalOverscrollConfiguration provides null
                 ) {
-//                    val num3 = subscriptionViewModel.liveDataNumber.observeAsState().value
-//                    Log.d("test_num_viewmodel", "num3 = $num3")
+                    val featuresList = subscriptionViewModel.featuresListSorted.observeAsState().value
+                    featuresList?.let {
+                        Log.d("test_subscription_list", "featuresListSorted[SS] size = ${it.size}")
 
-                    val productsData = subscriptionViewModel.liveDataProducts.observeAsState().value
+                    }
+
+                    val productsData = subscriptionViewModel.featuresListSorted.observeAsState().value
+                    val selectPriceList = subscriptionViewModel.selectPriceList.observeAsState().value
+                    val selectedPosition1 = subscriptionViewModel.mutableLiveDataNumber.observeAsState().value
 
-//                    val productsData = basePreferenceHelper.getFeaturesData()
-                    LazyColumn() {
+                    LazyColumn {
 
-                        selectedPosition = getSelectedPosition()
+//                        selectedPosition = getSelectedPosition()
 
                         productsData?.let {
 
-                            it.data?.let {
+                            it.let {
                                 Log.d("test_api_response_p",
-                                    "Products screen = ${it.size}, selectedPosition = $selectedPosition")
+                                    "Products screen = ${it.size}, selectedPosition = $selectedPosition1")
 
                                 if (it.size > 0) {
-                                    val features = it.get(selectedPosition).features
+                                    val features = selectedPosition1?.let { it1 -> it.get(it1).features }
                                     features?.let {
                                         items(items = it) {item ->
                                             SubscriptionDataItem(item = item)
@@ -177,21 +178,17 @@ fun SubscriptionScreen(navHostController: NavHostController, activity: Component
 
                                     item { Spacer(modifier = Modifier.height(20.dp)) }
 
-                                    itemsIndexed(items = subscriptionPackageList) { position, plan ->
-                                        Log.d("test_plan_product", "SS[$position] -> ${plan.packageDuration} ${plan.isSelected.value}")
-                                        SubscriptionPackageItem(item = plan, position, activity)
+                                    selectPriceList?.let {
+                                        itemsIndexed(items = it) { 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)) }
                                 }
                             }
-
-
-
                         }
-
-
-
                     }
                 }
             }
@@ -202,8 +199,10 @@ fun SubscriptionScreen(navHostController: NavHostController, activity: Component
         Button(
 
             onClick = {
-                Log.d("test_button", "onClick")
                 selectedPosition = getSelectedPosition()
+                Toast.makeText(context, "$selectedPosition", Toast.LENGTH_SHORT).show()
+                Log.d("test_button", "onClick")
+//                subscriptionViewModel.mutableLiveDataNumber.value = 1
                 Log.d("SubscriptionViewModel", "liveData ${skuDetailsListsSubs}")
 
 //                subscriptionViewModel.startConnection(selectedPosition)

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

@@ -3,6 +3,7 @@ package com.vpn.fastestvpnservice.viewmodels
 import android.app.Activity
 import android.content.Context
 import android.util.Log
+import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.runtime.mutableStateOf
 import androidx.core.app.ComponentActivity
 import androidx.lifecycle.LiveData
@@ -21,6 +22,7 @@ import com.google.gson.reflect.TypeToken
 import com.vpn.fastestvpnservice.application.App
 import com.vpn.fastestvpnservice.beans.DataResponse
 import com.vpn.fastestvpnservice.beans.ProductFeatures
+import com.vpn.fastestvpnservice.beans.SubscriptionPackageList
 import com.vpn.fastestvpnservice.customItems.getSelectedPosition
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
 import com.vpn.fastestvpnservice.retrofit.RetrofitNetworkHandling
@@ -42,10 +44,7 @@ class SubscriptionViewModel constructor(context: Context, activity: ComponentAct
     private var context: Context
     private var activity: ComponentActivity
 
-    private var selectedPosition: Int = 0
-
     var mutableLiveDataNumber = MutableLiveData<Int>(0)
-    var liveDataNumber: LiveData<Int> = mutableLiveDataNumber
 
     val tag = "SubscriptionViewModel"
     val prefHelper = BasePreferenceHelper(context)
@@ -53,6 +52,7 @@ class SubscriptionViewModel constructor(context: Context, activity: ComponentAct
 
     var featuresList = MutableLiveData<MutableList<ProductFeatures>>()
     var featuresListSorted = MutableLiveData<MutableList<ProductFeatures>>()
+    var selectPriceList = MutableLiveData<MutableList<SubscriptionPackageList>>()
 
 
     private val billingClient: BillingClient by lazy {
@@ -62,13 +62,14 @@ class SubscriptionViewModel constructor(context: Context, activity: ComponentAct
             .build()
     }
 
+    companion object {
+        var selectedPosition: Int = 0
+    }
     init {
         this.context = context
         this.activity = activity
         preferenceHelper = BasePreferenceHelper(context)
 
-        startConnection(getSelectedPosition())
-
     }
 
     fun setSelectedPosition(num: Int) {
@@ -101,6 +102,9 @@ class SubscriptionViewModel constructor(context: Context, activity: ComponentAct
                         mutableLiveDataProducts.value = data
                         mutableLiveDataProductsErrorStatus.value = false
 
+                        startConnection(getSelectedPosition())
+
+
                     } catch (ex: Exception) {
                         Log.d("test_api_response", "Products catch:")
                         mutableLiveDataProductsErrorStatus.value = true
@@ -122,7 +126,7 @@ class SubscriptionViewModel constructor(context: Context, activity: ComponentAct
     }
 
     fun startConnection(selectedPosition: Int) {
-        this.selectedPosition = selectedPosition
+        SubscriptionViewModel.selectedPosition = selectedPosition
         Log.d(tag, "startConnection Billing")
 
         billingClient.startConnection(object : BillingClientStateListener {
@@ -185,7 +189,7 @@ class SubscriptionViewModel constructor(context: Context, activity: ComponentAct
                         mutableLiveDataSkuDetails.postValue(skuDetailsListsSubs)
 //                        subscriptionProduct(selectedPosition, skuDetailsListsSubs, activity)
 
-//                        initProductList(skuDetailsListsSubs)
+                        initProductList(skuDetailsListsSubs)
                     }
                 }
 
@@ -200,93 +204,101 @@ class SubscriptionViewModel constructor(context: Context, activity: ComponentAct
     ) {
         Log.d(tag, "subscriptionProduct Billing $skuDetailsListsSubs")
 
-        if (skuDetailsListsSubs != null && skuDetailsListsSubs!!.isNotEmpty())
+        if (skuDetailsListsSubs != null && skuDetailsListsSubs.isNotEmpty())
         {
             Log.d(tag, "subscriptionProduct IN Billing")
 
             val billingFlowParams = BillingFlowParams.newBuilder().setSkuDetails(
-                skuDetailsListsSubs!!.get(selectedPosition)).build()
+                skuDetailsListsSubs.get(selectedPosition)).build()
             billingClient.launchBillingFlow(activity, billingFlowParams)
         }
     }
 
     private fun initProductList(skuDetailsList: List<SkuDetails>) {
-
+        Log.d("test_subscription_list", "skuDetailsList size = ${skuDetailsList.size}")
         this.skuDetailsList = skuDetailsList
         if (this.skuDetailsList?.size!! > 0) {
+            Log.d("test_subscription_list", "skuDetailsList[2] size = ${skuDetailsList.size}")
 
             var boolValue: Boolean
             var freePeriod: String
             var title: String
             var selectFeatureListSorted = ArrayList<ProductFeatures>()
 
+            val featuresListSortedData = ArrayList<ProductFeatures>()
+            val selectPriceListData = ArrayList<SubscriptionPackageList>()
+
+
             featuresList.value?.let {
-                for ((index, value) in skuDetailsList.withIndex()){
-                    for ((indexed, values) in it.withIndex()){
-                        if (value.sku == values.identifier)
-                        {
-                            Log.d("value_of_sku", "Equal => $index + $indexed")
-                            featuresListSorted.value?.add(it.get(indexed))
+                for ((index, value) in skuDetailsList.withIndex()) {
+                    for ((indexed, values) in it.withIndex()) {
+                        if (value.sku == values.identifier) {
+                            Log.d("test_subscription_list", "Equal => $index + $indexed")
+                            featuresListSortedData.add(it.get(indexed))
+                            Log.d(
+                                "test_subscription_list",
+                                "featuresList: ${it.get(indexed).title} ${
+                                    featuresListSortedData?.get(indexed)?.title
+                                }"
+                            )
                         }
                     }
                 }
             }
+            featuresListSorted.postValue(featuresListSortedData)
 
 
-            featuresListSorted.value?.forEachIndexed { index, productFeatures ->
-                Log.d("featuresListSorted", "${productFeatures.title} + ${productFeatures.identifier} + ${productFeatures.price}")
-            }
+            val list = featuresListSorted.value
+            Log.d("test_subscription_list", "featuresListSorted size = ${list?.size}")
 
-//            for ((index, value) in skuDetailsList.withIndex()){
-//
-//                Log.d("value of 1", value.title + " ," + value.freeTrialPeriod + "=>" + featuresList.get(index).identifier)
-//
-//                if (skuDetailsList.size > 1)
-//                {
-//                    boolValue = index == 1
-//                }
-//                else{
-//                    boolValue = index == 0
-//                }
-//
-//                if (value.freeTrialPeriod == "P3D")
-//                {
-//                    freePeriod = "Free for 3 days"
-//                } else if (value.freeTrialPeriod == "P1W")
-//                {
-//                    freePeriod = "Free for 7 days"
-//                }
-//                else
-//                {
-//                    freePeriod = ""
-//                }
-//
-//
-//                selectPriceList.add(
-//                    UpgradePriceList(value.title, value.description, value.price, freePeriod,
-//                    boolValue, index)
-//                )
-//            }
-//
-//            selectPriceList.forEachIndexed { index, upgradePriceList ->
-//                if (upgradePriceList.isEnabled) {
-//                    selectedPosition = index
-//                }
+//            featuresListSortedData.forEachIndexed { index, productFeatures ->
+//                Log.d("test_subscription_list", "${productFeatures.title} + ${productFeatures.identifier} + ${productFeatures.price}")
 //            }
-//
-//                upgradeListAdapter.data.clear()
-//                if (featuresList.size > 1)
-//                {
-//                    upgradeListAdapter.setNewData(featuresListSorted.get(1).features)
-//                }
-//                else if (featuresList.size > 0)
-//                {
-//                    upgradeListAdapter.setNewData(featuresListSorted.get(0).features)
-//                }
+
+            for ((index, value) in skuDetailsList.withIndex()) {
+
+//                Log.d("test_subscription_list", value.title + " ," + value.freeTrialPeriod + "=>" + featuresList.value?.get(index)?.identifier)
+
+                if (skuDetailsList.size > 1) {
+                    boolValue = index == 1
+                } else {
+                    boolValue = index == 0
+                }
+
+                freePeriod = if (value.freeTrialPeriod == "P3D") {
+                    "Free for 3 days"
+                } else if (value.freeTrialPeriod == "P1W") {
+                    "Free for 7 days"
+                } else {
+                    ""
+                }
+
+                val planTitle = featuresListSortedData.get(index).title
+                selectPriceListData.add(
+                    SubscriptionPackageList(
+                        planTitle ?: value.title, "Auto-Renewable", value.description, value.price,
+                        mutableStateOf(boolValue)
+                    )
+                )
+            }
+
+            selectPriceListData.forEachIndexed { index, upgradePriceList ->
+                Log.d(
+                    "test_subscription_list",
+                    "${upgradePriceList.packageDuration} ${upgradePriceList.planType} ${upgradePriceList.desc} ${upgradePriceList.price} ${upgradePriceList.isSelected.value}"
+                )
+
+                if (upgradePriceList.isSelected.value) {
+                    selectedPosition = index
+                }
+            }
+
+            selectPriceList.postValue(selectPriceListData)
 
         }
     }
 
+
     override fun onPurchasesUpdated(p0: BillingResult, p1: MutableList<Purchase>?) {
     }