diff --git a/vector/src/main/java/im/vector/app/core/extensions/ThreePid.kt b/vector/src/main/java/im/vector/app/core/extensions/ThreePid.kt new file mode 100644 index 0000000000..8afbfd0f63 --- /dev/null +++ b/vector/src/main/java/im/vector/app/core/extensions/ThreePid.kt @@ -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 + } + } +} diff --git a/vector/src/main/java/im/vector/app/features/discovery/DiscoverySettingsController.kt b/vector/src/main/java/im/vector/app/features/discovery/DiscoverySettingsController.kt index b63f82be81..e68537a108 100644 --- a/vector/src/main/java/im/vector/app/features/discovery/DiscoverySettingsController.kt +++ b/vector/src/main/java/im/vector/app/features/discovery/DiscoverySettingsController.kt @@ -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) diff --git a/vector/src/main/java/im/vector/app/features/settings/threepids/ThreePidsSettingsController.kt b/vector/src/main/java/im/vector/app/features/settings/threepids/ThreePidsSettingsController.kt index 3899ac9166..9e77adafc9 100644 --- a/vector/src/main/java/im/vector/app/features/settings/threepids/ThreePidsSettingsController.kt +++ b/vector/src/main/java/im/vector/app/features/settings/threepids/ThreePidsSettingsController.kt @@ -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) { diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 43a2f73947..553dc1674e 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -684,6 +684,7 @@ Email addresses Phone numbers + No phone number has been added to your account Remove %s? Ensure that you have clicked on the link in the email we have sent to you.