tweak new alert design

This commit is contained in:
Phillip Thelen 2019-05-21 12:28:16 +02:00
parent e5dd85e5ea
commit f66d7c8ab9
12 changed files with 140 additions and 40 deletions

View file

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:state_enabled="true">
<set>
<objectAnimator android:propertyName="translationZ"
android:duration="100"
android:valueTo="4dp"
android:valueType="floatType"/>
<objectAnimator android:propertyName="elevation"
android:duration="0"
android:valueTo="2dp"
android:valueType="floatType"/>
</set>
</item>
<!-- base state -->
<item android:state_enabled="true">
<set>
<objectAnimator android:propertyName="translationZ"
android:duration="100"
android:valueTo="0"
android:startDelay="100"
android:valueType="floatType"/>
<objectAnimator android:propertyName="elevation"
android:duration="0"
android:valueTo="2dp"
android:valueType="floatType" />
</set>
</item>
<item>
<set>
<objectAnimator android:propertyName="translationZ"
android:duration="0"
android:valueTo="0"
android:valueType="floatType"/>
<objectAnimator android:propertyName="elevation"
android:duration="0"
android:valueTo="0"
android:valueType="floatType"/>
</set>
</item>
</selector>

View file

@ -32,7 +32,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/create" android:text="@string/create"
style="@style/HabiticaButton" style="@style/HabiticaButton.Borderless"
android:textColor="@color/brand_400" android:textColor="@color/brand_400"
android:paddingEnd="@dimen/spacing_large" android:paddingEnd="@dimen/spacing_large"
android:paddingStart="@dimen/spacing_large" android:paddingStart="@dimen/spacing_large"

View file

@ -27,6 +27,8 @@
android:paddingBottom="@dimen/spacing_large" android:paddingBottom="@dimen/spacing_large"
style="@style/Headline6" style="@style/Headline6"
tools:text="This is the title" tools:text="This is the title"
android:visibility="gone"
tools:visibility="visible"
/> />
<TextView <TextView

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/HabiticaButton.Primary">
</Button>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/HabiticaButton.Borderless"
android:textColor="@color/brand_400">
</Button>

View file

@ -2,7 +2,9 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent" android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/white"> android:background="@drawable/alert_dialog_background"
android:paddingTop="26dp"
android:paddingBottom="26dp">
<TextView <TextView
android:id="@+id/titleTextView" android:id="@+id/titleTextView"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -10,8 +12,13 @@
android:text="@string/welcome_back" android:text="@string/welcome_back"
android:gravity="center" android:gravity="center"
android:padding="12dp" android:padding="12dp"
style="@style/Title1" style="@style/Title1"/>
android:background="@color/gray_700"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/yesterdaililes_prompt"
android:layout_gravity="center"/>
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -22,17 +29,17 @@
android:padding="8dp" android:padding="8dp"
android:background="@color/gray_700" android:background="@color/gray_700"
android:orientation="vertical"> android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/yesterdaililes_prompt" />
<LinearLayout <LinearLayout
android:id="@+id/yesterdailies_list" android:id="@+id/yesterdailies_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"/>
android:layout_marginTop="8dp"/>
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>
<Button
android:layout_width="wrap_content"
android:layout_gravity="center"
style="@style/HabiticaButton.Primary"
android:text="@string/start_day"/>
</LinearLayout> </LinearLayout>

View file

@ -64,7 +64,7 @@
android:background="@drawable/snackbar_right_bg" android:background="@drawable/snackbar_right_bg"
android:paddingLeft="8dp" android:paddingLeft="8dp"
android:paddingRight="8dp" android:paddingRight="8dp"
android:layout_marginRight="1dp" android:layout_marginEnd="1dp"
android:layout_marginTop="1dp" android:layout_marginTop="1dp"
android:layout_marginBottom="1dp" android:layout_marginBottom="1dp"
android:visibility="gone" android:visibility="gone"

View file

@ -617,7 +617,7 @@
<string name="leave_quest_confirmation">Are you sure you want to leave the active quest? All your quest progress will be lost.</string> <string name="leave_quest_confirmation">Are you sure you want to leave the active quest? All your quest progress will be lost.</string>
<string name="number_participants">%1$d Participants</string> <string name="number_participants">%1$d Participants</string>
<string name="welcome_back">Welcome Back</string> <string name="welcome_back">Welcome Back</string>
<string name="yesterdaililes_prompt">Did you do any of these Dailies yesterday?</string> <string name="yesterdaililes_prompt">Check off any Dailies you did yesterday:</string>
<string name="start_day">Start My Day</string> <string name="start_day">Start My Day</string>
<string name="leave_party_confirmation">Are you sure you want to leave the Party?</string> <string name="leave_party_confirmation">Are you sure you want to leave the Party?</string>
<string name="nextPrizeUnlocksIn" formatted="false">Next Prize in %d Check-ins</string> <string name="nextPrizeUnlocksIn" formatted="false">Next Prize in %d Check-ins</string>

View file

