Begin implementing new modals

This commit is contained in:
Phillip Thelen 2019-05-17 19:30:05 +02:00
parent 1d2f3ab1bb
commit 7a1ef8a7cc
19 changed files with 214 additions and 111 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="?colorContentBackground" />
<corners android:radius="16dp"/>
<padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
<stroke android:width="1dp" android:color="#19000000" />
</shape>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<size
android:height="4dp"
android:width="4dp"/>
</shape>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/brand_400" />
<corners android:radius="8dp"/>
<padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
<stroke android:width="1dp" android:color="#19000000" />
</shape>

View file

@ -2,46 +2,68 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/titleTextView"
android:layout_width="320dp"
android:layout_height="wrap_content"
tools:background="@color/black"
android:minWidth="300dp"
android:gravity="center_horizontal"
android:layout_gravity="center_horizontal">
<LinearLayout
android:minWidth="300dp"
android:layout_width="320dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/alert_dialog_background"
android:paddingBottom="28dp"
android:paddingTop="44dp"
android:paddingEnd="26dp"
android:paddingStart="26dp"
android:gravity="center_horizontal">
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:paddingBottom="@dimen/spacing_large"
style="@style/Headline6"
tools:text="This is the title"
/>
<TextView
android:id="@+id/messageTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:visibility="gone"
tools:visibility="visible"
android:textColor="?textColorSecondary"
style="@style/Body2"
tools:text="This is the message"
/>
<FrameLayout
android:id="@+id/content_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/buttons_wrapper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="26dp"
android:orientation="vertical"
android:gravity="center_horizontal"
android:divider="@drawable/alert_dialog_button_divider"
android:showDividers="middle"/>
</LinearLayout>
<Button
android:id="@+id/close_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textColor="@color/white"
android:paddingTop="@dimen/spacing_large"
android:paddingBottom="@dimen/spacing_large"
android:textSize="18sp"
android:paddingLeft="@dimen/spacing_large"
android:paddingRight="@dimen/spacing_large"
tools:text="This is the title!"
tools:background="@color/brand_300"
/>
<TextView
android:text="@string/close"
android:textColor="@color/brand_400"
android:background="@drawable/alert_dialog_background"
android:layout_marginTop="@dimen/spacing_large"
android:id="@+id/subtitleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textColor="@color/black"
android:textSize="18sp"
android:visibility="gone"
android:layout_marginBottom="@dimen/spacing_small"
tools:text="This is a subtitle"
android:paddingLeft="@dimen/spacing_large"
android:paddingRight="@dimen/spacing_large"
tools:visibility="visible"/>
<TextView
android:id="@+id/messageTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textColor="@color/black_50_alpha"
android:textSize="14sp"
android:visibility="gone"
android:paddingLeft="@dimen/spacing_large"
android:paddingRight="@dimen/spacing_large"
tools:text="This is an example message"
tools:visibility="visible"/>
</LinearLayout>
tools:visibility="visible"
android:textSize="16sp"
android:textAllCaps="false"/>
</LinearLayout>

View file

@ -1,25 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="24dip"
android:paddingEnd="24dip"
android:paddingStart="24dip"
android:paddingRight="24dip">
<com.habitrpg.android.habitica.ui.AvatarView
android:layout_width="@dimen/avatar_width"
android:layout_height="@dimen/avatar_height"
android:id="@+id/avatarView"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/spacing_large"
android:layout_marginBottom="@dimen/spacing_large"/>
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal">
<FrameLayout
android:layout_width="111dp"
android:layout_height="114dp"
android:layout_marginBottom="@dimen/spacing_large"
android:gravity="center"
android:background="@drawable/avatar_border"
android:layout_marginTop="@dimen/spacing_large">
<com.habitrpg.android.habitica.ui.AvatarView
android:layout_width="94dp"
android:layout_height="98dp"
android:id="@+id/avatarView"
android:layout_gravity="center"/>
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/levelupDetail"
android:text="@string/levelup_detail"
style="@style/Body2"
android:gravity="center_horizontal"
android:textColor="@color/gray_200"/>
</LinearLayout>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AlertDialogContainer">
<item name="android:layout_width">300dp</item>
</style>
</resources>

View file

@ -139,4 +139,5 @@
<dimen name="bb_default_elevation">8dp</dimen>
<dimen name="bb_fake_shadow_height">4dp</dimen>
<dimen name="button_height">38dp</dimen>
<dimen name="button_text_size">16sp</dimen>
</resources>

