Loading core/java/android/app/usage/UsageEvents.java +21 −7 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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; } /** Loading Loading @@ -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 */ Loading Loading @@ -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; } } Loading Loading @@ -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; } } Loading core/java/android/app/usage/UsageStatsManager.java +79 −17 Original line number Diff line number Diff line Loading @@ -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 = { Loading Loading @@ -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 Loading core/java/android/app/usage/UsageStatsManagerInternal.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading services/core/java/com/android/server/AlarmManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -3860,7 +3860,7 @@ class AlarmManagerService extends SystemService { final class AppStandbyTracker extends UsageStatsManagerInternal.AppIdleStateChangeListener { @Override public void onAppIdleStateChanged(final String packageName, final @UserIdInt int userId, boolean idle, int bucket) { boolean idle, int bucket, int reason) { if (DEBUG_STANDBY) { Slog.d(TAG, "Package " + packageName + " for user " + userId + " now in bucket " + bucket); Loading services/core/java/com/android/server/AppStateTracker.java +1 −1 Original line number Diff line number Diff line Loading @@ -678,7 +678,7 @@ public class AppStateTracker { final class StandbyTracker extends AppIdleStateChangeListener { @Override public void onAppIdleStateChanged(String packageName, int userId, boolean idle, int bucket) { int bucket, int reason) { if (DEBUG) { Slog.d(TAG,"onAppIdleStateChanged: " + packageName + " u" + userId + (idle ? " idle" : " active") + " " + bucket); Loading Loading
core/java/android/app/usage/UsageEvents.java +21 −7 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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; } /** Loading Loading @@ -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 */ Loading Loading @@ -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; } } Loading Loading @@ -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; } } Loading
core/java/android/app/usage/UsageStatsManager.java +79 −17 Original line number Diff line number Diff line Loading @@ -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 = { Loading Loading @@ -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 Loading
core/java/android/app/usage/UsageStatsManagerInternal.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
services/core/java/com/android/server/AlarmManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -3860,7 +3860,7 @@ class AlarmManagerService extends SystemService { final class AppStandbyTracker extends UsageStatsManagerInternal.AppIdleStateChangeListener { @Override public void onAppIdleStateChanged(final String packageName, final @UserIdInt int userId, boolean idle, int bucket) { boolean idle, int bucket, int reason) { if (DEBUG_STANDBY) { Slog.d(TAG, "Package " + packageName + " for user " + userId + " now in bucket " + bucket); Loading
services/core/java/com/android/server/AppStateTracker.java +1 −1 Original line number Diff line number Diff line Loading @@ -678,7 +678,7 @@ public class AppStateTracker { final class StandbyTracker extends AppIdleStateChangeListener { @Override public void onAppIdleStateChanged(String packageName, int userId, boolean idle, int bucket) { int bucket, int reason) { if (DEBUG) { Slog.d(TAG,"onAppIdleStateChanged: " + packageName + " u" + userId + (idle ? " idle" : " active") + " " + bucket); Loading