OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ash/system/locale/locale_notification_controller.h" | 5 #include "ash/system/locale/locale_notification_controller.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "ash/resources/grit/ash_resources.h" | 10 #include "ash/resources/grit/ash_resources.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 using message_center::Notification; | 22 using message_center::Notification; |
23 | 23 |
24 namespace ash { | 24 namespace ash { |
25 namespace { | 25 namespace { |
26 | 26 |
27 const char kLocaleChangeNotificationId[] = "chrome://settings/locale"; | 27 const char kLocaleChangeNotificationId[] = "chrome://settings/locale"; |
28 | 28 |
29 class LocaleNotificationDelegate : public message_center::NotificationDelegate { | 29 class LocaleNotificationDelegate : public message_center::NotificationDelegate { |
30 public: | 30 public: |
31 explicit LocaleNotificationDelegate( | 31 explicit LocaleNotificationDelegate( |
32 const base::Callback<void(ash::mojom::LocaleNotificationResult)>& | 32 base::OnceCallback<void(ash::mojom::LocaleNotificationResult)> callback); |
33 callback); | |
34 | 33 |
35 protected: | 34 protected: |
36 ~LocaleNotificationDelegate() override; | 35 ~LocaleNotificationDelegate() override; |
37 | 36 |
38 // message_center::NotificationDelegate overrides: | 37 // message_center::NotificationDelegate overrides: |
39 void Close(bool by_user) override; | 38 void Close(bool by_user) override; |
40 bool HasClickedListener() override; | 39 bool HasClickedListener() override; |
41 void Click() override; | 40 void Click() override; |
42 void ButtonClick(int button_index) override; | 41 void ButtonClick(int button_index) override; |
43 | 42 |
44 private: | 43 private: |
45 base::Callback<void(ash::mojom::LocaleNotificationResult)> callback_; | 44 base::OnceCallback<void(ash::mojom::LocaleNotificationResult)> callback_; |
46 | 45 |
47 DISALLOW_COPY_AND_ASSIGN(LocaleNotificationDelegate); | 46 DISALLOW_COPY_AND_ASSIGN(LocaleNotificationDelegate); |
48 }; | 47 }; |
49 | 48 |
50 LocaleNotificationDelegate::LocaleNotificationDelegate( | 49 LocaleNotificationDelegate::LocaleNotificationDelegate( |
51 const base::Callback<void(ash::mojom::LocaleNotificationResult)>& callback) | 50 base::OnceCallback<void(ash::mojom::LocaleNotificationResult)> callback) |
52 : callback_(callback) {} | 51 : callback_(std::move(callback)) {} |
53 | 52 |
54 LocaleNotificationDelegate::~LocaleNotificationDelegate() { | 53 LocaleNotificationDelegate::~LocaleNotificationDelegate() { |
55 if (callback_) { | 54 if (callback_) { |
56 // We're being destroyed but the user didn't click on anything. Run the | 55 // We're being destroyed but the user didn't click on anything. Run the |
57 // callback so that we don't crash. | 56 // callback so that we don't crash. |
58 callback_.Run(ash::mojom::LocaleNotificationResult::ACCEPT); | 57 std::move(callback_).Run(ash::mojom::LocaleNotificationResult::ACCEPT); |
59 } | 58 } |
60 } | 59 } |
61 | 60 |
62 void LocaleNotificationDelegate::Close(bool by_user) { | 61 void LocaleNotificationDelegate::Close(bool by_user) { |
63 if (callback_) { | 62 if (callback_) { |
64 callback_.Run(ash::mojom::LocaleNotificationResult::ACCEPT); | 63 std::move(callback_).Run(ash::mojom::LocaleNotificationResult::ACCEPT); |
65 callback_.Reset(); | |
66 } | 64 } |
67 } | 65 } |
68 | 66 |
69 bool LocaleNotificationDelegate::HasClickedListener() { | 67 bool LocaleNotificationDelegate::HasClickedListener() { |
70 return true; | 68 return true; |
71 } | 69 } |
72 | 70 |
73 void LocaleNotificationDelegate::Click() { | 71 void LocaleNotificationDelegate::Click() { |
74 if (callback_) { | 72 if (callback_) { |
75 callback_.Run(ash::mojom::LocaleNotificationResult::ACCEPT); | 73 std::move(callback_).Run(ash::mojom::LocaleNotificationResult::ACCEPT); |
76 callback_.Reset(); | |
77 } | 74 } |
78 } | 75 } |
79 | 76 |
80 void LocaleNotificationDelegate::ButtonClick(int button_index) { | 77 void LocaleNotificationDelegate::ButtonClick(int button_index) { |
81 DCHECK_EQ(0, button_index); | 78 DCHECK_EQ(0, button_index); |
82 | 79 |
83 if (callback_) { | 80 if (callback_) { |
84 callback_.Run(ash::mojom::LocaleNotificationResult::REVERT); | 81 std::move(callback_).Run(ash::mojom::LocaleNotificationResult::REVERT); |
85 callback_.Reset(); | |
86 } | 82 } |
87 } | 83 } |
88 | 84 |
89 } // namespace | 85 } // namespace |
90 | 86 |
91 LocaleNotificationController::LocaleNotificationController() {} | 87 LocaleNotificationController::LocaleNotificationController() {} |
92 | 88 |
93 LocaleNotificationController::~LocaleNotificationController() {} | 89 LocaleNotificationController::~LocaleNotificationController() {} |
94 | 90 |
95 void LocaleNotificationController::BindRequest( | 91 void LocaleNotificationController::BindRequest( |
96 mojom::LocaleNotificationControllerRequest request) { | 92 mojom::LocaleNotificationControllerRequest request) { |
97 bindings_.AddBinding(this, std::move(request)); | 93 bindings_.AddBinding(this, std::move(request)); |
98 } | 94 } |
99 | 95 |
100 void LocaleNotificationController::OnLocaleChanged( | 96 void LocaleNotificationController::OnLocaleChanged( |
101 const std::string& cur_locale, | 97 const std::string& cur_locale, |
102 const std::string& from_locale, | 98 const std::string& from_locale, |
103 const std::string& to_locale, | 99 const std::string& to_locale, |
104 const OnLocaleChangedCallback& callback) { | 100 OnLocaleChangedCallback callback) { |
105 base::string16 from = | 101 base::string16 from = |
106 l10n_util::GetDisplayNameForLocale(from_locale, cur_locale, true); | 102 l10n_util::GetDisplayNameForLocale(from_locale, cur_locale, true); |
107 base::string16 to = | 103 base::string16 to = |
108 l10n_util::GetDisplayNameForLocale(to_locale, cur_locale, true); | 104 l10n_util::GetDisplayNameForLocale(to_locale, cur_locale, true); |
109 | 105 |
110 message_center::RichNotificationData optional; | 106 message_center::RichNotificationData optional; |
111 optional.buttons.push_back( | 107 optional.buttons.push_back( |
112 message_center::ButtonInfo(l10n_util::GetStringFUTF16( | 108 message_center::ButtonInfo(l10n_util::GetStringFUTF16( |
113 IDS_ASH_STATUS_TRAY_LOCALE_REVERT_MESSAGE, from))); | 109 IDS_ASH_STATUS_TRAY_LOCALE_REVERT_MESSAGE, from))); |
114 optional.never_timeout = true; | 110 optional.never_timeout = true; |
115 | 111 |
116 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 112 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
117 std::unique_ptr<Notification> notification(new Notification( | 113 std::unique_ptr<Notification> notification(new Notification( |
118 message_center::NOTIFICATION_TYPE_SIMPLE, kLocaleChangeNotificationId, | 114 message_center::NOTIFICATION_TYPE_SIMPLE, kLocaleChangeNotificationId, |
119 base::string16() /* title */, | 115 base::string16() /* title */, |
120 l10n_util::GetStringFUTF16(IDS_ASH_STATUS_TRAY_LOCALE_CHANGE_MESSAGE, | 116 l10n_util::GetStringFUTF16(IDS_ASH_STATUS_TRAY_LOCALE_CHANGE_MESSAGE, |
121 from, to), | 117 from, to), |
122 bundle.GetImageNamed(IDR_AURA_UBER_TRAY_LOCALE), | 118 bundle.GetImageNamed(IDR_AURA_UBER_TRAY_LOCALE), |
123 base::string16() /* display_source */, GURL(), | 119 base::string16() /* display_source */, GURL(), |
124 message_center::NotifierId(message_center::NotifierId::SYSTEM_COMPONENT, | 120 message_center::NotifierId(message_center::NotifierId::SYSTEM_COMPONENT, |
125 system_notifier::kNotifierLocale), | 121 system_notifier::kNotifierLocale), |
126 optional, new LocaleNotificationDelegate(callback))); | 122 optional, new LocaleNotificationDelegate(std::move(callback)))); |
127 message_center::MessageCenter::Get()->AddNotification( | 123 message_center::MessageCenter::Get()->AddNotification( |
128 std::move(notification)); | 124 std::move(notification)); |
129 } | 125 } |
130 | 126 |
131 } // namespace ash | 127 } // namespace ash |
OLD | NEW |