Improve info about g1g1

This commit is contained in:
Phillip Thelen 2019-12-19 15:40:40 +01:00
parent 5181fe2935
commit 7ddef238cb
13 changed files with 275 additions and 60 deletions

View file

@ -106,6 +106,10 @@
android:name=".ui.activities.GiftGemsActivity"
android:label="@string/gift_gems">
</activity>
<activity
android:name=".ui.activities.GiftOneGetOneInfoActivity"
android:label="@string/gift_one_get_one">
</activity>
<activity
android:name=".ui.activities.GuidelinesActivity"
android:label="@string/community_guidelines">

View file

@ -151,7 +151,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 2316
versionCode 2324
versionName "2.4"
}

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/teal_50" />
<corners android:radius="@dimen/rounded_button_radius"/>
<padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
</shape>

View file

@ -0,0 +1,143 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/gray_700">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="30dp"
android:background="@color/white">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/cancel_button"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:src="@drawable/ic_close_purple_300_24dp"
style="@style/Base.Widget.AppCompat.Button.Borderless"
android:contentDescription="@string/cancel" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="103dp"
android:background="@drawable/layout_rounded_bg_teal"
android:layout_marginStart="@dimen/spacing_large"
android:layout_marginEnd="16dp"
android:layout_marginBottom="24dp">
<LinearLayout
android:id="@+id/contentWrapper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:orientation="vertical"
android:gravity="center"
android:paddingStart="@dimen/spacing_large"
android:paddingEnd="@dimen/spacing_large"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/gift_one_get_one"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/limited_event"
android:textColor="@color/white"
android:textAllCaps="true"
android:textSize="10sp"
style="@style/Caption2"
android:textAlignment="center"
android:maxWidth="240dp"
android:letterSpacing="0.18"
android:layout_marginBottom="12dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/g1g1_duration"
android:textColor="@color/white"
style="@style/Caption2"
android:textSize="15sp"
android:textAlignment="center"
android:maxWidth="240dp"/>
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/g1g1_promo_left"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/g1g1_promo_right"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/spacing_large"
android:paddingEnd="@dimen/spacing_large"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/teal_10"
android:textStyle="bold"
android:textSize="15sp"
android:gravity="center"
android:lineHeight="20sp"
android:text="@string/g1g1_info_1"/>
<Button
android:id="@+id/gift_button"
android:layout_width="match_parent"
android:layout_height="38dp"
style="@style/HabiticaButton.Purple"
android:text="@string/gift_a_subscription"
android:layout_marginTop="24dp"
android:layout_marginBottom="24dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/g1g1_info_2"
android:textSize="15sp"
android:textStyle="bold"
android:gravity="center"
android:layout_marginBottom="7dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/g1g1_info_2_text"
android:gravity="center"
android:textColor="@color/gray_300"
android:lineSpacingExtra="1dp"
android:layout_marginBottom="22dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/g1g1_info_3"
android:textSize="15sp"
android:textStyle="bold"
android:gravity="center"
android:layout_marginBottom="7dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/g1g1_info_3_text"
android:gravity="center"
android:textColor="@color/gray_300"
android:lineSpacingExtra="1dp"/>
</LinearLayout>
</LinearLayout>
</ScrollView>

View file

@ -917,4 +917,12 @@
<string name="promo_g1g1_description">Gift a subscription now and youll get the same sub for yourself free!</string>
<string name="promo_g1g1_prompt">Gift One, Get One Event</string>
<string name="sale">Sale</string>
<string name="g1g1_info_1">In honor of the season of giving we\'re bringing back a very special promotion. Now when you gift somebody a subscription, you get the same sub for yourself for free!</string>
<string name="gift_a_subscription">Gift a Subscription</string>
<string name="g1g1_info_2">How it works</string>
<string name="g1g1_info_2_text">Tap Gift a Subscription and type in the username of the account youd like to gift to. From there, pick the sub length youd like to gift and check out. Your account will automatically be rewarded with the same level of subscription you just gifted.</string>
<string name="g1g1_info_3">Limitations</string>
<string name="g1g1_info_3_text">This promotion only applies when you gift to another Habitican. If you or your gift recipient already have a subscription, the gifted subscription will add months of credit that will only be used after the current subscription is cancelled expires.</string>
<string name="limited_event">Limited event</string>
<string name="g1g1_duration">Dec 17 to Jan 6</string>
</resources>

