diff --git a/auth/src/main/java/org/futo/circles/auth/feature/manage_subscription/ManageSubscriptionDialogFragment.kt b/auth/src/main/java/org/futo/circles/auth/feature/manage_subscription/ManageSubscriptionDialogFragment.kt index e841124b06de3b41473bf6933205df3f8decf3a5..d5d5b4133a4a6245c29b33f73990d23d133b28ff 100644 --- a/auth/src/main/java/org/futo/circles/auth/feature/manage_subscription/ManageSubscriptionDialogFragment.kt +++ b/auth/src/main/java/org/futo/circles/auth/feature/manage_subscription/ManageSubscriptionDialogFragment.kt @@ -1,13 +1,23 @@ package org.futo.circles.auth.feature.manage_subscription +import android.content.ActivityNotFoundException +import android.content.Intent +import android.net.Uri import android.os.Bundle +import android.text.format.DateFormat import android.view.View -import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import dagger.hilt.android.AndroidEntryPoint +import org.futo.circles.auth.R import org.futo.circles.auth.databinding.DialogFragmentManageSubscriptionBinding +import org.futo.circles.auth.model.ActiveSubscriptionInfo import org.futo.circles.auth.subscriptions.SubscriptionProvider import org.futo.circles.core.base.fragment.BaseFullscreenDialogFragment +import org.futo.circles.core.extensions.gone +import org.futo.circles.core.extensions.observeResponse +import org.futo.circles.core.extensions.showError +import org.futo.circles.core.extensions.visible +import java.util.Date import javax.inject.Inject @AndroidEntryPoint @@ -33,7 +43,6 @@ class ManageSubscriptionDialogFragment : viewModel.getSubscriptionInfo(subscriptionManager) } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setupViews() @@ -45,6 +54,51 @@ class ManageSubscriptionDialogFragment : } private fun setupObservers() { + viewModel.subscriptionInfoLiveData.observeResponse( + this, + onRequestInvoked = { binding.vLoading.gone() }, + success = { + binding.lSubscriptionInfo.visible() + bindSubscriptionInfo(it) + }, + error = { + binding.tvEmptyMessage.visible() + }) + } + + private fun bindSubscriptionInfo(subscriptionInfo: ActiveSubscriptionInfo) { + with(binding) { + tvName.text = subscriptionInfo.name + tvDescription.text = subscriptionInfo.description + tvPrice.text = getString(R.string.price_format, subscriptionInfo.price) + tvDuration.text = getString(R.string.duration_format, subscriptionInfo.duration) + tvProductId.text = getString(R.string.product_id_format, subscriptionInfo.productId) + val purchaseDate = + DateFormat.format("MMM dd yyyy, h:mm a", Date(subscriptionInfo.purchaseTime)) + tvPurchasedAt.text = getString(R.string.purchase_time_format, purchaseDate) + tvAutoRenewMessage.text = getString( + if (subscriptionInfo.isAutoRenewing) R.string.is_auto_renew_message + else R.string.is_not_auto_renew_message + ) + btnManageGp.setOnClickListener { + openPlayStoreSubscriptionInfo( + subscriptionInfo.productId, + subscriptionInfo.packageName + ) + } + } + } + private fun openPlayStoreSubscriptionInfo(sku: String, packageName: String) { + try { + startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse("https://play.google.com/store/account/subscriptions?sku=$sku&package=$packageName") + ) + ) + } catch (e: ActivityNotFoundException) { + showError(getString(R.string.can_not_open_google_play)) + } } } \ No newline at end of file diff --git a/auth/src/main/java/org/futo/circles/auth/feature/manage_subscription/ManageSubscriptionViewModel.kt b/auth/src/main/java/org/futo/circles/auth/feature/manage_subscription/ManageSubscriptionViewModel.kt index 67b4e086d429e769e9c6cf209d78bbd3365a7e0a..715e3b4b394d3d90e62029c4990ff325f6872717 100644 --- a/auth/src/main/java/org/futo/circles/auth/feature/manage_subscription/ManageSubscriptionViewModel.kt +++ b/auth/src/main/java/org/futo/circles/auth/feature/manage_subscription/ManageSubscriptionViewModel.kt @@ -36,6 +36,7 @@ class ManageSubscriptionViewModel @Inject constructor( subscriptionInfoLiveData.postValue( Response.Success( ActiveSubscriptionInfo( + packageName = activeReceipt.packageName, productId = activeReceipt.productId, purchaseTime = activeReceipt.purchaseTime, isAutoRenewing = activeReceipt.isAutoRenewing, diff --git a/auth/src/main/java/org/futo/circles/auth/model/ActiveSubscriptionInfo.kt b/auth/src/main/java/org/futo/circles/auth/model/ActiveSubscriptionInfo.kt index 9de531451a1ce8ed43a90ad93afb5aa1cde81d2c..88ddce7fc11314869bc6272fa6ca5105a8e7b957 100644 --- a/auth/src/main/java/org/futo/circles/auth/model/ActiveSubscriptionInfo.kt +++ b/auth/src/main/java/org/futo/circles/auth/model/ActiveSubscriptionInfo.kt @@ -1,6 +1,7 @@ package org.futo.circles.auth.model data class ActiveSubscriptionInfo( + val packageName: String, val productId: String, val purchaseTime: Long, val isAutoRenewing: Boolean,