diff --git a/data/build.gradle b/data/build.gradle index ed2f1cee..a76aff2b 100644 --- a/data/build.gradle +++ b/data/build.gradle @@ -81,7 +81,6 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:$coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-reactive:$coroutines_version" - implementation 'com.android.installreferrer:installreferrer:1.1' implementation 'com.callcontrol:datashare:1.2.0' implementation "com.f2prateek.rx.preferences2:rx-preferences:$rx_preferences_version" implementation "com.jakewharton.timber:timber:$timber_version" @@ -92,6 +91,8 @@ dependencies { implementation project(":android-smsmms") implementation project(':common') implementation project(':domain') + + withAnalyticsImplementation 'com.android.installreferrer:installreferrer:1.1' withAnalyticsImplementation "com.amplitude:android-sdk:2.16.0" } diff --git a/data/src/noAnalytics/java/com/moez/QKSMS/manager/ReferralManagerImpl.kt b/data/src/noAnalytics/java/com/moez/QKSMS/manager/ReferralManagerImpl.kt new file mode 100644 index 00000000..0f51410f --- /dev/null +++ b/data/src/noAnalytics/java/com/moez/QKSMS/manager/ReferralManagerImpl.kt @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2020 Moez Bhatti + * + * This file is part of QKSMS. + * + * QKSMS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * QKSMS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with QKSMS. If not, see . + */ + +package com.moez.QKSMS.manager + +import android.content.Context +import com.moez.QKSMS.util.Preferences +import kotlinx.coroutines.suspendCancellableCoroutine +import javax.inject.Inject +import kotlin.coroutines.resume + +class ReferralManagerImpl @Inject constructor() : ReferralManager { + + override suspend fun trackReferrer() { + } + +} diff --git a/data/src/main/java/com/moez/QKSMS/manager/ReferralManagerImpl.kt b/data/src/withAnalytics/java/com/moez/QKSMS/manager/ReferralManagerImpl.kt similarity index 73% rename from data/src/main/java/com/moez/QKSMS/manager/ReferralManagerImpl.kt rename to data/src/withAnalytics/java/com/moez/QKSMS/manager/ReferralManagerImpl.kt index 4446d674..32a48cc0 100644 --- a/data/src/main/java/com/moez/QKSMS/manager/ReferralManagerImpl.kt +++ b/data/src/withAnalytics/java/com/moez/QKSMS/manager/ReferralManagerImpl.kt @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2020 Moez Bhatti + * + * This file is part of QKSMS. + * + * QKSMS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * QKSMS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with QKSMS. If not, see . + */ + package com.moez.QKSMS.manager import android.content.Context diff --git a/domain/src/main/java/com/moez/QKSMS/manager/BillingManager.kt b/domain/src/main/java/com/moez/QKSMS/manager/BillingManager.kt new file mode 100644 index 00000000..f02de472 --- /dev/null +++ b/domain/src/main/java/com/moez/QKSMS/manager/BillingManager.kt @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2020 Moez Bhatti + * + * This file is part of QKSMS. + * + * QKSMS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * QKSMS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with QKSMS. If not, see . + */ + +package com.moez.QKSMS.manager + +import android.app.Activity +import io.reactivex.Observable + +interface BillingManager { + + companion object { + const val SKU_PLUS = "remove_ads" + const val SKU_PLUS_DONATE = "qksms_plus_donate" + } + + data class Product( + val sku: String, + val price: String, + val priceCurrencyCode: String + ) + + val products: Observable> + val upgradeStatus: Observable + + fun initiatePurchaseFlow(activity: Activity, sku: String) + +} diff --git a/presentation/build.gradle b/presentation/build.gradle index 4cc58a6f..0ba9a9f4 100644 --- a/presentation/build.gradle +++ b/presentation/build.gradle @@ -173,7 +173,6 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:$coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-reactive:$coroutines_version" - implementation "com.android.billingclient:billing:1.0" implementation "com.github.chrisbanes:PhotoView:2.0.0" implementation "com.f2prateek.rx.preferences2:rx-preferences:$rx_preferences_version" implementation "com.google.android:flexbox:0.3.1" @@ -187,6 +186,7 @@ dependencies { implementation project(':domain') withAnalyticsImplementation 'com.google.firebase:firebase-crashlytics:17.3.0' + withAnalyticsImplementation "com.android.billingclient:billing:1.0" noAnalyticsDebug project(path: ':data', configuration: 'noAnalyticsDebug') noAnalyticsRelease project(path: ':data', configuration: 'noAnalyticsRelease') diff --git a/presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt b/presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt index 8ade172d..0a7cba9c 100644 --- a/presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt +++ b/presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt @@ -31,7 +31,6 @@ import android.provider.Telephony import android.webkit.MimeTypeMap import androidx.core.content.FileProvider import com.moez.QKSMS.BuildConfig -import com.moez.QKSMS.common.util.BillingManager import com.moez.QKSMS.feature.backup.BackupActivity import com.moez.QKSMS.feature.blocking.BlockingActivity import com.moez.QKSMS.feature.compose.ComposeActivity @@ -42,6 +41,7 @@ import com.moez.QKSMS.feature.plus.PlusActivity import com.moez.QKSMS.feature.scheduled.ScheduledActivity import com.moez.QKSMS.feature.settings.SettingsActivity import com.moez.QKSMS.manager.AnalyticsManager +import com.moez.QKSMS.manager.BillingManager import com.moez.QKSMS.manager.NotificationManager import com.moez.QKSMS.manager.PermissionManager import java.io.File diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/backup/BackupPresenter.kt b/presentation/src/main/java/com/moez/QKSMS/feature/backup/BackupPresenter.kt index 3f0174a1..b547ec30 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/backup/BackupPresenter.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/backup/BackupPresenter.kt @@ -22,10 +22,10 @@ import android.content.Context import com.moez.QKSMS.R import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkPresenter -import com.moez.QKSMS.common.util.BillingManager import com.moez.QKSMS.common.util.DateFormatter import com.moez.QKSMS.common.util.extensions.makeToast import com.moez.QKSMS.interactor.PerformBackup +import com.moez.QKSMS.manager.BillingManager import com.moez.QKSMS.manager.PermissionManager import com.moez.QKSMS.repository.BackupRepository import com.uber.autodispose.android.lifecycle.scope diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeViewModel.kt b/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeViewModel.kt index a2abfb2f..ba601f2f 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeViewModel.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeViewModel.kt @@ -27,7 +27,6 @@ import androidx.core.content.getSystemService import com.moez.QKSMS.R import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkViewModel -import com.moez.QKSMS.common.util.BillingManager import com.moez.QKSMS.common.util.ClipboardUtils import com.moez.QKSMS.common.util.MessageDetailsFormatter import com.moez.QKSMS.common.util.extensions.makeToast @@ -44,6 +43,7 @@ import com.moez.QKSMS.interactor.MarkRead import com.moez.QKSMS.interactor.RetrySending import com.moez.QKSMS.interactor.SendMessage import com.moez.QKSMS.manager.ActiveConversationManager +import com.moez.QKSMS.manager.BillingManager import com.moez.QKSMS.manager.PermissionManager import com.moez.QKSMS.model.Attachment import com.moez.QKSMS.model.Attachments diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/main/MainViewModel.kt b/presentation/src/main/java/com/moez/QKSMS/feature/main/MainViewModel.kt index e1c2fc0e..f79b1928 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/main/MainViewModel.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/main/MainViewModel.kt @@ -22,7 +22,6 @@ import androidx.recyclerview.widget.ItemTouchHelper import com.moez.QKSMS.R import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkViewModel -import com.moez.QKSMS.common.util.BillingManager import com.moez.QKSMS.extensions.mapNotNull import com.moez.QKSMS.interactor.DeleteConversations import com.moez.QKSMS.interactor.MarkAllSeen @@ -36,6 +35,7 @@ import com.moez.QKSMS.interactor.MigratePreferences import com.moez.QKSMS.interactor.SyncContacts import com.moez.QKSMS.interactor.SyncMessages import com.moez.QKSMS.listener.ContactAddedListener +import com.moez.QKSMS.manager.BillingManager import com.moez.QKSMS.manager.ChangelogManager import com.moez.QKSMS.manager.PermissionManager import com.moez.QKSMS.manager.RatingManager diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusActivity.kt b/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusActivity.kt index eaa01042..b8a2ec9a 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusActivity.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusActivity.kt @@ -27,7 +27,6 @@ import com.jakewharton.rxbinding2.view.clicks import com.moez.QKSMS.BuildConfig import com.moez.QKSMS.R import com.moez.QKSMS.common.base.QkThemedActivity -import com.moez.QKSMS.common.util.BillingManager import com.moez.QKSMS.common.util.FontProvider import com.moez.QKSMS.common.util.extensions.resolveThemeColor import com.moez.QKSMS.common.util.extensions.setBackgroundTint @@ -37,6 +36,7 @@ import com.moez.QKSMS.common.util.extensions.viewBinding import com.moez.QKSMS.common.widget.PreferenceView import com.moez.QKSMS.databinding.QksmsPlusActivityBinding import com.moez.QKSMS.feature.plus.experiment.UpgradeButtonExperiment +import com.moez.QKSMS.manager.BillingManager import dagger.android.AndroidInjection import javax.inject.Inject diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusView.kt b/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusView.kt index 8d7c67e8..261f9a4c 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusView.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusView.kt @@ -19,7 +19,7 @@ package com.moez.QKSMS.feature.plus import com.moez.QKSMS.common.base.QkView -import com.moez.QKSMS.common.util.BillingManager +import com.moez.QKSMS.manager.BillingManager import io.reactivex.Observable interface PlusView : QkView { diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusViewModel.kt b/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusViewModel.kt index a3475822..a669dbeb 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusViewModel.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusViewModel.kt @@ -20,8 +20,8 @@ package com.moez.QKSMS.feature.plus import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkViewModel -import com.moez.QKSMS.common.util.BillingManager import com.moez.QKSMS.manager.AnalyticsManager +import com.moez.QKSMS.manager.BillingManager import com.uber.autodispose.android.lifecycle.scope import com.uber.autodispose.autoDisposable import io.reactivex.Observable @@ -84,4 +84,4 @@ class PlusViewModel @Inject constructor( .subscribe { navigator.showSettings() } } -} \ No newline at end of file +} diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/scheduled/ScheduledViewModel.kt b/presentation/src/main/java/com/moez/QKSMS/feature/scheduled/ScheduledViewModel.kt index 76d28f50..a6b22fbd 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/scheduled/ScheduledViewModel.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/scheduled/ScheduledViewModel.kt @@ -22,11 +22,10 @@ import android.content.Context import com.moez.QKSMS.R import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkViewModel -import com.moez.QKSMS.common.util.BillingManager import com.moez.QKSMS.common.util.ClipboardUtils import com.moez.QKSMS.common.util.extensions.makeToast import com.moez.QKSMS.interactor.SendScheduledMessage -import com.moez.QKSMS.repository.MessageRepository +import com.moez.QKSMS.manager.BillingManager import com.moez.QKSMS.repository.ScheduledMessageRepository import com.uber.autodispose.android.lifecycle.scope import com.uber.autodispose.autoDisposable @@ -37,7 +36,6 @@ import javax.inject.Inject class ScheduledViewModel @Inject constructor( billingManager: BillingManager, private val context: Context, - private val messageRepo: MessageRepository, private val navigator: Navigator, private val scheduledMessageRepo: ScheduledMessageRepository, private val sendScheduledMessage: SendScheduledMessage diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/settings/SettingsPresenter.kt b/presentation/src/main/java/com/moez/QKSMS/feature/settings/SettingsPresenter.kt index df35038f..ba58580b 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/settings/SettingsPresenter.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/settings/SettingsPresenter.kt @@ -22,13 +22,13 @@ import android.content.Context import com.moez.QKSMS.R import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkPresenter -import com.moez.QKSMS.common.util.BillingManager import com.moez.QKSMS.common.util.Colors import com.moez.QKSMS.common.util.DateFormatter import com.moez.QKSMS.common.util.extensions.makeToast import com.moez.QKSMS.interactor.DeleteOldMessages import com.moez.QKSMS.interactor.SyncMessages import com.moez.QKSMS.manager.AnalyticsManager +import com.moez.QKSMS.manager.BillingManager import com.moez.QKSMS.repository.MessageRepository import com.moez.QKSMS.repository.SyncRepository import com.moez.QKSMS.service.AutoDeleteService diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/themepicker/ThemePickerPresenter.kt b/presentation/src/main/java/com/moez/QKSMS/feature/themepicker/ThemePickerPresenter.kt index 53168406..a27315ec 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/themepicker/ThemePickerPresenter.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/themepicker/ThemePickerPresenter.kt @@ -21,8 +21,8 @@ package com.moez.QKSMS.feature.themepicker import com.f2prateek.rx.preferences2.Preference import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkPresenter -import com.moez.QKSMS.common.util.BillingManager import com.moez.QKSMS.common.util.Colors +import com.moez.QKSMS.manager.BillingManager import com.moez.QKSMS.manager.WidgetManager import com.moez.QKSMS.util.Preferences import com.uber.autodispose.android.lifecycle.scope diff --git a/presentation/src/main/java/com/moez/QKSMS/injection/AppModule.kt b/presentation/src/main/java/com/moez/QKSMS/injection/AppModule.kt index dc9adb0f..afab6678 100644 --- a/presentation/src/main/java/com/moez/QKSMS/injection/AppModule.kt +++ b/presentation/src/main/java/com/moez/QKSMS/injection/AppModule.kt @@ -28,6 +28,7 @@ import com.f2prateek.rx.preferences2.RxSharedPreferences import com.moez.QKSMS.blocking.BlockingClient import com.moez.QKSMS.blocking.BlockingManager import com.moez.QKSMS.common.ViewModelFactory +import com.moez.QKSMS.common.util.BillingManagerImpl import com.moez.QKSMS.common.util.NotificationManagerImpl import com.moez.QKSMS.common.util.ShortcutManagerImpl import com.moez.QKSMS.feature.conversationinfo.injection.ConversationInfoComponent @@ -40,6 +41,7 @@ import com.moez.QKSMS.manager.AlarmManager import com.moez.QKSMS.manager.AlarmManagerImpl import com.moez.QKSMS.manager.AnalyticsManager import com.moez.QKSMS.manager.AnalyticsManagerImpl +import com.moez.QKSMS.manager.BillingManager import com.moez.QKSMS.manager.ChangelogManager import com.moez.QKSMS.manager.ChangelogManagerImpl import com.moez.QKSMS.manager.KeyManager @@ -130,6 +132,9 @@ class AppModule(private var application: Application) { // Manager + @Provides + fun provideBillingManager(manager: BillingManagerImpl): BillingManager = manager + @Provides fun provideActiveConversationManager(manager: ActiveConversationManagerImpl): ActiveConversationManager = manager diff --git a/presentation/src/noAnalytics/java/com/moez/QKSMS/common/util/BillingManagerImpl.kt b/presentation/src/noAnalytics/java/com/moez/QKSMS/common/util/BillingManagerImpl.kt new file mode 100644 index 00000000..0507447c --- /dev/null +++ b/presentation/src/noAnalytics/java/com/moez/QKSMS/common/util/BillingManagerImpl.kt @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2020 Moez Bhatti + * + * This file is part of QKSMS. + * + * QKSMS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * QKSMS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with QKSMS. If not, see . + */ +package com.moez.QKSMS.common.util + +import android.app.Activity +import com.moez.QKSMS.manager.BillingManager +import io.reactivex.Observable +import io.reactivex.subjects.BehaviorSubject +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class BillingManagerImpl @Inject constructor( +): BillingManager { + + override val products: Observable> = BehaviorSubject.createDefault(listOf()) + override val upgradeStatus: Observable = BehaviorSubject.createDefault(true) + + override fun initiatePurchaseFlow(activity: Activity, sku: String) = Unit + +} diff --git a/presentation/src/main/java/com/moez/QKSMS/common/util/BillingManager.kt b/presentation/src/withAnalytics/java/com/moez/QKSMS/common/util/BillingManagerImpl.kt similarity index 73% rename from presentation/src/main/java/com/moez/QKSMS/common/util/BillingManager.kt rename to presentation/src/withAnalytics/java/com/moez/QKSMS/common/util/BillingManagerImpl.kt index 1a2919d5..2f3b54db 100644 --- a/presentation/src/main/java/com/moez/QKSMS/common/util/BillingManager.kt +++ b/presentation/src/withAnalytics/java/com/moez/QKSMS/common/util/BillingManagerImpl.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Moez Bhatti + * Copyright (C) 2020 Moez Bhatti * * This file is part of QKSMS. * @@ -16,21 +16,20 @@ * You should have received a copy of the GNU General Public License * along with QKSMS. If not, see . */ + package com.moez.QKSMS.common.util import android.app.Activity import android.content.Context import com.android.billingclient.api.BillingClient -import com.android.billingclient.api.BillingClient.BillingResponse -import com.android.billingclient.api.BillingClient.SkuType import com.android.billingclient.api.BillingClientStateListener import com.android.billingclient.api.BillingFlowParams import com.android.billingclient.api.Purchase import com.android.billingclient.api.PurchasesUpdatedListener import com.android.billingclient.api.SkuDetails import com.android.billingclient.api.SkuDetailsParams -import com.moez.QKSMS.BuildConfig import com.moez.QKSMS.manager.AnalyticsManager +import com.moez.QKSMS.manager.BillingManager import io.reactivex.Flowable import io.reactivex.Observable import io.reactivex.schedulers.Schedulers @@ -41,18 +40,18 @@ import javax.inject.Inject import javax.inject.Singleton @Singleton -class BillingManager @Inject constructor( +class BillingManagerImpl @Inject constructor( context: Context, private val analyticsManager: AnalyticsManager -) : PurchasesUpdatedListener { +) : BillingManager, PurchasesUpdatedListener { companion object { const val SKU_PLUS = "remove_ads" const val SKU_PLUS_DONATE = "qksms_plus_donate" } - val products: Observable> = BehaviorSubject.create() - val upgradeStatus: Observable + override val products: Observable> = BehaviorSubject.create() + override val upgradeStatus: Observable private val skus = listOf(SKU_PLUS, SKU_PLUS_DONATE) private val purchaseListObservable = BehaviorSubject.create>() @@ -66,23 +65,19 @@ class BillingManager @Inject constructor( querySkuDetailsAsync() } - upgradeStatus = when (BuildConfig.FLAVOR) { - "noAnalytics" -> BehaviorSubject.createDefault(true) - - else -> purchaseListObservable - .map { purchases -> purchases.any { it.sku == SKU_PLUS } || purchases.any { it.sku == SKU_PLUS_DONATE } } - .doOnNext { upgraded -> analyticsManager.setUserProperty("Upgraded", upgraded) } - } + upgradeStatus = purchaseListObservable + .map { purchases -> purchases.any { it.sku == SKU_PLUS } || purchases.any { it.sku == SKU_PLUS_DONATE } } + .doOnNext { upgraded -> analyticsManager.setUserProperty("Upgraded", upgraded) } } private fun queryPurchases() { executeServiceRequest { // Load the cached data - purchaseListObservable.onNext(billingClient.queryPurchases(SkuType.INAPP).purchasesList.orEmpty()) + purchaseListObservable.onNext(billingClient.queryPurchases(BillingClient.SkuType.INAPP).purchasesList.orEmpty()) // On a fresh device, the purchase might not be cached, and so we'll need to force a refresh - billingClient.queryPurchaseHistoryAsync(SkuType.INAPP) { _, _ -> - purchaseListObservable.onNext(billingClient.queryPurchases(SkuType.INAPP).purchasesList.orEmpty()) + billingClient.queryPurchaseHistoryAsync(BillingClient.SkuType.INAPP) { _, _ -> + purchaseListObservable.onNext(billingClient.queryPurchases(BillingClient.SkuType.INAPP).purchasesList.orEmpty()) } } } @@ -90,8 +85,8 @@ class BillingManager @Inject constructor( private fun startServiceConnection(onSuccess: () -> Unit) { val listener = object : BillingClientStateListener { - override fun onBillingSetupFinished(@BillingResponse billingResponseCode: Int) { - if (billingResponseCode == BillingResponse.OK) { + override fun onBillingSetupFinished(@BillingClient.BillingResponse billingResponseCode: Int) { + if (billingResponseCode == BillingClient.BillingResponse.OK) { isServiceConnected = true onSuccess() } else { @@ -114,16 +109,18 @@ class BillingManager @Inject constructor( executeServiceRequest { val subParams = SkuDetailsParams.newBuilder().setSkusList(skus).setType(BillingClient.SkuType.INAPP) billingClient.querySkuDetailsAsync(subParams.build()) { responseCode, skuDetailsList -> - if (responseCode == BillingResponse.OK) { - (products as Subject).onNext(skuDetailsList) + if (responseCode == BillingClient.BillingResponse.OK) { + (products as Subject).onNext(skuDetailsList.map { skuDetails -> + BillingManager.Product(skuDetails.sku, skuDetails.price, skuDetails.priceCurrencyCode) + }) } } } } - fun initiatePurchaseFlow(activity: Activity, sku: String) { + override fun initiatePurchaseFlow(activity: Activity, sku: String) { executeServiceRequest { - val params = BillingFlowParams.newBuilder().setSku(sku).setType(SkuType.INAPP) + val params = BillingFlowParams.newBuilder().setSku(sku).setType(BillingClient.SkuType.INAPP) billingClient.launchBillingFlow(activity, params.build()) } } @@ -136,9 +133,9 @@ class BillingManager @Inject constructor( } override fun onPurchasesUpdated(resultCode: Int, purchases: List?) { - if (resultCode == BillingResponse.OK) { + if (resultCode == BillingClient.BillingResponse.OK) { purchaseListObservable.onNext(purchases.orEmpty()) } } -} \ No newline at end of file +}