| Index: chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
|
| diff --git a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
|
| index de6934cf3e1cf43edb88e29da3c840a81bf8f68c..6052121600bf91362124c395b28c2162db5bb34e 100644
|
| --- a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
|
| +++ b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
|
| @@ -5,7 +5,6 @@
|
| #include "chrome/browser/ui/views/payments/payment_request_sheet_controller.h"
|
|
|
| #include "chrome/browser/ui/views/payments/payment_request_dialog_view.h"
|
| -#include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
|
| #include "chrome/browser/ui/views/payments/payment_request_views_util.h"
|
| #include "components/payments/content/payment_request.h"
|
| #include "components/strings/grit/components_strings.h"
|
| @@ -22,6 +21,13 @@ namespace payments {
|
|
|
| namespace {
|
|
|
| +// This event is used to pass to ButtonPressed when its event parameter doesn't
|
| +// matter, only the sender.
|
| +class DummyEvent : public ui::Event {
|
| + public:
|
| + DummyEvent() : ui::Event(ui::ET_UNKNOWN, base::TimeTicks(), 0) {}
|
| +};
|
| +
|
| // This class is the actual sheet that gets pushed on the view_stack_. It
|
| // implements views::FocusTraversable to trap focus within its hierarchy. This
|
| // way, focus doesn't leave the topmost sheet on the view stack to go on views
|
| @@ -32,9 +38,14 @@ namespace {
|
| // this SheetView's RequestFocus() is called.
|
| class SheetView : public views::View, public views::FocusTraversable {
|
| public:
|
| - SheetView()
|
| + explicit SheetView(
|
| + const base::Callback<bool()>& enter_key_accelerator_callback)
|
| : first_focusable_(nullptr),
|
| - focus_search_(base::MakeUnique<views::FocusSearch>(this, true, false)) {
|
| + focus_search_(base::MakeUnique<views::FocusSearch>(this, true, false)),
|
| + enter_key_accelerator_(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE)),
|
| + enter_key_accelerator_callback_(enter_key_accelerator_callback) {
|
| + if (enter_key_accelerator_callback_)
|
| + AddAccelerator(enter_key_accelerator_);
|
| }
|
|
|
| // Sets |view| as the first focusable view in this pane. If it's nullptr, the
|
| @@ -69,8 +80,18 @@ class SheetView : public views::View, public views::FocusTraversable {
|
| first_focusable->RequestFocus();
|
| }
|
|
|
| + bool AcceleratorPressed(const ui::Accelerator& accelerator) override {
|
| + if (accelerator == enter_key_accelerator_ &&
|
| + enter_key_accelerator_callback_) {
|
| + return enter_key_accelerator_callback_.Run();
|
| + }
|
| + return views::View::AcceleratorPressed(accelerator);
|
| + }
|
| +
|
| views::View* first_focusable_;
|
| std::unique_ptr<views::FocusSearch> focus_search_;
|
| + ui::Accelerator enter_key_accelerator_;
|
| + base::Callback<bool()> enter_key_accelerator_callback_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(SheetView);
|
| };
|
| @@ -139,7 +160,21 @@ void PaymentRequestSheetController::ButtonPressed(
|
|
|
| std::unique_ptr<views::View>
|
| PaymentRequestSheetController::CreatePaymentView() {
|
| - std::unique_ptr<SheetView> view = base::MakeUnique<SheetView>();
|
| + // Create the footer now so that it's known if there's a primary button or not
|
| + // before creating the sheet view. This way, it's possible to determine
|
| + // whether there's something to do when the user hits enter.
|
| + std::unique_ptr<views::View> footer = CreateFooterView();
|
| + std::unique_ptr<SheetView> view = base::MakeUnique<SheetView>(
|
| + primary_button_
|
| + ? base::Bind(
|
| + &PaymentRequestSheetController::PerformPrimaryButtonAction,
|
| + base::Unretained(this))
|
| + : base::Callback<bool()>());
|
| +
|
| + DialogViewID sheet_id;
|
| + if (GetSheetId(&sheet_id))
|
| + view->set_id(static_cast<int>(sheet_id));
|
| +
|
| view->set_background(views::Background::CreateSolidBackground(SK_ColorWHITE));
|
|
|
| // Paint the sheets to layers, otherwise the MD buttons (which do paint to a
|
| @@ -186,7 +221,7 @@ PaymentRequestSheetController::CreatePaymentView() {
|
| layout->AddView(scroll_.get());
|
|
|
| layout->StartRow(0, 0);
|
| - layout->AddView(CreateFooterView().release());
|
| + layout->AddView(footer.release());
|
|
|
| view->SetFirstFocusableView(GetFirstFocusedView());
|
|
|
| @@ -256,4 +291,16 @@ views::View* PaymentRequestSheetController::GetFirstFocusedView() {
|
| return secondary_button_.get();
|
| }
|
|
|
| +bool PaymentRequestSheetController::GetSheetId(DialogViewID* sheet_id) {
|
| + return false;
|
| +}
|
| +
|
| +bool PaymentRequestSheetController::PerformPrimaryButtonAction() {
|
| + if (primary_button_ && primary_button_->enabled()) {
|
| + ButtonPressed(primary_button_.get(), DummyEvent());
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| } // namespace payments
|
|
|