Merge "Fix a couple of bugs from the location overhaul." into jb-mr1-dev
diff --git a/location/java/com/android/internal/location/ProviderRequest.java b/location/java/com/android/internal/location/ProviderRequest.java
index 25c51f5..26243e7 100644
--- a/location/java/com/android/internal/location/ProviderRequest.java
+++ b/location/java/com/android/internal/location/ProviderRequest.java
@@ -39,10 +39,9 @@
      * is a high power slow interval request and a
      * low power fast interval request.
      */
-    public List<LocationRequest> locationRequests = null;
+    public List<LocationRequest> locationRequests = new ArrayList<LocationRequest>();
 
-    public ProviderRequest() {
-    }
+    public ProviderRequest() { }
 
     public static final Parcelable.Creator<ProviderRequest> CREATOR =
             new Parcelable.Creator<ProviderRequest>() {
@@ -52,7 +51,6 @@
             request.reportLocation = in.readInt() == 1;
             request.interval = in.readLong();
             int count = in.readInt();
-            request.locationRequests = new ArrayList<LocationRequest>(count);
             for (int i = 0; i < count; i++) {
                 request.locationRequests.add(LocationRequest.CREATOR.createFromParcel(in));
             }
@@ -73,8 +71,10 @@
     public void writeToParcel(Parcel parcel, int flags) {
         parcel.writeInt(reportLocation ? 1 : 0);
         parcel.writeLong(interval);
-        parcel.writeParcelableArray(locationRequests.toArray(
-                new LocationRequest[locationRequests.size()]), 0);
+        parcel.writeInt(locationRequests.size());
+        for (LocationRequest request : locationRequests) {
+            request.writeToParcel(parcel, flags);
+        }
     }
 
     @Override
diff --git a/location/lib/java/com/android/location/provider/ProviderRequestUnbundled.java b/location/lib/java/com/android/location/provider/ProviderRequestUnbundled.java
index 7487a56..3ff19ca 100644
--- a/location/lib/java/com/android/location/provider/ProviderRequestUnbundled.java
+++ b/location/lib/java/com/android/location/provider/ProviderRequestUnbundled.java
@@ -42,6 +42,9 @@
         return mRequest.interval;
     }
 
+    /**
+     * Never null.
+     */
     public List<LocationRequest> getLocationRequests() {
         return mRequest.locationRequests;
     }
diff --git a/packages/FusedLocation/src/com/android/location/fused/FusedLocationProvider.java b/packages/FusedLocation/src/com/android/location/fused/FusedLocationProvider.java
index 45f05f3..7918882 100644
--- a/packages/FusedLocation/src/com/android/location/fused/FusedLocationProvider.java
+++ b/packages/FusedLocation/src/com/android/location/fused/FusedLocationProvider.java
@@ -78,7 +78,7 @@
                 case MSG_SET_REQUEST:
                     {
                         RequestWrapper wrapper = (RequestWrapper) msg.obj;
-                        mEngine.setRequirements(wrapper.request, wrapper.source);
+                        mEngine.setRequest(wrapper.request, wrapper.source);
                         break;
                     }
             }
@@ -97,7 +97,7 @@
 
     @Override
     public void onSetRequest(ProviderRequestUnbundled request, WorkSource source) {
-        mHandler.obtainMessage(MSG_SET_REQUEST,  new RequestWrapper(request, source));
+        mHandler.obtainMessage(MSG_SET_REQUEST, new RequestWrapper(request, source)).sendToTarget();
     }
 
     @Override
diff --git a/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java b/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java
index f4f87a8..38a6091 100644
--- a/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java
+++ b/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java
@@ -120,9 +120,9 @@
     }
 
     /** Called on mLooper thread */
-    public void setRequirements(ProviderRequestUnbundled request, WorkSource source) {
+    public void setRequest(ProviderRequestUnbundled request, WorkSource source) {
         mRequest = request;
-        mEnabled = true;
+        mEnabled = request.getReportLocation();
         updateRequirements();
     }
 
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index a6c3860..e219e8d 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -787,10 +787,6 @@
             for (UpdateRecord record : records) {
                 LocationRequest locationRequest = record.mRequest;
 
-                if (providerRequest.locationRequests == null) {
-                    providerRequest.locationRequests = new ArrayList<LocationRequest>();
-                }
-
                 providerRequest.locationRequests.add(locationRequest);
                 if (locationRequest.getInterval() < providerRequest.interval) {
                     providerRequest.reportLocation = true;