diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 5db927fbf..9097f7117 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -238,12 +238,22 @@ Equipped Are you sure you want to cancel this quest? All invitation acceptances will be lost. The quest owner will retain possession of the quest scroll. 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 1d ago %dd ago 1m ago %dm ago %dh ago 1h ago + 1 month remaining + %d months remaining + 1d remaining + %dd remaining + 1m remaining + %dm remaining + %dh remaining + 1h remaining Today Items Eggs 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 63f4f4cad..7e1fd0ef5 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 @@ -27,8 +27,12 @@ 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 diffMonths = diffDays / 30 return when { + diffMonths != 0L -> if (diffMonths == 1L) { + res.getString(R.string.ago_1month) + } else res.getString(R.string.ago_months, diffMonths) diffDays != 0L -> if (diffDays == 1L) { res.getString(R.string.ago_1day) } else res.getString(R.string.ago_days, diffDays) @@ -38,4 +42,31 @@ fun Long.getAgoString(res: Resources): String { diffMinutes == 1L -> res.getString(R.string.ago_1Minute) else -> res.getString(R.string.ago_minutes, diffMinutes) } +} + +fun Date.getRemainingString(res: Resources): String { + return this.time.getRemainingString(res) +} + +fun Long.getRemainingString(res: Resources): String { + val diff = this - Date().time + + val diffMinutes = diff / (60 * 1000) % 60 + val diffHours = diff / (60 * 60 * 1000) % 24 + val diffDays = diff / (24 * 60 * 60 * 1000) + val diffMonths = diffDays / 30 + + return when { + diffMonths != 0L -> if (diffMonths == 1L) { + res.getString(R.string.remaining_1month) + } else res.getString(R.string.remaining_months, diffMonths) + diffDays != 0L -> if (diffDays == 1L) { + res.getString(R.string.remaining_1day) + } else res.getString(R.string.remaining_days, diffDays) + diffHours != 0L -> if (diffHours == 1L) { + res.getString(R.string.remaining_1hour) + } else res.getString(R.string.remaining_hours, diffHours) + diffMinutes == 1L -> res.getString(R.string.remaining_1Minute) + else -> res.getString(R.string.remaining_minutes, diffMinutes) + } } \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/NavigationDrawerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/NavigationDrawerAdapter.kt index 539cb5335..943069c8e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/NavigationDrawerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/NavigationDrawerAdapter.kt @@ -158,7 +158,7 @@ class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int): Recycle if (additionalInfoView != null) { additionalInfoView.text = drawerItem.additionalInfo additionalInfoView.visibility = View.VISIBLE - additionalInfoView.setTextColor(tintColor) + additionalInfoView.setTextColor(drawerItem.additionalInfoTextColor ?: tintColor) } } } 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 98f94f812..2cea1069f 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 @@ -16,6 +16,7 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.InventoryRepository import com.habitrpg.android.habitica.data.SocialRepository import com.habitrpg.android.habitica.data.UserRepository +import com.habitrpg.android.habitica.extensions.getRemainingString import com.habitrpg.android.habitica.extensions.getThemeColor import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler import com.habitrpg.android.habitica.helpers.AppConfigManager @@ -232,6 +233,16 @@ class NavigationDrawerFragment : DialogFragment() { updateItem(statsItem) } + 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) + } + } else { + subscriptionItem?.additionalInfo = null + } + val promoItem = getItemWithIdentifier(SIDEBAR_SUBSCRIPTION_PROMO) if (promoItem != null) { promoItem.isVisible = !user.isSubscribed @@ -268,8 +279,8 @@ class NavigationDrawerFragment : DialogFragment() { items.add(HabiticaDrawerItem(R.id.equipmentOverviewFragment, SIDEBAR_EQUIPMENT, context.getString(R.string.sidebar_equipment))) items.add(HabiticaDrawerItem(R.id.itemsFragment, SIDEBAR_ITEMS, context.getString(R.string.sidebar_items))) items.add(HabiticaDrawerItem(R.id.stableFragment, SIDEBAR_STABLE, context.getString(R.string.sidebar_stable))) - items.add(HabiticaDrawerItem(R.id.subscriptionPurchaseActivity, SIDEBAR_SUBSCRIPTION, context.getString(R.string.sidebar_subscription))) items.add(HabiticaDrawerItem(R.id.gemPurchaseActivity, SIDEBAR_GEMS, context.getString(R.string.sidebar_gems))) + items.add(HabiticaDrawerItem(R.id.subscriptionPurchaseActivity, SIDEBAR_SUBSCRIPTION, context.getString(R.string.sidebar_subscription), isHeader = false, additionalInfoAsPill = false)) items.add(HabiticaDrawerItem(0, SIDEBAR_ABOUT_HEADER, context.getString(R.string.sidebar_about), true)) items.add(HabiticaDrawerItem(R.id.newsFragment, SIDEBAR_NEWS, context.getString(R.string.sidebar_news))) items.add(HabiticaDrawerItem(R.id.FAQOverviewFragment, SIDEBAR_HELP, context.getString(R.string.sidebar_help))) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/HabiticaDrawerItem.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/HabiticaDrawerItem.kt index 1c1b4779f..237fffd9c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/HabiticaDrawerItem.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/HabiticaDrawerItem.kt @@ -1,10 +1,13 @@ package com.habitrpg.android.habitica.ui.menu +import android.graphics.Color + data class HabiticaDrawerItem(val transitionId: Int, val identifier: String, val text: String, val isHeader: Boolean = false, var additionalInfoAsPill: Boolean = true) { constructor(transitionId: Int, identifier: String) : this(transitionId, identifier, "") var isPromo: Boolean = false var additionalInfo: String? = null + var additionalInfoTextColor: Int? = null var showBubble: Boolean = false var isVisible: Boolean = true var isEnabled: Boolean = true