diff --git a/Habitica/build.gradle b/Habitica/build.gradle index 0377decc8..8401a809f 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -151,7 +151,7 @@ android { multiDexEnabled true resConfigs "en", "bg", "de", "en-rGB", "es", "fr", "hr-rHR", "in", "it", "iw", "ja", "ko", "lt", "nl", "pl", "pt-rBR", "pt-rPT", "ru", "tr", "zh", "zh-rTW" - versionCode 2277 + versionCode 2280 versionName "2.3" } diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 9097f7117..3ac26cedd 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -240,6 +240,8 @@ Are you sure? Only %1$d of your %2$d party members have joined this quest! Quests start automatically when all players have joined or rejected the invitation. 1 month ago %d month ago + 1w remaining + %dw remaining 1d ago %dd ago 1m ago @@ -248,6 +250,8 @@ 1h ago 1 month remaining %d months remaining + 1 week remaining + %d weeks remaining 1d remaining %dd remaining 1m remaining @@ -866,4 +870,5 @@ Gift\nSubscription Want to bestow a shiny haul of Gems to someone else? Habitica will never require you to gift gems to other players. Begging people for gems is a violation of the Community Guidelines and should be reported to admin@habitica.com. + Get more out of Habitica diff --git a/Habitica/res/xml/remote_config_defaults.xml b/Habitica/res/xml/remote_config_defaults.xml index 7fb82f0e6..e2bb4e5f6 100644 --- a/Habitica/res/xml/remote_config_defaults.xml +++ b/Habitica/res/xml/remote_config_defaults.xml @@ -56,5 +56,9 @@ showSubscriptionBanner false + + showSubscriptionSubtitle + false + \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Date-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Date-Extensions.kt index 7e1fd0ef5..6ac3899d0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Date-Extensions.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Date-Extensions.kt @@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.extensions import android.content.res.Resources import com.habitrpg.android.habitica.R import java.util.* +import kotlin.math.round class DateUtils { @@ -27,12 +28,16 @@ fun Long.getAgoString(res: Resources): String { val diffMinutes = diff / (60 * 1000) % 60 val diffHours = diff / (60 * 60 * 1000) % 24 val diffDays = diff / (24 * 60 * 60 * 1000) + val diffWeeks = diffDays / 7 val diffMonths = diffDays / 30 return when { diffMonths != 0L -> if (diffMonths == 1L) { res.getString(R.string.ago_1month) } else res.getString(R.string.ago_months, diffMonths) + diffWeeks != 0L -> if (diffWeeks == 1L) { + res.getString(R.string.ago_1week) + } else res.getString(R.string.ago_weeks, diffWeeks) diffDays != 0L -> if (diffDays == 1L) { res.getString(R.string.ago_1day) } else res.getString(R.string.ago_days, diffDays) @@ -54,12 +59,16 @@ fun Long.getRemainingString(res: Resources): String { val diffMinutes = diff / (60 * 1000) % 60 val diffHours = diff / (60 * 60 * 1000) % 24 val diffDays = diff / (24 * 60 * 60 * 1000) - val diffMonths = diffDays / 30 + val diffWeeks = diffDays / 7f + val diffMonths = diffDays / 30f return when { - diffMonths != 0L -> if (diffMonths == 1L) { + diffMonths != 0f -> if (round(diffMonths) == 1f) { res.getString(R.string.remaining_1month) - } else res.getString(R.string.remaining_months, diffMonths) + } else res.getString(R.string.remaining_months, round(diffMonths)) + diffWeeks != 0f -> if (round(diffWeeks) == 1f) { + res.getString(R.string.remaining_1week) + } else res.getString(R.string.remaining_weeks, round(diffWeeks)) diffDays != 0L -> if (diffDays == 1L) { res.getString(R.string.remaining_1day) } else res.getString(R.string.remaining_days, diffDays) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AppConfigManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AppConfigManager.kt index 4546ce2f3..647016084 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AppConfigManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AppConfigManager.kt @@ -74,4 +74,8 @@ class AppConfigManager { fun showSubscriptionBanner(): Boolean { return remoteConfig.getBoolean("showSubscriptionBanner") } + + fun showSubscriptionSubtitle(): Boolean { + return remoteConfig.getBoolean("showSubscriptionSubtitle") + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt index 2cea1069f..ff53dc242 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt @@ -36,7 +36,10 @@ import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import io.reactivex.disposables.CompositeDisposable import io.reactivex.functions.Consumer import kotlinx.android.synthetic.main.drawer_main.* +import java.util.* +import java.util.concurrent.TimeUnit import javax.inject.Inject +import kotlin.collections.ArrayList /** @@ -235,12 +238,26 @@ class NavigationDrawerFragment : DialogFragment() { val subscriptionItem = getItemWithIdentifier(SIDEBAR_SUBSCRIPTION) if (user.isSubscribed && user.purchased?.plan?.dateTerminated != null) { - context?.let { - subscriptionItem?.additionalInfo = user.purchased?.plan?.dateTerminated?.getRemainingString(it.resources) - subscriptionItem?.additionalInfoTextColor = it.getThemeColor(R.attr.textColorSecondary) + val terminatedCalendar = Calendar.getInstance() + terminatedCalendar.time = user.purchased?.plan?.dateTerminated ?: Date() + val msDiff = Calendar.getInstance().timeInMillis - terminatedCalendar.timeInMillis + val daysDiff = TimeUnit.MILLISECONDS.toDays(msDiff) + if (daysDiff <= 30) { + context?.let { + subscriptionItem?.additionalInfo = user.purchased?.plan?.dateTerminated?.getRemainingString(it.resources) + subscriptionItem?.additionalInfoTextColor = when { + daysDiff <= 2 -> ContextCompat.getColor(it, R.color.red_100) + daysDiff <= 7 -> ContextCompat.getColor(it, R.color.brand_400) + else -> it.getThemeColor(R.attr.textColorSecondary) + } + } } } else { - subscriptionItem?.additionalInfo = null + subscriptionItem?.additionalInfo = if (configManager.showSubscriptionSubtitle()) { + context?.getString(R.string.more_out_of_habitica) + } else { + null + } } val promoItem = getItemWithIdentifier(SIDEBAR_SUBSCRIPTION_PROMO) @@ -251,6 +268,7 @@ class NavigationDrawerFragment : DialogFragment() { getItemWithIdentifier(SIDEBAR_NEWS)?.let { it.showBubble = user.flags?.newStuff ?: false } + } override fun onDestroy() {