View file

@ -139,7 +139,7 @@
<string name="levelup_header">You Reached Level %1$d!</string>
<string name="levelup_detail">By accomplishing your real life goals, you leveled up and are now fully healed!</string>
<string name="levelup_button">Huzzah!</string>
<string name="levelup_button">Onwards!</string>
<string name="faint_subtitle">Don\'t despair!</string>
<string name="faint_penalty_body">You lost a Level, your Gold, and a piece of Equipment, but you can get them all back with hard work! Good luck—you\'ll do great.</string>

View file

@ -12,15 +12,16 @@
<style name="Title1">
<item name="android:fontFamily">@string/font_family_medium</item>
<item name="android:textSize">20sp</item>
<item name="android:letterSpacing">0.051</item>
<item name="android:letterSpacing">0.07</item>
<item name="android:textColor">?textColorPrimary</item>
</style>
<style name="Title1_WideLetterSpacing" parent="@style/Title1">
<item name="android:letterSpacing">0.133</item>
</style>
<style name="Title2">
<item name="android:fontFamily">@string/font_family_condensed</item>
<style name="Title2" parent="@style/Title1">
<item name="android:fontFamily">@string/font_family_regular</item>
<item name="android:textSize">28sp</item>
<item name="android:letterSpacing">0.05</item>
</style>
@ -28,27 +29,37 @@
<!-- Headline -->
<style name="Headline">
<item name="android:fontFamily">@string/font_family_condensed</item>
<item name="android:fontFamily">@string/font_family_regular</item>
<item name="android:textSize">18sp</item>
<item name="android:letterSpacing">0.03</item>
</style>
<style name="Headline6">
<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textSize">20sp</item>
<item name="android:letterSpacing">0.01</item>
<item name="android:textColor">?textColorPrimary</item>
</style>
<!-- Subheader -->
<style name="Subheader1">
<item name="android:fontFamily">@string/font_family_medium</item>
<item name="android:textSize">16sp</item>
<item name="android:textColor">?textColorSecondary</item>
</style>
<style name="Subheader2">
<item name="android:fontFamily">@string/font_family_regular</item>
<item name="android:textSize">16sp</item>
<item name="android:letterSpacing">0.08</item>
<item name="android:textColor">?textColorSecondary</item>
</style>
<style name="Subheader3">
<item name="android:fontFamily">@string/font_family_condensed</item>
<item name="android:fontFamily">@string/font_family_regular</item>
<item name="android:textSize">16sp</item>
<item name="android:letterSpacing">0.04</item>
<item name="android:textColor">?textColorSecondary</item>
</style>
<!-- Body -->
@ -65,9 +76,10 @@
</style>
<style name="Body2">
<item name="android:fontFamily">@string/font_family_regular</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:textSize">14sp</item>
<item name="android:letterSpacing">0.035</item>
<item name="android:letterSpacing">0.02</item>
<item name="android:lineSpacingExtra">6sp</item>
</style>
<style name="Body2_Wide" parent="Body2">
@ -75,7 +87,7 @@
</style>
<style name="Body3">
<item name="android:fontFamily">@string/font_family_condensed</item>
<item name="android:fontFamily">@string/font_family_regular</item>
<item name="android:textSize">14sp</item>
<item name="android:letterSpacing">0.035</item>
</style>
@ -105,7 +117,7 @@
</style>
<style name="Caption4">
<item name="android:fontFamily">@string/font_family_condensed</item>
<item name="android:fontFamily">@string/font_family_regular</item>
<item name="android:textSize">12sp</item>
<item name="android:letterSpacing">0.035</item>
</style>

View file

@ -16,9 +16,9 @@
<item name="windowNoTitle">true</item>
<!-- ...and here we setting appcompats color theming attrs -->
<item name="colorPrimary">@color/brand</item>
<item name="colorPrimaryDark">@color/brand_50</item>
<item name="colorAccent">@color/brand</item>
<item name="android:colorPrimary">@color/brand</item>
<item name="android:colorPrimaryDark">@color/brand_50</item>
<item name="android:colorAccent">@color/brand_400</item>
<item name="colorPrimaryOffset">@color/brand_200</item>
<item name="colorPrimaryDistinct">@color/brand_500</item>
<item name="colorBadgeBackground">@color/brand_400</item>
@ -196,6 +196,12 @@
<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/brand_100</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowBackground">@color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
<style name="SectionTitle">
@ -599,4 +605,8 @@
</style>
<color name="taskform_gray">#99edecee</color>
<style name="AlertDialogContainer">
<item name="android:layout_width">320dp</item>
</style>
</resources>

