GroupMessagingListener.java revision e46ac1a61f32bd762a879457b1850087a1ad3a8c
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 android.content.Context;
20
21import java.util.Set;
22import java.util.concurrent.ConcurrentHashMap;
23
24public class GroupMessagingListener extends MessagingListener {
25    /* The synchronization of the methods in this class
26       is not needed because we use ConcurrentHashMap.
27
28       Nevertheless, let's keep the "synchronized" for a while in the case
29       we may want to change the implementation to use something else
30       than ConcurrentHashMap.
31    */
32
33    private ConcurrentHashMap<MessagingListener, Object> mListenersMap =
34        new ConcurrentHashMap<MessagingListener, Object>();
35
36    private Set<MessagingListener> mListeners = mListenersMap.keySet();
37
38    synchronized public void addListener(MessagingListener listener) {
39        // we use "this" as a dummy non-null value
40        mListenersMap.put(listener, this);
41    }
42
43    synchronized public void removeListener(MessagingListener listener) {
44        mListenersMap.remove(listener);
45    }
46
47    synchronized public boolean isActiveListener(MessagingListener listener) {
48        return mListenersMap.containsKey(listener);
49    }
50
51    @Override
52    synchronized public void listFoldersStarted(long accountId) {
53        for (MessagingListener l : mListeners) {
54            l.listFoldersStarted(accountId);
55        }
56    }
57
58    @Override
59    synchronized public void listFoldersFailed(long accountId, String message) {
60        for (MessagingListener l : mListeners) {
61            l.listFoldersFailed(accountId, message);
62        }
63    }
64
65    @Override
66    synchronized public void listFoldersFinished(long accountId) {
67        for (MessagingListener l : mListeners) {
68            l.listFoldersFinished(accountId);
69        }
70    }
71
72    @Override
73    synchronized public void synchronizeMailboxStarted(long accountId, long mailboxId) {
74        for (MessagingListener l : mListeners) {
75            l.synchronizeMailboxStarted(accountId, mailboxId);
76        }
77    }
78
79    @Override
80    synchronized public void synchronizeMailboxFinished(long accountId, long mailboxId,
81            int totalMessagesInMailbox, int numNewMessages) {
82        for (MessagingListener l : mListeners) {
83            l.synchronizeMailboxFinished(accountId, mailboxId,
84                    totalMessagesInMailbox, numNewMessages);
85        }
86    }
87
88    @Override
89    synchronized public void synchronizeMailboxFailed(long accountId, long mailboxId, Exception e) {
90        for (MessagingListener l : mListeners) {
91            l.synchronizeMailboxFailed(accountId, mailboxId, e);
92        }
93    }
94
95    @Override
96    synchronized public void loadMessageForViewStarted(long messageId) {
97        for (MessagingListener l : mListeners) {
98            l.loadMessageForViewStarted(messageId);
99        }
100    }
101
102    @Override
103    synchronized public void loadMessageForViewFinished(long messageId) {
104        for (MessagingListener l : mListeners) {
105            l.loadMessageForViewFinished(messageId);
106        }
107    }
108
109    @Override
110    synchronized public void loadMessageForViewFailed(long messageId, String message) {
111        for (MessagingListener l : mListeners) {
112            l.loadMessageForViewFailed(messageId, message);
113        }
114    }
115
116    @Override
117    synchronized public void checkMailStarted(Context context, long accountId, long tag) {
118        for (MessagingListener l : mListeners) {
119            l.checkMailStarted(context, accountId, tag);
120        }
121    }
122
123    @Override
124    synchronized public void checkMailFinished(Context context, long accountId, long folderId,
125            long tag) {
126        for (MessagingListener l : mListeners) {
127            l.checkMailFinished(context, accountId, folderId, tag);
128        }
129    }
130
131    @Override
132    synchronized public void sendPendingMessagesStarted(long accountId, long messageId) {
133        for (MessagingListener l : mListeners) {
134            l.sendPendingMessagesStarted(accountId, messageId);
135        }
136    }
137
138    @Override
139    synchronized public void sendPendingMessagesCompleted(long accountId) {
140        for (MessagingListener l : mListeners) {
141            l.sendPendingMessagesCompleted(accountId);
142        }
143    }
144
145    @Override
146    synchronized public void sendPendingMessagesFailed(long accountId, long messageId,
147            Exception reason) {
148        for (MessagingListener l : mListeners) {
149            l.sendPendingMessagesFailed(accountId, messageId, reason);
150        }
151    }
152
153    @Override
154    synchronized public void messageUidChanged(long accountId, long mailboxId,
155            String oldUid, String newUid) {
156        for (MessagingListener l : mListeners) {
157            l.messageUidChanged(accountId, mailboxId, oldUid, newUid);
158        }
159    }
160
161    @Override
162    synchronized public void loadAttachmentStarted(
163            long accountId,
164            long messageId,
165            long attachmentId,
166            boolean requiresDownload) {
167        for (MessagingListener l : mListeners) {
168            l.loadAttachmentStarted(accountId, messageId, attachmentId, requiresDownload);
169        }
170    }
171
172    @Override
173    synchronized public void loadAttachmentFinished(
174            long accountId,
175            long messageId,
176            long attachmentId) {
177        for (MessagingListener l : mListeners) {
178            l.loadAttachmentFinished(accountId, messageId, attachmentId);
179        }
180    }
181
182    @Override
183    synchronized public void loadAttachmentFailed(
184            long accountId,
185            long messageId,
186            long attachmentId,
187            String reason) {
188        for (MessagingListener l : mListeners) {
189            l.loadAttachmentFailed(accountId, messageId, attachmentId, reason);
190        }
191    }
192
193    @Override
194    synchronized public void controllerCommandCompleted(boolean moreCommandsToRun) {
195        for (MessagingListener l : mListeners) {
196            l.controllerCommandCompleted(moreCommandsToRun);
197        }
198    }
199}
200