// 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;
import org.chromium.chrome.browser.payments.ui.PaymentOption;
import org.chromium.payments.mojom.PaymentItem;
import org.json.JSONObject;
import java.util.List;
/**
* The base class for a single payment instrument, e.g., a credit card.
*/
public abstract class PaymentInstrument extends PaymentOption {
/**
* The interface for the requester of instrument details.
*/
public interface DetailsCallback {
/**
* Called after retrieving instrument details.
*
* @param methodName Method name. For example, "visa".
* @param stringifiedDetails JSON-serialized object. For example, {"card": "123"}.
*/
void onInstrumentDetailsReady(String methodName, String stringifiedDetails);
/**
* Called if unable to retrieve instrument details.
*/
void onInstrumentDetailsError();
}
protected PaymentInstrument(String id, String label, String sublabel, int icon) {
super(id, label, sublabel, icon);
}
/**
* Returns the method name for this instrument, e.g., "visa" or "mastercard" in basic card
* payments: https://w3c.github.io/browser-payment-api/specs/basic-card-payment.html#method-id
*
* @return The method name for this instrument.
*/
public abstract String getMethodName();
/**
* Asynchronously retrieves the instrument details and invokes the callback with the result.
*
* @param merchantName The name of the merchant.
* @param origin The origin of this merchant.
* @param total The total amount.
* @param items The shopping cart items.
* @param details The payment-method specific data, e.g., whether the app should be invoked
* in test or production key, a merchant identifier, or a public key.
* @param callback The object that will receive the instrument details.
*/
public abstract void getDetails(String merchantName, String origin, PaymentItem total,
List<PaymentItem> cart, JSONObject details, DetailsCallback callback);
/**
* Cleans up any resources held by the payment instrument. For example, closes server
* connections.
*/
public abstract void dismiss();
}