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:
@@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user