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