summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2018-02-24 00:24:03 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-02-24 00:24:03 +0000
commitb9cacbea949e59fe4611dfbf2387d11938275e5b (patch)
tree8391b01b765da6370f781c8da96f5eb382751bbc /core/java/android
parent5d8074401722e0ef2e6c8fde21600111d539e27f (diff)
parent119be9a5fc4033eba570ec94b94862401ee84570 (diff)
Merge "Improve reporting of bucketing reason"
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/app/usage/UsageEvents.java28
-rw-r--r--core/java/android/app/usage/UsageStatsManager.java96
-rw-r--r--core/java/android/app/usage/UsageStatsManagerInternal.java2
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