• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.contacts.calllog;
18 
19 import com.android.contacts.R;
20 import com.android.internal.telephony.CallerInfo;
21 
22 import android.content.res.Resources;
23 import android.net.Uri;
24 import android.telephony.PhoneNumberUtils;
25 import android.text.TextUtils;
26 
27 /**
28  * Helper for formatting and managing phone numbers.
29  */
30 public class PhoneNumberHelper {
31     private final Resources mResources;
32     private final String mVoicemailNumber;
33 
PhoneNumberHelper(Resources resources, String voicemailNumber)34     public PhoneNumberHelper(Resources resources, String voicemailNumber) {
35         mResources = resources;
36         mVoicemailNumber = voicemailNumber;
37     }
38 
39     /** Returns true if it is possible to place a call to the given number. */
canPlaceCallsTo(CharSequence number)40     public boolean canPlaceCallsTo(CharSequence number) {
41         return !(TextUtils.isEmpty(number)
42                 || number.equals(CallerInfo.UNKNOWN_NUMBER)
43                 || number.equals(CallerInfo.PRIVATE_NUMBER)
44                 || number.equals(CallerInfo.PAYPHONE_NUMBER));
45     }
46 
47     /** Returns true if it is possible to send an SMS to the given number. */
canSendSmsTo(CharSequence number)48     public boolean canSendSmsTo(CharSequence number) {
49         return canPlaceCallsTo(number) && !isVoicemailNumber(number) && !isSipNumber(number);
50     }
51 
52     /**
53      * Returns the string to display for the given phone number.
54      *
55      * @param number the number to display
56      * @param formattedNumber the formatted number if available, may be null
57      */
getDisplayNumber(CharSequence number, CharSequence formattedNumber)58     public CharSequence getDisplayNumber(CharSequence number, CharSequence formattedNumber) {
59         if (TextUtils.isEmpty(number)) {
60             return "";
61         }
62         if (number.equals(CallerInfo.UNKNOWN_NUMBER)) {
63             return mResources.getString(R.string.unknown);
64         }
65         if (number.equals(CallerInfo.PRIVATE_NUMBER)) {
66             return mResources.getString(R.string.private_num);
67         }
68         if (number.equals(CallerInfo.PAYPHONE_NUMBER)) {
69             return mResources.getString(R.string.payphone);
70         }
71         if (PhoneNumberUtils.extractNetworkPortion(number.toString()).equals(mVoicemailNumber)) {
72             return mResources.getString(R.string.voicemail);
73         }
74         if (TextUtils.isEmpty(formattedNumber)) {
75             return number;
76         } else {
77             return formattedNumber;
78         }
79     }
80 
81     /** Returns a URI that can be used to place a call to this number. */
getCallUri(String number)82     public Uri getCallUri(String number) {
83         if (isVoicemailNumber(number)) {
84             return Uri.parse("voicemail:x");
85         }
86         if (isSipNumber(number)) {
87              return Uri.fromParts("sip", number, null);
88         }
89          return Uri.fromParts("tel", number, null);
90      }
91 
92     /** Returns true if the given number is the number of the configured voicemail. */
isVoicemailNumber(CharSequence number)93     public boolean isVoicemailNumber(CharSequence number) {
94         return PhoneNumberUtils.extractNetworkPortion(number.toString()).equals(mVoicemailNumber);
95     }
96 
97     /** Returns true if the given number is a SIP address. */
isSipNumber(CharSequence number)98     public boolean isSipNumber(CharSequence number) {
99         return PhoneNumberUtils.isUriNumber(number.toString());
100     }
101 }
102