GroupMessagingListener.java revision 0d1078363581db8caded06cf94e729e88a88761a
1/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.email;
18
19import com.android.email.mail.Message;
20import com.android.email.provider.EmailContent;
21
22import android.content.Context;
23
24import java.util.Set;
25import java.util.concurrent.ConcurrentHashMap;
26
27public class GroupMessagingListener extends MessagingListener {
28    /* The synchronization of the methods in this class
29       is not needed because we use ConcurrentHashMap.
30
31       Nevertheless, let's keep the "synchronized" for a while in the case
32       we may want to change the implementation to use something else
33       than ConcurrentHashMap.
34    */
35
36    private ConcurrentHashMap<MessagingListener, Object> mListenersMap =
37        new ConcurrentHashMap<MessagingListener, Object>();
38
39    private Set<MessagingListener> mListeners = mListenersMap.keySet();
40
41    synchronized public void addListener(MessagingListener listener) {
42        // we use "this" as a dummy non-null value
43        mListenersMap.put(listener, this);
44    }
45
46    synchronized public void removeListener(MessagingListener listener) {
47        mListenersMap.remove(listener);
48    }
49
50    synchronized public boolean isActiveListener(MessagingListener listener) {
51        return mListenersMap.containsKey(listener);
52    }
53
54    @Override
55    synchronized public void listFoldersStarted(EmailContent.Account account) {
56        for (MessagingListener l : mListeners) {
57            l.listFoldersStarted(account);
58        }
59    }
60
61    @Override
62    synchronized public void listFoldersFailed(EmailContent.Account account, String message) {
63        for (MessagingListener l : mListeners) {
64            l.listFoldersFailed(account, message);
65        }
66    }
67
68    @Override
69    synchronized public void listFoldersFinished(EmailContent.Account account) {
70        for (MessagingListener l : mListeners) {
71            l.listFoldersFinished(account);
72        }
73    }
74
75    @Override
76    synchronized public void synchronizeMailboxStarted(EmailContent.Account account,
77                                                       EmailContent.Mailbox folder) {
78        for (MessagingListener l : mListeners) {
79            l.synchronizeMailboxStarted(account, folder);
80        }
81    }
82
83    @Override
84    synchronized public void synchronizeMailboxFinished(EmailContent.Account account,
85            EmailContent.Mailbox folder, int totalMessagesInMailbox, int numNewMessages) {
86        for (MessagingListener l : mListeners) {
87            l.synchronizeMailboxFinished(account, folder, totalMessagesInMailbox, numNewMessages);
88        }
89    }
90
91    @Override
92    synchronized public void synchronizeMailboxFailed(EmailContent.Account account,
93                                                      EmailContent.Mailbox folder,
94                                                      Exception e) {
95        for (MessagingListener l : mListeners) {
96            l.synchronizeMailboxFailed(account, folder, e);
97        }
98    }
99
100    @Override
101    synchronized public void loadMessageForViewStarted(EmailContent.Account account, String folder,
102                                                       String uid) {
103        for (MessagingListener l : mListeners) {
104            l.loadMessageForViewStarted(account, folder, uid);
105        }
106    }
107
108    @Override
109    synchronized public void loadMessageForViewHeadersAvailable(EmailContent.Account account,
110            String folder, String uid, Message message) {
111        for (MessagingListener l : mListeners) {
112            l.loadMessageForViewHeadersAvailable(account, folder, uid, message);
113        }
114    }
115
116    @Override
117    synchronized public void loadMessageForViewBodyAvailable(EmailContent.Account account,
118            String folder, String uid, Message message) {
119        for (MessagingListener l : mListeners) {
120            l.loadMessageForViewBodyAvailable(account, folder, uid, message);
121        }
122    }
123
124    @Override
125    synchronized public void loadMessageForViewFinished(EmailContent.Account account,
126            String folder, String uid, Message message) {
127        for (MessagingListener l : mListeners) {
128            l.loadMessageForViewFinished(account, folder, uid, message);
129        }
130    }
131
132    @Override
133    synchronized public void loadMessageForViewFailed(EmailContent.Account account, String folder,
134            String uid, String message) {
135        for (MessagingListener l : mListeners) {
136            l.loadMessageForViewFailed(account, folder, uid, message);
137        }
138    }
139
140    @Override
141    synchronized public void checkMailStarted(Context context, long accountId, long tag) {
142        for (MessagingListener l : mListeners) {
143            l.checkMailStarted(context, accountId, tag);
144        }
145    }
146
147    @Override
148    synchronized public void checkMailFinished(Context context, long accountId, long folderId,
149            long tag) {
150        for (MessagingListener l : mListeners) {
151            l.checkMailFinished(context, accountId, folderId, tag);
152        }
153    }
154
155    @Override
156    synchronized public void sendPendingMessagesCompleted(EmailContent.Account account) {
157        for (MessagingListener l : mListeners) {
158            l.sendPendingMessagesCompleted(account);
159        }
160    }
161
162    @Override
163    synchronized public void sendPendingMessagesFailed(EmailContent.Account account,
164            Exception reason) {
165        for (MessagingListener l : mListeners) {
166            l.sendPendingMessagesFailed(account, reason);
167        }
168    }
169
170    @Override
171    synchronized public void sendPendingMessageFailed(EmailContent.Account account,
172            Message message, Exception reason) {
173        for (MessagingListener l : mListeners) {
174            l.sendPendingMessageFailed(account, message, reason);
175        }
176    }
177
178    @Override
179    synchronized public void emptyTrashCompleted(EmailContent.Account account) {
180        for (MessagingListener l : mListeners) {
181            l.emptyTrashCompleted(account);
182        }
183    }
184
185    @Override
186    synchronized public void messageUidChanged(EmailContent.Account account, String folder,
187            String oldUid, String newUid) {
188        for (MessagingListener l : mListeners) {
189            l.messageUidChanged(account, folder, oldUid, newUid);
190        }
191    }
192
193    @Override
194    synchronized public void loadAttachmentStarted(
195            long accountId,
196            long messageId,
197            long attachmentId,
198            boolean requiresDownload) {
199        for (MessagingListener l : mListeners) {
200            l.loadAttachmentStarted(accountId, messageId, attachmentId, requiresDownload);
201        }
202    }
203
204    @Override
205    synchronized public void loadAttachmentFinished(
206            long accountId,
207            long messageId,
208            long attachmentId) {
209        for (MessagingListener l : mListeners) {
210            l.loadAttachmentFinished(accountId, messageId, attachmentId);
211        }
212    }
213
214    @Override
215    synchronized public void loadAttachmentFailed(
216            long accountId,
217            long messageId,
218            long attachmentId,
219            String reason) {
220        for (MessagingListener l : mListeners) {
221            l.loadAttachmentFailed(accountId, messageId, attachmentId, reason);
222        }
223    }
224
225    @Override
226    synchronized public void controllerCommandCompleted(boolean moreCommandsToRun) {
227        for (MessagingListener l : mListeners) {
228            l.controllerCommandCompleted(moreCommandsToRun);
229        }
230    }
231}
232