Merge "Do not hold lock when calling into NotificationManager" into sc-dev am: 250e7a7dff

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

Change-Id: Ia1aa85f156ee0119715d780f43d0a3ea21ca7c5e
This commit is contained in:
TreeHugger Robot
2021-07-05 10:27:23 +00:00
committed by Automerger Merge Worker

View File

@@ -14991,6 +14991,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
}
private void setNetworkLoggingActiveInternal(boolean active) {
final boolean[] shouldSendNotification = new boolean[] {false};
synchronized (getLockObject()) {
mInjector.binderWithCleanCallingIdentity(() -> {
if (active) {
@@ -15007,17 +15008,23 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
+ " service not being available yet.");
}
maybePauseDeviceWideLoggingLocked();
sendNetworkLoggingNotificationLocked();
shouldSendNotification[0] = shouldSendNetworkLoggingNotificationLocked();
} else {
if (mNetworkLogger != null && !mNetworkLogger.stopNetworkLogging()) {
Slogf.wtf(LOG_TAG, "Network logging could not be stopped due to the logging"
+ " service not being available yet.");
}
mNetworkLogger = null;
mInjector.getNotificationManager().cancel(SystemMessage.NOTE_NETWORK_LOGGING);
}
});
}
if (active) {
if (shouldSendNotification[0]) {
sendNetworkLoggingNotification();
}
} else {
mInjector.getNotificationManager().cancel(SystemMessage.NOTE_NETWORK_LOGGING);
}
}
private @UserIdInt int getNetworkLoggingAffectedUser() {
@@ -15175,20 +15182,25 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
}
}
private void sendNetworkLoggingNotificationLocked() {
/**
* Returns whether it's time to post another network logging notification. When returning true,
* this method has the side-effect of updating the recorded last network logging notification
* time to now.
*/
private boolean shouldSendNetworkLoggingNotificationLocked() {
ensureLocked();
// Send a network logging notification if the admin is a device owner, not profile owner.
final ActiveAdmin deviceOwner = getDeviceOwnerAdminLocked();
if (deviceOwner == null || !deviceOwner.isNetworkLoggingEnabled) {
return;
return false;
}
if (deviceOwner.numNetworkLoggingNotifications
>= ActiveAdmin.DEF_MAXIMUM_NETWORK_LOGGING_NOTIFICATIONS_SHOWN) {
return;
return false;
}
final long now = System.currentTimeMillis();
if (now - deviceOwner.lastNetworkLoggingNotificationTimeMs < MS_PER_DAY) {
return;
return false;
}
deviceOwner.numNetworkLoggingNotifications++;
if (deviceOwner.numNetworkLoggingNotifications
@@ -15197,6 +15209,11 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
} else {
deviceOwner.lastNetworkLoggingNotificationTimeMs = now;
}
saveSettingsLocked(deviceOwner.getUserHandle().getIdentifier());
return true;
}
private void sendNetworkLoggingNotification() {
final PackageManagerInternal pm = mInjector.getPackageManagerInternal();
final Intent intent = new Intent(DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG);
intent.setPackage(pm.getSystemUiServiceComponent().getPackageName());
@@ -15215,7 +15232,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
.bigText(mContext.getString(R.string.network_logging_notification_text)))
.build();
mInjector.getNotificationManager().notify(SystemMessage.NOTE_NETWORK_LOGGING, notification);
saveSettingsLocked(deviceOwner.getUserHandle().getIdentifier());
}
/**