View file

@ -58,6 +58,7 @@ import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.helpers.KeyboardUtil
import com.habitrpg.android.habitica.ui.helpers.bindOptionalView
import com.habitrpg.android.habitica.ui.helpers.bindView
import com.habitrpg.android.habitica.ui.views.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
@ -181,7 +182,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
val themeID = sharedPreferences.getInt("theme", R.style.AppTheme_NoActionBar)
setTheme(themeID)
sharedPreferences.edit {
this.putInt("theme", R.style.AppTheme_NoActionBar_Blue)
this.putInt("theme", R.style.AppTheme_NoActionBar)
}
super.onCreate(savedInstanceState)
@ -269,6 +270,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
override fun injectActivity(component: AppComponent?) {
component?.inject(this)
component?.inject(this)
}
override fun onResume() {
@ -305,6 +307,22 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
launchTrace?.stop()
launchTrace = null
val customView = layoutInflater.inflate(R.layout.dialog_levelup, null)
if (customView != null) {
val dialogAvatarView = customView.findViewById<AvatarView>(R.id.avatarView)
user?.let { dialogAvatarView.setAvatar(it) }
}
val alert = HabiticaAlertDialog(this)
alert.setTitle(getString(R.string.levelup_header, 5))
alert.setAdditionalContentView(customView)
alert.addButton(R.string.levelup_button, true) { dialog -> dialog.dismiss() }
alert.addButton(R.string.share, false) {
}
alert.show()
}
override fun onPause() {

View file

@ -4,14 +4,14 @@ import android.content.Context
import android.content.Intent
import android.graphics.PorterDuff
import android.os.Bundle
import androidx.core.content.ContextCompat
import androidx.appcompat.app.AlertDialog
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import androidx.core.net.toUri
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.AppComponent
@ -19,8 +19,8 @@ import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.extensions.notNull
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.inventory.QuestContent
import com.habitrpg.android.habitica.models.members.PlayerTier
@ -180,8 +180,7 @@ class TavernDetailFragment : BaseFragment() {
val alert = HabiticaAlertDialog(context)
val bossName = quest.boss?.name ?: ""
alert.setTitle(R.string.world_boss_description_title)
alert.setTitleBackgroundColor(quest.colors?.lightColor ?: 0)
alert.setSubtitle(context.getString(R.string.world_boss_description_subtitle, bossName))
//alert.setSubtitle(context.getString(R.string.world_boss_description_subtitle, bossName))
alert.setAdditionalContentView(R.layout.world_boss_description_view)
val descriptionView = alert.getContentView()

View file

@ -1,29 +1,38 @@
package com.habitrpg.android.habitica.ui.views
import android.content.Context
import androidx.core.content.ContextCompat
import androidx.appcompat.app.AlertDialog
import android.graphics.drawable.ColorDrawable
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.LinearLayout
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.extensions.getThemeColor
import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.extensions.setScaledPadding
import java.lang.ref.WeakReference
open class HabiticaAlertDialog(context: Context) : AlertDialog(context) {
private val view: LinearLayout = LayoutInflater.from(context).inflate(R.layout.dialog_habitica_base, null) as LinearLayout
private var titleTextView: TextView
private var subtitleTextView: TextView
private var messageTextView: TextView
private var contentView: ViewGroup
private var buttonsWrapper: LinearLayout
private var additionalContentView: View? = null
init {
setView(view)
titleTextView = view.findViewById(R.id.titleTextView)
subtitleTextView = view.findViewById(R.id.subtitleTextView)
messageTextView = view.findViewById(R.id.messageTextView)
contentView = view.findViewById(R.id.content_view)
buttonsWrapper = view.findViewById(R.id.buttons_wrapper)
}
override fun setTitle(title: CharSequence?) {
@ -34,27 +43,6 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context) {
setTitle(context.getString(titleId))
}
fun setTitleBackground(colorId: Int) {
titleTextView.setBackgroundColor(ContextCompat.getColor(context, colorId))
}
fun setTitleBackgroundColor(color: Int) {
titleTextView.setBackgroundColor(color)
}
fun setSubtitle(subtitle: CharSequence?) {
if (subtitle != null) {
subtitleTextView.visibility = View.VISIBLE
} else {
subtitleTextView.visibility = View.GONE
}
subtitleTextView.text = subtitle
}
fun setSubtitle(subtitleId: Int) {
setSubtitle(context.getString(subtitleId))
}
override fun setMessage(message: CharSequence?) {
if (message != null) {
messageTextView.visibility = View.VISIBLE
@ -73,15 +61,39 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context) {
setAdditionalContentView(inflater.inflate(layoutResID, view, false))
}
fun setAdditionalContentView(view: View?, index: Int = -1) {
fun setAdditionalContentView(view: View?) {
this.view.removeView(additionalContentView)
additionalContentView = view
if (index >= 0) {
this.view.addView(view, index)
} else {
this.view.addView(view)
}
this.contentView.addView(view)
val layoutParams = view?.layoutParams
layoutParams?.width = ViewGroup.LayoutParams.WRAP_CONTENT
layoutParams?.height = ViewGroup.LayoutParams.WRAP_CONTENT
view?.layoutParams = layoutParams
contentView.forceLayout()
}
fun getContentView(): View? = additionalContentView
fun addButton(stringRes: Int, isPrimary: Boolean, function: (HabiticaAlertDialog) -> Unit) {
val button = Button(context)
button.text = context.getString(stringRes)
button.transformationMethod = null
button.textSize = context.resources.getDimension(R.dimen.button_text_size)
if (isPrimary) {
button.background = context.getDrawable(R.drawable.button_background_primary)
button.setTextColor(context.getThemeColor(R.attr.textColorPrimaryDark))
} else {
button.background = ColorDrawable(ContextCompat.getColor(context, R.color.transparent))
button.setTextColor(ContextCompat.getColor(context, R.color.brand_400))
}
val weakThis = WeakReference<HabiticaAlertDialog>(this)
button.setOnClickListener { weakThis.get()?.let { it1 -> function(it1) } }
val layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 38.dpToPx(context))
button.setScaledPadding(context, 26, 0, 26, 0)
button.minWidth = 147.dpToPx(context)
button.layoutParams = layoutParams
buttonsWrapper.addView(button)
}
}

View file

@ -223,14 +223,13 @@ class QuestProgressView : LinearLayout {
private fun showActiveStrikeAlert(key: String) {
val alert = HabiticaAlertDialog(context)
alert.setTitle(context.getString(R.string.strike_active_title, getLocationName(key)))
alert.setTitleBackground(R.color.orange_10)
alert.setSubtitle(context.getString(R.string.strike_active_subtitle, getNpcName(key)))
// alert.setSubtitle(context.getString(R.string.strike_active_subtitle, getNpcName(key)))
alert.setMessage(context.getString(R.string.strike_active_description, getLongNPCName(key), quest?.boss?.name ?: "", getLocationName(key)))
val npcBannerView = NPCBannerView(context, null)
npcBannerView.shopSpriteSuffix = quest?.key ?: ""
npcBannerView.identifier = key
alert.setAdditionalContentView(npcBannerView, 1)
alert.setAdditionalContentView(npcBannerView)
alert.setButton(AlertDialog.BUTTON_POSITIVE, context.getString(R.string.close)) { dialog, _ ->
dialog.dismiss()
@ -241,9 +240,8 @@ class QuestProgressView : LinearLayout {
private fun showPendingStrikeAlert() {
val alert = HabiticaAlertDialog(context)
alert.setTitle(R.string.pending_strike_title)
alert.setTitleBackground(R.color.orange_10)
alert.setSubtitle(R.string.pending_strike_subtitle)
alert.setMessage(R.string.pending_strike_description)
// alert.setSubtitle(R.string.pending_strike_subtitle)
//alert.setMessage(R.string.pending_strike_description)
alert.setButton(AlertDialog.BUTTON_POSITIVE, context.getString(R.string.close)) { dialog, _ ->
dialog.dismiss()
}
@ -253,9 +251,8 @@ class QuestProgressView : LinearLayout {
private fun showStrikeDescriptionAlert() {
val alert = HabiticaAlertDialog(context)
alert.setTitle(R.string.strike_description_title)
alert.setTitleBackground(R.color.orange_10)
alert.setSubtitle(R.string.strike_description_subtitle)
alert.setMessage(R.string.strike_description_description)
// alert.setSubtitle(R.string.strike_description_subtitle)
//alert.setMessage(R.string.strike_description_description)
alert.setButton(AlertDialog.BUTTON_POSITIVE, context.getString(R.string.close)) { dialog, _ ->
dialog.dismiss()
}