Optimisation and cleanup

This commit is contained in:
Benoit Marty 2020-08-31 22:20:59 +02:00
parent ddb858380e
commit 5594489b69
5 changed files with 47 additions and 19 deletions

View File

@ -17,6 +17,7 @@
package im.vector.app.core.extensions package im.vector.app.core.extensions
import com.google.i18n.phonenumbers.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil
import org.matrix.android.sdk.api.extensions.ensurePrefix
import org.matrix.android.sdk.api.extensions.tryThis import org.matrix.android.sdk.api.extensions.tryThis
import org.matrix.android.sdk.api.session.identity.ThreePid import org.matrix.android.sdk.api.session.identity.ThreePid
@ -25,7 +26,7 @@ fun ThreePid.getFormattedValue(): String {
is ThreePid.Email -> email is ThreePid.Email -> email
is ThreePid.Msisdn -> { is ThreePid.Msisdn -> {
tryThis(message = "Unable to parse the phone number") { tryThis(message = "Unable to parse the phone number") {
PhoneNumberUtil.getInstance().parse("+$msisdn", null) PhoneNumberUtil.getInstance().parse(msisdn.ensurePrefix("+"), null)
} }
?.let { ?.let {
PhoneNumberUtil.getInstance().format(it, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL) PhoneNumberUtil.getInstance().format(it, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL)

View File

@ -267,8 +267,8 @@ class DiscoverySettingsController @Inject constructor(
} }
} }
override fun onCodeChange(code: String) { override fun onTextChange(text: String) {
codes[pidInfo.threePid] = code codes[pidInfo.threePid] = text
} }
}) })
} }

View File

@ -31,15 +31,17 @@ import im.vector.app.core.extensions.setTextOrHide
@EpoxyModelClass(layout = R.layout.item_settings_edit_text) @EpoxyModelClass(layout = R.layout.item_settings_edit_text)
abstract class SettingsEditTextItem : EpoxyModelWithHolder<SettingsEditTextItem.Holder>() { abstract class SettingsEditTextItem : EpoxyModelWithHolder<SettingsEditTextItem.Holder>() {
@EpoxyAttribute var hint: String? = null
@EpoxyAttribute var descriptionText: String? = null @EpoxyAttribute var descriptionText: String? = null
@EpoxyAttribute var errorText: String? = null @EpoxyAttribute var errorText: String? = null
@EpoxyAttribute var inProgress: Boolean = false @EpoxyAttribute var inProgress: Boolean = false
@EpoxyAttribute var inputType: Int? = null
@EpoxyAttribute @EpoxyAttribute
var interactionListener: Listener? = null var interactionListener: Listener? = null
private val textChangeListener: (text: CharSequence?, start: Int, count: Int, after: Int) -> Unit = { code, _, _, _ -> private val textChangeListener: (text: CharSequence?, start: Int, count: Int, after: Int) -> Unit = { text, _, _, _ ->
code?.let { interactionListener?.onCodeChange(it.toString()) } text?.let { interactionListener?.onTextChange(it.toString()) }
} }
private val editorActionListener = object : TextView.OnEditorActionListener { private val editorActionListener = object : TextView.OnEditorActionListener {
@ -63,6 +65,8 @@ abstract class SettingsEditTextItem : EpoxyModelWithHolder<SettingsEditTextItem.
} else { } else {
holder.textInputLayout.error = errorText holder.textInputLayout.error = errorText
} }
holder.textInputLayout.hint = hint
inputType?.let { holder.editText.inputType = it }
holder.editText.doOnTextChanged(textChangeListener) holder.editText.doOnTextChanged(textChangeListener)
holder.editText.setOnEditorActionListener(editorActionListener) holder.editText.setOnEditorActionListener(editorActionListener)
@ -76,6 +80,6 @@ abstract class SettingsEditTextItem : EpoxyModelWithHolder<SettingsEditTextItem.
interface Listener { interface Listener {
fun onValidate() fun onValidate()
fun onCodeChange(code: String) fun onTextChange(text: String)
} }
} }

View File

