# Copyright 2014 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.

import("//build/config/ui.gni")

component("app_list") {
  sources = [
    "app_list_constants.cc",
    "app_list_constants.h",
    "app_list_export.h",
    "app_list_folder_item.cc",
    "app_list_folder_item.h",
    "app_list_item.cc",
    "app_list_item.h",
    "app_list_item_observer.h",
    "app_list_item_list.cc",
    "app_list_item_list.h",
    "app_list_item_list_observer.h",
    "app_list_menu.cc",
    "app_list_menu.h",
    "app_list_model.cc",
    "app_list_model.h",
    "app_list_model_observer.h",
    "app_list_switches.cc",
    "app_list_switches.h",
    "app_list_view_delegate.cc",
    "app_list_view_delegate.h",
    "pagination_controller.cc",
    "pagination_controller.h",
    "pagination_model.cc",
    "pagination_model.h",
    "pagination_model_observer.h",
    "search_box_model.cc",
    "search_box_model.h",
    "search_box_model_observer.h",
    "search_provider.cc",
    "search_provider.h",
    "search_result.cc",
    "search_result.h",
    "search/dictionary_data_store.cc",
    "search/dictionary_data_store.h",
    "search/history.cc",
    "search/history.h",
    "search/history_data.cc",
    "search/history_data.h",
    "search/history_data_store.cc",
    "search/history_data_store.h",
    "search/history_types.h",
    "search/mixer.cc",
    "search/mixer.h",
    "search/term_break_iterator.cc",
    "search/term_break_iterator.h",
    "search/tokenized_string.cc",
    "search/tokenized_string.h",
    "search/tokenized_string_char_iterator.cc",
    "search/tokenized_string_char_iterator.h",
    "search/tokenized_string_match.cc",
    "search/tokenized_string_match.h",
    "speech_ui_model.cc",
    "speech_ui_model.h",
    "speech_ui_model_observer.h",
  ]

  defines = [ "APP_LIST_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//components/keyed_service/core",
    "//skia",
    "//sync",
    "//third_party/icu",
    "//ui/accessibility",
    "//ui/base",
    "//ui/compositor",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/resources",
    "//ui/strings",
  ]

  if (use_aura) {
    deps += [
      "//ui/aura",
      "//ui/wm",
    ]
  }

  if (toolkit_views) {
    sources += [
      "views/apps_container_view.cc",
      "views/apps_container_view.h",
      "views/app_list_background.cc",
      "views/app_list_background.h",
      "views/app_list_drag_and_drop_host.h",
      "views/app_list_folder_view.cc",
      "views/app_list_folder_view.h",
      "views/app_list_item_view.cc",
      "views/app_list_item_view.h",
      "views/app_list_main_view.cc",
      "views/app_list_main_view.h",
      "views/app_list_menu_views.cc",
      "views/app_list_menu_views.h",
      "views/app_list_view.cc",
      "views/app_list_view.h",
      "views/app_list_view_observer.h",
      "views/apps_grid_view.cc",
      "views/apps_grid_view.h",
      "views/apps_grid_view_delegate.h",
      "views/apps_grid_view_folder_delegate.h",
      "views/cached_label.cc",
      "views/cached_label.h",
      "views/contents_switcher_view.cc",
      "views/contents_switcher_view.h",
      "views/contents_view.cc",
      "views/contents_view.h",
      "views/folder_background_view.cc",
      "views/folder_background_view.h",
      "views/folder_header_view.cc",
      "views/folder_header_view.h",
      "views/folder_header_view_delegate.h",
      "views/page_switcher.cc",
      "views/page_switcher.h",
      "views/progress_bar_view.cc",
      "views/progress_bar_view.h",
      "views/pulsing_block_view.cc",
      "views/pulsing_block_view.h",
      "views/search_box_view.cc",
      "views/search_box_view.h",
      "views/search_box_view_delegate.h",
      "views/search_result_actions_view.cc",
      "views/search_result_actions_view.h",
      "views/search_result_list_view.cc",
      "views/search_result_list_view.h",
      "views/search_result_list_view_delegate.h",
      "views/search_result_view.cc",
      "views/search_result_view.h",
      "views/speech_view.cc",
      "views/speech_view.h",
      "views/start_page_view.cc",
      "views/start_page_view.h",
      "views/tile_item_view.cc",
      "views/tile_item_view.h",
      "views/top_icon_animation_view.cc",
      "views/top_icon_animation_view.h",
    ]
    deps += [
      "//ui/events",
      "//ui/views",
    ]
  }

  if (is_mac) {
    sources += [
      "cocoa/app_list_pager_view.h",
      "cocoa/app_list_pager_view.mm",
      "cocoa/app_list_view_controller.h",
      "cocoa/app_list_view_controller.mm",
      "cocoa/app_list_window_controller.h",
      "cocoa/app_list_window_controller.mm",
      "cocoa/apps_collection_view_drag_manager.h",
      "cocoa/apps_collection_view_drag_manager.mm",
      "cocoa/apps_grid_controller.h",
      "cocoa/apps_grid_controller.mm",
      "cocoa/apps_grid_view_item.h",
      "cocoa/apps_grid_view_item.mm",
      "cocoa/apps_pagination_model_observer.h",
      "cocoa/apps_search_box_controller.h",
      "cocoa/apps_search_box_controller.mm",
      "cocoa/apps_search_results_controller.h",
      "cocoa/apps_search_results_controller.mm",
      "cocoa/apps_search_results_model_bridge.h",
      "cocoa/apps_search_results_model_bridge.mm",
      "cocoa/item_drag_controller.h",
      "cocoa/item_drag_controller.mm",
      "cocoa/scroll_view_with_no_scrollbars.h",
      "cocoa/scroll_view_with_no_scrollbars.mm",
    ]
    deps += [
      "//third_party/google_toolbox_for_mac",
    ]
    libs = [ "QuartzCore.framework" ]
  }
}

