diff --git a/Habitica/res/drawable-hdpi/subscription_promo_gems.png b/Habitica/res/drawable-hdpi/subscription_promo_gems.png
new file mode 100644
index 000000000..ea165d410
Binary files /dev/null and b/Habitica/res/drawable-hdpi/subscription_promo_gems.png differ
diff --git a/Habitica/res/drawable-hdpi/subscription_promo_gold.png b/Habitica/res/drawable-hdpi/subscription_promo_gold.png
new file mode 100644
index 000000000..da38c5d4f
Binary files /dev/null and b/Habitica/res/drawable-hdpi/subscription_promo_gold.png differ
diff --git a/Habitica/res/drawable-mdpi/subscription_promo_gems.png b/Habitica/res/drawable-mdpi/subscription_promo_gems.png
new file mode 100644
index 000000000..9742659a8
Binary files /dev/null and b/Habitica/res/drawable-mdpi/subscription_promo_gems.png differ
diff --git a/Habitica/res/drawable-mdpi/subscription_promo_gold.png b/Habitica/res/drawable-mdpi/subscription_promo_gold.png
new file mode 100644
index 000000000..60a1d0981
Binary files /dev/null and b/Habitica/res/drawable-mdpi/subscription_promo_gold.png differ
diff --git a/Habitica/res/drawable-xhdpi/subscription_promo_gems.png b/Habitica/res/drawable-xhdpi/subscription_promo_gems.png
new file mode 100644
index 000000000..48e7083b0
Binary files /dev/null and b/Habitica/res/drawable-xhdpi/subscription_promo_gems.png differ
diff --git a/Habitica/res/drawable-xhdpi/subscription_promo_gold.png b/Habitica/res/drawable-xhdpi/subscription_promo_gold.png
new file mode 100644
index 000000000..eb58af0ea
Binary files /dev/null and b/Habitica/res/drawable-xhdpi/subscription_promo_gold.png differ
diff --git a/Habitica/res/drawable-xxhdpi/subscription_promo_gems.png b/Habitica/res/drawable-xxhdpi/subscription_promo_gems.png
new file mode 100644
index 000000000..e371bd310
Binary files /dev/null and b/Habitica/res/drawable-xxhdpi/subscription_promo_gems.png differ
diff --git a/Habitica/res/drawable-xxhdpi/subscription_promo_gold.png b/Habitica/res/drawable-xxhdpi/subscription_promo_gold.png
new file mode 100644
index 000000000..e1047b7a3
Binary files /dev/null and b/Habitica/res/drawable-xxhdpi/subscription_promo_gold.png differ
diff --git a/Habitica/res/drawable-xxxhdpi/subscription_promo_gems.png b/Habitica/res/drawable-xxxhdpi/subscription_promo_gems.png
new file mode 100644
index 000000000..a218203fc
Binary files /dev/null and b/Habitica/res/drawable-xxxhdpi/subscription_promo_gems.png differ
diff --git a/Habitica/res/drawable-xxxhdpi/subscription_promo_gold.png b/Habitica/res/drawable-xxxhdpi/subscription_promo_gold.png
new file mode 100644
index 000000000..466bc6676
Binary files /dev/null and b/Habitica/res/drawable-xxxhdpi/subscription_promo_gold.png differ
diff --git a/Habitica/res/drawable/rounded_purple_square.xml b/Habitica/res/drawable/rounded_purple_square.xml
index eebd55800..0dc0c7e65 100644
--- a/Habitica/res/drawable/rounded_purple_square.xml
+++ b/Habitica/res/drawable/rounded_purple_square.xml
@@ -5,7 +5,7 @@
+ android:color="@color/brand_400" >
diff --git a/Habitica/res/layout/activity_main.xml b/Habitica/res/layout/activity_main.xml
index 0c5eec65f..c73c89f99 100644
--- a/Habitica/res/layout/activity_main.xml
+++ b/Habitica/res/layout/activity_main.xml
@@ -143,7 +143,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
- android:layout_marginEnd="32dp"
tools:layout="@layout/drawer_main"/>
\ No newline at end of file
diff --git a/Habitica/res/layout/fragment_gem_purchase.xml b/Habitica/res/layout/fragment_gem_purchase.xml
index ab25d1798..7927f02a3 100644
--- a/Habitica/res/layout/fragment_gem_purchase.xml
+++ b/Habitica/res/layout/fragment_gem_purchase.xml
@@ -135,6 +135,6 @@
+ android:layout_height="148dp" />
\ No newline at end of file
diff --git a/Habitica/res/layout/promo_subscription_buy_gems.xml b/Habitica/res/layout/promo_subscription_buy_gems.xml
index 47617209e..36842d3aa 100644
--- a/Habitica/res/layout/promo_subscription_buy_gems.xml
+++ b/Habitica/res/layout/promo_subscription_buy_gems.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:parentTag="android.widget.RelativeLayout"
- android:background="@color/blue_50">
+ android:background="@color/gray_700">
+ android:textColor="@color/gray_100"
+ android:textSize="14sp"
+ android:textStyle="bold"/>
+
+ style="@style/HabiticaButton.Purple"
+ android:layout_marginTop="14dp"/>
+
+
\ No newline at end of file
diff --git a/Habitica/res/values/strings.sidebar.xml b/Habitica/res/values/strings.sidebar.xml
index 1af2e4249..48f3821d3 100644
--- a/Habitica/res/values/strings.sidebar.xml
+++ b/Habitica/res/values/strings.sidebar.xml
@@ -6,14 +6,14 @@
Messages
Tavern
Party
- Gems
+ Purchase Gems
Subscription
Guilds
Challenges
Inventory
Avatar
Equipment
- Stable
+ Pets & Mounts
News
About
Shops
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 4a49a4da9..0a61a354d 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -845,5 +845,6 @@
Search
Search tasks
Party Activity
- Want to buy gems with gold?
+ Need Gems?
+ Become a Subscriber to buy Gems with gold, get monthly mystery items, increased drop caps and more!
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 df3fbedc7..21b771b9b 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
@@ -6,9 +6,12 @@ import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.ui.helpers.bindOptionalView
import com.habitrpg.android.habitica.ui.menu.HabiticaDrawerItem
+import com.habitrpg.android.habitica.ui.views.promo.SubscriptionBuyGemsPromoView
+import com.habitrpg.android.habitica.ui.views.promo.SubscriptionBuyGemsPromoViewHolder
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
@@ -71,7 +74,7 @@ class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int): Recycle
itemHolder?.backgroundTintColor = backgroundTintColor
itemHolder?.bind(drawerItem, drawerItem.transitionId == selectedItem)
itemHolder?.itemView?.setOnClickListener { itemSelectedEvents.onNext(drawerItem.transitionId) }
- } else {
+ } else if (getItemViewType(position) == 1) {
(holder as? SectionHeaderViewHolder)?.backgroundTintColor = backgroundTintColor
(holder as? SectionHeaderViewHolder)?.bind(drawerItem)
}
@@ -81,13 +84,30 @@ class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int): Recycle
override fun getItemCount(): Int = items.count { it.isVisible }
- override fun getItemViewType(position: Int): Int = if (getItem(position).isHeader) 1 else 0
+ override fun getItemViewType(position: Int): Int {
+ return if (getItem(position).isHeader) {
+ 1
+ } else {
+ if (getItem(position).isPromo) {
+ 2
+ } else {
+ 0
+ }
+ }
+ }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
- return if (viewType == 0) {
- DrawerItemViewHolder(parent.inflate(R.layout.drawer_main_item))
- } else {
- SectionHeaderViewHolder(parent.inflate(R.layout.drawer_main_section_header))
+ return when (viewType) {
+ 0 -> DrawerItemViewHolder(parent.inflate(R.layout.drawer_main_item))
+ 1 -> SectionHeaderViewHolder(parent.inflate(R.layout.drawer_main_section_header))
+ else -> {
+ val itemView = SubscriptionBuyGemsPromoView(parent.context)
+ itemView.layoutParams = ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ 148.dpToPx(parent.context)
+ )
+ SubscriptionBuyGemsPromoViewHolder(itemView)
+ }
}
}
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 e4adeb3aa..1a0b8df64 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
@@ -228,6 +228,12 @@ class NavigationDrawerFragment : DialogFragment() {
}
updateItem(statsItem)
}
+
+ val promoItem = getItemWithIdentifier(SIDEBAR_SUBSCRIPTION_PROMO)
+ if (promoItem != null) {
+ promoItem.isVisible = !user.isSubscribed
+ updateItem(promoItem)
+ }
getItemWithIdentifier(SIDEBAR_NEWS)?.let {
it.showBubble = user.flags?.newStuff ?: false
}
@@ -265,7 +271,9 @@ class NavigationDrawerFragment : DialogFragment() {
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)))
items.add(HabiticaDrawerItem(R.id.aboutFragment, SIDEBAR_ABOUT, context.getString(R.string.sidebar_about)))
+ items.add(HabiticaDrawerItem(R.id.subscriptionPurchaseActivity, SIDEBAR_SUBSCRIPTION_PROMO))
}
+ items.last().isPromo = true
adapter.updateItems(items)
}
@@ -427,6 +435,7 @@ class NavigationDrawerFragment : DialogFragment() {
const val SIDEBAR_STABLE = "stable"
const val SIDEBAR_GEMS = "gems"
const val SIDEBAR_SUBSCRIPTION = "subscription"
+ const val SIDEBAR_SUBSCRIPTION_PROMO = "subscriptionpromo"
const val SIDEBAR_ABOUT_HEADER = "about_header"
const val SIDEBAR_NEWS = "news"
const val SIDEBAR_HELP = "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 59f26bd7c..1c1b4779f 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,7 +1,9 @@
package com.habitrpg.android.habitica.ui.menu
-class HabiticaDrawerItem(val transitionId: Int,val identifier: String, val text: String, val isHeader: Boolean = false, var additionalInfoAsPill: Boolean = true) {
+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 showBubble: Boolean = false
var isVisible: Boolean = true
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/SubscriptionBuyGemsPromoView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/SubscriptionBuyGemsPromoView.kt
index 83aaf8c71..256403eff 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/SubscriptionBuyGemsPromoView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/SubscriptionBuyGemsPromoView.kt
@@ -1,93 +1,25 @@
package com.habitrpg.android.habitica.ui.views.promo
import android.content.Context
-import android.graphics.drawable.BitmapDrawable
import android.util.AttributeSet
-import android.widget.ImageView
import android.widget.RelativeLayout
-import androidx.appcompat.widget.AppCompatImageView
import androidx.core.content.ContextCompat
import androidx.core.os.bundleOf
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.helpers.MainNavigationController
-import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import kotlinx.android.synthetic.main.promo_subscription_buy_gems.view.*
-import java.util.*
class SubscriptionBuyGemsPromoView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : RelativeLayout(context, attrs, defStyleAttr) {
- private var didLayoutGold: Boolean = false
- private var goldViews = mutableListOf()
- private val random: Random = Random()
-
- private var iconSize = 30.dpToPx(context)
-
- private val starParams: LayoutParams
- get() {
- val params = LayoutParams(iconSize, iconSize)
- params.leftMargin = if (random.nextBoolean()) {
- -20 + random.nextInt(contentWrapper.left)
- } else {
- contentWrapper.right + random.nextInt(width - contentWrapper.right)
- }
- params.topMargin = -20 + random.nextInt(height + 20)
- return params
- }
init {
inflate(R.layout.promo_subscription_buy_gems, true)
- setBackgroundColor(ContextCompat.getColor(context, R.color.blue_50))
+ setBackgroundColor(ContextCompat.getColor(context, R.color.gray_700))
clipToPadding = false
clipChildren = false
clipToOutline = false
- generateGold()
-
button.setOnClickListener { MainNavigationController.navigate(R.id.gemPurchaseActivity, bundleOf(Pair("openSubscription", true))) }
}
-
- override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
- super.onLayout(changed, l, t, r, b)
- updateGoldLayoutParams()
- }
-
- private fun generateGold() {
- removeGoldViews()
- for (x in 0 until 8) {
- generateGoldView()
- }
- requestLayout()
- }
-
- private fun removeGoldViews() {
- if (goldViews.size > 0) {
- goldViews.forEach { this.removeView(it) }
- goldViews.clear()
- }
- }
-
- private fun generateGoldView() {
- val goldView = AppCompatImageView(context)
- goldView.scaleType = ImageView.ScaleType.CENTER
- goldView.setImageDrawable(BitmapDrawable(resources, HabiticaIconsHelper.imageOfGoldReward()))
- goldView.rotation = random.nextFloat() * 360
- goldViews.add(goldView)
- if (width > 0 && height > 0) {
- this.addView(goldView, 0, starParams)
- } else {
- this.addView(goldView, 0)
- }
- }
-
- private fun updateGoldLayoutParams() {
- if (width <= 0 || height <= 0 || didLayoutGold || goldViews.size == 0) {
- return
- }
- for (view in goldViews) {
- view.layoutParams = starParams
- }
- didLayoutGold = true
- }
}
\ No newline at end of file