Merge "Create REGISTER_STATS_PULL_ATOM permission"
This commit is contained in:
@@ -476,7 +476,7 @@ public final class StatsManager {
|
||||
/**
|
||||
* Registers a callback for an atom when that atom is to be pulled. The stats service will
|
||||
* invoke pullData in the callback when the stats service determines that this atom needs to be
|
||||
* pulled.
|
||||
* pulled. This method should not be called by third-party apps.
|
||||
*
|
||||
* @param atomTag The tag of the atom for this puller callback.
|
||||
* @param metadata Optional metadata specifying the timeout, cool down time, and
|
||||
@@ -485,6 +485,7 @@ public final class StatsManager {
|
||||
* @param executor The executor in which to run the callback.
|
||||
*
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.REGISTER_STATS_PULL_ATOM)
|
||||
public void registerPullAtomCallback(int atomTag, @Nullable PullAtomMetadata metadata,
|
||||
@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull StatsPullAtomCallback callback) {
|
||||
@@ -510,11 +511,12 @@ public final class StatsManager {
|
||||
|
||||
/**
|
||||
* Unregisters a callback for an atom when that atom is to be pulled. Note that any ongoing
|
||||
* pulls will still occur.
|
||||
* pulls will still occur. This method should not be called by third-party apps.
|
||||
*
|
||||
* @param atomTag The tag of the atom of which to unregister
|
||||
*
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.REGISTER_STATS_PULL_ATOM)
|
||||
public void unregisterPullAtomCallback(int atomTag) {
|
||||
synchronized (sLock) {
|
||||
try {
|
||||
|
||||
@@ -171,8 +171,8 @@ public class StatsManagerService extends IStatsManagerService.Stub {
|
||||
@Override
|
||||
public void registerPullAtomCallback(int atomTag, long coolDownNs, long timeoutNs,
|
||||
int[] additiveFields, IPullAtomCallback pullerCallback) {
|
||||
enforceRegisterStatsPullAtomPermission();
|
||||
int callingUid = Binder.getCallingUid();
|
||||
final long token = Binder.clearCallingIdentity();
|
||||
PullerKey key = new PullerKey(callingUid, atomTag);
|
||||
PullerValue val = new PullerValue(coolDownNs, timeoutNs, additiveFields, pullerCallback);
|
||||
|
||||
@@ -187,6 +187,7 @@ public class StatsManagerService extends IStatsManagerService.Stub {
|
||||
return;
|
||||
}
|
||||
|
||||
final long token = Binder.clearCallingIdentity();
|
||||
try {
|
||||
statsd.registerPullAtomCallback(
|
||||
callingUid, atomTag, coolDownNs, timeoutNs, additiveFields, pullerCallback);
|
||||
@@ -199,8 +200,8 @@ public class StatsManagerService extends IStatsManagerService.Stub {
|
||||
|
||||
@Override
|
||||
public void unregisterPullAtomCallback(int atomTag) {
|
||||
enforceRegisterStatsPullAtomPermission();
|
||||
int callingUid = Binder.getCallingUid();
|
||||
final long token = Binder.clearCallingIdentity();
|
||||
PullerKey key = new PullerKey(callingUid, atomTag);
|
||||
|
||||
// Always remove the puller from StatsManagerService even if statsd is down. When statsd
|
||||
@@ -214,6 +215,7 @@ public class StatsManagerService extends IStatsManagerService.Stub {
|
||||
return;
|
||||
}
|
||||
|
||||
final long token = Binder.clearCallingIdentity();
|
||||
try {
|
||||
statsd.unregisterPullAtomCallback(callingUid, atomTag);
|
||||
} catch (RemoteException e) {
|
||||
@@ -502,6 +504,13 @@ public class StatsManagerService extends IStatsManagerService.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
private void enforceRegisterStatsPullAtomPermission() {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.REGISTER_STATS_PULL_ATOM,
|
||||
"Need REGISTER_STATS_PULL_ATOM permission.");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Clients should call this if blocking until statsd to be ready is desired
|
||||
*
|
||||
|
||||
@@ -188,6 +188,7 @@ package android {
|
||||
field public static final String REGISTER_CALL_PROVIDER = "android.permission.REGISTER_CALL_PROVIDER";
|
||||
field public static final String REGISTER_CONNECTION_MANAGER = "android.permission.REGISTER_CONNECTION_MANAGER";
|
||||
field public static final String REGISTER_SIM_SUBSCRIPTION = "android.permission.REGISTER_SIM_SUBSCRIPTION";
|
||||
field public static final String REGISTER_STATS_PULL_ATOM = "android.permission.REGISTER_STATS_PULL_ATOM";
|
||||
field public static final String REMOTE_DISPLAY_PROVIDER = "android.permission.REMOTE_DISPLAY_PROVIDER";
|
||||
field public static final String REMOVE_DRM_CERTIFICATES = "android.permission.REMOVE_DRM_CERTIFICATES";
|
||||
field public static final String REMOVE_TASKS = "android.permission.REMOVE_TASKS";
|
||||
@@ -692,7 +693,7 @@ package android.app {
|
||||
method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public long[] getRegisteredExperimentIds() throws android.app.StatsManager.StatsUnavailableException;
|
||||
method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getReports(long) throws android.app.StatsManager.StatsUnavailableException;
|
||||
method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getStatsMetadata() throws android.app.StatsManager.StatsUnavailableException;
|
||||
method public void registerPullAtomCallback(int, @Nullable android.app.StatsManager.PullAtomMetadata, @NonNull java.util.concurrent.Executor, @NonNull android.app.StatsManager.StatsPullAtomCallback);
|
||||
method @RequiresPermission(android.Manifest.permission.REGISTER_STATS_PULL_ATOM) public void registerPullAtomCallback(int, @Nullable android.app.StatsManager.PullAtomMetadata, @NonNull java.util.concurrent.Executor, @NonNull android.app.StatsManager.StatsPullAtomCallback);
|
||||
method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void removeConfig(long) throws android.app.StatsManager.StatsUnavailableException;
|
||||
method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean removeConfiguration(long);
|
||||
method @NonNull @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public long[] setActiveConfigsChangedOperation(@Nullable android.app.PendingIntent) throws android.app.StatsManager.StatsUnavailableException;
|
||||
@@ -700,7 +701,7 @@ package android.app {
|
||||
method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean setBroadcastSubscriber(long, long, android.app.PendingIntent);
|
||||
method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean setDataFetchOperation(long, android.app.PendingIntent);
|
||||
method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void setFetchReportsOperation(android.app.PendingIntent, long) throws android.app.StatsManager.StatsUnavailableException;
|
||||
method public void unregisterPullAtomCallback(int);
|
||||
method @RequiresPermission(android.Manifest.permission.REGISTER_STATS_PULL_ATOM) public void unregisterPullAtomCallback(int);
|
||||
field public static final String ACTION_STATSD_STARTED = "android.app.action.STATSD_STARTED";
|
||||
field public static final String EXTRA_STATS_ACTIVE_CONFIG_KEYS = "android.app.extra.STATS_ACTIVE_CONFIG_KEYS";
|
||||
field public static final String EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES = "android.app.extra.STATS_BROADCAST_SUBSCRIBER_COOKIES";
|
||||
|
||||
@@ -4065,6 +4065,11 @@
|
||||
<permission android:name="android.permission.STATSCOMPANION"
|
||||
android:protectionLevel="signature" />
|
||||
|
||||
<!--@SystemApi @hide Allows an application to register stats pull atom callbacks.
|
||||
<p>Not for use by third-party applications.-->
|
||||
<permission android:name="android.permission.REGISTER_STATS_PULL_ATOM"
|
||||
android:protectionLevel="signature|privileged" />
|
||||
|
||||
<!-- @SystemApi Allows an application to control the backup and restore process.
|
||||
<p>Not for use by third-party applications.
|
||||
@hide pending API council -->
|
||||
|
||||
Reference in New Issue
Block a user