static_library("test_support") {
  sources = [
    "test/app_list_test_model.cc",
    "test/app_list_test_model.h",
    "test/app_list_test_view_delegate.cc",
    "test/app_list_test_view_delegate.h",
    "test/test_search_result.cc",
    "test/test_search_result.h",
  ]

  deps = [
    ":app_list",
    "//base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/resources",
  ]
}

test("app_list_unittests") {
  sources = [
    "app_list_item_list_unittest.cc",
    "app_list_model_unittest.cc",
    "pagination_model_unittest.cc",
    "search/history_data_store_unittest.cc",
    "search/mixer_unittest.cc",
    "search/term_break_iterator_unittest.cc",
    "search/tokenized_string_char_iterator_unittest.cc",
    "search/tokenized_string_match_unittest.cc",
    "search/tokenized_string_unittest.cc",
    "test/run_all_unittests.cc",
  ]

  deps = [
    ":app_list",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//skia",
    "//testing/gtest",
    "//ui/base",
    "//ui/compositor",
    "//ui/events",
    "//ui/gl",
    "//ui/resources",
    "//ui/resources:ui_test_pak",
  ]

  if (toolkit_views) {
    sources += [
      "views/app_list_main_view_unittest.cc",
      "views/app_list_view_unittest.cc",
      "views/apps_grid_view_unittest.cc",
      "views/folder_header_view_unittest.cc",
      "views/search_box_view_unittest.cc",
      "views/search_result_list_view_unittest.cc",
      "views/speech_view_unittest.cc",
      "views/test/apps_grid_view_test_api.cc",
      "views/test/apps_grid_view_test_api.h",
    ]
    deps += [
      "//ui/views",
      "//ui/views:test_support",
    ]
  }

  if (is_mac) {
    sources += [
      "cocoa/app_list_view_controller_unittest.mm",
      "cocoa/app_list_window_controller_unittest.mm",
      "cocoa/apps_grid_controller_unittest.mm",
      "cocoa/apps_search_box_controller_unittest.mm",
      "cocoa/apps_search_results_controller_unittest.mm",
      "cocoa/test/apps_grid_controller_test_helper.h",
      "cocoa/test/apps_grid_controller_test_helper.mm",
    ]
  }
}
