// 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. package org.chromium.chrome.browser.payments.ui; import javax.annotation.Nullable; /** * An option that the user can select, e.g., a shipping option, a shipping address, or a payment * method. */ public class PaymentOption implements Completable { /** The placeholder value that indicates the absence of an icon for this option. */ public static final int NO_ICON = 0; protected boolean mIsComplete; private String mId; private int mIcon; private String[] mLabels = {null, null, null}; private boolean mIsValid = true; /** See {@link #PaymentOption(String, String, String, String, int)}. */ public PaymentOption(String id, @Nullable String label, @Nullable String sublabel, int icon) { this(id, label, sublabel, null, icon); } /** * Constructs a payment option. * * @param id The identifier. * @param label The label. * @param sublabel The optional sublabel. * @param tertiarylabel The optional tertiary label. * @param icon The drawable icon identifier or NO_ICON. */ public PaymentOption(String id, @Nullable String label, @Nullable String sublabel, @Nullable String tertiarylabel, int icon) { updateIdentifierLabelsAndIcon(id, label, sublabel, tertiarylabel, icon); } @Override public boolean isComplete() { return mIsComplete; } /** * The non-human readable identifier for this option. For example, "standard_shipping" or the * GUID of an autofill card. */ public String getIdentifier() { return mId; } /** * The primary label of this option. For example, “Visa***1234” or "2-day shipping". */ @Nullable public String getLabel() { return mLabels[0]; } /** * The optional sublabel of this option. For example, “Expiration date: 12/2025”. */ @Nullable public String getSublabel() { return mLabels[1]; } /** * The optional tertiary label of this option. For example, "(555) 867-5309". */ @Nullable public String getTertiaryLabel() { return mLabels[2]; } /** See {@link #updateIdentifierAndLabels(String, String, String, String)}. */ protected void updateIdentifierAndLabels(String id, String label, @Nullable String sublabel) { updateIdentifierAndLabels(id, label, sublabel, null); } /** See {@link #updateIdentifierLabelsAndIcon(String, String, String, String, int)}. */ protected void updateIdentifierAndLabels( String id, String label, @Nullable String sublabel, @Nullable String tertiarylabel) { mId = id; mLabels[0] = label; mLabels[1] = sublabel; mLabels[2] = tertiarylabel; } /** * Updates the identifier, labels, and icon of this option. Called after the user has * edited this option. * * @param id The new id to use. Should not be null. * @param label The new label to use. Should not be null. * @param sublabel The new sublabel to use. Can be null. * @param tertiarylabel The new tertiary label to use. Can be null. * @param icon The drawable icon identifier or NO_ICON. */ protected void updateIdentifierLabelsAndIcon( String id, String label, @Nullable String sublabel, @Nullable String tertiarylabel, int icon) { updateIdentifierAndLabels(id, label, sublabel, tertiarylabel); mIcon = icon; } /** * The identifier for the drawable icon for this payment option. For example, R.drawable.pr_visa * or NO_ICON. */ public int getDrawableIconId() { return mIcon; } /** * Marks this option as invalid. For example, this can be a shipping address that's not served * by the merchant. */ public void setInvalid() { mIsValid = false; } /** @return True if this option is valid. */ public boolean isValid() { return mIsValid; } }