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

Commit f4cdc01a authored by Caitlin Shkuratov's avatar Caitlin Shkuratov Committed by Android (Google) Code Review
Browse files

Merge "[Status Bar] Stop using Utils.safeForeach in LocationControllerImpl." into udc-qpr-dev

parents 8aef12b5 c9d68472
Loading
Loading
Loading
Loading
+15 −6
Original line number Original line 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.dagger.qualifiers.Main;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.Utils;
import com.android.systemui.util.settings.SecureSettings;
import com.android.systemui.util.settings.SecureSettings;


import java.util.ArrayList;
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_ADD_CALLBACK = 3;
        private static final int MSG_REMOVE_CALLBACK = 4;
        private static final int MSG_REMOVE_CALLBACK = 4;


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


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


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


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


+4 −0
Original line number Original line 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
     * 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.
     * 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) {
    public static <T> void safeForeach(List<T> list, Consumer<T> c) {
        for (int i = list.size() - 1; i >= 0; i--) {
        for (int i = list.size() - 1; i >= 0; i--) {