diff --git a/app/src/generic/java/org/tasks/analytics/Firebase.kt b/app/src/generic/java/org/tasks/analytics/Firebase.kt index a1bfa9e05..49baebc93 100644 --- a/app/src/generic/java/org/tasks/analytics/Firebase.kt +++ b/app/src/generic/java/org/tasks/analytics/Firebase.kt @@ -11,5 +11,7 @@ class Firebase @Inject constructor() { fun noChurn() = true + fun averageSubscription() = 0 + fun logEvent(event: Int, vararg params: Pair) {} } \ No newline at end of file diff --git a/app/src/googleplay/java/org/tasks/analytics/Firebase.kt b/app/src/googleplay/java/org/tasks/analytics/Firebase.kt index c766e9339..9e09e1e73 100644 --- a/app/src/googleplay/java/org/tasks/analytics/Firebase.kt +++ b/app/src/googleplay/java/org/tasks/analytics/Firebase.kt @@ -61,6 +61,8 @@ class Firebase @Inject constructor( fun noChurn(): Boolean = remoteConfig?.getBoolean("no_churn") ?: false + fun averageSubscription(): Double = remoteConfig?.getDouble("avg_sub") ?: 3.57 + init { if (preferences.isTrackingEnabled) { analytics = FirebaseAnalytics.getInstance(context).apply { diff --git a/app/src/googleplay/res/xml/remote_config_defaults.xml b/app/src/googleplay/res/xml/remote_config_defaults.xml index 3d4d88f6f..c89396c9f 100644 --- a/app/src/googleplay/res/xml/remote_config_defaults.xml +++ b/app/src/googleplay/res/xml/remote_config_defaults.xml @@ -5,4 +5,8 @@ no_churn false + + avg_sub + 3.57 + diff --git a/app/src/main/java/org/tasks/billing/PurchaseDialog.kt b/app/src/main/java/org/tasks/billing/PurchaseDialog.kt index 840c374eb..407a4a734 100644 --- a/app/src/main/java/org/tasks/billing/PurchaseDialog.kt +++ b/app/src/main/java/org/tasks/billing/PurchaseDialog.kt @@ -10,6 +10,7 @@ import android.net.Uri import android.os.Bundle import android.text.method.LinkMovementMethod import androidx.appcompat.app.AlertDialog +import androidx.core.content.ContextCompat import androidx.core.view.isVisible import androidx.fragment.app.DialogFragment import androidx.fragment.app.Fragment @@ -22,10 +23,10 @@ import io.noties.markwon.ext.strikethrough.StrikethroughPlugin import org.tasks.BuildConfig import org.tasks.LocalBroadcastManager import org.tasks.R +import org.tasks.analytics.Firebase import org.tasks.databinding.ActivityPurchaseBinding import org.tasks.dialogs.DialogBuilder import org.tasks.locale.Locale -import org.tasks.themes.Theme import timber.log.Timber import javax.inject.Inject @@ -42,12 +43,12 @@ class PurchaseDialog : DialogFragment(), OnPurchasesUpdated { } } - @Inject lateinit var tasksTheme: Theme @Inject lateinit var inventory: Inventory @Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var billingClient: BillingClient @Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var locale: Locale + @Inject lateinit var firebase: Firebase private lateinit var binding: ActivityPurchaseBinding private lateinit var markwon: Markwon @@ -67,9 +68,7 @@ class PurchaseDialog : DialogFragment(), OnPurchasesUpdated { } binding.slider.addOnChangeListener(this::onPriceChanged) - binding.slider.setLabelFormatter { - "$${it - .01}" - } + binding.slider.setLabelFormatter { "$${it - .01}" } binding.text.movementMethod = LinkMovementMethod.getInstance() markwon = Markwon.builder(requireContext()) @@ -196,7 +195,7 @@ class PurchaseDialog : DialogFragment(), OnPurchasesUpdated { private fun setWaitScreen(isWaitScreen: Boolean) { Timber.d("setWaitScreen(%s)", isWaitScreen) val generic = BuildConfig.FLAVOR == "generic" - binding.slider.isVisible = !isWaitScreen && nameYourPrice + binding.sliderContainer.isVisible = !isWaitScreen && nameYourPrice binding.payOther.isVisible = !isWaitScreen binding.payOther.setText(when { nameYourPrice -> R.string.back @@ -238,6 +237,13 @@ class PurchaseDialog : DialogFragment(), OnPurchasesUpdated { val annualPrice = if (nameYourPrice) sliderValue else 30 val monthlyPrice = if (nameYourPrice) sliderValue else 3 val constrained = resources.getBoolean(R.bool.width_constrained) + if (sliderValue < firebase.averageSubscription()) { + binding.avgAnnual.setText(R.string.below_average) + binding.avgAnnual.setTextColor(ContextCompat.getColor(requireContext(), R.color.red_a400)) + } else { + binding.avgAnnual.setText(R.string.above_average) + binding.avgAnnual.setTextColor(ContextCompat.getColor(requireContext(), R.color.green_a400)) + } binding.payAnnually.let { it.isEnabled = true it.text = getString( @@ -259,6 +265,8 @@ class PurchaseDialog : DialogFragment(), OnPurchasesUpdated { } it.isVisible = !nameYourPrice || sliderValue < 3 } + binding.avgAnnual.isVisible = nameYourPrice && binding.payAnnually.isVisible + binding.avgMonthly.isVisible = nameYourPrice && binding.payMonthly.isVisible currentSubscription?.let { binding.payMonthly.isEnabled = it.isCanceled || !it.isMonthly || monthlyPrice != it.subscriptionPrice diff --git a/app/src/main/res/layout/activity_purchase.xml b/app/src/main/res/layout/activity_purchase.xml index dafa00506..2dca9a133 100644 --- a/app/src/main/res/layout/activity_purchase.xml +++ b/app/src/main/res/layout/activity_purchase.xml @@ -45,24 +45,58 @@ android:indeterminate="true" android:visibility="gone" /> - + android:layout_marginEnd="@dimen/keyline_first"> + + + + + + + + + + + + + diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 03b06719b..5f84c5f47 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -492,6 +492,7 @@ Verze %s Neplatný soubor zálohy Nové úkoly na vrchu + Zaplať kolik chceš Měsíčně Ročně Dovolit serveru plánovat opakující se úkoly diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 181a77aea..1c819c359 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -201,6 +201,7 @@ Lad serveren planlægge gentagne opgaver Årligt Månedligt + Betal, hvad du vil Nye opgaver øverst Ugyldig sikkerhedskopi-fil Version %s diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index cb43046c5..85e2c4ad6 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -476,6 +476,7 @@ Abonnement herabstufen Abonnement hochstufen Abonnement kündigen + Nennen Sie Ihren Preis monatlich jährlich Manuelle Sortierung diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b7b6efcc8..17d6a3ff3 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -476,6 +476,7 @@ Suscripción de degradación Suscripción de actualización Cancelar la suscripción + Escoger tu precio Mensualmente Anualmente Mi orden diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 961897407..b126acc8e 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -475,6 +475,7 @@ Txikiagotu harpidetza Handiagotu harpidetza Ezeztatu harpidetza + Jarri zuk prezioa Hilero Urtero Errorea: %s diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 8c72eaf57..3e0f69348 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -442,6 +442,7 @@ Anna palvelimen ajoittaa toistuvia tehtäviä Vuosittain Kuukausittain + Nimeä hintasi Uudet tehtävät huipulla Epäsopiva varmuuskopiotiedosto Versio %s diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b5bc4fb78..5c5a3f701 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -470,6 +470,7 @@ Diminuer l\'abonnement Augmenter l\'abonnement Annuler l\'abonnement + Donnez votre prix Chaque mois Chaque année Erreur : %s diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index d6b676a85..28b9bd4a0 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -473,6 +473,7 @@ Előfizetés downgrade-je Előfizetés upgrade-je Előfizetés lemondása + Nevezd meg az árat Havi Éves Egyéni sorrend diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 13d0866a0..11d4d84c4 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -519,6 +519,7 @@ Inserisci il nome dell\'etichetta Inserisci titolo Comprimi attività secondarie + Fai tu il prezzo Licenze di terze parti Questa funzione richiede un abbonamento Annulla abbonamento diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 576680cbc..9e74de184 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -505,6 +505,7 @@ שנמוך מינוי שדרוג מינוי ביטול מינוי + מה המחיר שלך חודשי שנתי מיקומים diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index c49a27c89..b56296e1c 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -470,6 +470,7 @@ サブスクリプションのダウングレード サブスクリプションのアップグレード サブスクリプションのキャンセル + 価格の名前 毎月 毎年 \ No newline at end of file diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index d981cfa3a..1588d7409 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -472,6 +472,7 @@ 구독 다운그레이드 구독 업그레이드 구독 취소 + 구독 금액 정하기 매월 매년 순서 직접 정렬 diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index a74704483..dc22d266d 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -475,6 +475,7 @@ Nedgrader abonnement Oppgrader abonnement Avbryt abonnement + Betal det du vil Månedlig Årlig Feil: %s diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 280fd6fa2..09a3d45c2 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -465,6 +465,7 @@ Terugdraaien abonnement Abonnement upgraden Abonnement annuleren + Bepaal je prijs Maandelijks Jaarlijks Later diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index e509ae8c9..1480583e5 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -486,6 +486,7 @@ Obniżyć poziom subskrypcji Podwyższyć poziom subskrypcji Anuluj subskrypcję + Nazwij swoją cenę Miesięczne Rocznie Ręczne diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 6d3a55485..1280b5728 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -523,6 +523,7 @@ Permita que o servidor agende tarefas recorrentes Anualmente Mensalmente + Dê seu valor Novas tarefas ao topo Arquivo de restauro inválido Versão %s diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 80ef06647..7f3297f22 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -599,6 +599,7 @@ Temporareamente mostrar tarefas quando completas Permita que o servidor agende tarefas recorrentes Minha ordem + Dê o seu valor Atualizar assinatura Rebaixar assinatura Não foi possível conectar diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index bac422553..bf4aa56fd 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -482,6 +482,7 @@ Текущая подписка Восстановить подписку Отменить подписку + Назовите свою цену URL Ошибка: %s ", " diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 28746fe67..d73b0fa66 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -470,6 +470,7 @@ Nedgradera prenumeration Uppgradera prenumerationen Avbryt prenumeration + Namnge ditt pris Månadsvis Årligen Min ordning diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index cee86eebe..cf0ae6363 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -274,6 +274,7 @@ தொடர்ச்சியான பணிகளை சேவையாக அட்டவணைப்படுத்தட்டும் ஆண்டு மாதாந்திர + உங்கள் விலைக்கு பெயரிடுங்கள் மேலே புதிய பணிகள் தவறான காப்பு கோப்பு பதிப்பு %s diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 00d48adee..f41324727 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -476,6 +476,7 @@ Aboneliği alçalt Aboneliği yükselt Aboneliği iptal et + Fiyat belirleyin Aylık Yıllık Düzenim diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 260fe7e94..bac2bc35b 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -531,6 +531,7 @@ Згорнути підзавдання Розгорнути підзавдання Дозволити серверу встановлювати регулярні завдання + Назвіть свою ціну Щорічно Щомісячно Ця функція потребує підписки diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 02c93e483..368bc901c 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -465,6 +465,7 @@ 降级订阅 升级订阅 取消订阅 + 您愿意支付多少费用 每月 每年 ", " diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a01883443..382afee1d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -539,6 +539,7 @@ File %1$s contained %2$s.\n\n Version %s Invalid backup file New tasks on top + Name your price More options Monthly Yearly @@ -683,4 +684,6 @@ File %1$s contained %2$s.\n\n Migrating tasks Offline lists Move %s to Tasks.org + Above average + Below average diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 319f16063..f0c10cd66 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -95,7 +95,7 @@ -