• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2015, Motorola Mobility LLC
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *     - Redistributions of source code must retain the above copyright
8  *       notice, this list of conditions and the following disclaimer.
9  *     - Redistributions in binary form must reproduce the above copyright
10  *       notice, this list of conditions and the following disclaimer in the
11  *       documentation and/or other materials provided with the distribution.
12  *     - Neither the name of Motorola Mobility nor the
13  *       names of its contributors may be used to endorse or promote products
14  *       derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
18  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MOTOROLA MOBILITY LLC BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
26  * DAMAGE.
27  */
28 
29 package com.android.service.ims.presence;
30 
31 import android.net.Uri;
32 import android.provider.BaseColumns;
33 import android.text.format.TimeMigrationUtils;
34 import com.android.ims.internal.EABContract;
35 
36 import com.android.ims.internal.ContactNumberUtils;
37 import com.android.ims.internal.Logger;
38 
39 public final class Contacts {
Contacts()40     private Contacts() {}
41 
42     /**
43      * Intent that a new contact is inserted in EAB Provider.
44      * This intent will have a extra parameter with key NEW_PHONE_NUMBER.
45      */
46     public static final String ACTION_NEW_CONTACT_INSERTED =
47             "android.provider.rcs.eab.EAB_NEW_CONTACT_INSERTED";
48 
49     /**
50      * Intent that EAB database is reset.
51      */
52     public static final String ACTION_EAB_DATABASE_RESET =
53             "android.provider.rcs.eab.EAB_DATABASE_RESET";
54 
55     /**
56      * Key to bundle the new phone number inserted in EAB Provider.
57      */
58     public static final String NEW_PHONE_NUMBER = "newPhoneNumber";
59 
60 
61     public static final String AUTHORITY = EABContract.AUTHORITY;
62 
63     public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
64 
65     public static final class Impl implements BaseColumns {
Impl()66         private Impl() {}
67 
68         public static final String TABLE_NAME =
69                 EABContract.EABColumns.TABLE_NAME;
70 
71         /**
72          * CONTENT_URI
73          * <P>
74          * "content://com.android.vt.eab/EABPresence"
75          * </P>
76          */
77         public static final Uri CONTENT_URI =
78                 Uri.withAppendedPath(Contacts.CONTENT_URI, TABLE_NAME);
79 
80         /**
81          * Key defining the contact number.
82          * <P>
83          * Type: TEXT
84          * </P>
85          */
86         public static final String FORMATTED_NUMBER =
87                 EABContract.EABColumns.FORMATTED_NUMBER;
88 
89         /**
90          * Key defining the contact number.
91          * <P>
92          * Type: TEXT
93          * </P>
94          */
95         public static final String CONTACT_NUMBER =
96                 EABContract.EABColumns.CONTACT_NUMBER;
97 
98         /**
99          * Key defining the contact name.
100          * <P>
101          * Type: TEXT
102          * </P>
103          */
104         public static final String CONTACT_NAME =
105                 EABContract.EABColumns.CONTACT_NAME;
106 
107         /**
108          * <p>
109          * Type: INT
110          * </p>
111          */
112         public static final String VOLTE_STATUS =
113                 EABContract.EABColumns.VOLTE_STATUS;
114 
115         /**
116          * Key defining the last updated timestamp.
117          * <P>
118          * Type: LONG
119          * </P>
120          */
121         public static final String CONTACT_LAST_UPDATED_TIMESTAMP =
122                 EABContract.EABColumns.CONTACT_LAST_UPDATED_TIMESTAMP;
123 
124         /**
125          * Key defining the VoLTE call service contact address.
126          * <P>
127          * Type: TEXT
128          * </P>
129          */
130         public static final String VOLTE_CALL_SERVICE_CONTACT_ADDRESS =
131                 EABContract.EABColumns.VOLTE_CALL_SERVICE_CONTACT_ADDRESS;
132 
133         /**
134          * Key defining the VoLTE call capability.
135          * <P>
136          * Type: TEXT
137          * </P>
138          */
139         public static final String VOLTE_CALL_CAPABILITY =
140                 EABContract.EABColumns.VOLTE_CALL_CAPABILITY;
141 
142         /**
143          * Key defining the VoLTE call capability timestamp.
144          * <P>
145          * Type: LONG
146          * </P>
147          */
148         public static final String VOLTE_CALL_CAPABILITY_TIMESTAMP =
149                 EABContract.EABColumns.VOLTE_CALL_CAPABILITY_TIMESTAMP;
150 
151         /**
152          * Key defining the VoLTE call availability.
153          * <P>
154          * Type: TEXT
155          * </P>
156          */
157         public static final String VOLTE_CALL_AVAILABILITY =
158                 EABContract.EABColumns.VOLTE_CALL_AVAILABILITY;
159 
160         /**
161          * Key defining the VoLTE call availability timestamp.
162          * <P>
163          * Type: LONG
164          * </P>
165          */
166         public static final String VOLTE_CALL_AVAILABILITY_TIMESTAMP =
167                 EABContract.EABColumns.VOLTE_CALL_AVAILABILITY_TIMESTAMP;
168 
169         /**
170          * Key defining the Video call service contact address.
171          * <P>
172          * Type: TEXT
173          * </P>
174          */
175         public static final String VIDEO_CALL_SERVICE_CONTACT_ADDRESS =
176                 EABContract.EABColumns.VIDEO_CALL_SERVICE_CONTACT_ADDRESS;
177 
178         /**
179          * Key defining the Video call capability.
180          * <P>
181          * Type: TEXT
182          * </P>
183          */
184         public static final String VIDEO_CALL_CAPABILITY =
185                 EABContract.EABColumns.VIDEO_CALL_CAPABILITY;
186 
187         /**
188          * Key defining the Video call capability timestamp.
189          * <P>
190          * Type: LONG
191          * </P>
192          */
193         public static final String VIDEO_CALL_CAPABILITY_TIMESTAMP =
194                 EABContract.EABColumns.VIDEO_CALL_CAPABILITY_TIMESTAMP;
195 
196         /**
197          * Key defining the Video call availability.
198          * <P>
199          * Type: TEXT
200          * </P>
201          */
202         public static final String VIDEO_CALL_AVAILABILITY =
203                 EABContract.EABColumns.VIDEO_CALL_AVAILABILITY;
204 
205         /**
206          * Key defining the Video call availability timestamp.
207          * <P>
208          * Type: LONG
209          * </P>
210          */
211         public static final String VIDEO_CALL_AVAILABILITY_TIMESTAMP =
212                 EABContract.EABColumns.VIDEO_CALL_AVAILABILITY_TIMESTAMP;
213     }
214 
215     public static class Item {
Item(long id)216         public Item(long id) {
217             mId = id;
218         }
219 
id()220         public long id() {
221             return mId;
222         }
223 
number()224         public String number() {
225             return mNumber;
226         }
227 
setNumber(String number)228         public void setNumber(String number) {
229             mNumber = ContactNumberUtils.getDefault().format(number);
230         }
231 
isValid()232         public boolean isValid() {
233             int res = ContactNumberUtils.getDefault().validate(mNumber);
234             return (res == ContactNumberUtils.NUMBER_VALID);
235         }
236 
name()237         public String name() {
238             return mName;
239         }
240 
setName(String name)241         public void setName(String name) {
242             mName = name;
243         }
244 
lastUpdateTime()245         public long lastUpdateTime() {
246             return mLastUpdateTime;
247         }
248 
setLastUpdateTime(long time)249         public void setLastUpdateTime(long time) {
250             mLastUpdateTime = time;
251         }
252 
volteTimestamp()253         public long volteTimestamp() {
254             return mVolteTimeStamp;
255         }
256 
setVolteTimestamp(long time)257         public void setVolteTimestamp(long time) {
258             mVolteTimeStamp = time;
259         }
260 
videoTimestamp()261         public long videoTimestamp() {
262             return mVideoTimeStamp;
263         }
264 
setVideoTimestamp(long time)265         public void setVideoTimestamp(long time) {
266             mVideoTimeStamp = time;
267         }
268 
269         @Override
equals(Object o)270         public boolean equals(Object o) {
271             if (this == o) return true;
272             if (!(o instanceof Contacts.Item)) return false;
273 
274             Contacts.Item that = (Contacts.Item) o;
275             return this.number().equalsIgnoreCase(that.number());
276         }
277 
278         @Override
toString()279         public String toString() {
280             return new StringBuilder(256)
281                 .append("Contacts.Item { ")
282                 .append("\nId: " + mId)
283                 .append("\nNumber: " + Logger.hidePhoneNumberPii(mNumber))
284                 .append("\nLast update time: " + mLastUpdateTime + "(" +
285                         getTimeString(mLastUpdateTime) + ")")
286                 .append("\nVolte capability timestamp: " + mVolteTimeStamp + "(" +
287                         getTimeString(mVolteTimeStamp) + ")")
288                 .append("\nVideo capability timestamp: " + mVideoTimeStamp + "(" +
289                         getTimeString(mVideoTimeStamp) + ")")
290                 .append("\nisValid: " + isValid())
291                 .append(" }")
292                 .toString();
293         }
294 
getTimeString(long time)295         private String getTimeString(long time) {
296             if (time <= 0) {
297                 time = System.currentTimeMillis();
298             }
299 
300             String timeString = TimeMigrationUtils.formatMillisWithFixedFormat(time);
301             return String.format("%s.%s", timeString, time % 1000);
302         }
303 
304         private long mId;
305         private String mNumber;
306         private String mName;
307         private long mLastUpdateTime;
308         private long mVolteTimeStamp;
309         private long mVideoTimeStamp;
310     }
311 }
312