19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 Esmertec AG. 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18a87afd07c0093cab638e9ef9bc2c53c8200ca711Tom Taylorpackage com.google.android.mms.util; 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentUris; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.UriMatcher; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 23a87afd07c0093cab638e9ef9bc2c53c8200ca711Tom Taylorimport android.provider.Telephony.Mms; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Config; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashMap; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashSet; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class PduCache extends AbstractCache<Uri, PduCacheEntry> { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "PduCache"; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final boolean DEBUG = false; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final boolean LOCAL_LOGV = DEBUG ? Config.LOGD : Config.LOGV; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MMS_ALL = 0; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MMS_ALL_ID = 1; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MMS_INBOX = 2; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MMS_INBOX_ID = 3; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MMS_SENT = 4; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MMS_SENT_ID = 5; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MMS_DRAFTS = 6; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MMS_DRAFTS_ID = 7; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MMS_OUTBOX = 8; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MMS_OUTBOX_ID = 9; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MMS_CONVERSATION = 10; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MMS_CONVERSATION_ID = 11; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final UriMatcher URI_MATCHER; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final HashMap<Integer, Integer> MATCH_TO_MSGBOX_ID_MAP; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static PduCache sInstance; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER.addURI("mms", null, MMS_ALL); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER.addURI("mms", "#", MMS_ALL_ID); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER.addURI("mms", "inbox", MMS_INBOX); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER.addURI("mms", "inbox/#", MMS_INBOX_ID); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER.addURI("mms", "sent", MMS_SENT); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER.addURI("mms", "sent/#", MMS_SENT_ID); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER.addURI("mms", "drafts", MMS_DRAFTS); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER.addURI("mms", "drafts/#", MMS_DRAFTS_ID); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER.addURI("mms", "outbox", MMS_OUTBOX); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER.addURI("mms", "outbox/#", MMS_OUTBOX_ID); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER.addURI("mms-sms", "conversations", MMS_CONVERSATION); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URI_MATCHER.addURI("mms-sms", "conversations/#", MMS_CONVERSATION_ID); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MATCH_TO_MSGBOX_ID_MAP = new HashMap<Integer, Integer>(); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MATCH_TO_MSGBOX_ID_MAP.put(MMS_INBOX, Mms.MESSAGE_BOX_INBOX); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MATCH_TO_MSGBOX_ID_MAP.put(MMS_SENT, Mms.MESSAGE_BOX_SENT); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MATCH_TO_MSGBOX_ID_MAP.put(MMS_DRAFTS, Mms.MESSAGE_BOX_DRAFTS); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MATCH_TO_MSGBOX_ID_MAP.put(MMS_OUTBOX, Mms.MESSAGE_BOX_OUTBOX); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final HashMap<Integer, HashSet<Uri>> mMessageBoxes; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final HashMap<Long, HashSet<Uri>> mThreads; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PduCache() { 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMessageBoxes = new HashMap<Integer, HashSet<Uri>>(); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mThreads = new HashMap<Long, HashSet<Uri>>(); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized public static final PduCache getInstance() { 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sInstance == null) { 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_LOGV) { 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Constructing new PduCache instance."); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sInstance = new PduCache(); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sInstance; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized public boolean put(Uri uri, PduCacheEntry entry) { 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int msgBoxId = entry.getMessageBox(); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HashSet<Uri> msgBox = mMessageBoxes.get(msgBoxId); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (msgBox == null) { 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project msgBox = new HashSet<Uri>(); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMessageBoxes.put(msgBoxId, msgBox); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long threadId = entry.getThreadId(); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HashSet<Uri> thread = mThreads.get(threadId); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (thread == null) { 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thread = new HashSet<Uri>(); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mThreads.put(threadId, thread); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri finalKey = normalizeKey(uri); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean result = super.put(finalKey, entry); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (result) { 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project msgBox.add(finalKey); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thread.add(finalKey); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized public PduCacheEntry purge(Uri uri) { 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int match = URI_MATCHER.match(uri); 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (match) { 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_ALL_ID: 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return purgeSingleEntry(uri); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_INBOX_ID: 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_SENT_ID: 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_DRAFTS_ID: 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_OUTBOX_ID: 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String msgId = uri.getLastPathSegment(); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return purgeSingleEntry(Uri.withAppendedPath(Mms.CONTENT_URI, msgId)); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Implicit batch of purge, return null. 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_ALL: 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_CONVERSATION: 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project purgeAll(); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_INBOX: 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_SENT: 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_DRAFTS: 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_OUTBOX: 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project purgeByMessageBox(MATCH_TO_MSGBOX_ID_MAP.get(match)); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_CONVERSATION_ID: 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project purgeByThreadId(ContentUris.parseId(uri)); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PduCacheEntry purgeSingleEntry(Uri key) { 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PduCacheEntry entry = super.purge(key); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (entry != null) { 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project removeFromThreads(key, entry); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project removeFromMessageBoxes(key, entry); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return entry; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized public void purgeAll() { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.purgeAll(); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMessageBoxes.clear(); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mThreads.clear(); 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param uri The Uri to be normalized. 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Uri The normalized key of cached entry. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Uri normalizeKey(Uri uri) { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int match = URI_MATCHER.match(uri); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri normalizedKey = null; 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (match) { 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_ALL_ID: 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project normalizedKey = uri; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_INBOX_ID: 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_SENT_ID: 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_DRAFTS_ID: 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MMS_OUTBOX_ID: 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String msgId = uri.getLastPathSegment(); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project normalizedKey = Uri.withAppendedPath(Mms.CONTENT_URI, msgId); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_LOGV) { 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, uri + " -> " + normalizedKey); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return normalizedKey; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void purgeByMessageBox(Integer msgBoxId) { 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_LOGV) { 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Purge cache in message box: " + msgBoxId); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (msgBoxId != null) { 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HashSet<Uri> msgBox = mMessageBoxes.remove(msgBoxId); 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (msgBox != null) { 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Uri key : msgBox) { 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PduCacheEntry entry = super.purge(key); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (entry != null) { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project removeFromThreads(key, entry); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void removeFromThreads(Uri key, PduCacheEntry entry) { 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HashSet<Uri> thread = mThreads.get(entry.getThreadId()); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (thread != null) { 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thread.remove(key); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void purgeByThreadId(long threadId) { 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_LOGV) { 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Purge cache in thread: " + threadId); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HashSet<Uri> thread = mThreads.remove(threadId); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (thread != null) { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Uri key : thread) { 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PduCacheEntry entry = super.purge(key); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (entry != null) { 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project removeFromMessageBoxes(key, entry); 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void removeFromMessageBoxes(Uri key, PduCacheEntry entry) { 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HashSet<Uri> msgBox = mThreads.get(entry.getMessageBox()); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (msgBox != null) { 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project msgBox.remove(key); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 244