From d24ee840005af340b1decc2ed9863a742e78a4e1 Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Fri, 30 Jun 2017 22:50:58 -0700 Subject: Set up billing cycle --- .../kotlin/com/pitchedapps/frost/MainActivity.kt | 2 +- .../com/pitchedapps/frost/SettingsActivity.kt | 11 +++++++- .../com/pitchedapps/frost/settings/Experimental.kt | 4 +-- .../kotlin/com/pitchedapps/frost/utils/iab/IAB.kt | 19 +++++++------ .../com/pitchedapps/frost/utils/iab/IABDialogs.kt | 32 +++++++++++++++++++++- 5 files changed, 55 insertions(+), 13 deletions(-) (limited to 'app/src/main/kotlin/com') diff --git a/app/src/main/kotlin/com/pitchedapps/frost/MainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/MainActivity.kt index 85b70a60..b4d7973e 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/MainActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/MainActivity.kt @@ -339,7 +339,7 @@ class MainActivity : BaseActivity(), FrostWebViewSearch.SearchContract { observable.observeOn(AndroidSchedulers.mainThread()).subscribe { hiddenSearchView?.query(it) } } foregroundColor = Prefs.textColor - backgroundColor = Prefs.bgColor + backgroundColor = Prefs.bgColor.withMinAlpha(200) openListener = { hiddenSearchView?.pauseLoad = false } closeListener = { hiddenSearchView?.pauseLoad = true } onItemClick = { _, key, _, _ -> launchWebOverlay(key) } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/SettingsActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/SettingsActivity.kt index 7d42accf..a38e124d 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/SettingsActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/SettingsActivity.kt @@ -1,5 +1,6 @@ package com.pitchedapps.frost +import android.content.Intent import android.os.Bundle import android.view.Menu import android.view.MenuItem @@ -14,6 +15,7 @@ import com.mikepenz.community_material_typeface_library.CommunityMaterial import com.mikepenz.google_material_typeface_library.GoogleMaterial import com.pitchedapps.frost.settings.* import com.pitchedapps.frost.utils.* +import com.pitchedapps.frost.utils.iab.IAB import com.pitchedapps.frost.utils.iab.IS_FROST_PRO import com.pitchedapps.frost.utils.iab.IabBroadcastReceiver import com.pitchedapps.frost.utils.iab.openPlayProPurchase @@ -23,8 +25,15 @@ import com.pitchedapps.frost.utils.iab.openPlayProPurchase * Created by Allan Wang on 2017-06-06. */ class SettingsActivity : KPrefActivity(), IabBroadcastReceiver.IabBroadcastListener { + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (!(IAB.helper?.handleActivityResult(requestCode, resultCode, data) ?: false)) + super.onActivityReenter(resultCode, data) + } + + override fun receivedBroadcast() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + L.d("IAB broadcast") } override fun kPrefCoreAttributes(): CoreAttributeContract.() -> Unit = { diff --git a/app/src/main/kotlin/com/pitchedapps/frost/settings/Experimental.kt b/app/src/main/kotlin/com/pitchedapps/frost/settings/Experimental.kt index fcb22320..e0e18622 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/settings/Experimental.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/settings/Experimental.kt @@ -15,8 +15,8 @@ fun SettingsActivity.getExperimentalPrefs(): KPrefAdapterBuilder.() -> Unit = { descRes = R.string.experimental_disclaimer_info } - checkbox(R.string.search, { Prefs.searchBar }, { Prefs.searchBar = it; setResult(MainActivity.REQUEST_SEARCH) }) { - descRes = R.string.search_desc + checkbox(R.string.search_bar, { Prefs.searchBar }, { Prefs.searchBar = it; setResult(MainActivity.REQUEST_SEARCH) }) { + descRes = R.string.search_bar_desc } checkbox(R.string.verbose_logging, { Prefs.verboseLogging }, { Prefs.verboseLogging = it }) { diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IAB.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IAB.kt index 431ba0b6..ec63cce3 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IAB.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IAB.kt @@ -34,6 +34,13 @@ object IAB { } } } + + /** + * If user has pro, check if it's valid and destroy the helper + */ + fun validatePro(activity: Activity) { + + } } private const val FROST_PRO = "frost_pro" @@ -68,19 +75,15 @@ fun Activity.openPlayPurchase(key: String, code: Int) { IAB.helper!!.queryInventoryAsync { res, inv -> if (res.isFailure) return@queryInventoryAsync playStoreGenericError("Query res error") - if (inv == null) return@queryInventoryAsync playStoreGenericError("Empty inventory") + if (inv?.getSkuDetails(key) != null) return@queryInventoryAsync playStoreAlreadyPurchased(key) L.d("IAB: inventory ${inv.allOwnedSkus}") - val donation = inv.getSkuDetails(key) ?: return@queryInventoryAsync playStoreGenericError("Donation null") - IAB.helper!!.launchPurchaseFlow(this@openPlayPurchase, donation.sku, code) { + IAB.helper!!.launchPurchaseFlow(this@openPlayPurchase, key, code) { result, _ -> - if (result.isSuccess) materialDialogThemed { - title(R.string.play_thank_you) - content(R.string.play_purchased_pro) - positiveText(R.string.kau_ok) - } else playStoreGenericError("Result: ${result.message}") + if (result.isSuccess) playStorePurchasedSuccessfully(key) frostAnswers { logPurchase(PurchaseEvent() .putItemId(key) + .putCustomAttribute("result", result.message) .putSuccess(result.isSuccess)) } } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IABDialogs.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IABDialogs.kt index e855138f..f0a544f7 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IABDialogs.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IABDialogs.kt @@ -3,7 +3,10 @@ package com.pitchedapps.frost.utils.iab import android.app.Activity import ca.allanwang.kau.utils.restart import ca.allanwang.kau.utils.startPlayStoreLink +import ca.allanwang.kau.utils.string +import com.pitchedapps.frost.MainActivity import com.pitchedapps.frost.R +import com.pitchedapps.frost.SettingsActivity import com.pitchedapps.frost.utils.L import com.pitchedapps.frost.utils.Prefs import com.pitchedapps.frost.utils.materialDialogThemed @@ -15,6 +18,14 @@ private fun playStoreLog(text: String) { L.e(Throwable(text), "Play Store Exception") } +private fun Activity.playRestart() { + if (this is MainActivity) restart() + else if (this is SettingsActivity) { + setResult(MainActivity.REQUEST_RESTART) + finish() + } +} + fun Activity.playStoreNoLongerPro() { if (!Prefs.previouslyPro) return //never pro to begin with Prefs.previouslyPro = false @@ -24,7 +35,7 @@ fun Activity.playStoreNoLongerPro() { content(R.string.play_store_not_pro) positiveText(R.string.reload) dismissListener { - this@playStoreNoLongerPro.restart() + this@playStoreNoLongerPro.playRestart() } } } @@ -47,4 +58,23 @@ fun Activity.playStoreGenericError(text: String = "Store generic error") { content(R.string.play_store_billing_error) positiveText(R.string.kau_ok) } +} + +fun Activity.playStoreAlreadyPurchased(key: String) { + materialDialogThemed { + title(R.string.play_already_purchased) + content(String.format(string(R.string.play_already_purchased_content), key)) + positiveText(R.string.reload) + dismissListener { + this@playStoreAlreadyPurchased.playRestart() + } + } +} + +fun Activity.playStorePurchasedSuccessfully(key: String) { + materialDialogThemed { + title(R.string.play_thank_you) + content(R.string.play_purchased_pro) + positiveText(R.string.kau_ok) + } } \ No newline at end of file -- cgit v1.2.3