tray_ime_chromeos.cc 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/system/ime/tray_ime_chromeos.h"
  5. #include <memory>
  6. #include <vector>
  7. #include "ash/ime/ime_controller_impl.h"
  8. #include "ash/keyboard/ui/keyboard_util.h"
  9. #include "ash/public/cpp/system_tray_client.h"
  10. #include "ash/resources/vector_icons/vector_icons.h"
  11. #include "ash/shell.h"
  12. #include "ash/strings/grit/ash_strings.h"
  13. #include "ash/style/ash_color_provider.h"
  14. #include "ash/system/model/system_tray_model.h"
  15. #include "ash/system/tray/tray_detailed_view.h"
  16. #include "ash/system/tray/tray_popup_utils.h"
  17. #include "ash/system/tray/tray_utils.h"
  18. #include "ash/system/tray/tri_view.h"
  19. #include "base/bind.h"
  20. #include "base/metrics/user_metrics.h"
  21. #include "ui/base/l10n/l10n_util.h"
  22. #include "ui/base/metadata/metadata_impl_macros.h"
  23. #include "ui/gfx/font.h"
  24. #include "ui/gfx/image/image.h"
  25. #include "ui/gfx/paint_vector_icon.h"
  26. #include "ui/views/controls/image_view.h"
  27. namespace ash {
  28. IMEDetailedView::IMEDetailedView(DetailedViewDelegate* delegate,
  29. ImeControllerImpl* ime_controller)
  30. : ImeListView(delegate), ime_controller_(ime_controller) {
  31. DCHECK(ime_controller_);
  32. }
  33. void IMEDetailedView::Update(const std::string& current_ime_id,
  34. const std::vector<ImeInfo>& list,
  35. const std::vector<ImeMenuItem>& property_list,
  36. bool show_keyboard_toggle,
  37. SingleImeBehavior single_ime_behavior) {
  38. ImeListView::Update(current_ime_id, list, property_list, show_keyboard_toggle,
  39. single_ime_behavior);
  40. CreateTitleRow(IDS_ASH_STATUS_TRAY_IME);
  41. }
  42. void IMEDetailedView::ResetImeListView() {
  43. ImeListView::ResetImeListView();
  44. settings_button_ = nullptr;
  45. controlled_setting_icon_ = nullptr;
  46. }
  47. void IMEDetailedView::CreateExtraTitleRowButtons() {
  48. if (ime_controller_->managed_by_policy()) {
  49. controlled_setting_icon_ = TrayPopupUtils::CreateMainImageView();
  50. controlled_setting_icon_->SetImage(gfx::CreateVectorIcon(
  51. kSystemMenuBusinessIcon,
  52. AshColorProvider::Get()->GetContentLayerColor(
  53. AshColorProvider::ContentLayerType::kIconColorPrimary)));
  54. controlled_setting_icon_->SetTooltipText(
  55. l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_IME_MANAGED));
  56. tri_view()->AddView(TriView::Container::END, controlled_setting_icon_);
  57. }
  58. tri_view()->SetContainerVisible(TriView::Container::END, true);
  59. settings_button_ =
  60. CreateSettingsButton(base::BindRepeating(&IMEDetailedView::ShowSettings,
  61. base::Unretained(this)),
  62. IDS_ASH_STATUS_TRAY_IME_SETTINGS);
  63. tri_view()->AddView(TriView::Container::END, settings_button_);
  64. }
  65. void IMEDetailedView::ShowSettings() {
  66. base::RecordAction(base::UserMetricsAction("StatusArea_IME_Detailed"));
  67. CloseBubble(); // Deletes |this|.
  68. Shell::Get()->system_tray_model()->client()->ShowIMESettings();
  69. }
  70. BEGIN_METADATA(IMEDetailedView, ImeListView)
  71. END_METADATA
  72. } // namespace ash