diff --git a/Habitica/res/drawable-hdpi/onboarding_done_art.png b/Habitica/res/drawable-hdpi/onboarding_done_art.png new file mode 100644 index 000000000..548d9f526 Binary files /dev/null and b/Habitica/res/drawable-hdpi/onboarding_done_art.png differ diff --git a/Habitica/res/drawable-mdpi/onboarding_done_art.png b/Habitica/res/drawable-mdpi/onboarding_done_art.png new file mode 100644 index 000000000..cdf546563 Binary files /dev/null and b/Habitica/res/drawable-mdpi/onboarding_done_art.png differ diff --git a/Habitica/res/drawable-xhdpi/onboarding_done_art.png b/Habitica/res/drawable-xhdpi/onboarding_done_art.png new file mode 100644 index 000000000..3451bd631 Binary files /dev/null and b/Habitica/res/drawable-xhdpi/onboarding_done_art.png differ diff --git a/Habitica/res/drawable-xxhdpi/onboarding_done_art.png b/Habitica/res/drawable-xxhdpi/onboarding_done_art.png new file mode 100644 index 000000000..3d8dc9e0c Binary files /dev/null and b/Habitica/res/drawable-xxhdpi/onboarding_done_art.png differ diff --git a/Habitica/res/layout/achievement_list_item.xml b/Habitica/res/layout/achievement_list_item.xml index 3ed5e96ea..b9e9a0fe5 100644 --- a/Habitica/res/layout/achievement_list_item.xml +++ b/Habitica/res/layout/achievement_list_item.xml @@ -5,9 +5,7 @@ android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" - android:gravity="center_vertical" - android:paddingTop="8dp" - android:paddingBottom="8dp"> + android:gravity="center_vertical"> diff --git a/Habitica/res/layout/activity_adventure_guide.xml b/Habitica/res/layout/activity_adventure_guide.xml index 75db74e85..7674b7f6c 100644 --- a/Habitica/res/layout/activity_adventure_guide.xml +++ b/Habitica/res/layout/activity_adventure_guide.xml @@ -47,6 +47,7 @@ android:layout_marginEnd="30dp" android:layout_marginBottom="@dimen/spacing_medium"/> diff --git a/Habitica/res/layout/dialog_achievement_detail.xml b/Habitica/res/layout/dialog_achievement_detail.xml index c7ebc2223..e72e6a9e9 100644 --- a/Habitica/res/layout/dialog_achievement_detail.xml +++ b/Habitica/res/layout/dialog_achievement_detail.xml @@ -6,6 +6,7 @@ android:layout_height="wrap_content" android:gravity="center_horizontal"> + - - - + + + + android:background="@drawable/layout_rounded_bg_gray_700"> + + %1$d/%2$d Task list display Onboarding Tasks - Complete to earn 100 Gold! + 100 Gold!]]> Delete… Getting Started - Complete these onboarding tasks and you’ll earn 5 Achievements and 100 Gold once you’re done! + 5 Achievements and 100 Gold once you’re done!]]> Your Progress Let\'s get started %d%% Complete diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt index 165e52073..c0c320941 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt @@ -48,6 +48,7 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli @Suppress("ReturnCount") override fun retrieveUser(withTasks: Boolean, forced: Boolean): Flowable { + // Only retrieve again after 3 minutes or it's forced. if (forced || this.lastSync == null || Date().time - (this.lastSync?.time ?: 0) > 180000) { lastSync = Date() return apiClient.retrieveUser(withTasks) 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 index 8d1aeda1e..df1bef019 100644 --- 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 @@ -1,9 +1,12 @@ package com.habitrpg.android.habitica.ui.activities import android.graphics.Paint +import android.os.Build import android.os.Bundle +import android.text.Html import android.view.MenuItem import android.view.View +import android.widget.TextView import androidx.core.app.NavUtils import androidx.core.content.ContextCompat import com.habitrpg.android.habitica.R @@ -60,6 +63,13 @@ class AdventureGuideActivity : BaseActivity() { Pair("fedPet", getString(R.string.feedPet_description)), Pair("purchasedEquipment", getString(R.string.purchase_equipment_description)) ) + + val descriptionText = getString(R.string.adventure_guide_description) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + binding.descriptionView.setText(Html.fromHtml(descriptionText, Html.FROM_HTML_MODE_LEGACY), TextView.BufferType.SPANNABLE) + } else { + binding.descriptionView.setText(Html.fromHtml(descriptionText), TextView.BufferType.SPANNABLE) + } } override fun onOptionsItemSelected(item: MenuItem): Boolean { 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 8c333ab4f..be6cc0e4c 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 @@ -509,9 +509,9 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { return super.onKeyUp(keyCode, event) } - protected fun retrieveUser() { + protected fun retrieveUser(forced: Boolean = false) { if (hostConfig.hasAuthentication()) { - compositeSubscription.add(this.userRepository.retrieveUser(true) + compositeSubscription.add(this.userRepository.retrieveUser(true, forced) .doOnNext { user1 -> FirebaseAnalytics.getInstance(this).setUserProperty("has_party", if (user1.party?.id?.isNotEmpty() == true) "true" else "false") FirebaseAnalytics.getInstance(this).setUserProperty("is_subscribed", if (user1.isSubscribed) "true" else "false") @@ -693,7 +693,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { compositeSubscription.add(Completable.complete() .observeOn(AndroidSchedulers.mainThread()) .subscribe(Action { - retrieveUser() + retrieveUser(true) val dialog = AchievementDialog(this) dialog.setType(event.type) dialog.enqueue() @@ -707,7 +707,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { compositeSubscription.add(Completable.complete() .observeOn(AndroidSchedulers.mainThread()) .subscribe(Action { - retrieveUser() + retrieveUser(true) val dialog = FirstDropDialog(this) dialog.configure(event.egg, event.hatchingPotion) dialog.enqueue() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/adventureGuide/AdventureGuideMenuBanner.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/adventureGuide/AdventureGuideMenuBanner.kt index 9c2808305..60e79aeb4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/adventureGuide/AdventureGuideMenuBanner.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/adventureGuide/AdventureGuideMenuBanner.kt @@ -1,8 +1,11 @@ package com.habitrpg.android.habitica.ui.views.adventureGuide import android.content.Context +import android.os.Build +import android.text.Html import android.util.AttributeSet import android.widget.FrameLayout +import android.widget.TextView import androidx.core.content.ContextCompat import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.AdventureGuideMenuBannerBinding @@ -18,6 +21,12 @@ class AdventureGuideMenuBanner @JvmOverloads constructor( init { background = ContextCompat.getDrawable(context, R.drawable.adventure_guide_menu_bg) + val descriptionText = context.getString(R.string.complete_for_gold) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + binding.descriptionView.setText(Html.fromHtml(descriptionText, Html.FROM_HTML_MODE_LEGACY), TextView.BufferType.SPANNABLE) + } else { + binding.descriptionView.setText(Html.fromHtml(descriptionText), TextView.BufferType.SPANNABLE) + } } fun updateData(user: User) { 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 bac0a789c..0ede053c0 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 @@ -7,24 +7,19 @@ 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.databinding.DialogAchievementDetailBinding +import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.models.Notification import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils class AchievementDialog(context: Context) : HabiticaAlertDialog(context) { - private var iconView: SimpleDraweeView? - private var titleView: TextView? - private var descriptionView: TextView? + private val binding: DialogAchievementDetailBinding = DialogAchievementDetailBinding.inflate(context.layoutInflater) init { - val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as? LayoutInflater - val view = inflater?.inflate(R.layout.dialog_achievement_detail, null) - iconView = view?.findViewById(R.id.icon_view) - titleView = view?.findViewById(R.id.title_view) - titleView?.visibility = View.VISIBLE - descriptionView = view?.findViewById(R.id.description_view) - setAdditionalContentView(view) + binding.titleView.visibility = View.VISIBLE + setAdditionalContentView(binding.root) } fun setType(type: String) { @@ -47,14 +42,18 @@ class AchievementDialog(context: Context) : HabiticaAlertDialog(context) { } private fun configure(titleID: Int, descriptionID: Int, iconName: String) { - titleView?.text = context.getString(titleID) - descriptionView?.text = context.getString(descriptionID) - DataBindingUtils.loadImage(iconView, "achievement-${iconName}2x") + binding.titleView.text = context.getString(titleID) + binding.descriptionView.text = context.getString(descriptionID) + DataBindingUtils.loadImage(binding.iconView, "achievement-${iconName}2x") if (iconName == "onboardingComplete") { setTitle(R.string.onboardingComplete_achievement_title) - titleView?.setTextSize(TypedValue.COMPLEX_UNIT_SP,14f) + binding.titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP,14f) + binding.achievementWrapper.visibility = View.GONE + binding.onboardingDoneIcon.visibility = View.VISIBLE } else { setTitle(R.string.achievement_title) + binding.achievementWrapper.visibility = View.VISIBLE + binding.onboardingDoneIcon.visibility = View.GONE } addButton(R.string.view_achievements, isPrimary = true, isDestructive = false) { _, _ -> MainNavigationController.navigate(R.id.achievementsFragment)