blob: 08e7098cb7282becc668f3678631554485bb5757 [file] [log] [blame]
// Copyright 2016 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.
#ifndef CHROME_BROWSER_UI_VIEWS_PAYMENTS_PAYMENT_REQUEST_VIEWS_UTIL_H_
#define CHROME_BROWSER_UI_VIEWS_PAYMENTS_PAYMENT_REQUEST_VIEWS_UTIL_H_
#include <memory>
#include <string>
#include "base/strings/string16.h"
#include "third_party/blink/public/mojom/payments/payment_request.mojom.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/geometry/insets.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/text_constants.h"
namespace autofill {
class AutofillProfile;
}
namespace views {
class Background;
class Border;
class ButtonListener;
class ImageView;
class Label;
class View;
}
namespace payments {
class PaymentOptionsProvider;
class PaymentsProfileComparator;
enum class PaymentShippingType;
constexpr int kPaymentRequestRowHorizontalInsets = 16;
constexpr int kPaymentRequestRowVerticalInsets = 8;
// Extra inset relative to the header when a right edge should line up with the
// close button's X rather than its invisible right edge.
constexpr int kPaymentRequestRowExtraRightInset = 8;
constexpr int kPaymentRequestButtonSpacing = 10;
// Dimensions of the dialog itself.
constexpr int kDialogMinWidth = 512;
constexpr int kDialogHeight = 450;
// Fixed width of the amount sections in the payment sheet and the order summary
// sheet, in pixels.
constexpr int kAmountSectionWidth = 96;
enum class PaymentRequestCommonTags {
BACK_BUTTON_TAG = 0,
CLOSE_BUTTON_TAG,
PAY_BUTTON_TAG,
// This is the max value of tags for controls common to multiple
// PaymentRequest contexts. Individual screens that handle both common and
// specific events with tags can start their specific tags at this value.
PAYMENT_REQUEST_COMMON_TAG_MAX
};
int GetActualDialogWidth();
// Creates and returns a header for all the sheets in the PaymentRequest dialog.
// The header contains an optional back arrow button (if |show_back_arrow| is
// true), a |title| label. |delegate| becomes the delegate for the back and
// close buttons. |background| is applied to |container| and its color is used
// to decide which color to use to paint the arrow.
// +---------------------------+
// | <- | header_content_view |
// +---------------------------+
void PopulateSheetHeaderView(bool show_back_arrow,
std::unique_ptr<views::View> header_content_view,
views::ButtonListener* delegate,
views::View* container,
std::unique_ptr<views::Background> background);
// Returns an instrument image view for the given |img| or |icon_resource_id|
// and wanted |opacity|. Includes a rounded rect border. Callers need to set the
// size of the resulting ImageView. Callers should set a |tooltip_text|.
std::unique_ptr<views::ImageView> CreateInstrumentIconView(
int icon_resource_id,
const gfx::ImageSkia* img,
const base::string16& tooltip_text,
float opacity = 1.0f);
std::unique_ptr<views::View> CreateProductLogoFooterView();
// Represents formatting options for each of the different contexts in which an
// Address label may be displayed.
enum class AddressStyleType { SUMMARY, DETAILED };
// Extracts and formats descriptive text from the given |profile| to represent
// the address in the context specified by |type|. The missing information will
// be computed using |comp| and displayed as the last line in an informative
// manner. |enabled| indicates whether the various label lines look enabled or
// disabled. Populates |accessible_content|, which shouldn't be null, with the
// screen reader string representing this section.
std::unique_ptr<views::View> GetShippingAddressLabelWithMissingInfo(
AddressStyleType type,
const std::string& locale,
const autofill::AutofillProfile& profile,
const PaymentsProfileComparator& comp,
base::string16* accessible_content,
bool enabled = true);
// Extracts and formats descriptive text from the given |profile| to represent
// the contact info in the context specified by |type|. Includes/excludes name,
// email, and phone fields according to the respective boolean fields. Populates
// |accessible_content|, which shouldn't be null, with the screen reader string
// representing this section.
std::unique_ptr<views::View> GetContactInfoLabel(
AddressStyleType type,
const std::string& locale,
const autofill::AutofillProfile& profile,
const PaymentOptionsProvider& options,
const PaymentsProfileComparator& comp,
base::string16* accessible_content);
// Creates a views::Border object with |insets| that can paint the gray
// horizontal ruler used as a separator between items in the Payment Request
// dialog.
std::unique_ptr<views::Border> CreatePaymentRequestRowBorder(
SkColor color,
const gfx::Insets& insets);
// Creates a label with a bold font.
std::unique_ptr<views::Label> CreateBoldLabel(const base::string16& text);
// Creates a label with a medium-weight font, with appropriate fallbacks for
// platforms that have no medium font, or where a user has configured their
// default font with a heavier weight.
std::unique_ptr<views::Label> CreateMediumLabel(const base::string16& text);
// Creates a label with grey, "hint" text and the provided |alignment|.
std::unique_ptr<views::Label> CreateHintLabel(
const base::string16& text,
gfx::HorizontalAlignment alignment = gfx::ALIGN_CENTER);
// Creates a 2 line label containing |shipping_option|'s label and amount. If
// |emphasize_label| is true, the label part will be in medium weight. Populates
// |accessible_content|, which shouldn't be null, with the screen reader string
// representing this section.
std::unique_ptr<views::View> CreateShippingOptionLabel(
payments::mojom::PaymentShippingOption* shipping_option,
const base::string16& formatted_amount,
bool emphasize_label,
base::string16* accessible_content);
// Computes a readable foreground color given |background_color| and returns it.
// This reimplements the algorithm specified by Clank's
// ColorUtils.shouldUseLightForegroundOnBackground rather than use
// color_utils::GetReadableColor to provide Payment Handlers with a consistent
// experience across platforms.
SkColor GetForegroundColorForBackground(SkColor background_color);
} // namespace payments
#endif // CHROME_BROWSER_UI_VIEWS_PAYMENTS_PAYMENT_REQUEST_VIEWS_UTIL_H_