From f01f5cb57b32159ef434197303e12bc1fa127091 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Mon, 1 May 2023 00:16:53 -0400 Subject: [PATCH] Create and use InsufficientGemsDialogEntryPoint, pass activity reference --- .../interactors/InsufficientGemsUseCase.kt | 25 ++++++ .../adapter/inventory/ShopRecyclerAdapter.kt | 9 +- .../fragments/inventory/shops/ShopFragment.kt | 3 + .../preferences/PreferencesFragment.kt | 6 +- .../InsufficientGemsDialog.kt | 86 +++++++++++++------ .../habitica/ui/views/shops/PurchaseDialog.kt | 6 +- 6 files changed, 104 insertions(+), 31 deletions(-) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/interactors/InsufficientGemsUseCase.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/InsufficientGemsUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/InsufficientGemsUseCase.kt new file mode 100644 index 000000000..b43e5e0f3 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/InsufficientGemsUseCase.kt @@ -0,0 +1,25 @@ +package com.habitrpg.android.habitica.interactors + +import android.app.Activity +import com.habitrpg.android.habitica.helpers.PurchaseHandler +import com.habitrpg.android.habitica.helpers.PurchaseTypes +import com.habitrpg.android.habitica.ui.activities.MainActivity +import javax.inject.Inject + +class InsufficientGemsUseCase @Inject constructor( + private val purchaseHandler: PurchaseHandler +) : UseCase() { + + override suspend fun run(requestValues: RequestValues) { + val activity = requestValues.activity as? MainActivity ?: return + val gemSku = if (requestValues.gemPrice > 4) { + PurchaseTypes.Purchase21Gems + } else { + PurchaseTypes.Purchase4Gems + } + val sku = purchaseHandler.getInAppPurchaseSKU(gemSku) ?: return + purchaseHandler.purchase(activity, sku) + } + + class RequestValues(val gemPrice: Int, val activity: Activity) : UseCase.RequestValues +} \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt index bbe5e47b9..79385cf0d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt @@ -17,9 +17,9 @@ import com.habitrpg.android.habitica.models.shops.ShopCategory import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.user.OwnedItem import com.habitrpg.android.habitica.models.user.User +import com.habitrpg.android.habitica.ui.activities.MainActivity import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder import com.habitrpg.android.habitica.ui.viewHolders.ShopItemViewHolder -import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.getTranslatedClassName import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog import com.habitrpg.common.habitica.extensions.fromHtml @@ -46,6 +46,7 @@ class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter= 3) { changeClassEvents?.invoke(selectedGearCategory) } else { - val dialog = InsufficientGemsDialog(context, 3) - dialog.show() + mainActivity?.let { activity -> + val dialog = InsufficientGemsDialog(activity, 3) + dialog.show() + } } } sectionHolder.switchClassButton?.visibility = View.VISIBLE diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt index 0b9357a18..bf3f061d6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt @@ -117,7 +117,10 @@ open class ShopFragment : BaseMainFragment() } dialog.show() } + + adapter?.context = context + adapter?.mainActivity = mainActivity binding?.recyclerView?.adapter = adapter binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator() adapter?.changeClassEvents = { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt index d15decba6..cbcf0b01f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt @@ -160,8 +160,10 @@ class PreferencesFragment : BasePreferencesFragment(), dialog.enqueue() } } else { - val dialog = context?.let { InsufficientGemsDialog(it, 3) } - dialog?.show() + activity?.let { activity -> + val dialog = InsufficientGemsDialog(activity, 3) + dialog.show() + } } } else { classSelectionResult.launch(intent) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt index 7dd58935b..f8d0a69f8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt @@ -1,6 +1,6 @@ package com.habitrpg.android.habitica.ui.views.insufficientCurrency -import android.content.Context +import android.app.Activity import android.os.Bundle import android.widget.Button import android.widget.ProgressBar @@ -14,9 +14,16 @@ import com.habitrpg.android.habitica.helpers.AppConfigManager import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.helpers.PurchaseHandler import com.habitrpg.android.habitica.helpers.PurchaseTypes +import com.habitrpg.android.habitica.interactors.InsufficientGemsUseCase import com.habitrpg.common.habitica.helpers.AnalyticsManager +import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.EntryPoint +import dagger.hilt.InstallIn +import dagger.hilt.android.EntryPointAccessors +import dagger.hilt.components.SingletonComponent import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.MainScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import javax.inject.Inject @@ -25,7 +32,7 @@ import javax.inject.Inject * Created by phillip on 27.09.17. */ -class InsufficientGemsDialog(context: Context, var gemPrice: Int) : InsufficientCurrencyDialog(context) { +class InsufficientGemsDialog(val parentActivity: Activity, var gemPrice: Int) : InsufficientCurrencyDialog(parentActivity) { @Inject lateinit var configManager: AppConfigManager @@ -34,6 +41,24 @@ class InsufficientGemsDialog(context: Context, var gemPrice: Int) : Insufficient @Inject lateinit var purchaseHandler: PurchaseHandler + @EntryPoint + @InstallIn(SingletonComponent::class) + interface InsufficientGemsDialogEntryPoint { + fun configManager(): AppConfigManager + fun analyticsManager(): AnalyticsManager + fun purchaseHandler(): PurchaseHandler + fun insufficientGemsUseCase(): InsufficientGemsUseCase + } + var insufficientGemsUseCase: InsufficientGemsUseCase + + init { + val hiltEntryPoint = EntryPointAccessors.fromApplication(parentActivity, InsufficientGemsDialogEntryPoint::class.java) + insufficientGemsUseCase = hiltEntryPoint.insufficientGemsUseCase() + configManager = hiltEntryPoint.configManager() + analyticsManager = hiltEntryPoint.analyticsManager() + purchaseHandler = hiltEntryPoint.purchaseHandler() + } + override fun getLayoutID(): Int { return R.layout.dialog_insufficient_gems } @@ -48,34 +73,45 @@ class InsufficientGemsDialog(context: Context, var gemPrice: Int) : Insufficient override fun onAttachedToWindow() { super.onAttachedToWindow() - getActivity()?.let { activity -> - val purchaseTextView = contentView.findViewById(R.id.purchase_textview) - val purchaseButton = contentView.findViewById