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 1956a108220f42bb9d16369c5252c64d5afea4c9aeJeff Hamiltonimport com.android.internal.telephony.CallerInfo; 2056a108220f42bb9d16369c5252c64d5afea4c9aeJeff Hamiltonimport com.android.internal.telephony.Connection; 2156a108220f42bb9d16369c5252c64d5afea4c9aeJeff Hamilton 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentValues; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 25b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Cataniaimport android.database.Cursor; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The CallLog provider contains information about placed and received calls. 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class CallLog { 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String AUTHORITY = "call_log"; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URL for this provider 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri CONTENT_URI = 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://" + AUTHORITY); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Contains the recent calls. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Calls implements BaseColumns { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URL for this table 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri CONTENT_URI = 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://call_log/calls"); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URL for filtering this table on phone numbers 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri CONTENT_FILTER_URI = 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://call_log/calls/filter"); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DEFAULT_SORT_ORDER = "date DESC"; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type of {@link #CONTENT_URI} and {@link #CONTENT_FILTER_URI} 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * providing a directory of calls. 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_TYPE = "vnd.android.cursor.dir/calls"; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type of a {@link #CONTENT_URI} sub-directory of a single 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * call. 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/calls"; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 75f6737d3ae0f0ca49112807502cc0a272febf3b35Yusuf T. Mobile * The type of the call (incoming, outgoing or missed). 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (int)</P> 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String TYPE = "type"; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int INCOMING_TYPE = 1; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int OUTGOING_TYPE = 2; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MISSED_TYPE = 3; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The phone number as the user entered it. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NUMBER = "number"; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The date the call occured, in milliseconds since the epoch 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATE = "date"; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The duration of the call in seconds 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DURATION = "duration"; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Whether or not the call has been acknowledged 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NEW = "new"; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The cached name associated with the phone number, if it exists. 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This value is not guaranteed to be current, if the contact information 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with this number has changed. 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CACHED_NAME = "name"; 115b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The cached number type (Home, Work, etc) associated with the 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * phone number, if it exists. 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This value is not guaranteed to be current, if the contact information 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with this number has changed. 121b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania * <P>Type: INTEGER</P> 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CACHED_NUMBER_TYPE = "numbertype"; 124b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The cached number label, for a custom number type, associated with the 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * phone number, if it exists. 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This value is not guaranteed to be current, if the contact information 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with this number has changed. 130b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania * <P>Type: TEXT</P> 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CACHED_NUMBER_LABEL = "numberlabel"; 133b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Adds a call to the call log. 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ci the CallerInfo object to get the target contact from. Can be null 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if the contact is unknown. 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context the context used to get the ContentResolver 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param number the phone number to be added to the calls db 141b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania * @param presentation the number presenting rules set by the network for 142105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * "allowed", "payphone", "restricted" or "unknown" 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param callType enumerated values for "incoming", "outgoing", or "missed" 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start time stamp for the call in milliseconds 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param duration call duration in seconds 146b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania * 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 149b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania public static Uri addCall(CallerInfo ci, Context context, String number, 150105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project int presentation, int callType, long start, int duration) { 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ContentResolver resolver = context.getContentResolver(); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 153e1dc2baee7e3c5cfc03cc573567c3146da24dab0Pauyl l Berman // If this is a private number then set the number to Private, otherwise check 154e1dc2baee7e3c5cfc03cc573567c3146da24dab0Pauyl l Berman // if the number field is empty and set the number to Unavailable 155dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (presentation == Connection.PRESENTATION_RESTRICTED) { 156dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville number = CallerInfo.PRIVATE_NUMBER; 157e1dc2baee7e3c5cfc03cc573567c3146da24dab0Pauyl l Berman if (ci != null) ci.name = ""; 158dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } else if (presentation == Connection.PRESENTATION_PAYPHONE) { 159dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville number = CallerInfo.PAYPHONE_NUMBER; 160e1dc2baee7e3c5cfc03cc573567c3146da24dab0Pauyl l Berman if (ci != null) ci.name = ""; 161e1dc2baee7e3c5cfc03cc573567c3146da24dab0Pauyl l Berman } else if (TextUtils.isEmpty(number) 162e1dc2baee7e3c5cfc03cc573567c3146da24dab0Pauyl l Berman || presentation == Connection.PRESENTATION_UNKNOWN) { 163dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville number = CallerInfo.UNKNOWN_NUMBER; 164e1dc2baee7e3c5cfc03cc573567c3146da24dab0Pauyl l Berman if (ci != null) ci.name = ""; 165dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 166e1dc2baee7e3c5cfc03cc573567c3146da24dab0Pauyl l Berman 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues values = new ContentValues(5); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(NUMBER, number); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(TYPE, Integer.valueOf(callType)); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(DATE, Long.valueOf(start)); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(DURATION, Long.valueOf(duration)); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(NEW, Integer.valueOf(1)); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ci != null) { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CACHED_NAME, ci.name); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CACHED_NUMBER_TYPE, ci.numberType); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CACHED_NUMBER_LABEL, ci.numberLabel); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 179b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((ci != null) && (ci.person_id > 0)) { 18156a108220f42bb9d16369c5252c64d5afea4c9aeJeff Hamilton ContactsContract.Contacts.markAsContacted(resolver, ci.person_id); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 183b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri result = resolver.insert(CONTENT_URI, values); 185b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project removeExpiredEntries(context); 187b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 190b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania 191b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania /** 192b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania * Query the call log database for the last dialed number. 193b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania * @param context Used to get the content resolver. 194b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania * @return The last phone number dialed (outgoing) or an empty 195b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania * string if none exist yet. 196b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania */ 197b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania public static String getLastOutgoingCall(Context context) { 198b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania final ContentResolver resolver = context.getContentResolver(); 199b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania Cursor c = null; 200b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania try { 201b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania c = resolver.query( 202b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania CONTENT_URI, 203b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania new String[] {NUMBER}, 204b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania TYPE + " = " + OUTGOING_TYPE, 205b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania null, 206b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania DEFAULT_SORT_ORDER + " LIMIT 1"); 207b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania if (c == null || !c.moveToFirst()) { 208b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania return ""; 209b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania } 210b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania return c.getString(0); 211b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania } finally { 212b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania if (c != null) c.close(); 213b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania } 214b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania } 215b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void removeExpiredEntries(Context context) { 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ContentResolver resolver = context.getContentResolver(); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resolver.delete(CONTENT_URI, "_id IN " + 219b8a2aafdef732764bd6b189d035e9f0765bb027aNicolas Catania "(SELECT _id FROM calls ORDER BY " + DEFAULT_SORT_ORDER 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " LIMIT -1 OFFSET 500)", null); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 224