• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 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.dialer.calllog.database.contract;
18 
19 import android.net.Uri;
20 import android.os.Build;
21 import android.provider.BaseColumns;
22 import com.android.dialer.compat.android.provider.VoicemailCompat;
23 import com.android.dialer.constants.Constants;
24 import java.util.Arrays;
25 
26 /** Contract for the AnnotatedCallLog content provider. */
27 public class AnnotatedCallLogContract {
28   public static final String AUTHORITY = Constants.get().getAnnotatedCallLogProviderAuthority();
29 
30   public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
31 
32   /**
33    * Columns shared by {@link AnnotatedCallLog} and {@link CoalescedAnnotatedCallLog}.
34    *
35    * <p>When adding columns be sure to update {@link #ALL_COMMON_COLUMNS}.
36    */
37   interface CommonColumns extends BaseColumns {
38 
39     /**
40      * Timestamp of the entry, in milliseconds.
41      *
42      * <p>Type: INTEGER (long)
43      */
44     String TIMESTAMP = "timestamp";
45 
46     /**
47      * The phone number called or number the call came from, encoded as a {@link
48      * com.android.dialer.DialerPhoneNumber} proto. The number may be empty if it was an incoming
49      * call and the number was unknown.
50      *
51      * <p>Type: BLOB
52      */
53     String NUMBER = "number";
54 
55     /**
56      * The number formatted as it should be displayed to the user. Note that it may not always be
57      * displayed, for example if the number has a corresponding person or business name.
58      *
59      * <p>Type: TEXT
60      */
61     String FORMATTED_NUMBER = "formatted_number";
62 
63     /**
64      * See {@link android.provider.CallLog.Calls#NUMBER_PRESENTATION}.
65      *
66      * <p>Type: INTEGER (int)
67      */
68     String NUMBER_PRESENTATION = "presentation";
69 
70     /**
71      * See {@link android.provider.CallLog.Calls#IS_READ}.
72      *
73      * <p>TYPE: INTEGER (boolean)
74      */
75     String IS_READ = "is_read";
76 
77     /**
78      * See {@link android.provider.CallLog.Calls#NEW}.
79      *
80      * <p>Type: INTEGER (boolean)
81      */
82     String NEW = "new";
83 
84     /**
85      * See {@link android.provider.CallLog.Calls#GEOCODED_LOCATION}.
86      *
87      * <p>TYPE: TEXT
88      */
89     String GEOCODED_LOCATION = "geocoded_location";
90 
91     /**
92      * See {@link android.provider.CallLog.Calls#PHONE_ACCOUNT_COMPONENT_NAME}.
93      *
94      * <p>TYPE: TEXT
95      */
96     String PHONE_ACCOUNT_COMPONENT_NAME = "phone_account_component_name";
97 
98     /**
99      * See {@link android.provider.CallLog.Calls#PHONE_ACCOUNT_ID}.
100      *
101      * <p>TYPE: TEXT
102      */
103     String PHONE_ACCOUNT_ID = "phone_account_id";
104 
105     /**
106      * String suitable for display which indicates the phone account used to make the call.
107      *
108      * <p>TYPE: TEXT
109      */
110     String PHONE_ACCOUNT_LABEL = "phone_account_label";
111 
112     /**
113      * The color int for the phone account.
114      *
115      * <p>TYPE: INTEGER (int)
116      */
117     String PHONE_ACCOUNT_COLOR = "phone_account_color";
118 
119     /**
120      * See {@link android.provider.CallLog.Calls#FEATURES}.
121      *
122      * <p>TYPE: INTEGER (int)
123      */
124     String FEATURES = "features";
125 
126     /**
127      * Additional attributes about the number.
128      *
129      * <p>TYPE: BLOB
130      *
131      * @see com.android.dialer.NumberAttributes
132      */
133     String NUMBER_ATTRIBUTES = "number_attributes";
134 
135     /**
136      * Copied from {@link android.provider.CallLog.Calls#TYPE}.
137      *
138      * <p>Type: INTEGER (int)
139      */
140     String CALL_TYPE = "call_type";
141 
142     String[] ALL_COMMON_COLUMNS =
143         new String[] {
144           _ID,
145           TIMESTAMP,
146           NUMBER,
147           FORMATTED_NUMBER,
148           NUMBER_PRESENTATION,
149           IS_READ,
150           NEW,
151           GEOCODED_LOCATION,
152           PHONE_ACCOUNT_COMPONENT_NAME,
153           PHONE_ACCOUNT_ID,
154           PHONE_ACCOUNT_LABEL,
155           PHONE_ACCOUNT_COLOR,
156           FEATURES,
157           NUMBER_ATTRIBUTES,
158           CALL_TYPE
159         };
160   }
161 
162   /**
163    * AnnotatedCallLog table.
164    *
165    * <p>This contains all of the non-coalesced call log entries.
166    */
167   public static final class AnnotatedCallLog implements CommonColumns {
168 
169     public static final String TABLE = "AnnotatedCallLog";
170     public static final String DISTINCT_PHONE_NUMBERS = "DistinctPhoneNumbers";
171 
172     /** The content URI for this table. */
173     public static final Uri CONTENT_URI =
174         Uri.withAppendedPath(AnnotatedCallLogContract.CONTENT_URI, TABLE);
175 
176     /** Content URI for selecting the distinct phone numbers from the AnnotatedCallLog. */
177     public static final Uri DISTINCT_NUMBERS_CONTENT_URI =
178         Uri.withAppendedPath(AnnotatedCallLogContract.CONTENT_URI, DISTINCT_PHONE_NUMBERS);
179 
180     /** The MIME type of a {@link android.content.ContentProvider#getType(Uri)} single entry. */
181     public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/annotated_call_log";
182 
183     /**
184      * See {@link android.provider.CallLog.Calls#DATA_USAGE}.
185      *
186      * <p>Type: INTEGER (long)
187      */
188     public static final String DATA_USAGE = "data_usage";
189 
190     /**
191      * See {@link android.provider.CallLog.Calls#DURATION}.
192      *
193      * <p>TYPE: INTEGER (long)
194      */
195     public static final String DURATION = "duration";
196 
197     /**
198      * See {@link android.provider.CallLog.Calls#TRANSCRIPTION}.
199      *
200      * <p>TYPE: TEXT
201      */
202     public static final String TRANSCRIPTION = "transcription";
203 
204     /**
205      * See {@link VoicemailCompat.TRANSCRIPTION_STATE}
206      *
207      * <p>Only populated in {@link Build.VERSION_CODES.O} and above
208      *
209      * <p>TYPE: INTEGER
210      */
211     public static final String TRANSCRIPTION_STATE = "transcription_state";
212 
213     /**
214      * See {@link android.provider.CallLog.Calls#VOICEMAIL_URI}.
215      *
216      * <p>TYPE: TEXT
217      */
218     public static final String VOICEMAIL_URI = "voicemail_uri";
219   }
220 
221   /**
222    * Coalesced view of the AnnotatedCallLog table.
223    *
224    * <p>This is an in-memory view of the {@link AnnotatedCallLog} with some adjacent entries
225    * collapsed.
226    *
227    * <p>When adding columns be sure to update {@link #COLUMNS_ONLY_IN_COALESCED_CALL_LOG}.
228    */
229   public static final class CoalescedAnnotatedCallLog implements CommonColumns {
230 
231     public static final String TABLE = "CoalescedAnnotatedCallLog";
232 
233     /** The content URI for this table. */
234     public static final Uri CONTENT_URI =
235         Uri.withAppendedPath(AnnotatedCallLogContract.CONTENT_URI, TABLE);
236 
237     /** The MIME type of a {@link android.content.ContentProvider#getType(Uri)} single entry. */
238     public static final String CONTENT_ITEM_TYPE =
239         "vnd.android.cursor.item/coalesced_annotated_call_log";
240 
241     /**
242      * IDs of rows in {@link AnnotatedCallLog} that are coalesced into one row in {@link
243      * CoalescedAnnotatedCallLog}, encoded as a {@link com.android.dialer.CoalescedIds} proto.
244      *
245      * <p>Type: BLOB
246      */
247     public static final String COALESCED_IDS = "coalesced_ids";
248 
249     /**
250      * Columns that are only in the {@link CoalescedAnnotatedCallLog} but not the {@link
251      * AnnotatedCallLog}.
252      */
253     private static final String[] COLUMNS_ONLY_IN_COALESCED_CALL_LOG = new String[] {COALESCED_IDS};
254 
255     /** All columns in the {@link CoalescedAnnotatedCallLog}. */
256     public static final String[] ALL_COLUMNS =
257         concat(ALL_COMMON_COLUMNS, COLUMNS_ONLY_IN_COALESCED_CALL_LOG);
258   }
259 
concat(String[] first, String[] second)260   private static String[] concat(String[] first, String[] second) {
261     String[] result = Arrays.copyOf(first, first.length + second.length);
262     System.arraycopy(second, 0, result, first.length, second.length);
263     return result;
264   }
265 }
266