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() {