mirror of
https://github.com/element-hq/element-android
synced 2024-11-24 10:25:35 +03:00
Format phone number
This commit is contained in:
parent
da4695ff2a
commit
58938a239e
4 changed files with 55 additions and 16 deletions
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* Copyright (c) 2020 New Vector Ltd
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package im.vector.app.core.extensions
|
||||
|
||||
import com.google.i18n.phonenumbers.PhoneNumberUtil
|
||||
import org.matrix.android.sdk.api.extensions.tryThis
|
||||
import org.matrix.android.sdk.api.session.identity.ThreePid
|
||||
|
||||
fun ThreePid.getFormattedValue(): String {
|
||||
return when (this) {
|
||||
is ThreePid.Email -> email
|
||||
is ThreePid.Msisdn -> {
|
||||
tryThis(message = "Unable to parse the phone number") {
|
||||
PhoneNumberUtil.getInstance().parse("+$msisdn", null)
|
||||
}
|
||||
?.let {
|
||||
PhoneNumberUtil.getInstance().format(it, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL)
|
||||
}
|
||||
?: msisdn
|
||||
}
|
||||
}
|
||||
}
|
|
@ -23,19 +23,18 @@ import com.airbnb.mvrx.Incomplete
|
|||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.airbnb.mvrx.Uninitialized
|
||||
import com.google.i18n.phonenumbers.PhoneNumberUtil
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.epoxy.attributes.ButtonStyle
|
||||
import im.vector.app.core.epoxy.attributes.ButtonType
|
||||
import im.vector.app.core.epoxy.attributes.IconMode
|
||||
import im.vector.app.core.epoxy.loadingItem
|
||||
import im.vector.app.core.error.ErrorFormatter
|
||||
import im.vector.app.core.extensions.getFormattedValue
|
||||
import im.vector.app.core.resources.ColorProvider
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import org.matrix.android.sdk.api.failure.Failure
|
||||
import org.matrix.android.sdk.api.session.identity.SharedState
|
||||
import org.matrix.android.sdk.api.session.identity.ThreePid
|
||||
import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
import javax.net.ssl.HttpsURLConnection
|
||||
|
||||
|
@ -235,16 +234,7 @@ class DiscoverySettingsController @Inject constructor(
|
|||
}
|
||||
|
||||
private fun buildMsisdn(pidInfo: PidInfo) {
|
||||
val phoneNumber = try {
|
||||
PhoneNumberUtil.getInstance().parse("+${pidInfo.threePid.value}", null)
|
||||
} catch (t: Throwable) {
|
||||
Timber.e(t, "Unable to parse the phone number")
|
||||
null
|
||||
}
|
||||
?.let {
|
||||
PhoneNumberUtil.getInstance().format(it, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL)
|
||||
}
|
||||
?: pidInfo.threePid.value
|
||||
val phoneNumber = pidInfo.threePid.getFormattedValue()
|
||||
|
||||
buildThreePid(pidInfo, phoneNumber)
|
||||
|
||||
|
|
|
@ -24,6 +24,8 @@ import com.airbnb.mvrx.Loading
|
|||
import com.airbnb.mvrx.Success
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.epoxy.loadingItem
|
||||
import im.vector.app.core.epoxy.noResultItem
|
||||
import im.vector.app.core.extensions.getFormattedValue
|
||||
import im.vector.app.core.resources.ColorProvider
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import im.vector.app.core.ui.list.genericButtonItem
|
||||
|
@ -107,20 +109,30 @@ class ThreePidsSettingsController @Inject constructor(
|
|||
?.filterIsInstance(ThreePid.Msisdn::class.java)
|
||||
?.forEach { buildPendingThreePid("p_msisdn ", it) }
|
||||
|
||||
/*
|
||||
// TODO Support adding MSISDN
|
||||
genericButtonItem {
|
||||
id("addMsisdn")
|
||||
text(stringProvider.getString(R.string.settings_add_phone_number))
|
||||
textColor(colorProvider.getColor(R.color.riotx_accent))
|
||||
buttonClickAction(View.OnClickListener { interactionListener?.addMsisdn() })
|
||||
}
|
||||
*/
|
||||
// Avoid empty area
|
||||
if (msisdn.isEmpty()) {
|
||||
noResultItem {
|
||||
id("no_msisdn")
|
||||
text(stringProvider.getString(R.string.settings_phone_numbers_empty))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildThreePid(idPrefix: String, threePid: ThreePid) {
|
||||
threePidItem {
|
||||
id(idPrefix + threePid.value)
|
||||
// TODO Add an icon for emails
|
||||
iconResId(if (threePid is ThreePid.Msisdn) R.drawable.ic_phone else null)
|
||||
title(threePid.value)
|
||||
// iconResId(if (threePid is ThreePid.Msisdn) R.drawable.ic_phone else null)
|
||||
title(threePid.getFormattedValue())
|
||||
deleteClickListener { interactionListener?.deleteThreePid(threePid) }
|
||||
}
|
||||
}
|
||||
|
@ -129,8 +141,8 @@ class ThreePidsSettingsController @Inject constructor(
|
|||
threePidItem {
|
||||
id(idPrefix + threePid.value)
|
||||
// TODO Add an icon for emails
|
||||
iconResId(if (threePid is ThreePid.Msisdn) R.drawable.ic_phone else null)
|
||||
title(threePid.value)
|
||||
// iconResId(if (threePid is ThreePid.Msisdn) R.drawable.ic_phone else null)
|
||||
title(threePid.getFormattedValue())
|
||||
}
|
||||
|
||||
if (threePid is ThreePid.Email) {
|
||||
|
|
|
@ -684,6 +684,7 @@
|
|||
|
||||
<string name="settings_emails">Email addresses</string>
|
||||
<string name="settings_phone_numbers">Phone numbers</string>
|
||||
<string name="settings_phone_numbers_empty">No phone number has been added to your account</string>
|
||||
<string name="settings_remove_three_pid_confirmation_content">Remove %s?</string>
|
||||
<string name="error_threepid_auth_failed">Ensure that you have clicked on the link in the email we have sent to you.</string>
|
||||
|
||||
|
|
Loading…
Reference in a new issue