DO NOT MERGE [DPM] DO uses batch token to retrieve network logs, and can retrieve
the same batch many times
This allows DO to:
a) know that some logs were dropped (by trying with token and not
getting anything)
b) know how many logs were there in each batch (useful especially
for the dropped ones)
c) retry batch retrieval if it failed
Test: will be CTS tested once APIs unhidden
Bug: 29748723
(cherry picked from commit a9ff206af2)
Change-Id: Iac10e61cdf3b100719a9c029ff897bd5ef5c8e2f
This commit is contained in:
@@ -284,6 +284,27 @@ public class DeviceAdminReceiver extends BroadcastReceiver {
|
||||
public static final String ACTION_NETWORK_LOGS_AVAILABLE
|
||||
= "android.app.action.NETWORK_LOGS_AVAILABLE";
|
||||
|
||||
/**
|
||||
* A {@code long} containing a token of the current batch of network logs, that has to be used
|
||||
* to retrieve the batch of logs by the device owner.
|
||||
*
|
||||
* @see #ACTION_NETWORK_LOGS_AVAILABLE
|
||||
* @see DevicePolicyManager#retrieveNetworkLogs
|
||||
* @hide
|
||||
*/
|
||||
public static final String EXTRA_NETWORK_LOGS_TOKEN =
|
||||
"android.app.extra.EXTRA_NETWORK_LOGS_TOKEN";
|
||||
|
||||
/**
|
||||
* An {@code int} count representing a total count of network logs inside the current batch of
|
||||
* network logs.
|
||||
*
|
||||
* @see #ACTION_NETWORK_LOGS_AVAILABLE
|
||||
* @hide
|
||||
*/
|
||||
public static final String EXTRA_NETWORK_LOGS_COUNT =
|
||||
"android.app.extra.EXTRA_NETWORK_LOGS_COUNT";
|
||||
|
||||
/**
|
||||
* A string containing the SHA-256 hash of the bugreport file.
|
||||
*
|
||||
@@ -644,19 +665,22 @@ public class DeviceAdminReceiver extends BroadcastReceiver {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a new batch of network logs can be retrieved. This callback method will only ever
|
||||
* be called when network logging is enabled. The logs can only be retrieved while network
|
||||
* Called each time a new batch of network logs can be retrieved. This callback method will only
|
||||
* ever be called when network logging is enabled. The logs can only be retrieved while network
|
||||
* logging is enabled.
|
||||
*
|
||||
* <p>This callback is only applicable to device owners.
|
||||
*
|
||||
* @param context The running context as per {@link #onReceive}.
|
||||
* @param intent The received intent as per {@link #onReceive}.
|
||||
* @param batchToken The token representing the current batch of network logs.
|
||||
* @param networkLogsCount The total count of events in the current batch of network logs.
|
||||
* @see DevicePolicyManager#retrieveNetworkLogs(ComponentName)
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public void onNetworkLogsAvailable(Context context, Intent intent) {
|
||||
public void onNetworkLogsAvailable(Context context, Intent intent, long batchToken,
|
||||
int networkLogsCount) {
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -714,7 +738,9 @@ public class DeviceAdminReceiver extends BroadcastReceiver {
|
||||
} else if (ACTION_SECURITY_LOGS_AVAILABLE.equals(action)) {
|
||||
onSecurityLogsAvailable(context, intent);
|
||||
} else if (ACTION_NETWORK_LOGS_AVAILABLE.equals(action)) {
|
||||
onNetworkLogsAvailable(context, intent);
|
||||
long batchToken = intent.getLongExtra(EXTRA_NETWORK_LOGS_TOKEN, -1);
|
||||
int networkLogsCount = intent.getIntExtra(EXTRA_NETWORK_LOGS_COUNT, 0);
|
||||
onNetworkLogsAvailable(context, intent, batchToken, networkLogsCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6621,8 +6621,6 @@ public class DevicePolicyManager {
|
||||
* @param admin Which {@link DeviceAdminReceiver} this request is associated with.
|
||||
* @param enabled whether network logging should be enabled or not.
|
||||
* @throws {@link SecurityException} if {@code admin} is not a device owner.
|
||||
* @throws {@link RemoteException} if network logging could not be enabled or disabled due to
|
||||
* the logging service not being available
|
||||
* @see #retrieveNetworkLogs
|
||||
*
|
||||
* @hide
|
||||
@@ -6655,7 +6653,10 @@ public class DevicePolicyManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by device owner to retrieve a new batch of network logging events.
|
||||
* Called by device owner to retrieve the most recent batch of network logging events.
|
||||
* A device owner has to provide a batchToken provided as part of
|
||||
* {@link DeviceAdminReceiver#onNetworkLogsAvailable} callback. If the token doesn't match the
|
||||
* token of the most recent available batch of logs, {@code null} will be returned.
|
||||
*
|
||||
* <p> {@link NetworkEvent} can be one of {@link DnsEvent} or {@link ConnectEvent}.
|
||||
*
|
||||
@@ -6666,16 +6667,20 @@ public class DevicePolicyManager {
|
||||
* {@link DeviceAdminReceiver#onNetworkLogsAvailable}.
|
||||
*
|
||||
* @param admin Which {@link DeviceAdminReceiver} this request is associated with.
|
||||
* @param batchToken A token of the batch to retrieve
|
||||
* @return A new batch of network logs which is a list of {@link NetworkEvent}. Returns
|
||||
* {@code null} if there's no batch currently awaiting for retrieval or if logging is disabled.
|
||||
* {@code null} if the batch represented by batchToken is no longer available or if
|
||||
* logging is disabled.
|
||||
* @throws {@link SecurityException} if {@code admin} is not a device owner.
|
||||
* @see DeviceAdminReceiver#onNetworkLogsAvailable
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public List<NetworkEvent> retrieveNetworkLogs(@NonNull ComponentName admin) {
|
||||
public @Nullable List<NetworkEvent> retrieveNetworkLogs(@NonNull ComponentName admin,
|
||||
long batchToken) {
|
||||
throwIfParentInstance("retrieveNetworkLogs");
|
||||
try {
|
||||
return mService.retrieveNetworkLogs(admin);
|
||||
return mService.retrieveNetworkLogs(admin, batchToken);
|
||||
} catch (RemoteException re) {
|
||||
throw re.rethrowFromSystemServer();
|
||||
}
|
||||
|
||||
@@ -315,5 +315,5 @@ interface IDevicePolicyManager {
|
||||
|
||||
void setNetworkLoggingEnabled(in ComponentName admin, boolean enabled);
|
||||
boolean isNetworkLoggingEnabled(in ComponentName admin);
|
||||
List<NetworkEvent> retrieveNetworkLogs(in ComponentName admin);
|
||||
List<NetworkEvent> retrieveNetworkLogs(in ComponentName admin, long batchToken);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user