Merge "Add metrics for keyboard shortcuts" into nyc-dev

am: 4b8a152

* commit '4b8a152d959a7d9e3a6b7e7468c693295e6ca4c9':
  Add metrics for keyboard shortcuts

Change-Id: I2c6f25a69a0025c73322f39fef9c4f6db3deb48a
This commit is contained in:
Aga Wronska
2016-04-01 21:58:52 +00:00
committed by android-build-merger
4 changed files with 66 additions and 0 deletions

View File

@@ -636,10 +636,12 @@ public abstract class BaseActivity extends Activity
return true;
}
} else if (keyCode == KeyEvent.KEYCODE_TAB) {
Metrics.logKeyboardAction(this, keyCode);
// Tab toggles focus on the navigation drawer.
toggleNavDrawerFocus();
return true;
} else if (keyCode == KeyEvent.KEYCODE_DEL) {
Metrics.logKeyboardAction(this, keyCode);
popDir();
return true;
}

View File

@@ -349,18 +349,21 @@ public class FilesActivity extends BaseActivity {
case KeyEvent.KEYCODE_A:
dir = getDirectoryFragment();
if (dir != null) {
Metrics.logKeyboardAction(this, keyCode);
dir.selectAllFiles();
}
return true;
case KeyEvent.KEYCODE_C:
dir = getDirectoryFragment();
if (dir != null) {
Metrics.logKeyboardAction(this, keyCode);
dir.copySelectedToClipboard();
}
return true;
case KeyEvent.KEYCODE_V:
dir = getDirectoryFragment();
if (dir != null) {
Metrics.logKeyboardAction(this, keyCode);
dir.pasteFromClipboard();
}
return true;

View File

@@ -29,6 +29,7 @@ import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.util.Log;
import android.view.KeyEvent;
import com.android.documentsui.State.ActionType;
import com.android.documentsui.model.DocumentInfo;
@@ -70,6 +71,7 @@ public final class Metrics {
private static final String COUNT_DRAG_N_DROP = "docsui_drag_n_drop";
private static final String COUNT_SEARCH = "docsui_search";
private static final String COUNT_MENU_ACTION = "docsui_menu_action";
private static final String COUNT_KEYBOARD_ACTION = "docsui_keyboard_action";
// 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
@@ -289,6 +291,31 @@ public final class Metrics {
@Retention(RetentionPolicy.SOURCE)
public @interface MetricsAction {}
// Codes representing different keyboard shortcut triggered actions. These are used for
// bucketing stats in the COUNT_KEYBOARD_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_KEYBOARD_OTHER = 1;
private static final int ACTION_KEYBOARD_PASTE = 2;
private static final int ACTION_KEYBOARD_COPY = 3;
private static final int ACTION_KEYBOARD_DELETE = 4;
private static final int ACTION_KEYBOARD_SELECT_ALL = 5;
private static final int ACTION_KEYBOARD_BACK = 6;
private static final int ACTION_KEYBOARD_SWITCH_FOCUS = 7;
@IntDef(flag = false, value = {
ACTION_KEYBOARD_OTHER,
ACTION_KEYBOARD_PASTE,
ACTION_KEYBOARD_COPY,
ACTION_KEYBOARD_DELETE,
ACTION_KEYBOARD_SELECT_ALL,
ACTION_KEYBOARD_BACK,
ACTION_KEYBOARD_SWITCH_FOCUS
})
@Retention(RetentionPolicy.SOURCE)
public @interface KeyboardAction {}
// Codes representing different actions to open the drawer. They are used for bucketing stats in
// the COUNT_DRAWER_OPENED histogram.
// Do not change or rearrange these values, that will break historical data. Only add to the
@@ -492,6 +519,39 @@ public final class Metrics {
logHistogram(context, COUNT_FILEOP_CANCELED, toMetricsOpType(operationType));
}
/**
* Logs keyboard shortcut actions. Since keyboard shortcuts have their corresponding menu items,
* they are identified by menu item resource id for convenience.
* @param context
* @param keyCode
*/
public static void logKeyboardAction(Context context, int keyCode) {
@KeyboardAction int keyboardAction = ACTION_KEYBOARD_OTHER;
switch (keyCode) {
case KeyEvent.KEYCODE_V:
keyboardAction = ACTION_KEYBOARD_PASTE;
break;
case KeyEvent.KEYCODE_C:
keyboardAction = ACTION_KEYBOARD_COPY;
break;
case KeyEvent.KEYCODE_FORWARD_DEL:
keyboardAction = ACTION_KEYBOARD_DELETE;
break;
case KeyEvent.KEYCODE_A:
keyboardAction = ACTION_KEYBOARD_SELECT_ALL;
break;
case KeyEvent.KEYCODE_DEL:
keyboardAction = ACTION_KEYBOARD_BACK;
break;
case KeyEvent.KEYCODE_TAB:
keyboardAction = ACTION_KEYBOARD_SWITCH_FOCUS;
break;
default:
break;
}
logHistogram(context, COUNT_KEYBOARD_ACTION, keyboardAction);
}
/**
* Logs startup time in milliseconds.
* @param context

View File

@@ -1339,6 +1339,7 @@ public class DirectoryFragment extends Fragment
// This has to be handled here instead of in a keyboard shortcut, because
// keyboard shortcuts all have to be modified with the 'Ctrl' key.
if (mSelectionManager.hasSelection()) {
Metrics.logKeyboardAction(getContext(), keyCode);
deleteDocuments(mSelectionManager.getSelection());
}
// Always handle the key, even if there was nothing to delete. This is a