// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_USER_METRICS_RECORDER_H_
#define ASH_USER_METRICS_RECORDER_H_

#include "ash/ash_export.h"
#include "base/timer/timer.h"

namespace ash {

enum UserMetricsAction {
  UMA_ACCEL_KEYBOARD_BRIGHTNESS_DOWN_F6,
  UMA_ACCEL_KEYBOARD_BRIGHTNESS_UP_F7,
  UMA_ACCEL_LOCK_SCREEN_LOCK_BUTTON,
  UMA_ACCEL_LOCK_SCREEN_POWER_BUTTON,
  UMA_ACCEL_MAXIMIZE_RESTORE_F4,
  UMA_ACCEL_PREVWINDOW_F5,
  UMA_ACCEL_EXIT_FIRST_Q,
  UMA_ACCEL_EXIT_SECOND_Q,
  UMA_ACCEL_SHUT_DOWN_POWER_BUTTON,
  UMA_CLOSE_THROUGH_CONTEXT_MENU,
  UMA_DRAG_MAXIMIZE_LEFT,
  UMA_DRAG_MAXIMIZE_RIGHT,
  UMA_GESTURE_OVERVIEW,
  UMA_LAUNCHER_CLICK_ON_APP,
  UMA_LAUNCHER_CLICK_ON_APPLIST_BUTTON,
  UMA_MOUSE_DOWN,
  UMA_PANEL_MINIMIZE_CAPTION_CLICK,
  UMA_PANEL_MINIMIZE_CAPTION_GESTURE,
  UMA_SHELF_ALIGNMENT_SET_BOTTOM,
  UMA_SHELF_ALIGNMENT_SET_LEFT,
  UMA_SHELF_ALIGNMENT_SET_RIGHT,
  UMA_STATUS_AREA_AUDIO_CURRENT_INPUT_DEVICE,
  UMA_STATUS_AREA_AUDIO_CURRENT_OUTPUT_DEVICE,
  UMA_STATUS_AREA_AUDIO_SWITCH_INPUT_DEVICE,
  UMA_STATUS_AREA_AUDIO_SWITCH_OUTPUT_DEVICE,
  UMA_STATUS_AREA_BRIGHTNESS_CHANGED,
  UMA_STATUS_AREA_BLUETOOTH_CONNECT_KNOWN_DEVICE,
  UMA_STATUS_AREA_BLUETOOTH_CONNECT_UNKNOWN_DEVICE,
  UMA_STATUS_AREA_BLUETOOTH_DISABLED,
  UMA_STATUS_AREA_BLUETOOTH_ENABLED,
  UMA_STATUS_AREA_CAPS_LOCK_DETAILED,
  UMA_STATUS_AREA_CAPS_LOCK_DISABLED_BY_CLICK,
  UMA_STATUS_AREA_CAPS_LOCK_ENABLED_BY_CLICK,
  UMA_STATUS_AREA_CAPS_LOCK_POPUP,
  UMA_STATUS_AREA_CONNECT_TO_CONFIGURED_NETWORK,
  UMA_STATUS_AREA_CONNECT_TO_UNCONFIGURED_NETWORK,
  UMA_STATUS_AREA_CONNECT_TO_VPN,
  UMA_STATUS_AREA_CHANGED_VOLUME_MENU,
  UMA_STATUS_AREA_CHANGED_VOLUME_POPUP,
  UMA_STATUS_AREA_DETAILED_ACCESSABILITY,
  UMA_STATUS_AREA_DETAILED_AUDIO_VIEW,
  UMA_STATUS_AREA_DETAILED_BLUETOOTH_VIEW,
  UMA_STATUS_AREA_DETAILED_BRIGHTNESS_VIEW,
  UMA_STATUS_AREA_DETAILED_DRIVE_VIEW,
  UMA_STATUS_AREA_DETAILED_NETWORK_VIEW,
  UMA_STATUS_AREA_DETAILED_VPN_VIEW,
  UMA_STATUS_AREA_DISABLE_AUTO_CLICK,
  UMA_STATUS_AREA_DISABLE_HIGH_CONTRAST,
  UMA_STATUS_AREA_DISABLE_LARGE_CURSOR,
  UMA_STATUS_AREA_DISABLE_MAGNIFIER,
  UMA_STATUS_AREA_DISABLE_SPOKEN_FEEDBACK,
  UMA_STATUS_AREA_DISABLE_WIFI,
  UMA_STATUS_AREA_DISABLE_VIRTUAL_KEYBOARD,
  UMA_STATUS_AREA_DRIVE_CANCEL_OPERATION,
  UMA_STATUS_AREA_DRIVE_SETTINGS,
  UMA_STATUS_AREA_ENABLE_AUTO_CLICK,
  UMA_STATUS_AREA_ENABLE_HIGH_CONTRAST,
  UMA_STATUS_AREA_ENABLE_LARGE_CURSOR,
  UMA_STATUS_AREA_ENABLE_MAGNIFIER,
  UMA_STATUS_AREA_ENABLE_SPOKEN_FEEDBACK,
  UMA_STATUS_AREA_ENABLE_WIFI,
  UMA_STATUS_AREA_ENABLE_VIRTUAL_KEYBOARD,
  UMA_STATUS_AREA_IME_SHOW_DETAILED,
  UMA_STATUS_AREA_IME_SWITCH_MODE,
  UMA_STATUS_AREA_MENU_OPENED,
  UMA_STATUS_AREA_NETWORK_JOIN_OTHER_CLICKED,
  UMA_STATUS_AREA_NETWORK_SETTINGS_CLICKED,
  UMA_STATUS_AREA_SHOW_NETWORK_CONNECTION_DETAILS,
  UMA_STATUS_AREA_SHOW_VPN_CONNECTION_DETAILS,
  UMA_STATUS_AREA_SIGN_OUT,
  UMA_STATUS_AREA_VPN_JOIN_OTHER_CLICKED,
  UMA_STATUS_AREA_VPN_SETTINGS_CLICKED,
  UMA_TOGGLE_MAXIMIZE_CAPTION_CLICK,
  UMA_TOGGLE_MAXIMIZE_CAPTION_GESTURE,
  UMA_TOGGLE_SINGLE_AXIS_MAXIMIZE_BORDER_CLICK,
  UMA_TOUCHPAD_GESTURE_OVERVIEW,
  UMA_TOUCHSCREEN_TAP_DOWN,
  UMA_TRAY_HELP,
  UMA_TRAY_LOCK_SCREEN,
  UMA_TRAY_SHUT_DOWN,
  UMA_WINDOW_APP_CLOSE_BUTTON_CLICK,
  UMA_WINDOW_CLOSE_BUTTON_CLICK,
  UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_EXIT_FULLSCREEN,
  UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_MAXIMIZE,
  UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_MINIMIZE,
  UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_RESTORE,
  UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE_LEFT,
  UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE_RIGHT,

  // Thumbnail sized overview of windows triggered by pressing the overview key.
  UMA_WINDOW_OVERVIEW,

  // Selecting a window in overview mode by pressing the enter key.
  UMA_WINDOW_OVERVIEW_ENTER_KEY,

  // Window selection started by beginning an alt+tab cycle. This does not count
  // each step through an alt+tab cycle.
  UMA_WINDOW_CYCLE,
};

// User Metrics Recorder provides a repeating callback (RecordPeriodicMetrics)
// on a timer to allow recording of state data over time to the UMA records.
// Any additional states (in ash) that require monitoring can be added to
// this class. As well calls to record on action metrics
// (RecordUserMetricsAction) are passed through the UserMetricsRecorder.
class ASH_EXPORT UserMetricsRecorder {
 public:
  UserMetricsRecorder();
  ~UserMetricsRecorder();

  void RecordUserMetricsAction(ash::UserMetricsAction action);
 private:
  void RecordPeriodicMetrics();

  base::RepeatingTimer<UserMetricsRecorder> timer_;
};

}  // namespace ash

#endif  // ASH_USER_METRICS_RECORDER_H_
