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

Commit c9d68472 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[Status Bar] Stop using Utils.safeForeach in LocationControllerImpl.

Fixes: 286841705
Test: verify location tile still gets location updates
Test: verify location icon in status bar still appears when location is
being used

Change-Id: Iff4672222571f8019adf9d84e1fb681422a1603a
parent cadad8e4
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -55,7 +55,6 @@ import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.Utils;
import com.android.systemui.util.settings.SecureSettings;

import java.util.ArrayList;
@@ -362,7 +361,8 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio
        private static final int MSG_ADD_CALLBACK = 3;
        private static final int MSG_REMOVE_CALLBACK = 4;

        private ArrayList<LocationChangeCallback> mSettingsChangeCallbacks = new ArrayList<>();
        private final ArrayList<LocationChangeCallback> mSettingsChangeCallbacks =
                new ArrayList<>();

        H(Looper looper) {
            super(looper);
@@ -388,14 +388,23 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio
        }

        private void locationActiveChanged() {
            Utils.safeForeach(mSettingsChangeCallbacks,
                    cb -> cb.onLocationActiveChanged(mAreActiveLocationRequests));
            synchronized (mSettingsChangeCallbacks) {
                final int n = mSettingsChangeCallbacks.size();
                for (int i = 0; i < n; i++) {
                    mSettingsChangeCallbacks.get(i)
                            .onLocationActiveChanged(mAreActiveLocationRequests);
                }
            }
        }

        private void locationSettingsChanged() {
            boolean isEnabled = isLocationEnabled();
            Utils.safeForeach(mSettingsChangeCallbacks,
                    cb -> cb.onLocationSettingsChanged(isEnabled));
            synchronized (mSettingsChangeCallbacks) {
                final int n = mSettingsChangeCallbacks.size();
                for (int i = 0; i < n; i++) {
                    mSettingsChangeCallbacks.get(i).onLocationSettingsChanged(isEnabled);
                }
            }
        }
    }

+4 −0
Original line number Diff line number Diff line
@@ -37,6 +37,10 @@ public class Utils {
    /**
     * Allows lambda iteration over a list. It is done in reverse order so it is safe
     * to add or remove items during the iteration.  Skips over null items.
     *
     * @deprecated According to b/286841705, this is *not* safe: If an item is removed from the
     *   list, then list.get(i) could throw an IndexOutOfBoundsException. This method should not be
     *   used; try using `synchronized` or making a copy of the list instead.
     */
    public static <T> void safeForeach(List<T> list, Consumer<T> c) {
        for (int i = list.size() - 1; i >= 0; i--) {