Reduce amount of appop work location does

Only react to app op changes if necessary.

Bug: 146204659
Test: presubmits
Change-Id: I2d0a79381c34d4a054a3d0a8aa2dbb37d05ae7e0
This commit is contained in:
Soonil Nagarkar
2020-01-31 23:04:04 -08:00
parent 7ba51f4f9e
commit 387a2d017e

View File

@@ -305,11 +305,7 @@ public class LocationManagerService extends ILocationManager.Stub {
public void onOpChanged(int op, String packageName) {
// onOpChanged invoked on ui thread, move to our thread to reduce risk
// of blocking ui thread
mHandler.post(() -> {
synchronized (mLock) {
onAppOpChangedLocked();
}
});
mHandler.post(() -> onAppOpChanged(packageName));
}
});
mPackageManager.addOnPermissionsChangeListener(
@@ -392,13 +388,26 @@ public class LocationManagerService extends ILocationManager.Stub {
}
}
@GuardedBy("mLock")
private void onAppOpChangedLocked() {
for (Receiver receiver : mReceivers.values()) {
receiver.updateMonitoring(true);
}
for (LocationProviderManager manager : mProviderManagers) {
applyRequirementsLocked(manager);
private void onAppOpChanged(String packageName) {
synchronized (mLock) {
for (Receiver receiver : mReceivers.values()) {
if (receiver.mCallerIdentity.mPackageName.equals(packageName)) {
receiver.updateMonitoring(true);
}
}
HashSet<String> affectedProviders = new HashSet<>(mRecordsByProvider.size());
for (Entry<String, ArrayList<UpdateRecord>> entry : mRecordsByProvider.entrySet()) {
String provider = entry.getKey();
for (UpdateRecord record : entry.getValue()) {
if (record.mReceiver.mCallerIdentity.mPackageName.equals(packageName)) {
affectedProviders.add(provider);
}
}
}
for (String provider : affectedProviders) {
applyRequirementsLocked(provider);
}
}
}