diff options
| author | 2020-08-19 11:22:55 -0700 | |
|---|---|---|
| committer | 2020-08-19 20:17:57 -0700 | |
| commit | c1dc1b8519397917796b59bfc8e28b47d1afedb5 (patch) | |
| tree | 37ddcbdba05f9ef4b8ad86574bba794d17e4b467 | |
| parent | 64c801d344aba147359875a1650003b52987b5b1 (diff) | |
Cache location provider pkg name
Bug: 162547999
Test: Accessed camera from location provider and saw camera indicator
Change-Id: Id273b7d42c6ebb60219b515e2ebd4bd44961c2e0
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java b/packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java index b70142826c1e..64b35caeeef2 100644 --- a/packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java @@ -68,6 +68,12 @@ public class AppOpsControllerImpl implements AppOpsController, private final AppOpsManager mAppOps; private final AudioManager mAudioManager; private final LocationManager mLocationManager; + + // mLocationProviderPackages are cached and updated only occasionally + private static final long LOCATION_PROVIDER_UPDATE_FREQUENCY_MS = 30000; + private long mLastLocationProviderPackageUpdate; + private List<String> mLocationProviderPackages; + private H mBGHandler; private final List<AppOpsController.Callback> mCallbacks = new ArrayList<>(); private final ArrayMap<Integer, Set<Callback>> mCallbacksByCode = new ArrayMap<>(); @@ -292,6 +298,26 @@ public class AppOpsControllerImpl implements AppOpsController, return isUserVisible(item.getCode(), item.getUid(), item.getPackageName()); } + /** + * Checks if a package is the current location provider. + * + * <p>Data is cached to avoid too many calls into system server + * + * @param packageName The package that might be the location provider + * + * @return {@code true} iff the package is the location provider. + */ + private boolean isLocationProvider(String packageName) { + long now = System.currentTimeMillis(); + + if (mLastLocationProviderPackageUpdate + LOCATION_PROVIDER_UPDATE_FREQUENCY_MS < now) { + mLastLocationProviderPackageUpdate = now; + mLocationProviderPackages = mLocationManager.getProviderPackages( + LocationManager.FUSED_PROVIDER); + } + + return mLocationProviderPackages.contains(packageName); + } /** * Does the app-op, uid and package name, refer to an operation that should be shown to the @@ -313,8 +339,7 @@ public class AppOpsControllerImpl implements AppOpsController, return true; } - if (appOpCode == AppOpsManager.OP_CAMERA && mLocationManager.isProviderPackage( - packageName)) { + if (appOpCode == AppOpsManager.OP_CAMERA && isLocationProvider(packageName)) { return true; } |