diff --git a/packages/DocumentsUI/src/com/android/documentsui/Metrics.java b/packages/DocumentsUI/src/com/android/documentsui/Metrics.java index 172282a9b3f91..699605f5cdcb8 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/Metrics.java +++ b/packages/DocumentsUI/src/com/android/documentsui/Metrics.java @@ -64,23 +64,23 @@ public final class Metrics { // Indices for bucketing roots in the roots histogram. "Other" is the catch-all index for any // root that is not explicitly recognized by the Metrics code (see {@link - // #getSanitizedRootIndex}). Apps are also bucketed in this histogram using negative indices - // (see below). + // #getSanitizedRootIndex}). Apps are also bucketed in this histogram. // Do not change or rearrange these values, that will break historical data. Only add to the end // of the list. - private static final int ROOT_NONE = 0; - private static final int ROOT_OTHER = 1; - private static final int ROOT_AUDIO = 2; - private static final int ROOT_DEVICE_STORAGE = 3; - private static final int ROOT_DOWNLOADS = 4; - private static final int ROOT_HOME = 5; - private static final int ROOT_IMAGES = 6; - private static final int ROOT_RECENTS = 7; - private static final int ROOT_VIDEOS = 8; - private static final int ROOT_MTP = 9; + // Do not use negative numbers or zero; clearcut only handles positive integers. + private static final int ROOT_NONE = 1; + private static final int ROOT_OTHER = 2; + private static final int ROOT_AUDIO = 3; + private static final int ROOT_DEVICE_STORAGE = 4; + private static final int ROOT_DOWNLOADS = 5; + private static final int ROOT_HOME = 6; + private static final int ROOT_IMAGES = 7; + private static final int ROOT_RECENTS = 8; + private static final int ROOT_VIDEOS = 9; + private static final int ROOT_MTP = 10; // Apps aren't really "roots", but they are treated as such in the roots fragment UI and so they - // are logged analogously to roots. Use negative numbers to identify apps. - private static final int ROOT_THIRD_PARTY_APP = -1; + // are logged analogously to roots. + private static final int ROOT_THIRD_PARTY_APP = 100; @IntDef(flag = true, value = { ROOT_NONE, @@ -99,19 +99,21 @@ public final class Metrics { public @interface Root {} // Indices for bucketing mime types. - private static final int MIME_OTHER = -2; // anything not enumerated below - private static final int MIME_NONE = -1; // null mime - private static final int MIME_ANY = 0; // */* - private static final int MIME_APPLICATION = 1; // application/* - private static final int MIME_AUDIO = 2; // audio/* - private static final int MIME_IMAGE = 3; // image/* - private static final int MIME_MESSAGE = 4; // message/* - private static final int MIME_MULTIPART = 5; // multipart/* - private static final int MIME_TEXT = 6; // text/* - private static final int MIME_VIDEO = 7; // video/* + // Do not change or rearrange these values, that will break historical data. Only add to the end + // of the list. + // Do not use negative numbers or zero; clearcut only handles positive integers. + private static final int MIME_NONE = 1; // null mime + private static final int MIME_ANY = 2; // */* + private static final int MIME_APPLICATION = 3; // application/* + private static final int MIME_AUDIO = 4; // audio/* + private static final int MIME_IMAGE = 5; // image/* + private static final int MIME_MESSAGE = 6; // message/* + private static final int MIME_MULTIPART = 7; // multipart/* + private static final int MIME_TEXT = 8; // text/* + private static final int MIME_VIDEO = 9; // video/* + private static final int MIME_OTHER = 10; // anything not enumerated below @IntDef(flag = true, value = { - MIME_OTHER, MIME_NONE, MIME_ANY, MIME_APPLICATION, @@ -120,25 +122,29 @@ public final class Metrics { MIME_MESSAGE, MIME_MULTIPART, MIME_TEXT, - MIME_VIDEO + MIME_VIDEO, + MIME_OTHER }) @Retention(RetentionPolicy.SOURCE) public @interface Mime {} // Codes representing different kinds of file operations. These are used for bucketing // operations in the COUNT_FILEOP_{SYSTEM|EXTERNAL} histograms. - private static final int FILEOP_OTHER = 0; // any file operation not listed below - private static final int FILEOP_COPY_INTRA_PROVIDER = 1; // Copy within a provider - private static final int FILEOP_COPY_SYSTEM_PROVIDER = 2; // Copy to a system provider. - private static final int FILEOP_COPY_EXTERNAL_PROVIDER = 3; // Copy to a 3rd-party provider. - private static final int FILEOP_MOVE_INTRA_PROVIDER = 4; // Move within a provider. - private static final int FILEOP_MOVE_SYSTEM_PROVIDER = 5; // Move to a system provider. - private static final int FILEOP_MOVE_EXTERNAL_PROVIDER = 6; // Move to a 3rd-party provider. - private static final int FILEOP_DELETE = 7; - private static final int FILEOP_OTHER_ERROR = -1; - private static final int FILEOP_COPY_ERROR = -2; - private static final int FILEOP_MOVE_ERROR = -3; - private static final int FILEOP_DELETE_ERROR = -4; + // Do not change or rearrange these values, that will break historical data. Only add to the + // list. + // Do not use negative numbers or zero; clearcut only handles positive integers. + private static final int FILEOP_OTHER = 1; // any file operation not listed below + private static final int FILEOP_COPY_INTRA_PROVIDER = 2; // Copy within a provider + private static final int FILEOP_COPY_SYSTEM_PROVIDER = 3; // Copy to a system provider. + private static final int FILEOP_COPY_EXTERNAL_PROVIDER = 4; // Copy to a 3rd-party provider. + private static final int FILEOP_MOVE_INTRA_PROVIDER = 5; // Move within a provider. + private static final int FILEOP_MOVE_SYSTEM_PROVIDER = 6; // Move to a system provider. + private static final int FILEOP_MOVE_EXTERNAL_PROVIDER = 7; // Move to a 3rd-party provider. + private static final int FILEOP_DELETE = 8; + private static final int FILEOP_OTHER_ERROR = 100; + private static final int FILEOP_DELETE_ERROR = 101; + private static final int FILEOP_MOVE_ERROR = 102; + private static final int FILEOP_COPY_ERROR = 103; @IntDef(flag = true, value = { FILEOP_OTHER, @@ -157,6 +163,52 @@ public final class Metrics { @Retention(RetentionPolicy.SOURCE) public @interface FileOp {} + // Codes representing different kinds of file operations. These are used for bucketing + // operations in the COUNT_FILEOP_CANCELED histogram. + // Do not change or rearrange these values, that will break historical data. Only add to the + // list. + // Do not use negative numbers or zero; clearcut only handles positive integers. + private static final int OPERATION_UNKNOWN = 1; + private static final int OPERATION_COPY = 2; + private static final int OPERATION_MOVE = 3; + private static final int OPERATION_DELETE= 4; + + @IntDef(flag = true, value = { + OPERATION_UNKNOWN, + OPERATION_COPY, + OPERATION_MOVE, + OPERATION_DELETE + }) + @Retention(RetentionPolicy.SOURCE) + public @interface MetricsOpType {} + + // Codes representing different launch actions. These are used for bucketing stats in the + // COUNT_LAUNCH_ACTION histogram. + // Do not change or rearrange these values, that will break historical data. Only add to the + // list. + // Do not use negative numbers or zero; clearcut only handles positive integers. + private static final int ACTION_OTHER = 1; + private static final int ACTION_OPEN = 2; + private static final int ACTION_CREATE = 3; + private static final int ACTION_GET_CONTENT = 4; + private static final int ACTION_OPEN_TREE = 5; + private static final int ACTION_MANAGE = 6; + private static final int ACTION_BROWSE = 7; + private static final int ACTION_PICK_COPY_DESTINATION = 8; + + @IntDef(flag = true, value = { + ACTION_OTHER, + ACTION_OPEN, + ACTION_CREATE, + ACTION_GET_CONTENT, + ACTION_OPEN_TREE, + ACTION_MANAGE, + ACTION_BROWSE, + ACTION_PICK_COPY_DESTINATION + }) + @Retention(RetentionPolicy.SOURCE) + public @interface MetricsAction {} + // Codes representing different provider types. Used for sorting file operations when logging. private static final int PROVIDER_INTRA = 0; private static final int PROVIDER_SYSTEM = 1; @@ -179,7 +231,7 @@ public final class Metrics { */ public static void logActivityLaunch(Context context, State state, Intent intent) { // Log the launch action. - logHistogram(context, COUNT_LAUNCH_ACTION, state.action); + logHistogram(context, COUNT_LAUNCH_ACTION, toMetricsAction(state.action)); // Then log auxiliary data (roots/mime types) associated with some actions. Uri uri = intent.getData(); switch (state.action) { @@ -300,7 +352,7 @@ public final class Metrics { * @param operationType */ public static void logFileOperationCancelled(Context context, @OpType int operationType) { - logHistogram(context, COUNT_FILEOP_CANCELED, operationType); + logHistogram(context, COUNT_FILEOP_CANCELED, toMetricsOpType(operationType)); } private static void logInterProviderFileOps( @@ -482,6 +534,44 @@ public final class Metrics { } } + /** + * Maps FileOperationService OpType values, to MetricsOpType values. + */ + private static @MetricsOpType int toMetricsOpType(@OpType int operation) { + switch (operation) { + case FileOperationService.OPERATION_COPY: + return OPERATION_COPY; + case FileOperationService.OPERATION_MOVE: + return OPERATION_MOVE; + case FileOperationService.OPERATION_DELETE: + return OPERATION_DELETE; + case FileOperationService.OPERATION_UNKNOWN: + default: + return OPERATION_UNKNOWN; + } + } + + private static @MetricsAction int toMetricsAction(int action) { + switch(action) { + case State.ACTION_OPEN: + return ACTION_OPEN; + case State.ACTION_CREATE: + return ACTION_CREATE; + case State.ACTION_GET_CONTENT: + return ACTION_GET_CONTENT; + case State.ACTION_OPEN_TREE: + return ACTION_OPEN_TREE; + case State.ACTION_MANAGE: + return ACTION_MANAGE; + case State.ACTION_BROWSE: + return ACTION_BROWSE; + case State.ACTION_PICK_COPY_DESTINATION: + return ACTION_PICK_COPY_DESTINATION; + default: + return ACTION_OTHER; + } + } + /** * Count the given src documents and provide a tally of how many come from the same provider as * the dst document (if a dst is provided), how many come from system providers, and how many