diff options
author | Yuliya Kamatkova <yuliyak@google.com> | 2020-01-24 21:10:54 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-01-24 21:10:54 +0000 |
commit | 56f7c7f37c9ffc608b3acd9c127fd921e6f8a145 (patch) | |
tree | 0a898888615db85878a87ccff054d29a30fb6082 /services/usage | |
parent | 30295f54218bccb71a34c007222d0dc54fa7e69c (diff) | |
parent | 48c38076efc3c759b5ee6d2a2e4476fcccd1c08a (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')
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); } |