Allow call to phone numbers or voice mail numbers only
It allows to call to well-formatted phone numbers or carrier specific
phone numbers starting with star sign such as *20 so that user can make
a call directly in a conversation for voice mail SMSs.
Revert "Check whether dialable only"
This reverts commit dbc43316cf2cf46bd928a957781b8cf73c3282a8.
Reason for revert: a call icon is disappeared for well-formatted phone
number with parentheses, dash and etc.
Test: Check the call icon in conversations for phone numbers and voice
mail numbers.
Signed-off-by: Taesu Lee <taesu82.lee@samsung.com>
Change-Id: I1b279f8a5372b00a5a0c572f9969731f1e633389
diff --git a/src/com/android/messaging/datamodel/data/ConversationData.java b/src/com/android/messaging/datamodel/data/ConversationData.java
index 5bddfeb..55d5bfc 100644
--- a/src/com/android/messaging/datamodel/data/ConversationData.java
+++ b/src/com/android/messaging/datamodel/data/ConversationData.java
@@ -700,7 +700,7 @@
final ParticipantData participant = this.getOtherParticipant();
if (participant != null) {
final String phoneNumber = participant.getSendDestination();
- if (!TextUtils.isEmpty(phoneNumber) && MmsSmsUtils.isDialable(phoneNumber)) {
+ if (!TextUtils.isEmpty(phoneNumber) && MmsSmsUtils.isPhoneNumber(phoneNumber)) {
return phoneNumber;
}
}
diff --git a/src/com/android/messaging/sms/MmsSmsUtils.java b/src/com/android/messaging/sms/MmsSmsUtils.java
index aa20395..7719359 100644
--- a/src/com/android/messaging/sms/MmsSmsUtils.java
+++ b/src/com/android/messaging/sms/MmsSmsUtils.java
@@ -100,25 +100,29 @@
return match.matches();
}
- /** True if c is ISO-LATIN characters 0-9, *, # , + */
- public static final boolean isDialable(char c) {
- return (c >= '0' && c <= '9') || c == '*' || c == '#' || c == '+';
- }
+ /**
+ * This pattern is intended for searching for carrier specific phone numbers starting with star
+ * sign and digits such as the voice mail number.
+ * (e.g. *20 Chile Claro)
+ */
+ private static final Pattern PHONE_NUMBER_STARTING_WITH_STAR_PATTERN =
+ Pattern.compile("\\*[0-9]+");
/**
- * Returns true if the address is a dialable phone number.
+ * Returns true if the number is a Phone number
*
- * @param address the input address to be tested
- * @return true if address is a dialable phone number
+ * @param number the input number to be tested
+ * @return true if number is a Phone number
*/
- public static boolean isDialable(final String address) {
- if (TextUtils.isEmpty(address)) {
+ public static boolean isPhoneNumber(final String number) {
+ if (TextUtils.isEmpty(number)) {
return false;
}
- for (int i = 0, count = address.length(); i < count; i++) {
- if (!isDialable(address.charAt(i))) {
- return false;
- }
+
+ Matcher match = Patterns.PHONE.matcher(number);
+ if (!match.matches()) {
+ match = PHONE_NUMBER_STARTING_WITH_STAR_PATTERN.matcher(number);
+ return match.matches();
}
return true;
}