188fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang/* 288fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * Copyright (C) 2012 Google Inc. 388fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * Licensed to The Android Open Source Project. 488fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * 588fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * Licensed under the Apache License, Version 2.0 (the "License"); 688fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * you may not use this file except in compliance with the License. 788fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * You may obtain a copy of the License at 888fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * 988fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * http://www.apache.org/licenses/LICENSE-2.0 1088fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * 1188fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * Unless required by applicable law or agreed to in writing, software 1288fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * distributed under the License is distributed on an "AS IS" BASIS, 1388fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1488fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * See the License for the specific language governing permissions and 1588fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang * limitations under the License. 1688fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang */ 1788fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang 1888fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huangpackage com.android.mail.browse; 1988fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang 2088fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huangimport com.google.common.collect.Maps; 2188fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang 2288fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huangimport android.content.Context; 2388fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huangimport android.content.CursorLoader; 2488fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huangimport android.database.Cursor; 2588fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huangimport android.database.CursorWrapper; 2688fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huangimport android.net.Uri; 2788fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang 2888fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huangimport com.android.mail.providers.Attachment; 2988fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huangimport com.android.mail.providers.UIProvider; 3088fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang 3188fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huangimport java.util.Map; 3288fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang 3388fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huangpublic class AttachmentLoader extends CursorLoader { 3488fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang 3588fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang public AttachmentLoader(Context c, Uri uri) { 3688fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang super(c, uri, UIProvider.ATTACHMENT_PROJECTION, null, null, null); 3788fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang } 3888fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang 3988fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang @Override 4088fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang public Cursor loadInBackground() { 4188fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang return new AttachmentCursor(super.loadInBackground()); 4288fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang } 4388fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang 4488fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang public static class AttachmentCursor extends CursorWrapper { 4588fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang 467f375ff8e57165bf7ad7a50131eabeaf602f09bfAndy Huang private Map<String, Attachment> mCache = Maps.newHashMap(); 4788fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang 4888fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang private AttachmentCursor(Cursor inner) { 4988fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang super(inner); 5088fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang } 5188fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang 5288fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang public Attachment get() { 537f375ff8e57165bf7ad7a50131eabeaf602f09bfAndy Huang final String uri = getWrappedCursor().getString(UIProvider.ATTACHMENT_URI_COLUMN); 547f375ff8e57165bf7ad7a50131eabeaf602f09bfAndy Huang Attachment m = mCache.get(uri); 5588fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang if (m == null) { 5688fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang m = new Attachment(this); 577f375ff8e57165bf7ad7a50131eabeaf602f09bfAndy Huang mCache.put(uri, m); 5888fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang } 5988fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang return m; 6088fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang } 6188fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang } 6288fc42e48ee4e927eb77e5cab23f2f5151cac649Andy Huang} 63