diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-02-24 00:24:03 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-02-24 00:24:03 +0000 |
| commit | b9cacbea949e59fe4611dfbf2387d11938275e5b (patch) | |
| tree | 8391b01b765da6370f781c8da96f5eb382751bbc /core/java/android | |
| parent | 5d8074401722e0ef2e6c8fde21600111d539e27f (diff) | |
| parent | 119be9a5fc4033eba570ec94b94862401ee84570 (diff) | |
Merge "Improve reporting of bucketing reason"
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/usage/UsageEvents.java | 28 | ||||
| -rw-r--r-- | core/java/android/app/usage/UsageStatsManager.java | 96 | ||||
| -rw-r--r-- | core/java/android/app/usage/UsageStatsManagerInternal.java | 2 |
3 files changed, 101 insertions, 25 deletions
diff --git a/core/java/android/app/usage/UsageEvents.java b/core/java/android/app/usage/UsageEvents.java index 6b573e99f1fa..521ab4edc4c5 100644 --- a/core/java/android/app/usage/UsageEvents.java +++ b/core/java/android/app/usage/UsageEvents.java @@ -109,7 +109,8 @@ public final class UsageEvents implements Parcelable { public static final int NOTIFICATION_SEEN = 10; /** - * An event type denoting a change in App Standby Bucket. + * An event type denoting a change in App Standby Bucket. Additional bucket information + * is contained in mBucketAndReason. * @hide */ @SystemApi @@ -180,11 +181,12 @@ public final class UsageEvents implements Parcelable { public String[] mContentAnnotations; /** - * The app standby bucket assigned. + * The app standby bucket assigned and reason. Bucket is the high order 16 bits, reason + * is the low order 16 bits. * Only present for {@link #STANDBY_BUCKET_CHANGED} event types * {@hide} */ - public int mBucket; + public int mBucketAndReason; /** @hide */ @EventFlags @@ -205,7 +207,7 @@ public final class UsageEvents implements Parcelable { mContentType = orig.mContentType; mContentAnnotations = orig.mContentAnnotations; mFlags = orig.mFlags; - mBucket = orig.mBucket; + mBucketAndReason = orig.mBucketAndReason; } /** @@ -268,7 +270,19 @@ public final class UsageEvents implements Parcelable { */ @SystemApi public int getStandbyBucket() { - return mBucket; + return (mBucketAndReason & 0xFFFF0000) >>> 16; + } + + /** + * Returns the reason for the bucketing, if the event is of type + * {@link #STANDBY_BUCKET_CHANGED}, otherwise returns 0. Reason values include + * the main reason which is one of REASON_MAIN_*, OR'ed with REASON_SUB_*, if there + * are sub-reasons for the main reason, such as REASON_SUB_USAGE_* when the main reason + * is REASON_MAIN_USAGE. + * @hide + */ + public int getStandbyReason() { + return mBucketAndReason & 0x0000FFFF; } /** @hide */ @@ -428,7 +442,7 @@ public final class UsageEvents implements Parcelable { p.writeStringArray(event.mContentAnnotations); break; case Event.STANDBY_BUCKET_CHANGED: - p.writeInt(event.mBucket); + p.writeInt(event.mBucketAndReason); break; } } @@ -474,7 +488,7 @@ public final class UsageEvents implements Parcelable { eventOut.mContentAnnotations = p.createStringArray(); break; case Event.STANDBY_BUCKET_CHANGED: - eventOut.mBucket = p.readInt(); + eventOut.mBucketAndReason = p.readInt(); break; } } diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java index 9a0bb1d405b2..5a57b067f2c4 100644 --- a/core/java/android/app/usage/UsageStatsManager.java +++ b/core/java/android/app/usage/UsageStatsManager.java @@ -132,24 +132,37 @@ public final class UsageStatsManager { @SystemApi public static final int STANDBY_BUCKET_NEVER = 50; - /** {@hide} Reason for bucketing -- default initial state */ - public static final String REASON_DEFAULT = "default"; - - /** {@hide} Reason for bucketing -- timeout */ - public static final String REASON_TIMEOUT = "timeout"; - - /** {@hide} Reason for bucketing -- usage */ - public static final String REASON_USAGE = "usage"; - - /** {@hide} Reason for bucketing -- forced by user / shell command */ - public static final String REASON_FORCED = "forced"; + /** @hide */ + public static final int REASON_MAIN_MASK = 0xFF00; + /** @hide */ + public static final int REASON_MAIN_DEFAULT = 0x0100; + /** @hide */ + public static final int REASON_MAIN_TIMEOUT = 0x0200; + /** @hide */ + public static final int REASON_MAIN_USAGE = 0x0300; + /** @hide */ + public static final int REASON_MAIN_FORCED = 0x0400; + /** @hide */ + public static final int REASON_MAIN_PREDICTED = 0x0500; - /** - * {@hide} - * Reason for bucketing -- predicted. This is a prefix and the UID of the bucketeer will - * be appended. - */ - public static final String REASON_PREDICTED = "predicted"; + /** @hide */ + public static final int REASON_SUB_MASK = 0x00FF; + /** @hide */ + public static final int REASON_SUB_USAGE_SYSTEM_INTERACTION = 0x0001; + /** @hide */ + public static final int REASON_SUB_USAGE_NOTIFICATION_SEEN = 0x0002; + /** @hide */ + public static final int REASON_SUB_USAGE_USER_INTERACTION = 0x0003; + /** @hide */ + public static final int REASON_SUB_USAGE_MOVE_TO_FOREGROUND = 0x0004; + /** @hide */ + public static final int REASON_SUB_USAGE_MOVE_TO_BACKGROUND = 0x0005; + /** @hide */ + public static final int REASON_SUB_USAGE_SYSTEM_UPDATE = 0x0006; + /** @hide */ + public static final int REASON_SUB_USAGE_ACTIVE_TIMEOUT = 0x0007; + /** @hide */ + public static final int REASON_SUB_USAGE_SYNC_ADAPTER = 0x0008; /** @hide */ @IntDef(flag = false, prefix = { "STANDBY_BUCKET_" }, value = { @@ -427,6 +440,55 @@ public final class UsageStatsManager { } } + /** @hide */ + public static String reasonToString(int standbyReason) { + StringBuilder sb = new StringBuilder(); + switch (standbyReason & REASON_MAIN_MASK) { + case REASON_MAIN_DEFAULT: + sb.append("d"); + break; + case REASON_MAIN_FORCED: + sb.append("f"); + break; + case REASON_MAIN_PREDICTED: + sb.append("p"); + break; + case REASON_MAIN_TIMEOUT: + sb.append("t"); + break; + case REASON_MAIN_USAGE: + sb.append("u-"); + switch (standbyReason & REASON_SUB_MASK) { + case REASON_SUB_USAGE_SYSTEM_INTERACTION: + sb.append("si"); + break; + case REASON_SUB_USAGE_NOTIFICATION_SEEN: + sb.append("ns"); + break; + case REASON_SUB_USAGE_USER_INTERACTION: + sb.append("ui"); + break; + case REASON_SUB_USAGE_MOVE_TO_FOREGROUND: + sb.append("mf"); + break; + case REASON_SUB_USAGE_MOVE_TO_BACKGROUND: + sb.append("mb"); + break; + case REASON_SUB_USAGE_SYSTEM_UPDATE: + sb.append("su"); + break; + case REASON_SUB_USAGE_ACTIVE_TIMEOUT: + sb.append("at"); + break; + case REASON_SUB_USAGE_SYNC_ADAPTER: + sb.append("sa"); + break; + } + break; + } + return sb.toString(); + } + /** * {@hide} * Temporarily whitelist the specified app for a short duration. This is to allow an app diff --git a/core/java/android/app/usage/UsageStatsManagerInternal.java b/core/java/android/app/usage/UsageStatsManagerInternal.java index 5d6a989ffef8..b62b1ee0492b 100644 --- a/core/java/android/app/usage/UsageStatsManagerInternal.java +++ b/core/java/android/app/usage/UsageStatsManagerInternal.java @@ -139,7 +139,7 @@ public abstract class UsageStatsManagerInternal { /** Callback to inform listeners that the idle state has changed to a new bucket. */ public abstract void onAppIdleStateChanged(String packageName, @UserIdInt int userId, - boolean idle, int bucket); + boolean idle, int bucket, int reason); /** * Callback to inform listeners that the parole state has changed. This means apps are |