View file

@ -49,8 +49,8 @@ class NotificationOpenHandler {
MainNavigationController.navigate(R.id.questDetailFragment, bundleOf("partyID" to partyId, "questKey" to questKey))
}
private fun openGuildDetailScreen(groupID: String) {
if (groupID.isEmpty()) {
private fun openGuildDetailScreen(groupID: String?) {
if (groupID?.isNotEmpty() != true) {
return
}
MainNavigationController.navigate(R.id.guildFragment, bundleOf("groupID" to groupID))
@ -61,7 +61,7 @@ class NotificationOpenHandler {
MainNavigationController.navigate(R.id.prefsActivity)
}
private fun handleChatMessage(type: String?, groupID: String) {
private fun handleChatMessage(type: String?, groupID: String?) {
when (type) {
"party" -> MainNavigationController.navigate(R.id.partyFragment)
"tavern" -> MainNavigationController.navigate(R.id.tavernFragment)

View file

@ -2,12 +2,14 @@ package com.habitrpg.android.habitica.ui.activities
import android.app.ProgressDialog
import android.os.Bundle
import androidx.core.content.ContextCompat
import android.view.Menu
import android.view.MenuItem
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.ActivityFixcharacterBinding
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
@ -16,12 +18,12 @@ import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.settings.FixValuesEditText
import io.reactivex.functions.Action
import io.reactivex.functions.Consumer
import kotlinx.android.synthetic.main.activity_fixcharacter.*
import javax.inject.Inject
import javax.inject.Named
class FixCharacterValuesActivity: BaseActivity() {
private lateinit var binding: ActivityFixcharacterBinding
@Inject
lateinit var repository: UserRepository
@ -30,6 +32,11 @@ class FixCharacterValuesActivity: BaseActivity() {
override fun getLayoutResId(): Int = R.layout.activity_fixcharacter
override fun getContentView(): View {
binding = ActivityFixcharacterBinding.inflate(layoutInflater)
return binding.root
}
override fun injectActivity(component: UserComponent?) {
component?.inject(this)
}
@ -38,7 +45,7 @@ class FixCharacterValuesActivity: BaseActivity() {
super.onCreate(savedInstanceState)
setTitle(R.string.fix_character_values)
setupToolbar(toolbar)
setupToolbar(binding.toolbar)
repository.getUser(userId).firstElement().subscribe(Consumer {
user = it
@ -57,12 +64,12 @@ class FixCharacterValuesActivity: BaseActivity() {
@Suppress("DEPRECATION")
val progressDialog = ProgressDialog.show(this, getString(R.string.saving), "")
val userInfo = HashMap<String, Any>()
userInfo["stats.hp"] = healthEditText.getDoubleValue()
userInfo["stats.exp"] = experienceEditText.getDoubleValue()
userInfo["stats.gp"] = goldEditText.getDoubleValue()
userInfo["stats.mp"] = manaEditText.getDoubleValue()
userInfo["stats.lvl"] = levelEditText.getDoubleValue().toInt()
userInfo["achievements.streak"] = streakEditText.getDoubleValue().toInt()
userInfo["stats.hp"] = binding.healthEditText.getDoubleValue()
userInfo["stats.exp"] = binding.experienceEditText.getDoubleValue()
userInfo["stats.gp"] = binding.goldEditText.getDoubleValue()
userInfo["stats.mp"] = binding.manaEditText.getDoubleValue()
userInfo["stats.lvl"] = binding.levelEditText.getDoubleValue().toInt()
userInfo["achievements.streak"] = binding.streakEditText.getDoubleValue().toInt()
repository.updateUser(user, userInfo).subscribe(Consumer {}, RxErrorHandler.handleEmptyError(), Action {
progressDialog.dismiss()
finish()
@ -82,29 +89,29 @@ class FixCharacterValuesActivity: BaseActivity() {
}
private fun updateFields(user: User) {
healthEditText.text = user.stats?.hp.toString()
experienceEditText.text = user.stats?.exp.toString()
goldEditText.text = user.stats?.gp.toString()
manaEditText.text = user.stats?.mp.toString()
levelEditText.text = user.stats?.lvl.toString()
streakEditText.text = user.streakCount.toString()
binding.healthEditText.text = user.stats?.hp.toString()
binding.experienceEditText.text = user.stats?.exp.toString()
binding.goldEditText.text = user.stats?.gp.toString()
binding.manaEditText.text = user.stats?.mp.toString()
binding.levelEditText.text = user.stats?.lvl.toString()
binding.streakEditText.text = user.streakCount.toString()
when (user.stats?.habitClass) {
Stats.WARRIOR -> {
levelEditText.iconBackgroundColor = ContextCompat.getColor(this, R.color.red_500)
levelEditText.setIconBitmap(HabiticaIconsHelper.imageOfWarriorLightBg())
binding.levelEditText.iconBackgroundColor = ContextCompat.getColor(this, R.color.red_500)
binding.levelEditText.setIconBitmap(HabiticaIconsHelper.imageOfWarriorLightBg())
}
Stats.MAGE -> {
levelEditText.iconBackgroundColor = ContextCompat.getColor(this, R.color.blue_500)
levelEditText.setIconBitmap(HabiticaIconsHelper.imageOfMageLightBg())
binding.levelEditText.iconBackgroundColor = ContextCompat.getColor(this, R.color.blue_500)
binding.levelEditText.setIconBitmap(HabiticaIconsHelper.imageOfMageLightBg())
}
Stats.HEALER -> {
levelEditText.iconBackgroundColor = ContextCompat.getColor(this, R.color.yellow_500)
levelEditText.setIconBitmap(HabiticaIconsHelper.imageOfHealerLightBg())
binding.levelEditText.iconBackgroundColor = ContextCompat.getColor(this, R.color.yellow_500)
binding.levelEditText.setIconBitmap(HabiticaIconsHelper.imageOfHealerLightBg())
}
Stats.ROGUE -> {
levelEditText.iconBackgroundColor = ContextCompat.getColor(this, R.color.brand_500)
levelEditText.setIconBitmap(HabiticaIconsHelper.imageOfRogueLightBg())
binding.levelEditText.iconBackgroundColor = ContextCompat.getColor(this, R.color.brand_500)
binding.levelEditText.setIconBitmap(HabiticaIconsHelper.imageOfRogueLightBg())
}
}
}

View file

@ -0,0 +1,58 @@
package com.habitrpg.android.habitica.ui.activities
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.EditText
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.ActivityGift1get1InfoBinding
import com.habitrpg.android.habitica.extensions.addCancelButton
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
class GiftOneGetOneInfoActivity : BaseActivity() {
private lateinit var binding: ActivityGift1get1InfoBinding
override fun getLayoutResId(): Int {
return R.layout.activity_gift1get1_info
}
override fun injectActivity(component: UserComponent?) {
}
override fun getContentView(): View {
binding = ActivityGift1get1InfoBinding.inflate(layoutInflater)
return binding.root
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding.cancelButton.setOnClickListener {
finish()
}
binding.giftButton.setOnClickListener {
showGiftSubscriptionDialog()
}
}
private fun showGiftSubscriptionDialog() {
val chooseRecipientDialogView = layoutInflater.inflate(R.layout.dialog_choose_message_recipient, null)
val alert = HabiticaAlertDialog(this)
alert.setTitle(getString(R.string.gift_title))
alert.addButton(getString(R.string.action_continue), true) { _, _ ->
val usernameEditText = chooseRecipientDialogView?.findViewById<View>(R.id.uuidEditText) as? EditText
val intent = Intent(this, GiftSubscriptionActivity::class.java).apply {
putExtra("username", usernameEditText?.text.toString())
}
startActivity(intent)
finish()
}
alert.addCancelButton { _, _ ->
}
alert.setAdditionalContentView(chooseRecipientDialogView)
alert.show()
}
}

View file

@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.ui.fragments
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.view.Gravity
@ -12,6 +11,7 @@ import android.view.ViewGroup
import android.view.animation.AccelerateInterpolator
import android.widget.TextView
import android.widget.Toast
import androidx.core.app.ShareCompat
import androidx.core.net.toUri
import com.google.firebase.analytics.FirebaseAnalytics
import com.habitrpg.android.habitica.R
@ -159,11 +159,13 @@ class AboutFragment : BaseMainFragment() {
bodyOfEmail += " \nDetails:\n"
val emailIntent = Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto", appConfigManager.supportEmail(), null))
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
emailIntent.putExtra(Intent.EXTRA_TEXT, bodyOfEmail)
startActivity(Intent.createChooser(emailIntent, "Send email..."))
ShareCompat.IntentBuilder.from(activity)
.setType("message/rfc822")
.addEmailTo(appConfigManager.supportEmail())
.setSubject(subject)
.setText(bodyOfEmail)
.setChooserTitle("Send email...")
.startChooser()
}
private fun doTheThing() {

View file

@ -5,7 +5,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import androidx.core.view.isVisible
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
@ -13,7 +12,6 @@ import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.databinding.FragmentSubscriptionBinding
import com.habitrpg.android.habitica.events.UserSubscribedEvent
import com.habitrpg.android.habitica.extensions.addCancelButton
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.PurchaseHandler
import com.habitrpg.android.habitica.helpers.PurchaseTypes
@ -21,11 +19,9 @@ import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
import com.habitrpg.android.habitica.ui.activities.GemPurchaseActivity
import com.habitrpg.android.habitica.ui.activities.GiftSubscriptionActivity
import com.habitrpg.android.habitica.ui.activities.GiftOneGetOneInfoActivity
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.subscriptions.SubscriptionOptionView
import io.reactivex.functions.Consumer
import org.greenrobot.eventbus.Subscribe
@ -211,23 +207,7 @@ class SubscriptionFragment : BaseFragment(), GemPurchaseActivity.CheckoutFragmen
}
private fun showGiftSubscriptionDialog() {
val chooseRecipientDialogView = this.activity?.layoutInflater?.inflate(R.layout.dialog_choose_message_recipient, null)
this.activity?.let { thisActivity ->
val alert = HabiticaAlertDialog(thisActivity)
alert.setTitle(getString(R.string.gift_title))
alert.addButton(getString(R.string.action_continue), true) { _, _ ->
val usernameEditText = chooseRecipientDialogView?.findViewById<View>(R.id.uuidEditText) as? EditText
val intent = Intent(thisActivity, GiftSubscriptionActivity::class.java).apply {
putExtra("username", usernameEditText?.text.toString())
}
startActivity(intent)
}
alert.addCancelButton { _, _ ->
thisActivity.dismissKeyboard()
}
alert.setAdditionalContentView(chooseRecipientDialogView)
alert.show()
}
val intent = Intent(context, GiftOneGetOneInfoActivity::class.java)
context?.startActivity(intent)
}
}

View file

@ -1,13 +1,13 @@
package com.habitrpg.android.habitica.ui.viewHolders
import android.content.Context
import android.content.Intent
import android.util.AttributeSet
import android.widget.RelativeLayout
import androidx.core.content.ContextCompat
import androidx.core.os.bundleOf
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.ui.activities.GiftOneGetOneInfoActivity
import kotlinx.android.synthetic.main.promo_subscription_buy_gems.view.*
class GiftOneGetOnePromoMenuView @JvmOverloads constructor(
@ -20,6 +20,11 @@ class GiftOneGetOnePromoMenuView @JvmOverloads constructor(
clipToPadding = false
clipChildren = false
clipToOutline = false
button.setOnClickListener { MainNavigationController.navigate(R.id.gemPurchaseActivity, bundleOf(Pair("openSubscription", true))) }
button.setOnClickListener {
val intent = Intent(context, GiftOneGetOneInfoActivity::class.java)
context.startActivity(intent)
}
}
}

View file

@ -130,6 +130,8 @@ class TaskListDeserializer : JsonDeserializer<TaskList> {
}
} catch (ignored: ClassCastException) {
} catch (ignored: java.lang.UnsupportedOperationException) {
}
}

View file

@ -11,7 +11,7 @@ buildscript {
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.0-beta02'
classpath 'com.android.tools.build:gradle:3.6.0-beta05'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
classpath 'com.google.gms:google-services:4.3.2'
classpath "io.realm:realm-gradle-plugin:5.15.0"