Synchronize access to listeners in ConversationCursor

* Apparently, these methods are being used from multiple threads,
  which can cause a ConcurrentModificationException

Change-Id: I6f60f48570fd145c883cf9314f2d04293894c2d3
diff --git a/src/com/android/mail/browse/ConversationCursor.java b/src/com/android/mail/browse/ConversationCursor.java
index f106c97..e1c3f9c 100644
--- a/src/com/android/mail/browse/ConversationCursor.java
+++ b/src/com/android/mail/browse/ConversationCursor.java
@@ -228,14 +228,18 @@
      * Add a listener for this cursor; we'll notify it when our data changes
      */
     public void addListener(ConversationListener listener) {
-        sListeners.add(listener);
+        synchronized (sListeners) {
+            sListeners.add(listener);
+        }
     }
 
     /**
      * Remove a listener for this cursor
      */
     public void removeListener(ConversationListener listener) {
-        sListeners.remove(listener);
+        synchronized(sListeners) {
+            sListeners.remove(listener);
+        }
     }
 
     /**
@@ -346,8 +350,10 @@
         if (DEBUG) {
             Log.d(TAG, "[Notify: onRefreshRequired()]");
         }
-        for (ConversationListener listener: sListeners) {
-            listener.onRefreshRequired();
+        synchronized(sListeners) {
+            for (ConversationListener listener: sListeners) {
+                listener.onRefreshRequired();
+            }
         }
         sRefreshRequired = true;
     }
@@ -487,8 +493,10 @@
                                 if (DEBUG) {
                                     Log.d(TAG, "[Notify: onRefreshReady()]");
                                 }
-                                for (ConversationListener listener: sListeners) {
-                                    listener.onRefreshReady();
+                                synchronized (sListeners) {
+                                    for (ConversationListener listener : sListeners) {
+                                        listener.onRefreshReady();
+                                    }
                                 }
                                 sRefreshReady = true;
                             }});