1376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein/* 2376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * Copyright (C) 2013 Google Inc. 3376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * Licensed to The Android Open Source Project. 4376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * 5376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * Licensed under the Apache License, Version 2.0 (the "License"); 6376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * you may not use this file except in compliance with the License. 7376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * You may obtain a copy of the License at 8376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * 9376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * http://www.apache.org/licenses/LICENSE-2.0 10376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * 11376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * Unless required by applicable law or agreed to in writing, software 12376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * distributed under the License is distributed on an "AS IS" BASIS, 13376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * See the License for the specific language governing permissions and 15376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * limitations under the License. 16376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein */ 17376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 18376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinpackage com.android.mail.ui; 19376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 20376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinimport android.app.LoaderManager; 21376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinimport android.content.Context; 22376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinimport android.content.Loader; 23376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinimport android.database.DataSetObservable; 24376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinimport android.database.DataSetObserver; 25376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinimport android.os.Bundle; 26376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 27376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinimport com.android.mail.ContactInfo; 28376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinimport com.android.mail.ContactInfoSource; 29376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinimport com.android.mail.SenderInfoLoader; 30376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinimport com.google.common.collect.ImmutableMap; 31376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 32376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinimport java.util.Set; 33376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 34376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein/** 35376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * Asynchronously loads contact data for all senders in the conversation, 36376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein * and notifies observers when the data is ready. 37376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein */ 38376294bbb5ded471ad577fdb492875a837021d08Andrew Sappersteinpublic class ContactLoaderCallbacks implements ContactInfoSource, 39376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein LoaderManager.LoaderCallbacks<ImmutableMap<String, ContactInfo>> { 40376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 41376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein private Set<String> mSenders; 42376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein private ImmutableMap<String, ContactInfo> mContactInfoMap; 43376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein private DataSetObservable mObservable = new DataSetObservable(); 44376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 45376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein private Context mContext; 46376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 47376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein public ContactLoaderCallbacks(Context context) { 48376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein mContext = context; 49376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein } 50376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 51376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein public void setSenders(Set<String> emailAddresses) { 52376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein mSenders = emailAddresses; 53376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein } 54376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 55376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein @Override 56376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein public Loader<ImmutableMap<String, ContactInfo>> onCreateLoader(int id, Bundle args) { 57376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein return new SenderInfoLoader(mContext, mSenders); 58376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein } 59376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 60376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein @Override 61376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein public void onLoadFinished(Loader<ImmutableMap<String, ContactInfo>> loader, 62376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein ImmutableMap<String, ContactInfo> data) { 63376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein mContactInfoMap = data; 64376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein mObservable.notifyChanged(); 65376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein } 66376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 67376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein @Override 68376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein public void onLoaderReset(Loader<ImmutableMap<String, ContactInfo>> loader) { 69376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein } 70376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 71376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein @Override 72376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein public ContactInfo getContactInfo(String email) { 73376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein if (mContactInfoMap == null) { 74376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein return null; 75376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein } 76376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein return mContactInfoMap.get(email); 77376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein } 78376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 79376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein @Override 80376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein public void registerObserver(DataSetObserver observer) { 81376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein mObservable.registerObserver(observer); 82376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein } 83376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein 84376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein @Override 85376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein public void unregisterObserver(DataSetObserver observer) { 86376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein mObservable.unregisterObserver(observer); 87376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein } 888913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein 898913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein protected Context getContext() { 908913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein return mContext; 918913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein } 928913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein 938913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein protected Set<String> getSenders() { 948913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein return mSenders; 958913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein } 96376294bbb5ded471ad577fdb492875a837021d08Andrew Sapperstein} 97