Remove old weak references to callbacks when iterating over callbacks in

Communal logic.

Test: atest CommunalSourceMonitorTest
Change-Id: I7d9e2039c69149dbb45d3e749f69db64b0a1b3ae
This commit is contained in:
Lucas Silva
2021-08-18 15:31:53 +00:00
parent e202474575
commit ed40b2776d

View File

@@ -32,6 +32,7 @@ import com.google.android.collect.Lists;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Iterator;
import javax.inject.Inject;
@@ -103,9 +104,12 @@ public class CommunalSourceMonitor {
private void executeOnSourceAvailableCallbacks() {
// If the new source is valid, inform registered Callbacks of its presence.
for (WeakReference<Callback> callback : mCallbacks) {
Callback cb = callback.get();
if (cb != null) {
Iterator<WeakReference<Callback>> itr = mCallbacks.iterator();
while (itr.hasNext()) {
Callback cb = itr.next().get();
if (cb == null) {
itr.remove();
} else {
cb.onSourceAvailable(
(mCommunalEnabled && mCurrentSource != null) ? new WeakReference<>(
mCurrentSource) : null);