Merge "Catch SecurityException within LatencyTracker" into udc-dev am: 6e439da5c1

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22930576

Change-Id: I052c15650a68baa27e3e92a1a272d46b7ea0d067
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-05-23 04:30:14 +00:00
committed by Automerger Merge Worker

View File

@@ -367,28 +367,42 @@ public class LatencyTracker {
* using a single static object. * using a single static object.
*/ */
@VisibleForTesting @VisibleForTesting
@RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
public void startListeningForLatencyTrackerConfigChanges() { public void startListeningForLatencyTrackerConfigChanges() {
final Context context = ActivityThread.currentApplication(); final Context context = ActivityThread.currentApplication();
if (context != null
&& context.checkCallingOrSelfPermission(READ_DEVICE_CONFIG) == PERMISSION_GRANTED) {
// Post initialization to the background in case we're running on the main thread.
BackgroundThread.getHandler().post(() -> this.updateProperties(
DeviceConfig.getProperties(NAMESPACE_LATENCY_TRACKER)));
DeviceConfig.addOnPropertiesChangedListener(NAMESPACE_LATENCY_TRACKER,
BackgroundThread.getExecutor(), mOnPropertiesChangedListener);
} else {
if (DEBUG) {
if (context == null) { if (context == null) {
Log.d(TAG, "No application for " + ActivityThread.currentActivityThread()); if (DEBUG) {
} else { Log.d(TAG, "No application for package: " + ActivityThread.currentPackageName());
}
return;
}
if (context.checkCallingOrSelfPermission(READ_DEVICE_CONFIG) != PERMISSION_GRANTED) {
if (DEBUG) {
synchronized (mLock) { synchronized (mLock) {
Log.d(TAG, "Initialized the LatencyTracker." Log.d(TAG, "Initialized the LatencyTracker."
+ " (No READ_DEVICE_CONFIG permission to change configs)" + " (No READ_DEVICE_CONFIG permission to change configs)"
+ " enabled=" + mEnabled + ", package=" + context.getPackageName()); + " enabled=" + mEnabled + ", package=" + context.getPackageName());
} }
} }
return;
} }
// Post initialization to the background in case we're running on the main thread.
BackgroundThread.getHandler().post(() -> {
try {
this.updateProperties(
DeviceConfig.getProperties(NAMESPACE_LATENCY_TRACKER));
DeviceConfig.addOnPropertiesChangedListener(NAMESPACE_LATENCY_TRACKER,
BackgroundThread.getExecutor(), mOnPropertiesChangedListener);
} catch (SecurityException ex) {
// In case of running tests that the main thread passes the check,
// but the background thread doesn't have necessary permissions.
// Swallow it since it's ok to ignore device config changes in the tests.
Log.d(TAG, "Can't get properties: READ_DEVICE_CONFIG granted="
+ context.checkCallingOrSelfPermission(READ_DEVICE_CONFIG)
+ ", package=" + context.getPackageName());
} }
});
} }
/** /**