diff --git a/Habitica/res/layout/subscription_details.xml b/Habitica/res/layout/subscription_details.xml index b3f3dc081..4e6dfa7ad 100644 --- a/Habitica/res/layout/subscription_details.xml +++ b/Habitica/res/layout/subscription_details.xml @@ -259,6 +259,7 @@ android:gravity="center" android:paddingStart="30dp" android:paddingEnd="30dp" + android:visibility="gone" android:text="@string/subscribers_mythic_hourglasses" /> See More You purchased the Jubilant Gryphatrice! You gifted the Jubilant Gryphatrice! + Open Settings You diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ContentRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ContentRepository.kt index 141c5cacc..fc6899a84 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ContentRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ContentRepository.kt @@ -7,6 +7,6 @@ import kotlinx.coroutines.flow.Flow interface ContentRepository: BaseRepository { suspend fun retrieveContent(forced: Boolean = false): ContentResult? - suspend fun retrieveWorldState(): WorldState? + suspend fun retrieveWorldState(forced: Boolean = false): WorldState? fun getWorldState(): Flow } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ContentRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ContentRepositoryImpl.kt index ba6ed961b..0800867f1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ContentRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ContentRepositoryImpl.kt @@ -36,9 +36,9 @@ class ContentRepositoryImpl( return null } - override suspend fun retrieveWorldState(): WorldState? { + override suspend fun retrieveWorldState(forced: Boolean): WorldState? { val now = Date().time - if (now - this.lastWorldStateSync > 3600000) { + if (forced || now - this.lastWorldStateSync > 3600000) { val state = apiClient.getWorldState() ?: return null lastWorldStateSync = now localRepository.save(state) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BirthdayActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BirthdayActivity.kt index b6a6b6b9f..d6c028796 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BirthdayActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BirthdayActivity.kt @@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.ui.activities import android.app.Activity import android.os.Bundle -import android.text.format.DateFormat import androidx.activity.compose.setContent import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -62,6 +61,7 @@ import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.android.habitica.ui.views.CurrencyText import com.habitrpg.common.habitica.extensions.DataBindingUtils import kotlinx.coroutines.flow.map +import java.text.SimpleDateFormat import java.util.Date import javax.inject.Inject @@ -154,7 +154,7 @@ fun BirthdayTitle(text: String) { @Composable fun BirthdayActivityView(hasGryphatrice: Boolean, price: String, startDate: Date, endDate: Date, onPurchaseClick: () -> Unit, onGemPurchaseClick: () -> Unit, onEquipClick: () -> Unit) { val activity = LocalContext.current as? Activity - val dateFormat = DateFormat.getDateFormat(activity) + val dateFormat = SimpleDateFormat("MMM dd", java.util.Locale.getDefault()) val textColor = Color.White val specialTextColor = colorResource(R.color.yellow_50) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt index 0946bf7fe..4b6ccca79 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt @@ -9,7 +9,9 @@ import android.graphics.drawable.ColorDrawable import android.os.Build import android.os.Bundle import android.os.Handler +import android.text.SpannableString import android.text.method.LinkMovementMethod +import android.text.style.ForegroundColorSpan import android.view.Menu import android.view.MenuItem import android.view.MotionEvent diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt index 98191e6f9..b08bc874b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt @@ -189,7 +189,7 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter item?.let { selectedItem -> if (!(selectedItem is QuestContent || selectedItem is SpecialItem || ownedItem?.itemType == "special") && index == 0) { - ownedItem?.let { selectedOwnedItem -> sellItemEvents.onNext(selectedOwnedItem) } + ownedItem?.let { selectedOwnedItem -> onSellItem?.invoke(selectedOwnedItem) } return@let } when (selectedItem) { 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 23eeb4856..77211baf3 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 @@ -140,15 +140,15 @@ class NavigationDrawerFragment : DialogFragment() { false initializeMenuItems() - adapter.itemSelectedEvents = { - setSelection(it.transitionId, it.bundle, true) - } - adapter.promoClosedSubject = { - sharedPreferences.edit { - putBoolean("hide$it", true) - } - updatePromo() + adapter.itemSelectedEvents = { + setSelection(it.transitionId, it.bundle, true) + } + adapter.promoClosedSubject = { + sharedPreferences.edit { + putBoolean("hide$it", true) } + updatePromo() + } lifecycleScope.launchCatching { contentRepository.getWorldState() @@ -167,6 +167,21 @@ class NavigationDrawerFragment : DialogFragment() { }) { updateSeasonalMenuEntries(gearEvent, pair.second) } + + val event = pair.first.events.firstOrNull { it.eventKey == "birthday10" } + val item = getItemWithIdentifier(SIDEBAR_BIRTHDAY) + if (event != null && item == null) { + adapter.currentEvent = event + val birthdayItem = HabiticaDrawerItem(R.id.birthdayActivity, SIDEBAR_BIRTHDAY) + birthdayItem.itemViewType = 6 + val newItems = mutableListOf() + newItems.addAll(adapter.items) + newItems.add(0, birthdayItem) + adapter.updateItems(newItems) + } else if (event == null && item != null) { + item.isVisible = false + adapter.updateItem(item) + } } } @@ -551,12 +566,6 @@ class NavigationDrawerFragment : DialogFragment() { item.itemViewType = 2 items.add(item) } - - configManager.getBirthdayEvent()?.let { - val birthdayItem = HabiticaDrawerItem(R.id.birthdayActivity, SIDEBAR_BIRTHDAY) - birthdayItem.itemViewType = 6 - items.add(0, birthdayItem) - } adapter.updateItems(items) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogQuestContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogQuestContent.kt index a9b5fd55d..d1a6c9a8c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogQuestContent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogQuestContent.kt @@ -9,7 +9,6 @@ import android.widget.ImageView import android.widget.TextView import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.DialogPurchaseContentQuestBinding -import com.habitrpg.android.habitica.extensions.fromHtml import com.habitrpg.android.habitica.models.inventory.QuestContent import com.habitrpg.android.habitica.models.inventory.QuestDropItem import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper @@ -26,7 +25,6 @@ class PurchaseDialogQuestContent(context: Context) : PurchaseDialogContent(conte override fun setQuestContentItem(questContent: QuestContent) { super.setQuestContentItem(questContent) - binding.notesTextView.setText(questContent.notes.fromHtml(), TextView.BufferType.SPANNABLE) binding.rageMeterView.visibility = View.GONE if (questContent.isBossQuest) { binding.questTypeTextView.setText(R.string.boss_quest) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt index daf2fb7fd..62e5b89ec 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt @@ -50,14 +50,19 @@ class SubscriptionDetailsView : LinearLayout { var duration: String? = null if (plan.planId != null && plan.dateTerminated == null) { - if (plan.planId == SubscriptionPlan.PLANID_BASIC || plan.planId == SubscriptionPlan.PLANID_BASICEARNED) { - duration = resources.getString(R.string.month) - } else if (plan.planId == SubscriptionPlan.PLANID_BASIC3MONTH) { - duration = resources.getString(R.string.three_months) - } else if (plan.planId == SubscriptionPlan.PLANID_BASIC6MONTH || plan.planId == SubscriptionPlan.PLANID_GOOGLE6MONTH) { - duration = resources.getString(R.string.six_months) - } else if (plan.planId == SubscriptionPlan.PLANID_BASIC12MONTH) { - duration = resources.getString(R.string.twelve_months) + when (plan.planId) { + SubscriptionPlan.PLANID_BASIC, SubscriptionPlan.PLANID_BASICEARNED -> { + duration = resources.getString(R.string.month) + } + SubscriptionPlan.PLANID_BASIC3MONTH -> { + duration = resources.getString(R.string.three_months) + } + SubscriptionPlan.PLANID_BASIC6MONTH, SubscriptionPlan.PLANID_GOOGLE6MONTH -> { + duration = resources.getString(R.string.six_months) + } + SubscriptionPlan.PLANID_BASIC12MONTH -> { + duration = resources.getString(R.string.twelve_months) + } } } diff --git a/version.properties b/version.properties index e00baeddc..19dae3716 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ NAME=4.1 -CODE=4971 \ No newline at end of file +CODE=4981 \ No newline at end of file