diff --git a/location/java/com/android/internal/location/LocationProviderImpl.java b/location/java/com/android/internal/location/LocationProviderImpl.java index 5e9c074a09f0b..fc830f583223d 100644 --- a/location/java/com/android/internal/location/LocationProviderImpl.java +++ b/location/java/com/android/internal/location/LocationProviderImpl.java @@ -25,7 +25,6 @@ import android.util.Log; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; /** * An abstract superclass for location provider implementations. @@ -62,8 +61,8 @@ public abstract class LocationProviderImpl extends LocationProvider { sProvidersByName.remove(provider.getName()); } - public static List getProviders() { - return new ArrayList(sProviders); + public static ArrayList getProviders() { + return sProviders; } public static LocationProviderImpl getProvider(String name) { diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java index 2e7f2c11992b0..0e1e0d953d491 100644 --- a/services/java/com/android/server/LocationManagerService.java +++ b/services/java/com/android/server/LocationManagerService.java @@ -703,10 +703,10 @@ public class LocationManagerService extends ILocationManager.Stub implements Run if (LOCAL_LOGV) { Log.v(TAG, "getAllProviders"); } - List providers = LocationProviderImpl.getProviders(); + ArrayList providers = LocationProviderImpl.getProviders(); ArrayList out = new ArrayList(providers.size()); - - for (LocationProviderImpl p : providers) { + for (int i = providers.size() - 1; i >= 0; i--) { + LocationProviderImpl p = providers.get(i); out.add(p.getName()); } return out; @@ -729,10 +729,10 @@ public class LocationManagerService extends ILocationManager.Stub implements Run if (LOCAL_LOGV) { Log.v(TAG, "getProviders"); } - List providers = LocationProviderImpl.getProviders(); - ArrayList out = new ArrayList(); - - for (LocationProviderImpl p : providers) { + ArrayList providers = LocationProviderImpl.getProviders(); + ArrayList out = new ArrayList(providers.size()); + for (int i = providers.size() - 1; i >= 0; i--) { + LocationProviderImpl p = providers.get(i); String name = p.getName(); if (isAllowedProviderSafe(name)) { if (enabledOnly && !isAllowedBySettingsLocked(name)) { @@ -745,7 +745,9 @@ public class LocationManagerService extends ILocationManager.Stub implements Run } private void updateProvidersLocked() { - for (LocationProviderImpl p : LocationProviderImpl.getProviders()) { + ArrayList providers = LocationProviderImpl.getProviders(); + for (int i = providers.size() - 1; i >= 0; i--) { + LocationProviderImpl p = providers.get(i); boolean isEnabled = p.isEnabled(); String name = p.getName(); boolean shouldBeEnabled = isAllowedBySettingsLocked(name); @@ -1718,8 +1720,9 @@ public class LocationManagerService extends ILocationManager.Stub implements Run // Notify location providers of current network state synchronized (mLock) { - List providers = LocationProviderImpl.getProviders(); - for (LocationProviderImpl provider : providers) { + ArrayList providers = LocationProviderImpl.getProviders(); + for (int i = providers.size() - 1; i >= 0; i--) { + LocationProviderImpl provider = providers.get(i); if (provider.requiresNetwork()) { provider.updateNetworkState(mNetworkState); }