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