From e46ca414ab476835ff0064b92c519fc04077d2eb Mon Sep 17 00:00:00 2001 From: Kunal Malhotra Date: Wed, 25 Jan 2023 01:28:35 +0000 Subject: [PATCH] Adding in hook for FGS metrics logging in LocationManagerService Test: manual testing on device Change-Id: Idb1ef04c41eac58b5f4d297c788bcde2f2f6035e Bug: b/263304156 --- .../server/location/LocationManagerService.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/services/core/java/com/android/server/location/LocationManagerService.java b/services/core/java/com/android/server/location/LocationManagerService.java index 1cc958b0f5293..115421db4d31c 100644 --- a/services/core/java/com/android/server/location/LocationManagerService.java +++ b/services/core/java/com/android/server/location/LocationManagerService.java @@ -44,6 +44,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.app.ActivityManager; +import android.app.ActivityManagerInternal; import android.app.AppOpsManager; import android.app.PendingIntent; import android.app.compat.CompatChanges; @@ -770,6 +771,12 @@ public class LocationManagerService extends ILocationManager.Stub implements public void registerLocationListener(String provider, LocationRequest request, ILocationListener listener, String packageName, @Nullable String attributionTag, String listenerId) { + ActivityManagerInternal managerInternal = + LocalServices.getService(ActivityManagerInternal.class); + if (managerInternal != null) { + managerInternal.logFgsApiBegin(ActivityManager.FOREGROUND_SERVICE_API_TYPE_LOCATION, + Binder.getCallingUid(), Binder.getCallingPid()); + } CallerIdentity identity = CallerIdentity.fromBinder(mContext, packageName, attributionTag, listenerId); int permissionLevel = LocationPermissions.getPermissionLevel(mContext, identity.getUid(), @@ -927,6 +934,12 @@ public class LocationManagerService extends ILocationManager.Stub implements @Override public void unregisterLocationListener(ILocationListener listener) { + ActivityManagerInternal managerInternal = + LocalServices.getService(ActivityManagerInternal.class); + if (managerInternal != null) { + managerInternal.logFgsApiEnd(ActivityManager.FOREGROUND_SERVICE_API_TYPE_LOCATION, + Binder.getCallingUid(), Binder.getCallingPid()); + } for (LocationProviderManager manager : mProviderManagers) { manager.unregisterLocationRequest(listener); }