@ -16,6 +16,9 @@
<item name="windowNoTitle">true</item> <item name="windowNoTitle">true</item>
<!-- ...and here we setting appcompats color theming attrs --> <!-- ...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_400</item>
<item name="android:colorPrimary">@color/brand</item> <item name="android:colorPrimary">@color/brand</item>
<item name="android:colorPrimaryDark">@color/brand_50</item> <item name="android:colorPrimaryDark">@color/brand_50</item>
<item name="android:colorAccent">@color/brand_400</item> <item name="android:colorAccent">@color/brand_400</item>
@ -196,6 +199,10 @@
<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/brand_100</item> <item name="colorAccent">@color/brand_100</item>
</style>
<style name="HabiticaAlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/brand_100</item>
<item name="android:windowFrame">@null</item> <item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item> <item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item> <item name="android:windowContentOverlay">@null</item>
@ -422,7 +429,20 @@
<item name="android:orientation">vertical</item> <item name="android:orientation">vertical</item>
</style> </style>
<style name="HabiticaButton" parent="@style/Widget.AppCompat.Button.Borderless"> <style name="HabiticaButton" parent="@style/Widget.AppCompat.Button">
<item name="android:textAllCaps">false</item>
<item name="android:textSize">16sp</item>
<item name="android:fontFamily">@string/font_family_medium</item>
<item name="android:minHeight">@dimen/button_height</item>
<item name="android:textColor">@color/white</item>
<item name="android:shadowColor">@color/gray_400</item>
<item name="android:layout_height">@dimen/button_height</item>
<item name="android:paddingStart">@dimen/spacing_large</item>
<item name="android:paddingEnd">@dimen/spacing_large</item>
<item name="android:minWidth">147dp</item>
</style>
<style name="HabiticaButton.Borderless" parent="@style/Widget.AppCompat.Button.Borderless">
<item name="android:textAllCaps">false</item> <item name="android:textAllCaps">false</item>
<item name="android:textSize">16sp</item> <item name="android:textSize">16sp</item>
<item name="android:fontFamily">@string/font_family_medium</item> <item name="android:fontFamily">@string/font_family_medium</item>
@ -430,6 +450,14 @@
<item name="android:shadowColor">@color/transparent</item> <item name="android:shadowColor">@color/transparent</item>
<item name="android:textColor">@color/white</item> <item name="android:textColor">@color/white</item>
<item name="android:layout_height">@dimen/button_height</item> <item name="android:layout_height">@dimen/button_height</item>
<item name="android:paddingStart">@dimen/spacing_large</item>
<item name="android:paddingEnd">@dimen/spacing_large</item>
<item name="android:minWidth">147dp</item>
</style>
<style name="HabiticaButton.Primary" parent="HabiticaButton">
<item name="android:background">@drawable/button_background_primary</item>
<item name="android:text">?textColorPrimaryDark</item>
</style> </style>
<style name="HabiticaButton.Gray" parent="HabiticaButton"> <style name="HabiticaButton.Gray" parent="HabiticaButton">

View file

