Index: ash/common/system/chromeos/ime_menu/ime_menu_tray.cc |
diff --git a/ash/common/system/chromeos/ime_menu/ime_menu_tray.cc b/ash/common/system/chromeos/ime_menu/ime_menu_tray.cc |
index 4453ad526b30efb48793162702654a6623ea204a..ab60289ff456d2e84551fcecdaefc946af8be8b7 100644 |
--- a/ash/common/system/chromeos/ime_menu/ime_menu_tray.cc |
+++ b/ash/common/system/chromeos/ime_menu/ime_menu_tray.cc |
@@ -138,6 +138,60 @@ class ImeButtonsView : public views::View, public views::ButtonListener { |
} // namespace |
+// Class to wrap and manage the ImeListView, ImeButtonsView and |
+// TrayBubbleWrapper instances for the IME menu bubble. |
+class ImeBubbleWrapper { |
James Cook
2016/08/23 16:38:33
Why do you need this class? Could the ImeListView*
Azure Wei
2016/08/24 05:22:43
This class is not unnecessary if storing ImeListVi
|
+ public: |
+ ImeBubbleWrapper(ImeMenuTray* tray) : tray_(tray) {} |
James Cook
2016/08/23 16:38:32
nit: explicit
Azure Wei
2016/08/24 05:22:43
Removed this class.
|
+ |
+ // Initializes the bubble view and creates |bubble_wrapper_|. |
+ void InitView() { |
+ views::TrayBubbleView::InitParams init_params( |
+ views::TrayBubbleView::ANCHOR_TYPE_TRAY, tray_->GetAnchorAlignment(), |
+ kTrayPopupMinWidth, kTrayPopupMaxWidth); |
+ init_params.first_item_has_no_margin = true; |
+ init_params.can_activate = true; |
+ init_params.close_on_deactivate = true; |
+ |
+ views::TrayBubbleView* bubble_view = views::TrayBubbleView::Create( |
+ tray_->tray_container(), tray_, &init_params); |
+ bubble_view->set_margins(gfx::Insets(7, 0, 0, 0)); |
+ bubble_view->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); |
+ |
+ list_view_.reset( |
+ new ImeListView(nullptr, false, ImeListView::SHOW_SINGLE_IME)); |
+ |
+ // Adds IME list to the bubble. |
+ bubble_view->AddChildView(list_view_.get()); |
James Cook
2016/08/23 16:38:33
AddChildView() takes ownership of list_view_, so l
Azure Wei
2016/08/24 05:22:43
Done.
|
+ |
+ // Adds IME buttons to the bubble if needed. |
+ LoginStatus login = |
+ WmShell::Get()->system_tray_delegate()->GetUserLoginStatus(); |
+ if (login != LoginStatus::NOT_LOGGED_IN && login != LoginStatus::LOCKED && |
+ !WmShell::Get()->GetSessionStateDelegate()->IsInSecondaryLoginScreen()) |
+ button_view_.reset(new ImeButtonsView(false, false, false, true)); |
+ bubble_view->AddChildView(button_view_.get()); |
James Cook
2016/08/23 16:38:33
ditto
Azure Wei
2016/08/24 05:22:43
Done.
|
+ bubble_wrapper_.reset(new ash::TrayBubbleWrapper(tray_, bubble_view)); |
James Cook
2016/08/23 16:38:32
nit: no ash::
Azure Wei
2016/08/24 05:22:43
Done.
|
+ } |
+ |
+ // Returns the bubble view. |
+ views::TrayBubbleView* bubble_view() const { |
+ if (bubble_wrapper_.get()) { |
James Cook
2016/08/23 16:38:32
nit: no {}
Azure Wei
2016/08/24 05:22:43
Done.
|
+ return bubble_wrapper_->bubble_view(); |
+ } |
+ return nullptr; |
+ } |
+ |
+ // Returns the ImeListView. |
+ ImeListView* list_view() const { return list_view_.get(); } |
+ |
+ private: |
+ ImeMenuTray* tray_; |
+ std::unique_ptr<ImeListView> list_view_; |
+ std::unique_ptr<ImeButtonsView> button_view_; |
+ std::unique_ptr<TrayBubbleWrapper> bubble_wrapper_; |
+}; |
James Cook
2016/08/23 16:38:32
DISALLOW_COPY_AND_ASSIGN
Azure Wei
2016/08/24 05:22:43
Removed this class.
|
+ |
ImeMenuTray::ImeMenuTray(WmShelf* wm_shelf) |
: TrayBackgroundView(wm_shelf), label_(new ImeMenuLabel()) { |
SetupLabelForTray(label_); |
@@ -179,6 +233,15 @@ bool ImeMenuTray::PerformAction(const ui::Event& event) { |
void ImeMenuTray::OnIMERefresh() { |
UpdateTrayLabel(); |
+ if (bubble_ && bubble_->list_view()) { |
+ SystemTrayDelegate* delegate = WmShell::Get()->system_tray_delegate(); |
+ IMEInfoList list; |
+ delegate->GetAvailableIMEList(&list); |
+ IMEPropertyInfoList property_list; |
+ delegate->GetCurrentIMEProperties(&property_list); |
+ bubble_->list_view()->Update(list, property_list, false, |
+ ImeListView::SHOW_SINGLE_IME); |
+ } |
} |
void ImeMenuTray::OnIMEMenuActivationChanged(bool is_activated) { |
@@ -248,30 +311,8 @@ void ImeMenuTray::UpdateTrayLabel() { |
} |
void ImeMenuTray::ShowImeMenuBubble() { |
- views::TrayBubbleView::InitParams init_params( |
- views::TrayBubbleView::ANCHOR_TYPE_TRAY, GetAnchorAlignment(), |
- kTrayPopupMinWidth, kTrayPopupMaxWidth); |
- init_params.first_item_has_no_margin = true; |
- init_params.can_activate = true; |
- init_params.close_on_deactivate = true; |
- |
- views::TrayBubbleView* bubble_view = |
- views::TrayBubbleView::Create(tray_container(), this, &init_params); |
- bubble_view->set_margins(gfx::Insets(7, 0, 0, 0)); |
- bubble_view->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); |
- |
- // Adds IME list to the bubble. |
- bubble_view->AddChildView( |
- new ImeListView(nullptr, false, ImeListView::SHOW_SINGLE_IME)); |
- |
- // Adds IME buttons to the bubble if needed. |
- LoginStatus login = |
- WmShell::Get()->system_tray_delegate()->GetUserLoginStatus(); |
- if (login != LoginStatus::NOT_LOGGED_IN && login != LoginStatus::LOCKED && |
- !WmShell::Get()->GetSessionStateDelegate()->IsInSecondaryLoginScreen()) |
- bubble_view->AddChildView(new ImeButtonsView(false, false, false, true)); |
- |
- bubble_.reset(new ash::TrayBubbleWrapper(this, bubble_view)); |
+ bubble_.reset(new ImeBubbleWrapper(this)); |
+ bubble_->InitView(); |
SetDrawBackgroundAsActive(true); |
} |
@@ -280,4 +321,9 @@ void ImeMenuTray::HideImeMenuBubble() { |
SetDrawBackgroundAsActive(false); |
} |
+// Returns ture if the bubble has been shown. |
+bool ImeMenuTray::IsBubbleShownForTesting() { |
+ return (bubble_ && bubble_->bubble_view()); |
James Cook
2016/08/23 16:38:32
nit: no extra ()
Azure Wei
2016/08/24 05:22:43
Done.
|
+} |
+ |
} // namespace ash |