Convert Inventory.subscription to LiveData

pull/1305/head
Alex Baker 3 years ago
parent eb2c7420d6
commit 56ff44e163

@ -34,28 +34,28 @@ class InventoryTest : InjectingTestCase() {
fun testMonthlyUpgrade() {
withPurchases(monthly01, monthly03)
assertEquals(3, inventory.subscription?.subscriptionPrice)
assertEquals(3, inventory.subscription.value?.subscriptionPrice)
}
@Test
fun testMonthlyOverAnnual() {
withPurchases(monthly01, annual03)
assertTrue(inventory.subscription!!.isMonthly)
assertTrue(inventory.subscription.value!!.isMonthly)
}
@Test
fun isCancelled() {
withPurchases(annual03Cancelled)
assertTrue(inventory.subscription!!.isCanceled)
assertTrue(inventory.subscription.value!!.isCanceled)
}
@Test
fun cancelledIsStillPro() {
withPurchases(annual03Cancelled)
assertTrue(inventory.subscription!!.isProSubscription)
assertTrue(inventory.subscription.value!!.isProSubscription)
}
private fun withPurchases(vararg purchases: String) {

@ -367,7 +367,7 @@ class SignInActivity : InjectingAppCompatActivity(), PurchaseDialog.PurchaseHand
}
override fun onPurchaseDialogDismissed() {
if (inventory.subscription?.isTasksSubscription == true) {
if (inventory.subscription.value?.isTasksSubscription == true) {
lifecycleScope.launch {
val account = viewModel.setupAccount(authService)
if (account != null) {

@ -3,6 +3,7 @@ package org.tasks.billing
import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.lifecycle.MutableLiveData
import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.BuildConfig
import org.tasks.LocalBroadcastManager
@ -24,12 +25,15 @@ class Inventory @Inject constructor(
private val caldavDao: CaldavDao
) {
private val purchases: MutableMap<String, Purchase> = HashMap()
val subscription = MutableLiveData<Purchase>()
var hasTasksSubscription = false
private set
fun clear() {
Timber.d("clear()")
purchases.clear()
subscription.value = null
}
fun add(items: Iterable<Purchase>) {
@ -46,6 +50,7 @@ class Inventory @Inject constructor(
}
}
hasPro = purchases.values.any { it.isProSubscription } || purchases.containsKey(SKU_VIP)
updateSubscription()
}
fun purchasedTasker() = hasPro || purchases.containsKey(SKU_TASKER)
@ -63,7 +68,7 @@ class Inventory @Inject constructor(
suspend fun updateTasksSubscription() {
hasTasksSubscription =
subscription?.isTasksSubscription == true || caldavDao.getAccounts(TYPE_TASKS).any {
subscription.value?.isTasksSubscription == true || caldavDao.getAccounts(TYPE_TASKS).any {
it.isTasksSubscription(context)
}
}
@ -72,8 +77,8 @@ class Inventory @Inject constructor(
fun getPurchase(sku: String) = purchases[sku]
val subscription: Purchase?
get() = purchases
private fun updateSubscription() {
subscription.value = purchases
.values
.filter { it.isProSubscription }
.sortedWith { l, r ->
@ -84,9 +89,10 @@ class Inventory @Inject constructor(
r.subscriptionPrice!!.compareTo(l.subscriptionPrice!!)
}
.firstOrNull()
}
fun unsubscribe(context: Context): Boolean {
subscription?.let {
subscription.value?.let {
context.startActivity(
Intent(
Intent.ACTION_VIEW,

@ -242,7 +242,7 @@ _${getString(R.string.upgrade_tasks_no_account)}_
}
private fun setup() {
currentSubscription = inventory.subscription
currentSubscription = inventory.subscription.value
if (!priceChanged) {
binding.slider.value =
currentSubscription

@ -14,7 +14,7 @@ class TasksBasicAuth(
override fun intercept(chain: Interceptor.Chain): Response {
val builder = chain.request().newBuilder().header(AUTHORIZATION, credentials)
inventory.subscription?.let {
inventory.subscription.value?.let {
builder.header(SKU, it.sku)
builder.header(TOKEN, it.purchaseToken)
}

@ -34,7 +34,7 @@ class GoogleTasksAccount : BaseAccountPreference() {
override fun onReceive(context: Context, intent: Intent) {
lifecycleScope.launch {
googleTaskAccount.let {
if (inventory.subscription != null && it.error.isPaymentRequired()) {
if (inventory.subscription.value != null && it.error.isPaymentRequired()) {
it.error = null
googleTaskListDao.update(it)
}

@ -111,7 +111,7 @@ class HelpAndFeedback : InjectingPreferenceFragment() {
return
}
val subscription = inventory.subscription
val subscription = inventory.subscription.value
findPreference(R.string.upgrade_to_pro).apply {
title = getString(
if (subscription == null) {
@ -129,7 +129,7 @@ class HelpAndFeedback : InjectingPreferenceFragment() {
getString(R.string.current_subscription, price)
}
}
findPreference(R.string.button_unsubscribe).isEnabled = inventory.subscription != null
findPreference(R.string.button_unsubscribe).isEnabled = inventory.subscription.value != null
}
override fun getMenu() = 0

@ -54,7 +54,7 @@ class TasksAccount : BaseAccountPreference() {
override fun onReceive(context: Context, intent: Intent) {
lifecycleScope.launch {
caldavAccount.let {
if (inventory.subscription?.isTasksSubscription == true
if (inventory.subscription.value?.isTasksSubscription == true
&& it.isPaymentRequired()) {
it.error = null
caldavDao.update(it)
@ -178,7 +178,7 @@ class TasksAccount : BaseAccountPreference() {
isVisible = true
when {
account.isPaymentRequired() -> {
val subscription = inventory.subscription
val subscription = inventory.subscription.value
if (isGitHubAccount) {
title = null
setSummary(R.string.insufficient_sponsorship)
@ -241,7 +241,7 @@ class TasksAccount : BaseAccountPreference() {
if (BuildConfig.FLAVOR == "generic") {
return
}
val subscription = inventory.subscription
val subscription = inventory.subscription.value
findPreference(R.string.upgrade_to_pro).apply {
title = getString(
if (subscription == null) {
@ -260,7 +260,7 @@ class TasksAccount : BaseAccountPreference() {
getString(R.string.current_subscription, price)
}
}
findPreference(R.string.button_unsubscribe).isEnabled = inventory.subscription != null
findPreference(R.string.button_unsubscribe).isEnabled = inventory.subscription.value != null
}
private fun refreshPasswords(passwords: List<TasksAccountViewModel.AppPassword>) {

Loading…
Cancel
Save