1 /*
2  * Copyright (C) 2012 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.model.dataitem;
18 
19 import android.content.ContentValues;
20 import android.content.Context;
21 import android.provider.ContactsContract;
22 import android.provider.ContactsContract.CommonDataKinds.Phone;
23 
24 import com.android.contacts.compat.PhoneNumberUtilsCompat;
25 
26 /**
27  * Represents a phone data item, wrapping the columns in
28  * {@link ContactsContract.CommonDataKinds.Phone}.
29  */
30 public class PhoneDataItem extends DataItem {
31 
32     public static final String KEY_FORMATTED_PHONE_NUMBER = "formattedPhoneNumber";
33 
34     private boolean mTachyonReachable;
35     // Stores the custom reachable data item to provide extra data to the Entry created from this
36     // PhoneDataItem.
37     private DataItem mReachableDataItem;
38 
PhoneDataItem(ContentValues values)39     /* package */ PhoneDataItem(ContentValues values) {
40         super(values);
41     }
42 
getNumber()43     public String getNumber() {
44         return getContentValues().getAsString(Phone.NUMBER);
45     }
46 
47     /**
48      * Returns the normalized phone number in E164 format.
49      */
getNormalizedNumber()50     public String getNormalizedNumber() {
51         return getContentValues().getAsString(Phone.NORMALIZED_NUMBER);
52     }
53 
getFormattedPhoneNumber()54     public String getFormattedPhoneNumber() {
55         return getContentValues().getAsString(KEY_FORMATTED_PHONE_NUMBER);
56     }
57 
getLabel()58     public String getLabel() {
59         return getContentValues().getAsString(Phone.LABEL);
60     }
61 
setTachyonReachable(boolean tachyonReachable)62     public void setTachyonReachable(boolean tachyonReachable) {
63         mTachyonReachable = tachyonReachable;
64     }
65 
isTachyonReachable()66     public boolean isTachyonReachable() {
67         return mTachyonReachable;
68     }
69 
getReachableDataItem()70     public DataItem getReachableDataItem() {
71         return mReachableDataItem;
72     }
73 
setReachableDataItem(DataItem reachableDataItem)74     public void setReachableDataItem(DataItem reachableDataItem) {
75         mReachableDataItem = reachableDataItem;
76     }
77 
computeFormattedPhoneNumber(String defaultCountryIso)78     public void computeFormattedPhoneNumber(String defaultCountryIso) {
79         final String phoneNumber = getNumber();
80         if (phoneNumber != null) {
81             final String formattedPhoneNumber = PhoneNumberUtilsCompat.formatNumber(phoneNumber,
82                     getNormalizedNumber(), defaultCountryIso);
83             getContentValues().put(KEY_FORMATTED_PHONE_NUMBER, formattedPhoneNumber);
84         }
85     }
86 
87     /**
88      * Returns the formatted phone number (if already computed using {@link
89      * #computeFormattedPhoneNumber}). Otherwise this method returns the unformatted phone number.
90      */
91     @Override
buildDataStringForDisplay(Context context, DataKind kind)92     public String buildDataStringForDisplay(Context context, DataKind kind) {
93         final String formatted = getFormattedPhoneNumber();
94         if (formatted != null) {
95             return formatted;
96         } else {
97             return getNumber();
98         }
99     }
100 }
101