@ -19,7 +19,6 @@ import android.view.Window
import android.view.WindowManager import android.view.WindowManager
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import android.widget.* import android.widget.*
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.content.edit import androidx.core.content.edit
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
@ -576,7 +575,7 @@ class LoginActivity : BaseActivity(), Consumer<UserAuthResponse> {
val alertDialog = HabiticaAlertDialog(this) val alertDialog = HabiticaAlertDialog(this)
alertDialog.setTitle(R.string.forgot_password_title) alertDialog.setTitle(R.string.forgot_password_title)
alertDialog.setMessage(R.string.forgot_password_description) alertDialog.setMessage(R.string.forgot_password_description)
alertDialog.setView(input) alertDialog.setAdditionalContentView(input)
alertDialog.addButton(R.string.send, true) { _, _ -> alertDialog.addButton(R.string.send, true) { _, _ ->
userRepository.sendPasswordResetEmail(input.text.toString()).subscribe(Consumer { showPasswordEmailConfirmation() }, RxErrorHandler.handleEmptyError()) userRepository.sendPasswordResetEmail(input.text.toString()).subscribe(Consumer { showPasswordEmailConfirmation() }, RxErrorHandler.handleEmptyError())
} }

View file

@ -2,22 +2,25 @@ package com.habitrpg.android.habitica.ui.fragments.social
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AlertDialog import android.view.LayoutInflater
import android.view.* import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.EditText import android.widget.EditText
import android.widget.TextView import android.widget.TextView
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.AppComponent import com.habitrpg.android.habitica.components.AppComponent
import com.habitrpg.android.habitica.data.SocialRepository import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.extensions.notNull 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.AppConfigManager
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.social.ChatMessage import com.habitrpg.android.habitica.models.social.ChatMessage
import com.habitrpg.android.habitica.modules.AppModule import com.habitrpg.android.habitica.modules.AppModule
import com.habitrpg.android.habitica.ui.AvatarView import com.habitrpg.android.habitica.ui.AvatarView
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
import com.habitrpg.android.habitica.ui.views.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.social.UsernameLabel import com.habitrpg.android.habitica.ui.views.social.UsernameLabel
import io.reactivex.functions.Consumer import io.reactivex.functions.Consumer
import io.realm.RealmResults import io.realm.RealmResults
@ -82,18 +85,16 @@ class InboxFragment : BaseMainFragment(), androidx.swiperefreshlayout.widget.Swi
this.chooseRecipientDialogView = this.activity?.layoutInflater?.inflate(R.layout.dialog_choose_message_recipient, null) this.chooseRecipientDialogView = this.activity?.layoutInflater?.inflate(R.layout.dialog_choose_message_recipient, null)
this.activity.notNull { thisActivity -> this.activity.notNull { thisActivity ->
val alert = AlertDialog.Builder(thisActivity) val alert = HabiticaAlertDialog(thisActivity)
.setTitle(getString(R.string.choose_recipient_title)) alert.setTitle(getString(R.string.choose_recipient_title))
.setPositiveButton(getString(R.string.action_continue)) { _, _ -> alert.addButton(getString(R.string.action_continue), true) { _, _ ->
val uuidEditText = chooseRecipientDialogView?.findViewById<View>(R.id.uuidEditText) as? EditText val uuidEditText = chooseRecipientDialogView?.findViewById<View>(R.id.uuidEditText) as? EditText
openInboxMessages(uuidEditText?.text?.toString() ?: "", "") openInboxMessages(uuidEditText?.text?.toString() ?: "", "")
} }
.setNeutralButton(getString(R.string.action_cancel)) { dialog, _ -> alert.addButton(getString(R.string.action_cancel), false) { dialog, _ ->
thisActivity.dismissKeyboard() thisActivity.dismissKeyboard()
dialog.cancel()
} }
.create() alert.setAdditionalContentView(chooseRecipientDialogView)
alert.setView(chooseRecipientDialogView)
alert.show() alert.show()
} }

View file

@ -1,7 +1,6 @@
package com.habitrpg.android.habitica.ui.views package com.habitrpg.android.habitica.ui.views
import android.content.Context import android.content.Context
import android.graphics.drawable.ColorDrawable
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@ -9,15 +8,14 @@ import android.widget.Button
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.dpToPx import com.habitrpg.android.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.extensions.getThemeColor import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.extensions.setScaledPadding import com.habitrpg.android.habitica.extensions.setScaledPadding
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
open class HabiticaAlertDialog(context: Context) : AlertDialog(context) { open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style.HabiticaAlertDialogTheme) {
private val view: LinearLayout = LayoutInflater.from(context).inflate(R.layout.dialog_habitica_base, null) as LinearLayout private val view: LinearLayout = LayoutInflater.from(context).inflate(R.layout.dialog_habitica_base, null) as LinearLayout
private var titleTextView: TextView private var titleTextView: TextView
@ -36,6 +34,11 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context) {
} }
override fun setTitle(title: CharSequence?) { override fun setTitle(title: CharSequence?) {
if (title != null) {
titleTextView.visibility = View.VISIBLE
} else {
titleTextView.visibility = View.GONE
}
titleTextView.text = title titleTextView.text = title
} }
@ -72,8 +75,6 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context) {
contentView.forceLayout() contentView.forceLayout()
} }
fun getContentView(): View? = additionalContentView fun getContentView(): View? = additionalContentView
fun addButton(stringRes: Int, isPrimary: Boolean, function: ((HabiticaAlertDialog, Int) -> Unit)? = null) { fun addButton(stringRes: Int, isPrimary: Boolean, function: ((HabiticaAlertDialog, Int) -> Unit)? = null) {
@ -81,17 +82,12 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context) {
} }
fun addButton(string: String, isPrimary: Boolean, function: ((HabiticaAlertDialog, Int) -> Unit)? = null) { fun addButton(string: String, isPrimary: Boolean, function: ((HabiticaAlertDialog, Int) -> Unit)? = null) {
val button = Button(context) val button: Button = if (isPrimary) {
button.text = string buttonsWrapper.inflate(R.layout.dialog_habitica_primary_button) as Button
button.transformationMethod = null
button.textSize = 16f
if (isPrimary) {
button.background = context.getDrawable(R.drawable.button_background_primary)
button.setTextColor(context.getThemeColor(R.attr.textColorPrimaryDark))
} else { } else {
button.background = ColorDrawable(ContextCompat.getColor(context, R.color.transparent)) buttonsWrapper.inflate(R.layout.dialog_habitica_secondary_button) as Button
button.setTextColor(ContextCompat.getColor(context, R.color.brand_400))
} }
button.text = string
val weakThis = WeakReference<HabiticaAlertDialog>(this) val weakThis = WeakReference<HabiticaAlertDialog>(this)
val buttonIndex = buttonsWrapper.childCount val buttonIndex = buttonsWrapper.childCount
button.setOnClickListener { button.setOnClickListener {