summaryrefslogtreecommitdiff
path: root/services/usage/java
diff options
context:
space:
mode:
authorYuliya Kamatkova <yuliyak@google.com>2020-01-24 21:10:54 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-01-24 21:10:54 +0000
commit56f7c7f37c9ffc608b3acd9c127fd921e6f8a145 (patch)
tree0a898888615db85878a87ccff054d29a30fb6082 /services/usage/java
parent30295f54218bccb71a34c007222d0dc54fa7e69c (diff)
parent48c38076efc3c759b5ee6d2a2e4476fcccd1c08a (diff)
Merge "Add Activity#setLocusContext API. Plumb LocusID to the System Server. Add locus update event to the Usage Stats. Test: Build and run on a test device with a test app. Bug: 147594233, 147100454"
Diffstat (limited to 'services/usage/java')
-rw-r--r--services/usage/java/com/android/server/usage/IntervalStats.java17
-rw-r--r--services/usage/java/com/android/server/usage/UsageStatsProtoV2.java9
-rw-r--r--services/usage/java/com/android/server/usage/UsageStatsService.java15
3 files changed, 41 insertions, 0 deletions
diff --git a/services/usage/java/com/android/server/usage/IntervalStats.java b/services/usage/java/com/android/server/usage/IntervalStats.java
index 8fb283adc740..8fadf5eb9333 100644
--- a/services/usage/java/com/android/server/usage/IntervalStats.java
+++ b/services/usage/java/com/android/server/usage/IntervalStats.java
@@ -28,6 +28,7 @@ import static android.app.usage.UsageEvents.Event.FOREGROUND_SERVICE_START;
import static android.app.usage.UsageEvents.Event.FOREGROUND_SERVICE_STOP;
import static android.app.usage.UsageEvents.Event.KEYGUARD_HIDDEN;
import static android.app.usage.UsageEvents.Event.KEYGUARD_SHOWN;
+import static android.app.usage.UsageEvents.Event.LOCUS_ID_SET;
import static android.app.usage.UsageEvents.Event.NOTIFICATION_INTERRUPTION;
import static android.app.usage.UsageEvents.Event.ROLLOVER_FOREGROUND_SERVICE;
import static android.app.usage.UsageEvents.Event.SCREEN_INTERACTIVE;
@@ -568,6 +569,16 @@ public class IntervalStats {
continue;
}
break;
+ case LOCUS_ID_SET:
+ event.mLocusId = packagesTokenData.getString(packageToken, event.mLocusIdToken);
+ if (event.mLocusId == null) {
+ Slog.e(TAG, "Unable to parse locus " + event.mLocusIdToken
+ + " for package " + packageToken);
+ this.events.remove(i);
+ dataOmitted = true;
+ continue;
+ }
+ break;
}
}
return dataOmitted;
@@ -675,6 +686,12 @@ public class IntervalStats {
packageToken, event.mPackage, event.mNotificationChannelId);
}
break;
+ case LOCUS_ID_SET:
+ if (!TextUtils.isEmpty(event.mLocusId)) {
+ event.mLocusIdToken = packagesTokenData.getTokenOrAdd(packageToken,
+ event.mPackage, event.mLocusId);
+ }
+ break;
}
}
}
diff --git a/services/usage/java/com/android/server/usage/UsageStatsProtoV2.java b/services/usage/java/com/android/server/usage/UsageStatsProtoV2.java
index fe5da923597e..e4aa9fe0dc1e 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsProtoV2.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsProtoV2.java
@@ -277,6 +277,10 @@ final class UsageStatsProtoV2 {
event.mTaskRootClassToken = proto.readInt(
EventObfuscatedProto.TASK_ROOT_CLASS_TOKEN) - 1;
break;
+ case (int) EventObfuscatedProto.LOCUS_ID_TOKEN:
+ event.mLocusIdToken = proto.readInt(
+ EventObfuscatedProto.LOCUS_ID_TOKEN) - 1;
+ break;
case ProtoInputStream.NO_MORE_FIELDS:
// timeStamp was not read, assume default value 0 plus beginTime
if (event.mTimeStamp == 0) {
@@ -398,6 +402,11 @@ final class UsageStatsProtoV2 {
proto.write(EventObfuscatedProto.SHORTCUT_ID_TOKEN, event.mShortcutIdToken + 1);
}
break;
+ case UsageEvents.Event.LOCUS_ID_SET:
+ if (event.mLocusIdToken != PackagesTokenData.UNASSIGNED_TOKEN) {
+ proto.write(EventObfuscatedProto.LOCUS_ID_TOKEN, event.mLocusIdToken + 1);
+ }
+ break;
case UsageEvents.Event.NOTIFICATION_INTERRUPTION:
if (event.mNotificationChannelIdToken != PackagesTokenData.UNASSIGNED_TOKEN) {
proto.write(EventObfuscatedProto.NOTIFICATION_CHANNEL_ID_TOKEN,
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index 5119e5824f7f..9a18f8cd3a46 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -21,6 +21,7 @@ import static android.app.usage.UsageEvents.Event.CONFIGURATION_CHANGE;
import static android.app.usage.UsageEvents.Event.DEVICE_EVENT_PACKAGE_NAME;
import static android.app.usage.UsageEvents.Event.DEVICE_SHUTDOWN;
import static android.app.usage.UsageEvents.Event.FLUSH_TO_DISK;
+import static android.app.usage.UsageEvents.Event.LOCUS_ID_SET;
import static android.app.usage.UsageEvents.Event.NOTIFICATION_INTERRUPTION;
import static android.app.usage.UsageEvents.Event.SHORTCUT_INVOCATION;
import static android.app.usage.UsageEvents.Event.USER_STOPPED;
@@ -30,6 +31,8 @@ import static android.app.usage.UsageStatsManager.USAGE_SOURCE_TASK_ROOT_ACTIVIT
import android.Manifest;
import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.AppOpsManager;
import android.app.IUidObserver;
@@ -52,6 +55,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.LocusId;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
@@ -1987,6 +1991,17 @@ public class UsageStatsService extends SystemService implements
}
@Override
+ public void reportLocusUpdate(@NonNull ComponentName activity, @UserIdInt int userId,
+ @Nullable LocusId locusId, @NonNull IBinder appToken) {
+ Event event = new Event(LOCUS_ID_SET, SystemClock.elapsedRealtime());
+ event.mLocusId = locusId.getId();
+ event.mPackage = activity.getPackageName();
+ event.mClass = activity.getClassName();
+ event.mInstanceId = appToken.hashCode();
+ reportEventOrAddToQueue(userId, event);
+ }
+
+ @Override
public void reportContentProviderUsage(String name, String packageName, int userId) {
mAppStandby.postReportContentProviderUsage(name, packageName, userId);
}