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