Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8d91d07 authored by Clark Scheff's avatar Clark Scheff Committed by Gerrit Code Review
Browse files

Themes: Remove listener if exception is thrown

If something goes wrong and a client does not remove itself, the
theme manager may still have a reference to the listener and an
exception is thrown while trying to call one of the listener's methods.
When this happens, we should not only log it but remove the bad listener.

Change-Id: I052cdcc10b0eaa75ebf076b3ece5f8a668d3868e
parent 12f6557f
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.util.Log;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -52,11 +53,13 @@ public class ThemeManager {
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    for (ThemeChangeListener listener : mListeners) {
                    Iterator<ThemeChangeListener> iterator = mListeners.iterator();
                    while(iterator.hasNext()) {
                        try {
                            listener.onProgress(progress);
                            iterator.next().onProgress(progress);
                        } catch (Throwable e) {
                            Log.w(TAG, "Unable to update theme change progress", e);
                            iterator.remove();
                        }
                    }
                }
@@ -68,11 +71,13 @@ public class ThemeManager {
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    for (ThemeChangeListener listener : mListeners) {
                    Iterator<ThemeChangeListener> iterator = mListeners.iterator();
                    while(iterator.hasNext()) {
                        try {
                            listener.onFinish(isSuccess);
                            iterator.next().onFinish(isSuccess);
                        } catch (Throwable e) {
                            Log.w(TAG, "Unable to update theme change listener", e);
                            iterator.remove();
                        }
                    }
                }