diff --git a/app/src/main/java/org/mozilla/fenix/settings/AccountAuthErrorPreference.kt b/app/src/main/java/org/mozilla/fenix/settings/AccountAuthErrorPreference.kt index d4d944514..cde32e461 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/AccountAuthErrorPreference.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/AccountAuthErrorPreference.kt @@ -11,13 +11,15 @@ import android.widget.TextView import androidx.preference.Preference import androidx.preference.PreferenceViewHolder import org.mozilla.fenix.R +import kotlin.properties.Delegates class AccountAuthErrorPreference @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, attributeSetId: Int = android.R.attr.preferenceStyle ) : Preference(context, attrs, attributeSetId) { - var email: String? = null + private var emailView: TextView? = null + var email: String? by Delegates.observable(null) { _, _, new -> updateEmailView(new) } init { layoutResource = R.layout.account_auth_error_preference @@ -25,9 +27,13 @@ class AccountAuthErrorPreference @JvmOverloads constructor( override fun onBindViewHolder(holder: PreferenceViewHolder) { super.onBindViewHolder(holder) - val emailView = holder.findViewById(R.id.email) as TextView - emailView.text = email.orEmpty() - emailView.visibility = when (email.isNullOrEmpty()) { + emailView = holder.findViewById(R.id.email) as TextView + updateEmailView(email) + } + + private fun updateEmailView(email: String?) { + emailView?.text = email.orEmpty() + emailView?.visibility = when (email.isNullOrEmpty()) { true -> View.GONE false -> View.VISIBLE } diff --git a/app/src/main/java/org/mozilla/fenix/settings/AccountPreference.kt b/app/src/main/java/org/mozilla/fenix/settings/AccountPreference.kt index 6976568cb..32248ea1f 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/AccountPreference.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/AccountPreference.kt @@ -11,13 +11,21 @@ import android.widget.TextView import androidx.preference.Preference import androidx.preference.PreferenceViewHolder import org.mozilla.fenix.R +import kotlin.properties.Delegates class AccountPreference @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : Preference(context, attrs) { - var displayName: String? = null - var email: String? = null + private var emailView: TextView? = null + private var displayNameView: TextView? = null + var displayName: String? by Delegates.observable(null) { _, _, new -> + updateDisplayName(new) + } + + var email: String? by Delegates.observable(null) { _, _, new -> + new?.let { updateEmailText(it) } + } init { layoutResource = R.layout.account_preference @@ -25,18 +33,26 @@ class AccountPreference @JvmOverloads constructor( override fun onBindViewHolder(holder: PreferenceViewHolder) { super.onBindViewHolder(holder) - val displayNameView = holder.findViewById(R.id.displayName) as TextView - val emailView = holder.findViewById(R.id.email) as TextView + displayNameView = holder.findViewById(R.id.displayName) as TextView + emailView = holder.findViewById(R.id.email) as TextView - displayNameView.text = displayName.orEmpty() - displayNameView.visibility = when (displayName.isNullOrEmpty()) { - true -> View.GONE - false -> View.VISIBLE - } + updateDisplayName(displayName) // There is a potential for a race condition here. We might not have the user profile by the time we display // this field, in which case we won't have the email address (or the display name, but that we may just not have // at all even after fetching the profile). We don't hide the email field or change its text if email is missing // because in the layout a default value ("Firefox Account") is specified, which will be displayed instead. - email?.let { emailView.text = it } + email?.let { emailView?.text = it } + } + + private fun updateEmailText(email: String) { + emailView?.text = email + } + + private fun updateDisplayName(name: String?) { + displayNameView?.text = name.orEmpty() + displayNameView?.visibility = when (displayName.isNullOrEmpty()) { + true -> View.GONE + false -> View.VISIBLE + } } } diff --git a/app/src/main/res/layout/account_preference.xml b/app/src/main/res/layout/account_preference.xml index 5cddc705f..152c8a955 100644 --- a/app/src/main/res/layout/account_preference.xml +++ b/app/src/main/res/layout/account_preference.xml @@ -2,27 +2,27 @@ - + android:paddingEnd="16dp"> + + app:maxHeight="48dp" + app:maxWidth="48dp" /> + android:paddingBottom="16dp"> - + - + - +