diff options
3 files changed, 55 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java index fb5fba0d097e..d4290ee615c0 100644 --- a/services/core/java/com/android/server/LocationManagerService.java +++ b/services/core/java/com/android/server/LocationManagerService.java @@ -960,7 +960,8 @@ public class LocationManagerService extends ILocationManager.Stub { // synchronize to ensure incrementPendingBroadcastsLocked() // is called before decrementPendingBroadcasts() mPendingIntent.send(mContext, 0, statusChanged, this, mLocationHandler, - getResolutionPermission(mAllowedResolutionLevel)); + getResolutionPermission(mAllowedResolutionLevel), + PendingIntentUtils.createDontSendToRestrictedAppsBundle(null)); // call this after broadcasting so we do not increment // if we throw an exeption. incrementPendingBroadcastsLocked(); @@ -995,7 +996,8 @@ public class LocationManagerService extends ILocationManager.Stub { // synchronize to ensure incrementPendingBroadcastsLocked() // is called before decrementPendingBroadcasts() mPendingIntent.send(mContext, 0, locationChanged, this, mLocationHandler, - getResolutionPermission(mAllowedResolutionLevel)); + getResolutionPermission(mAllowedResolutionLevel), + PendingIntentUtils.createDontSendToRestrictedAppsBundle(null)); // call this after broadcasting so we do not increment // if we throw an exeption. incrementPendingBroadcastsLocked(); @@ -1037,7 +1039,8 @@ public class LocationManagerService extends ILocationManager.Stub { // synchronize to ensure incrementPendingBroadcastsLocked() // is called before decrementPendingBroadcasts() mPendingIntent.send(mContext, 0, providerIntent, this, mLocationHandler, - getResolutionPermission(mAllowedResolutionLevel)); + getResolutionPermission(mAllowedResolutionLevel), + PendingIntentUtils.createDontSendToRestrictedAppsBundle(null)); // call this after broadcasting so we do not increment // if we throw an exeption. incrementPendingBroadcastsLocked(); diff --git a/services/core/java/com/android/server/PendingIntentUtils.java b/services/core/java/com/android/server/PendingIntentUtils.java new file mode 100644 index 000000000000..1600101b20f4 --- /dev/null +++ b/services/core/java/com/android/server/PendingIntentUtils.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server; + +import android.annotation.Nullable; +import android.app.BroadcastOptions; +import android.os.Bundle; + +/** + * Some utility methods for system server. + * @hide + */ +public class PendingIntentUtils { + /** + * Creates a Bundle that can be used to restrict the background PendingIntents. + * @param bundle when provided, will merge the extra options to restrict background + * PendingIntent into the existing bundle. + * @return the created Bundle. + */ + public static Bundle createDontSendToRestrictedAppsBundle(@Nullable Bundle bundle) { + final BroadcastOptions options = BroadcastOptions.makeBasic(); + options.setDontSendToRestrictedApps(true); + if (bundle == null) { + return options.toBundle(); + } + bundle.putAll(options.toBundle()); + return bundle; + } + + // Disable the constructor. + private PendingIntentUtils() {} +} diff --git a/services/core/java/com/android/server/location/GeofenceManager.java b/services/core/java/com/android/server/location/GeofenceManager.java index d50ffe965c7f..fafe99c9fe18 100644 --- a/services/core/java/com/android/server/location/GeofenceManager.java +++ b/services/core/java/com/android/server/location/GeofenceManager.java @@ -42,6 +42,7 @@ import android.provider.Settings; import android.util.Slog; import com.android.server.LocationManagerService; +import com.android.server.PendingIntentUtils; public class GeofenceManager implements LocationListener, PendingIntent.OnFinished { private static final String TAG = "GeofenceManager"; @@ -401,7 +402,8 @@ public class GeofenceManager implements LocationListener, PendingIntent.OnFinish mWakeLock.acquire(); try { pendingIntent.send(mContext, 0, intent, this, null, - android.Manifest.permission.ACCESS_FINE_LOCATION); + android.Manifest.permission.ACCESS_FINE_LOCATION, + PendingIntentUtils.createDontSendToRestrictedAppsBundle(null)); } catch (PendingIntent.CanceledException e) { removeFence(null, pendingIntent); mWakeLock.release(); |