CallLog.java revision dda5391d5079537e275c9f4ed2637a1484d0e4e8
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.provider; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentValues; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.provider.Contacts.People; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.CallerInfo; 25105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport com.android.internal.telephony.Connection; 26105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The CallLog provider contains information about placed and received calls. 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class CallLog { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String AUTHORITY = "call_log"; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URL for this provider 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri CONTENT_URI = 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://" + AUTHORITY); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Contains the recent calls. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Calls implements BaseColumns { 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URL for this table 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri CONTENT_URI = 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://call_log/calls"); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URL for filtering this table on phone numbers 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri CONTENT_FILTER_URI = 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://call_log/calls/filter"); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DEFAULT_SORT_ORDER = "date DESC"; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type of {@link #CONTENT_URI} and {@link #CONTENT_FILTER_URI} 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * providing a directory of calls. 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_TYPE = "vnd.android.cursor.dir/calls"; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type of a {@link #CONTENT_URI} sub-directory of a single 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * call. 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/calls"; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The type of the the phone number. 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (int)</P> 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String TYPE = "type"; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int INCOMING_TYPE = 1; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int OUTGOING_TYPE = 2; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MISSED_TYPE = 3; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The phone number as the user entered it. 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NUMBER = "number"; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The date the call occured, in milliseconds since the epoch 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATE = "date"; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The duration of the call in seconds 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DURATION = "duration"; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Whether or not the call has been acknowledged 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NEW = "new"; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The cached name associated with the phone number, if it exists. 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This value is not guaranteed to be current, if the contact information 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with this number has changed. 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CACHED_NAME = "name"; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The cached number type (Home, Work, etc) associated with the 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * phone number, if it exists. 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This value is not guaranteed to be current, if the contact information 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with this number has changed. 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CACHED_NUMBER_TYPE = "numbertype"; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The cached number label, for a custom number type, associated with the 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * phone number, if it exists. 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This value is not guaranteed to be current, if the contact information 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with this number has changed. 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CACHED_NUMBER_LABEL = "numberlabel"; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Adds a call to the call log. 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ci the CallerInfo object to get the target contact from. Can be null 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if the contact is unknown. 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context the context used to get the ContentResolver 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param number the phone number to be added to the calls db 142105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param presentation the number presenting rules set by the network for 143105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * "allowed", "payphone", "restricted" or "unknown" 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param callType enumerated values for "incoming", "outgoing", or "missed" 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start time stamp for the call in milliseconds 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param duration call duration in seconds 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Uri addCall(CallerInfo ci, Context context, String number, 151105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project int presentation, int callType, long start, int duration) { 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ContentResolver resolver = context.getContentResolver(); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 154dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // TODO(Moto): Which is correct: original code, this only changes the 155dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // number if the number is empty and never changes the caller info name. 156dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (false) { 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (TextUtils.isEmpty(number)) { 158105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (presentation == Connection.PRESENTATION_RESTRICTED) { 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = CallerInfo.PRIVATE_NUMBER; 160105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } else if (presentation == Connection.PRESENTATION_PAYPHONE) { 161105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project number = CallerInfo.PAYPHONE_NUMBER; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = CallerInfo.UNKNOWN_NUMBER; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 166dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } else { 167dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // NEWCODE: From Motorola 168dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 169dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //If this is a private number then set the number to Private, otherwise check 170dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //if the number field is empty and set the number to Unavailable 171dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (presentation == Connection.PRESENTATION_RESTRICTED) { 172dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville number = CallerInfo.PRIVATE_NUMBER; 173dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville ci.name = ""; 174dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } else if (presentation == Connection.PRESENTATION_PAYPHONE) { 175dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville number = CallerInfo.PAYPHONE_NUMBER; 176dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville ci.name = ""; 177dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } else if (TextUtils.isEmpty(number) || presentation == Connection.PRESENTATION_UNKNOWN) { 178dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville number = CallerInfo.UNKNOWN_NUMBER; 179dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville ci.name = ""; 180dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 181dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues values = new ContentValues(5); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(NUMBER, number); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(TYPE, Integer.valueOf(callType)); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(DATE, Long.valueOf(start)); 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(DURATION, Long.valueOf(duration)); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(NEW, Integer.valueOf(1)); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ci != null) { 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CACHED_NAME, ci.name); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CACHED_NUMBER_TYPE, ci.numberType); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CACHED_NUMBER_LABEL, ci.numberLabel); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((ci != null) && (ci.person_id > 0)) { 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project People.markAsContacted(resolver, ci.person_id); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri result = resolver.insert(CONTENT_URI, values); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project removeExpiredEntries(context); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void removeExpiredEntries(Context context) { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ContentResolver resolver = context.getContentResolver(); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resolver.delete(CONTENT_URI, "_id IN " + 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "(SELECT _id FROM calls ORDER BY " + DEFAULT_SORT_ORDER 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " LIMIT -1 OFFSET 500)", null); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 214