From 6991b3c7ae81e3f4442bca1626f6289d35f211ac Mon Sep 17 00:00:00 2001 From: Sergey Solovyev Date: Mon, 3 Dec 2012 14:58:34 +0400 Subject: [PATCH] user exceptions fixed --- .../AndroidExternalListenersContainer.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/external/AndroidExternalListenersContainer.java b/android-app-core/src/main/java/org/solovyev/android/calculator/external/AndroidExternalListenersContainer.java index 6f3f02a4..8151144c 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/external/AndroidExternalListenersContainer.java +++ b/android-app-core/src/main/java/org/solovyev/android/calculator/external/AndroidExternalListenersContainer.java @@ -38,6 +38,7 @@ public class AndroidExternalListenersContainer implements CalculatorExternalList private static final String TAG = "Calculator++ External Listener Helper"; + @NotNull private final Set> externalListeners = new HashSet>(); @NotNull @@ -51,7 +52,7 @@ public class AndroidExternalListenersContainer implements CalculatorExternalList @NotNull CalculatorEventData calculatorEventData, @NotNull CalculatorEditorViewState editorViewState) { - for (Class externalListener : externalListeners) { + for (Class externalListener : getExternalListenersSync()) { final Intent intent = new Intent(EDITOR_STATE_CHANGED_ACTION); intent.setClass(context, externalListener); intent.putExtra(EVENT_ID_EXTRA, calculatorEventData.getEventId()); @@ -64,7 +65,7 @@ public class AndroidExternalListenersContainer implements CalculatorExternalList private void onDisplayStateChanged(@NotNull Context context, @NotNull CalculatorEventData calculatorEventData, @NotNull CalculatorDisplayViewState displayViewState) { - for (Class externalListener : externalListeners) { + for (Class externalListener : getExternalListenersSync()) { final Intent intent = new Intent(DISPLAY_STATE_CHANGED_ACTION); intent.setClass(context, externalListener); intent.putExtra(EVENT_ID_EXTRA, calculatorEventData.getEventId()); @@ -74,15 +75,26 @@ public class AndroidExternalListenersContainer implements CalculatorExternalList } } - @Override + @NotNull + private Set> getExternalListenersSync() { + synchronized (externalListeners) { + return new HashSet>(externalListeners); + } + } + + @Override public void addExternalListener(@NotNull Class externalCalculatorClass) { - externalListeners.add(externalCalculatorClass); - } + synchronized (externalListeners) { + externalListeners.add(externalCalculatorClass); + } + } @Override public boolean removeExternalListener(@NotNull Class externalCalculatorClass) { - return externalListeners.remove(externalCalculatorClass); - } + synchronized (externalListeners) { + return externalListeners.remove(externalCalculatorClass); + } + } @Override public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData, @NotNull CalculatorEventType calculatorEventType, @Nullable Object data) {