diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 29014507c..eba08a5e5 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -80,6 +80,12 @@ android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize"> + + diff --git a/Habitica/alpha/release/Habitica-alpha-release.aab b/Habitica/alpha/release/Habitica-alpha-release.aab new file mode 100644 index 000000000..5d56877e8 Binary files /dev/null and b/Habitica/alpha/release/Habitica-alpha-release.aab differ diff --git a/Habitica/build.gradle b/Habitica/build.gradle index d3280604b..416838c7d 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -146,7 +146,7 @@ dependencies { android { compileSdkVersion 29 - buildToolsVersion '28.0.3' + buildToolsVersion '29.0.3' testOptions { unitTests { includeAndroidResources = true @@ -162,7 +162,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 2421 + versionCode 2426 versionName "2.6.2" } diff --git a/Habitica/res/drawable-hdpi/adventure_guide_art.png b/Habitica/res/drawable-hdpi/adventure_guide_art.png new file mode 100644 index 000000000..706c3b517 Binary files /dev/null and b/Habitica/res/drawable-hdpi/adventure_guide_art.png differ diff --git a/Habitica/res/drawable-mdpi/adventure_guide_art.png b/Habitica/res/drawable-mdpi/adventure_guide_art.png new file mode 100644 index 000000000..723babddd Binary files /dev/null and b/Habitica/res/drawable-mdpi/adventure_guide_art.png differ diff --git a/Habitica/res/drawable-xhdpi/adventure_guide_art.png b/Habitica/res/drawable-xhdpi/adventure_guide_art.png new file mode 100644 index 000000000..b80cc559c Binary files /dev/null and b/Habitica/res/drawable-xhdpi/adventure_guide_art.png differ diff --git a/Habitica/res/drawable-xxhdpi/adventure_guide_art.png b/Habitica/res/drawable-xxhdpi/adventure_guide_art.png new file mode 100644 index 000000000..49a4e5759 Binary files /dev/null and b/Habitica/res/drawable-xxhdpi/adventure_guide_art.png differ diff --git a/Habitica/res/layout/achievement_list_item.xml b/Habitica/res/layout/achievement_list_item.xml index 4da888628..5fccce502 100644 --- a/Habitica/res/layout/achievement_list_item.xml +++ b/Habitica/res/layout/achievement_list_item.xml @@ -5,8 +5,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" - android:paddingTop="13dp" - android:paddingBottom="13dp"> + android:paddingTop="8dp" + android:paddingBottom="8dp"> diff --git a/Habitica/res/layout/activity_adventure_guide.xml b/Habitica/res/layout/activity_adventure_guide.xml new file mode 100644 index 000000000..e97373aa6 --- /dev/null +++ b/Habitica/res/layout/activity_adventure_guide.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Habitica/res/layout/adventure_guide_item.xml b/Habitica/res/layout/adventure_guide_item.xml new file mode 100644 index 000000000..b5968cef6 --- /dev/null +++ b/Habitica/res/layout/adventure_guide_item.xml @@ -0,0 +1,38 @@ + + + + + + + + \ No newline at end of file diff --git a/Habitica/res/layout/dialog_achievement_detail.xml b/Habitica/res/layout/dialog_achievement_detail.xml index 0da174650..111b05840 100644 --- a/Habitica/res/layout/dialog_achievement_detail.xml +++ b/Habitica/res/layout/dialog_achievement_detail.xml @@ -18,8 +18,8 @@ android:layout_width="48dp" android:layout_height="52dp" android:scaleType="center" - android:layout_marginStart="@dimen/spacing_large" - android:layout_marginEnd="@dimen/spacing_large" /> + android:layout_marginStart="20dp" + android:layout_marginEnd="20dp" /> \ No newline at end of file diff --git a/Habitica/res/layout/dialog_first_drop.xml b/Habitica/res/layout/dialog_first_drop.xml new file mode 100644 index 000000000..f4b3e3c50 --- /dev/null +++ b/Habitica/res/layout/dialog_first_drop.xml @@ -0,0 +1,45 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Habitica/res/navigation/navigation.xml b/Habitica/res/navigation/navigation.xml index 3235fa47d..fb9c67c04 100644 --- a/Habitica/res/navigation/navigation.xml +++ b/Habitica/res/navigation/navigation.xml @@ -429,4 +429,8 @@ android:id="@+id/bugFixFragment" android:name="com.habitrpg.android.habitica.ui.fragments.support.BugFixFragment" android:label="@string/bugs_fixes" /> + \ No newline at end of file diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index b8575fe21..96dbb8568 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -1017,5 +1017,37 @@ Task list display Onboarding Tasks Complete to earn 100 Gold! - Delete... + Delete… + Getting Started + Complete these onboarding tasks and you’ll earn 5 Achievements and 100 Gold once you’re done! + Your Progress + Let\'s get started + %d%% Complete + Create a Task + Complete a Task + Hatch a Pet + Feed a Pet + Purchase Equipment + Add a task for something you would like to accomplish this week + Check off any of your tasks to earn rewards + Head over to your Items and try combining a Hatching Potion and Egg + There are many different types of food, but pets can be picky + Equipment is a way to customize your avatar and improve your stats + Created your first task + Completed a task + Hatched a Pet + Fed a Pet + Purchased Equipment + You created your first task + You completed a task for the first time + You hatched your first pet + You fed your first piece of food to a pet + You purchased your first piece of equipment for your avatar + Completing tasks gives you a chance to find eggs, hatching potions, and pet food. + Head to your Items and try combining your new Egg and Hatching Potion! + Go to Items + You found new items! + You earned 5 Achievements and 100 Gold for your efforts. + If you want even more, check out Achievements and start collecting! + You completed your OnboardingTasks! diff --git a/Habitica/res/values/styles.habitica.xml b/Habitica/res/values/styles.habitica.xml index eeded5105..fb10e8692 100644 --- a/Habitica/res/values/styles.habitica.xml +++ b/Habitica/res/values/styles.habitica.xml @@ -90,7 +90,7 @@ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.java index 92774ceee..91b6cab22 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.java @@ -13,6 +13,7 @@ import com.habitrpg.android.habitica.receivers.NotificationPublisher; import com.habitrpg.android.habitica.receivers.TaskAlarmBootReceiver; import com.habitrpg.android.habitica.receivers.TaskReceiver; import com.habitrpg.android.habitica.ui.activities.AboutActivity; +import com.habitrpg.android.habitica.ui.activities.AdventureGuideActivity; import com.habitrpg.android.habitica.ui.activities.ChallengeFormActivity; import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity; import com.habitrpg.android.habitica.ui.activities.FixCharacterValuesActivity; @@ -340,4 +341,6 @@ public interface UserComponent { void inject(@NotNull AvatarEquipmentFragment avatarEquipmentFragment); void inject(@NotNull FAQDetailFragment faqDetailFragment); + + void inject(@NotNull AdventureGuideActivity adventureGuideFragment); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShowFirstDropDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShowFirstDropDialog.kt new file mode 100644 index 000000000..7f2accb6e --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShowFirstDropDialog.kt @@ -0,0 +1,3 @@ +package com.habitrpg.android.habitica.events + +class ShowFirstDropDialog(val egg: String, val hatchingPotion: String, val id: String) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt index 337e8ebad..654d16e04 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt @@ -5,8 +5,11 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.ApiClient import com.habitrpg.android.habitica.events.ShowAchievementDialog import com.habitrpg.android.habitica.events.ShowCheckinDialog +import com.habitrpg.android.habitica.events.ShowFirstDropDialog import com.habitrpg.android.habitica.events.ShowSnackbarEvent import com.habitrpg.android.habitica.models.Notification +import com.habitrpg.android.habitica.models.notifications.AchievementData +import com.habitrpg.android.habitica.models.notifications.FirstDropData import com.habitrpg.android.habitica.models.notifications.LoginIncentiveData import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import io.reactivex.BackpressureStrategy @@ -49,7 +52,7 @@ class NotificationsManager (private val context: Context) { this.apiClient = apiClient } - fun handlePopupNotifications(notifications: List): Boolean? { + private fun handlePopupNotifications(notifications: List): Boolean? { val now = Date() if (now.time - (lastNotificationHandling?.time ?: 0) < 500) { return true @@ -68,6 +71,9 @@ class NotificationsManager (private val context: Context) { Notification.Type.ACHIEVEMENT_GUILD_JOINED.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_CHALLENGE_JOINED.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_INVITED_FRIEND.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_GENERIC.type -> displayGenericAchievementNotification(it) + Notification.Type.ACHIEVEMENT_ONBOARDING_COMPLETE.type -> displayAchievementNotification(it) + Notification.Type.FIRST_DROP.type -> displayFirstDropNotification(it) else -> false } @@ -80,7 +86,13 @@ class NotificationsManager (private val context: Context) { return true } - fun displayLoginIncentiveNotification(notification: Notification): Boolean? { + private fun displayFirstDropNotification(notification: Notification): Boolean { + val data = (notification.data as? FirstDropData) + EventBus.getDefault().post(ShowFirstDropDialog(data?.egg ?: "", data?.hatchingPotion ?: "", notification.id)) + return true + } + + private fun displayLoginIncentiveNotification(notification: Notification): Boolean? { val notificationData = notification.data as? LoginIncentiveData val nextUnlockText = context.getString(R.string.nextPrizeUnlocks, notificationData?.nextRewardAt) if (notificationData?.rewardKey != null) { @@ -104,4 +116,9 @@ class NotificationsManager (private val context: Context) { EventBus.getDefault().post(ShowAchievementDialog(notification.type ?: "", notification.id)) return true } + + private fun displayGenericAchievementNotification(notification: Notification): Boolean { + EventBus.getDefault().post(ShowAchievementDialog((notification.data as? AchievementData)?.achievement ?: "", notification.id)) + return true + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/Notification.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/Notification.kt index b4c16138f..95c75dc70 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/Notification.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/Notification.kt @@ -23,6 +23,10 @@ class Notification { ACHIEVEMENT_GUILD_JOINED("GUILD_JOINED_ACHIEVEMENT"), ACHIEVEMENT_CHALLENGE_JOINED("CHALLENGE_JOINED_ACHIEVEMENT"), ACHIEVEMENT_INVITED_FRIEND("INVITED_FRIEND_ACHIEVEMENT"), + ACHIEVEMENT_GENERIC("ACHIEVEMENT"), + ACHIEVEMENT_ONBOARDING_COMPLETE("ONBOARDING_COMPLETE"), + + FIRST_DROP("FIRST_DROPS"), // Custom notification types (created by this app) GUILD_INVITATION("GUILD_INVITATION"), @@ -49,6 +53,8 @@ class Notification { Type.GUILD_INVITATION.type -> GuildInvitationData::class.java Type.PARTY_INVITATION.type -> PartyInvitationData::class.java Type.QUEST_INVITATION.type -> QuestInvitationData::class.java + Type.FIRST_DROP.type -> FirstDropData::class.java + Type.ACHIEVEMENT_GENERIC.type -> AchievementData::class.java else -> null } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/notifications/AchievementData.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/notifications/AchievementData.kt new file mode 100644 index 000000000..17f66cceb --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/notifications/AchievementData.kt @@ -0,0 +1,7 @@ +package com.habitrpg.android.habitica.models.notifications + +open class AchievementData : NotificationData { + + var achievement: String? = null + +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/notifications/FirstDropData.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/notifications/FirstDropData.kt new file mode 100644 index 000000000..a9104de60 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/notifications/FirstDropData.kt @@ -0,0 +1,8 @@ +package com.habitrpg.android.habitica.models.notifications + +open class FirstDropData : NotificationData { + + var egg: String? = null + var hatchingPotion: String? = null + +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt new file mode 100644 index 000000000..6d7de1dcd --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt @@ -0,0 +1,104 @@ +package com.habitrpg.android.habitica.ui.activities + +import android.graphics.Paint +import android.os.Bundle +import android.view.View +import androidx.core.content.ContextCompat +import com.habitrpg.android.habitica.R +import com.habitrpg.android.habitica.components.UserComponent +import com.habitrpg.android.habitica.data.UserRepository +import com.habitrpg.android.habitica.databinding.ActivityAdventureGuideBinding +import com.habitrpg.android.habitica.databinding.AdventureGuideItemBinding +import com.habitrpg.android.habitica.helpers.RxErrorHandler +import com.habitrpg.android.habitica.models.user.User +import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils +import io.reactivex.functions.Consumer +import javax.inject.Inject + +class AdventureGuideActivity : BaseActivity() { + private lateinit var binding: ActivityAdventureGuideBinding + + + private lateinit var achievementTitles: Map + private lateinit var achievementDescriptions: Map + + @Inject + internal lateinit var userRepository: UserRepository + + override fun getLayoutResId(): Int { + return R.layout.activity_main + } + + override fun getContentView(): View { + binding = ActivityAdventureGuideBinding.inflate(layoutInflater) + return binding.root + } + + override fun injectActivity(component: UserComponent?) { + component?.inject(this) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + setupToolbar(binding.toolbar) + + achievementTitles = mapOf( + Pair("createdTask", getString(R.string.create_task_title)), + Pair("completedTask", getString(R.string.complete_task_title)), + Pair("hatchedPet", getString(R.string.hatch_pet_title)), + Pair("fedPet", getString(R.string.feedPet_title)), + Pair("purchasedEquipment", getString(R.string.purchase_equipment_title)) + ) + achievementDescriptions = mapOf( + Pair("createdTask", getString(R.string.create_task_description)), + Pair("completedTask", getString(R.string.complete_task_description)), + Pair("hatchedPet", getString(R.string.hatch_pet_description)), + Pair("fedPet", getString(R.string.feedPet_description)), + Pair("purchasedEquipment", getString(R.string.purchase_equipment_description)) + ) + } + + override fun onStart() { + super.onStart() + compositeSubscription.add(userRepository.getUser().subscribe(Consumer { + updateUser(it) + }, RxErrorHandler.handleEmptyError())) + } + + private fun updateUser(user: User) { + val achievements = user.onboardingAchievements + val completed = achievements.count { it.earned } + binding.progressBar.max = achievements.size + binding.progressBar.progress = completed + + if (completed > 0) { + binding.progressTextview.text = getString(R.string.percent_completed, ((completed / achievements.size.toFloat()) * 100).toInt()) + binding.progressTextview.setTextColor(ContextCompat.getColor(this, R.color.yellow_10)) + } + + binding.achievementContainer.removeAllViews() + for (achievement in achievements) { + val itemBinding = AdventureGuideItemBinding.inflate(layoutInflater, binding.achievementContainer, true) + itemBinding.titleView.text = achievementTitles[achievement.key] + itemBinding.descriptionView.text = achievementDescriptions[achievement.key] + + val iconName = if (achievement.earned) { + "achievement-" + achievement.key + "2x" + } else { + "achievement-unearned2x" + } + DataBindingUtils.loadImage(itemBinding.iconView, iconName) + if (achievement.earned) { + itemBinding.titleView.paintFlags = itemBinding.titleView.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG + itemBinding.titleView.setTextColor(ContextCompat.getColor(this, R.color.gray_200)) + itemBinding.descriptionView.setTextColor(ContextCompat.getColor(this, R.color.gray_200)) + } else { + itemBinding.titleView.setTextColor(ContextCompat.getColor(this, R.color.gray_50)) + itemBinding.descriptionView.setTextColor(ContextCompat.getColor(this, R.color.gray_50)) + itemBinding.iconView.alpha = 0.5f + } + } + } + +} \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt index 646512896..d222ea20f 100755 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt @@ -62,6 +62,7 @@ import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType import com.habitrpg.android.habitica.ui.views.ValueBar import com.habitrpg.android.habitica.ui.views.dialogs.AchievementDialog +import com.habitrpg.android.habitica.ui.views.dialogs.FirstDropDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.QuestCompletedDialog import com.habitrpg.android.habitica.ui.views.yesterdailies.YesterdailyDialog @@ -166,6 +167,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { } setupToolbar(binding.toolbar) + drawerIcon = AdventureGuideDrawerArrowDrawable(supportActionBar?.themedContext) avatarInHeader = AvatarWithBarsViewModel(this, binding.avatarWithBars, userRepository) sideAvatarView = AvatarView(this, showBackground = true, showMount = false, showPet = false) @@ -195,7 +197,6 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { R.string.navigation_drawer_open, /* "open drawer" description */ R.string.navigation_drawer_close /* "close drawer" description */ ) {} - drawerIcon = AdventureGuideDrawerArrowDrawable(supportActionBar?.themedContext) drawerToggle?.drawerArrowDrawable = drawerIcon // Set the drawer toggle as the DrawerListener drawerToggle?.let { drawerLayout.addDrawerListener(it) } @@ -700,6 +701,19 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { }, RxErrorHandler.handleEmptyError())) } + @Subscribe + fun showFirstDropDialog(event: ShowFirstDropDialog) { + compositeSubscription.add(Completable.complete() + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(Action { + val dialog = FirstDropDialog(this) + dialog.configure(event.egg, event.hatchingPotion) + dialog.enqueue() + apiClient.readNotification(event.id) + .subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) + }, RxErrorHandler.handleEmptyError())) + } + override fun onEvent(event: ShowConnectionProblemEvent) { if (event.title != null) { super.onEvent(event) 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 2c399b61e..9bd59abe8 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 @@ -81,6 +81,8 @@ class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int): Recycle (holder as? SectionHeaderViewHolder)?.bind(drawerItem) } else if (getItemViewType(position) == 4) { drawerItem.user?.let { (holder.itemView as? AdventureGuideMenuBanner)?.updateData(it) } + holder.itemView.setOnClickListener { itemSelectedEvents.onNext(drawerItem) } + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt index c66eb044f..c104e5e6c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt @@ -1,12 +1,15 @@ package com.habitrpg.android.habitica.ui.fragments import android.content.Context +import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.content.ContextCompat import com.google.android.material.appbar.AppBarLayout import com.google.android.material.tabs.TabLayout +import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.ApiClient import com.habitrpg.android.habitica.data.UserRepository import com.habitrpg.android.habitica.helpers.RxErrorHandler 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 bbd7736f4..751dbdfdc 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 @@ -299,7 +299,7 @@ class NavigationDrawerFragment : DialogFragment() { private fun initializeMenuItems() { val items = ArrayList() context?.let {context -> - val adventureItem = HabiticaDrawerItem(R.id.tasksFragment, SIDEBAR_ADVENTURE_GUIDE) + val adventureItem = HabiticaDrawerItem(R.id.adventureGuideActivity, SIDEBAR_ADVENTURE_GUIDE) adventureItem.itemViewType = 4 items.add(adventureItem) items.add(HabiticaDrawerItem(R.id.tasksFragment, SIDEBAR_TASKS, context.getString(R.string.sidebar_tasks))) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/AchievementDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/AchievementDialog.kt index e38193d9c..bac0a789c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/AchievementDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/AchievementDialog.kt @@ -1,6 +1,7 @@ package com.habitrpg.android.habitica.ui.views.dialogs import android.content.Context +import android.util.TypedValue import android.view.LayoutInflater import android.view.View import android.widget.TextView @@ -36,6 +37,12 @@ class AchievementDialog(context: Context) : HabiticaAlertDialog(context) { Notification.Type.ACHIEVEMENT_GUILD_JOINED.type -> configure(R.string.joinedGuildTitle, R.string.joinedGuildDescription, "guild") Notification.Type.ACHIEVEMENT_CHALLENGE_JOINED.type -> configure(R.string.joinedChallengeTitle, R.string.joinedChallengeDescription, "challenge") Notification.Type.ACHIEVEMENT_INVITED_FRIEND.type -> configure(R.string.inviteFriendTitle, R.string.inviteFriendDescription, "friends") + "createdTask" -> configure(R.string.createdTaskTitle, R.string.createdTaskDescription, type) + "completedTask" -> configure(R.string.completedTaskTitle, R.string.completedTaskDescription, type) + "hatchedPet" -> configure(R.string.hatchedPetTitle, R.string.hatchedPetDescription, type) + "fedPet" -> configure(R.string.fedPetTitle, R.string.fedPetDescription, type) + "purchasedEquipment" -> configure(R.string.purchasedEquipmentTitle, R.string.purchasedEquipmentDescription, type) + Notification.Type.ACHIEVEMENT_ONBOARDING_COMPLETE.type -> configure(R.string.onboardingCompleteTitle, R.string.onboardingCompleteDescription, "onboardingComplete") } } @@ -43,10 +50,15 @@ class AchievementDialog(context: Context) : HabiticaAlertDialog(context) { titleView?.text = context.getString(titleID) descriptionView?.text = context.getString(descriptionID) DataBindingUtils.loadImage(iconView, "achievement-${iconName}2x") - setTitle(R.string.achievement_title) - addButton(R.string.onwards, true) - addButton(R.string.view_achievements, isPrimary = false, isDestructive = false) { _, _ -> + if (iconName == "onboardingComplete") { + setTitle(R.string.onboardingComplete_achievement_title) + titleView?.setTextSize(TypedValue.COMPLEX_UNIT_SP,14f) + } else { + setTitle(R.string.achievement_title) + } + addButton(R.string.view_achievements, isPrimary = true, isDestructive = false) { _, _ -> MainNavigationController.navigate(R.id.achievementsFragment) } + addButton(R.string.close, false) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/FirstDropDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/FirstDropDialog.kt new file mode 100644 index 000000000..0e4989234 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/FirstDropDialog.kt @@ -0,0 +1,35 @@ +package com.habitrpg.android.habitica.ui.views.dialogs + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.widget.TextView +import com.facebook.drawee.view.SimpleDraweeView +import com.habitrpg.android.habitica.R +import com.habitrpg.android.habitica.helpers.MainNavigationController +import com.habitrpg.android.habitica.models.Notification +import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils + +class FirstDropDialog(context: Context) : HabiticaAlertDialog(context) { + + private var eggView: SimpleDraweeView? + private var hatchingPotionView: SimpleDraweeView? + + init { + val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as? LayoutInflater + val view = inflater?.inflate(R.layout.dialog_first_drop, null) + eggView = view?.findViewById(R.id.egg_view) + hatchingPotionView = view?.findViewById(R.id.hatchingPotion_view) + setAdditionalContentView(view) + addButton(R.string.go_to_items, isPrimary = true, isDestructive = false) { _, _ -> + MainNavigationController.navigate(R.id.itemsFragment) + } + addButton(R.string.close, false) + setTitle(R.string.first_drop_title) + } + + fun configure(egg: String, hatchingPotion: String) { + DataBindingUtils.loadImage(eggView, "Pet_Egg_$egg") + DataBindingUtils.loadImage(hatchingPotionView, "Pet_HatchingPotion_$hatchingPotion") + } +} diff --git a/build.gradle b/build.gradle index 413fdc82e..d984e1639 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.61' + ext.kotlin_version = '1.3.72' ext.build_tools_version = '29.0.0' ext.sdk_version = 28