1 /* 2 * Copyright (C) 2013 Google Inc. 3 * Licensed to The Android Open Source Project. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package com.android.mail.ui; 19 20 import android.app.LoaderManager; 21 import android.content.Context; 22 import android.content.Loader; 23 import android.database.DataSetObservable; 24 import android.database.DataSetObserver; 25 import android.os.Bundle; 26 27 import com.android.mail.ContactInfo; 28 import com.android.mail.ContactInfoSource; 29 import com.android.mail.SenderInfoLoader; 30 import com.google.common.collect.ImmutableMap; 31 32 import java.util.Set; 33 34 /** 35 * Asynchronously loads contact data for all senders in the conversation, 36 * and notifies observers when the data is ready. 37 */ 38 public class ContactLoaderCallbacks implements ContactInfoSource, 39 LoaderManager.LoaderCallbacks<ImmutableMap<String, ContactInfo>> { 40 41 private Set<String> mSenders; 42 private ImmutableMap<String, ContactInfo> mContactInfoMap; 43 private DataSetObservable mObservable = new DataSetObservable(); 44 45 private Context mContext; 46 ContactLoaderCallbacks(Context context)47 public ContactLoaderCallbacks(Context context) { 48 mContext = context; 49 } 50 setSenders(Set<String> emailAddresses)51 public void setSenders(Set<String> emailAddresses) { 52 mSenders = emailAddresses; 53 } 54 55 @Override onCreateLoader(int id, Bundle args)56 public Loader<ImmutableMap<String, ContactInfo>> onCreateLoader(int id, Bundle args) { 57 return new SenderInfoLoader(mContext, mSenders); 58 } 59 60 @Override onLoadFinished(Loader<ImmutableMap<String, ContactInfo>> loader, ImmutableMap<String, ContactInfo> data)61 public void onLoadFinished(Loader<ImmutableMap<String, ContactInfo>> loader, 62 ImmutableMap<String, ContactInfo> data) { 63 mContactInfoMap = data; 64 mObservable.notifyChanged(); 65 } 66 67 @Override onLoaderReset(Loader<ImmutableMap<String, ContactInfo>> loader)68 public void onLoaderReset(Loader<ImmutableMap<String, ContactInfo>> loader) { 69 } 70 71 @Override getContactInfo(String email)72 public ContactInfo getContactInfo(String email) { 73 if (mContactInfoMap == null) { 74 return null; 75 } 76 return mContactInfoMap.get(email); 77 } 78 79 @Override registerObserver(DataSetObserver observer)80 public void registerObserver(DataSetObserver observer) { 81 mObservable.registerObserver(observer); 82 } 83 84 @Override unregisterObserver(DataSetObserver observer)85 public void unregisterObserver(DataSetObserver observer) { 86 mObservable.unregisterObserver(observer); 87 } 88 getContext()89 protected Context getContext() { 90 return mContext; 91 } 92 getSenders()93 protected Set<String> getSenders() { 94 return mSenders; 95 } 96 } 97