diff options
| author | 2020-08-20 19:50:41 +0000 | |
|---|---|---|
| committer | 2020-08-20 19:50:41 +0000 | |
| commit | a592f49c5bb69464394e76a7e4a2584939681907 (patch) | |
| tree | 01c8bea28b988c02d6d3518b87f470fbfc54554e | |
| parent | 541749bf7e14460b0d21a6416b14d962b2cf63dd (diff) | |
| parent | ff2866cfd6708ee076dd4e34d64b74dfab1f0844 (diff) | |
Merge changes from topic "phone-call-indicators" into rvc-qpr-dev am: ff2866cfd6
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12406147
Change-Id: I70fe25b463fffcf011876bd55d9925ee0bb07949
| -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; } |