@ -31,11 +31,12 @@ import im.vector.app.core.resources.ColorProvider
import im.vector.app.core.resources.StringProvider import im.vector.app.core.resources.StringProvider
import im.vector.app.core.ui.list.genericButtonItem import im.vector.app.core.ui.list.genericButtonItem
import im.vector.app.core.ui.list.genericFooterItem import im.vector.app.core.ui.list.genericFooterItem
import im.vector.app.features.discovery.SettingsEditTextItem
import im.vector.app.features.discovery.settingsContinueCancelItem import im.vector.app.features.discovery.settingsContinueCancelItem
import im.vector.app.features.discovery.settingsEditTextItem
import im.vector.app.features.discovery.settingsInfoItem import im.vector.app.features.discovery.settingsInfoItem
import im.vector.app.features.discovery.settingsInformationItem import im.vector.app.features.discovery.settingsInformationItem
import im.vector.app.features.discovery.settingsSectionTitleItem import im.vector.app.features.discovery.settingsSectionTitleItem
import im.vector.app.features.form.formEditTextItem
import org.matrix.android.sdk.api.session.identity.ThreePid import org.matrix.android.sdk.api.session.identity.ThreePid
import javax.inject.Inject import javax.inject.Inject
@ -127,13 +128,20 @@ class ThreePidsSettingsController @Inject constructor(
buttonClickAction(View.OnClickListener { interactionListener?.addEmail() }) buttonClickAction(View.OnClickListener { interactionListener?.addEmail() })
} }
is ThreePidsSettingsState.AddingEmail -> { is ThreePidsSettingsState.AddingEmail -> {
formEditTextItem { settingsEditTextItem {
id("addingEmail") id("addingEmail")
inputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS) inputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS)
hint(stringProvider.getString(R.string.medium_email)) hint(stringProvider.getString(R.string.medium_email))
errorMessage(data.state.error) errorText(data.state.error)
onTextChange { currentInputValue = it } interactionListener(object : SettingsEditTextItem.Listener {
showBottomSeparator(false) override fun onValidate() {
interactionListener?.doAddEmail(currentInputValue)
}
override fun onTextChange(text: String) {
currentInputValue = text
}
})
} }
settingsContinueCancelItem { settingsContinueCancelItem {
id("contAddingEmail") id("contAddingEmail")
@ -180,13 +188,20 @@ class ThreePidsSettingsController @Inject constructor(
id("addingMsisdnInfo") id("addingMsisdnInfo")
helperText(stringProvider.getString(R.string.login_msisdn_notice)) helperText(stringProvider.getString(R.string.login_msisdn_notice))
} }
formEditTextItem { settingsEditTextItem {
id("addingMsisdn") id("addingMsisdn")
inputType(InputType.TYPE_CLASS_PHONE) inputType(InputType.TYPE_CLASS_PHONE)
hint(stringProvider.getString(R.string.medium_phone_number)) hint(stringProvider.getString(R.string.medium_phone_number))
errorMessage(data.state.error) errorText(data.state.error)
onTextChange { currentInputValue = it } interactionListener(object : SettingsEditTextItem.Listener {
showBottomSeparator(false) override fun onValidate() {
interactionListener?.doAddMsisdn(currentInputValue)
}
override fun onTextChange(text: String) {
currentInputValue = text
}
})
} }
settingsContinueCancelItem { settingsContinueCancelItem {
id("contAddingMsisdn") id("contAddingMsisdn")
@ -234,12 +249,19 @@ class ThreePidsSettingsController @Inject constructor(
message(stringProvider.getString(R.string.settings_text_message_sent, threePid.getFormattedValue())) message(stringProvider.getString(R.string.settings_text_message_sent, threePid.getFormattedValue()))
colorProvider(colorProvider) colorProvider(colorProvider)
} }
formEditTextItem { settingsEditTextItem {
id("msisdnVerification${threePid.value}") id("msisdnVerification${threePid.value}")
inputType(InputType.TYPE_CLASS_NUMBER) inputType(InputType.TYPE_CLASS_NUMBER)
hint(stringProvider.getString(R.string.settings_text_message_sent_hint)) hint(stringProvider.getString(R.string.settings_text_message_sent_hint))
showBottomSeparator(false) interactionListener(object : SettingsEditTextItem.Listener {
onTextChange { currentCodes[threePid] = it } override fun onValidate() {
interactionListener?.submitCode(threePid, currentCodes[threePid] ?: "")
}
override fun onTextChange(text: String) {
currentCodes[threePid] = text
}
})
} }
settingsContinueCancelItem { settingsContinueCancelItem {
id("cont" + idPrefix + threePid.value) id("cont" + idPrefix + threePid.value)

View File

@ -28,6 +28,7 @@ import im.vector.app.core.dialogs.withColoredButton
import im.vector.app.core.extensions.cleanup import im.vector.app.core.extensions.cleanup
import im.vector.app.core.extensions.configureWith import im.vector.app.core.extensions.configureWith
import im.vector.app.core.extensions.exhaustive import im.vector.app.core.extensions.exhaustive
import im.vector.app.core.extensions.getFormattedValue
import im.vector.app.core.extensions.hideKeyboard import im.vector.app.core.extensions.hideKeyboard
import im.vector.app.core.extensions.isEmail import im.vector.app.core.extensions.isEmail
import im.vector.app.core.extensions.isMsisdn import im.vector.app.core.extensions.isMsisdn
@ -158,7 +159,7 @@ class ThreePidsSettingsFragment @Inject constructor(
override fun deleteThreePid(threePid: ThreePid) { override fun deleteThreePid(threePid: ThreePid) {
AlertDialog.Builder(requireActivity()) AlertDialog.Builder(requireActivity())
.setMessage(getString(R.string.settings_remove_three_pid_confirmation_content, threePid.value)) .setMessage(getString(R.string.settings_remove_three_pid_confirmation_content, threePid.getFormattedValue()))
.setPositiveButton(R.string.remove) { _, _ -> .setPositiveButton(R.string.remove) { _, _ ->
viewModel.handle(ThreePidsSettingsAction.DeleteThreePid(threePid)) viewModel.handle(ThreePidsSettingsAction.DeleteThreePid(threePid))
} }