// 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.json.JSONObject; import java.util.List; import java.util.Set; /** * The interface that a payment app implements. A payment app can get its data from Chrome autofill, * Android Pay, or third party apps. */ public interface PaymentApp { /** * The interface for the requester of instruments. */ public interface InstrumentsCallback { /** * Called by this app to provide a list of instruments asynchronously. * * @param app The calling app. * @param instruments The instruments from this app. */ void onInstrumentsReady(PaymentApp app, List<PaymentInstrument> instruments); } /** * Provides a list of all payment instruments in this app. For example, this can be all credit * cards for the current profile. Can return null or empty list, e.g., if user has no locally * stored credit cards. * * @param details The payment-method specific data, e.g., whether the app should be invoked in * test or production mode, merchant identifier, or a public key. * @param callback The object that will receive the list of instruments. */ void getInstruments(JSONObject details, InstrumentsCallback callback); /** * Returns a list of all payment method names that this app supports. For example, ["visa", * "mastercard"] in basic card payments. Should return a list of at least one method name. * https://w3c.github.io/browser-payment-api/specs/basic-card-payment.html#method-id * * @return The list of all payment method names that this app supports. */ Set<String> getSupportedMethodNames(); /** * Returns the identifier for this payment app to be saved in user preferences. For example, * this can be "autofill", "https://android.com/pay", or "com.example.app.ExamplePaymentApp". * * @return The identifier for this payment app. */ String getIdentifier(); }