GroupMessagingListener.java revision b7e954bba6539141d24efdb0a0091962e5002ba0
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.provider.EmailContent; 20import com.android.email.mail.Message; 21import com.android.email.mail.Part; 22import android.content.Context; 23 24import java.util.concurrent.ConcurrentHashMap; 25import java.util.Set; 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.contains(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, EmailContent.Account account) { 142 for (MessagingListener l : mListeners) { 143 l.checkMailStarted(context, account); 144 } 145 } 146 147 @Override 148 synchronized public void checkMailFinished(Context context, EmailContent.Account account) { 149 for (MessagingListener l : mListeners) { 150 l.checkMailFinished(context, account); 151 } 152 } 153 154 @Override 155 synchronized public void checkMailFailed(Context context, EmailContent.Account account, 156 String reason) { 157 // TODO 158 } 159 160 @Override 161 synchronized public void sendPendingMessagesCompleted(EmailContent.Account account) { 162 for (MessagingListener l : mListeners) { 163 l.sendPendingMessagesCompleted(account); 164 } 165 } 166 167 @Override 168 synchronized public void sendPendingMessagesFailed(EmailContent.Account account, 169 Exception reason) { 170 for (MessagingListener l : mListeners) { 171 l.sendPendingMessagesFailed(account, reason); 172 } 173 } 174 175 @Override 176 synchronized public void sendPendingMessageFailed(EmailContent.Account account, 177 Message message, Exception reason) { 178 for (MessagingListener l : mListeners) { 179 l.sendPendingMessageFailed(account, message, reason); 180 } 181 } 182 183 @Override 184 synchronized public void emptyTrashCompleted(EmailContent.Account account) { 185 for (MessagingListener l : mListeners) { 186 l.emptyTrashCompleted(account); 187 } 188 } 189 190 @Override 191 synchronized public void messageUidChanged(EmailContent.Account account, String folder, 192 String oldUid, String newUid) { 193 for (MessagingListener l : mListeners) { 194 l.messageUidChanged(account, folder, oldUid, newUid); 195 } 196 } 197 198 @Override 199 synchronized public void loadAttachmentStarted( 200 EmailContent.Account account, 201 Message message, 202 Part part, 203 Object tag, 204 boolean requiresDownload) { 205 for (MessagingListener l : mListeners) { 206 l.loadAttachmentStarted(account, message, part, tag, requiresDownload); 207 } 208 } 209 210 @Override 211 synchronized public void loadAttachmentFinished( 212 EmailContent.Account account, 213 Message message, 214 Part part, 215 Object tag) { 216 for (MessagingListener l : mListeners) { 217 l.loadAttachmentFinished(account, message, part, tag); 218 } 219 } 220 221 @Override 222 synchronized public void loadAttachmentFailed( 223 EmailContent.Account account, 224 Message message, 225 Part part, 226 Object tag, 227 String reason) { 228 for (MessagingListener l : mListeners) { 229 l.loadAttachmentFailed(account, message, part, tag, reason); 230 } 231 } 232 233 @Override 234 synchronized public void controllerCommandCompleted(boolean moreCommandsToRun) { 235 for (MessagingListener l : mListeners) { 236 l.controllerCommandCompleted(moreCommandsToRun); 237 } 238 } 239} 240