Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4825)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java

Issue 2645813006: Download web payment manifests. (Closed)
Patch Set: Rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java
index 582b1bf48502b4e7588e8c3fbb1277ac3073cab3..58f37e7b2671173202eb6c800a5fb7edd4a39639 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java
@@ -4,20 +4,17 @@
package org.chromium.chrome.browser.payments;
-import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
-import android.net.Uri;
+import android.text.TextUtils;
import android.util.Pair;
-import org.chromium.base.ContextUtils;
-import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ChromeFeatureList;
-import org.chromium.chrome.browser.UrlConstants;
import org.chromium.chrome.browser.payments.PaymentAppFactory.PaymentAppCreatedCallback;
import org.chromium.chrome.browser.payments.PaymentAppFactory.PaymentAppFactoryAddition;
+import org.chromium.components.payments.PaymentManifestDownloader;
+import org.chromium.components.payments.PaymentManifestParser;
import org.chromium.content_public.browser.WebContents;
import java.util.HashMap;
@@ -27,76 +24,13 @@ import java.util.Set;
/** Builds instances of payment apps based on installed third party Android payment apps. */
public class AndroidPaymentAppFactory implements PaymentAppFactoryAddition {
- private static final String ACTION_IS_READY_TO_PAY =
- "org.chromium.intent.action.IS_READY_TO_PAY";
-
- /** The action name for the Pay Basic-card Intent. */
- private static final String ACTION_PAY_BASIC_CARD = "org.chromium.intent.action.PAY_BASIC_CARD";
-
- /**
- * The basic-card payment method name used by merchant and defined by W3C:
- * https://w3c.github.io/webpayments-methods-card/#method-id
- */
- private static final String BASIC_CARD_PAYMENT_METHOD = "basic-card";
-
@Override
- public void create(WebContents webContents, Set<String> methods,
- PaymentAppCreatedCallback callback) {
- Context context = ChromeActivity.fromWebContents(webContents);
- if (context == null) {
- callback.onAllPaymentAppsCreated();
- return;
- }
-
- Map<String, AndroidPaymentApp> installedApps = new HashMap<>();
- PackageManager pm = context.getPackageManager();
- Intent payIntent = new Intent();
-
- boolean paymentAppsFilterEnabled =
- ChromeFeatureList.isEnabled(ChromeFeatureList.ANDROID_PAYMENT_APPS_FILTER);
- Intent filterIntent = new Intent(AndroidPaymentApp.ACTION_PAY);
-
- for (String methodName : methods) {
- if (methodName.startsWith(UrlConstants.HTTPS_URL_PREFIX)) {
- payIntent.setAction(AndroidPaymentApp.ACTION_PAY);
- payIntent.setData(Uri.parse(methodName));
- } else if (methodName.equals(BASIC_CARD_PAYMENT_METHOD)) {
- payIntent.setAction(ACTION_PAY_BASIC_CARD);
- payIntent.setData(null);
- } else {
- continue;
- }
-
- List<ResolveInfo> matches = pm.queryIntentActivities(payIntent, 0);
- for (int i = 0; i < matches.size(); i++) {
- ResolveInfo match = matches.get(i);
- String packageName = match.activityInfo.packageName;
- if (paymentAppsFilterEnabled) {
- filterIntent.setPackage(packageName);
- if (pm.resolveActivity(filterIntent, 0) == null) continue;
- }
- AndroidPaymentApp installedApp = installedApps.get(packageName);
- if (installedApp == null) {
- CharSequence label = match.loadLabel(pm);
- installedApp =
- new AndroidPaymentApp(webContents, packageName, match.activityInfo.name,
- label == null ? "" : label.toString(), match.loadIcon(pm));
- callback.onPaymentAppCreated(installedApp);
- installedApps.put(packageName, installedApp);
- }
- installedApp.addMethodName(methodName);
- }
- }
-
- List<ResolveInfo> matches = pm.queryIntentServices(new Intent(ACTION_IS_READY_TO_PAY), 0);
- for (int i = 0; i < matches.size(); i++) {
- ResolveInfo match = matches.get(i);
- String packageName = match.serviceInfo.packageName;
- AndroidPaymentApp installedApp = installedApps.get(packageName);
- if (installedApp != null) installedApp.setIsReadyToPayAction(match.serviceInfo.name);
- }
-
- callback.onAllPaymentAppsCreated();
+ public void create(
+ WebContents webContents, Set<String> methods, PaymentAppCreatedCallback callback) {
+ AndroidPaymentAppFinder.find(webContents, methods,
+ ChromeFeatureList.isEnabled(ChromeFeatureList.ANDROID_PAYMENT_APPS_FILTER),
+ new PaymentManifestDownloader(webContents), new PaymentManifestParser(),
+ new PackageManagerDelegate(), callback);
}
/**
@@ -105,11 +39,11 @@ public class AndroidPaymentAppFactory implements PaymentAppFactoryAddition {
* @return True if there are Android payment apps on device.
*/
public static boolean hasAndroidPaymentApps() {
- PackageManager pm = ContextUtils.getApplicationContext().getPackageManager();
+ PackageManagerDelegate packageManagerDelegate = new PackageManagerDelegate();
// Note that all Android payment apps must support org.chromium.intent.action.PAY action
// without additional data to be detected.
Intent payIntent = new Intent(AndroidPaymentApp.ACTION_PAY);
- return !pm.queryIntentActivities(payIntent, 0).isEmpty();
+ return !packageManagerDelegate.getActivitiesThatCanRespondToIntent(payIntent).isEmpty();
}
/**
@@ -121,14 +55,17 @@ public class AndroidPaymentAppFactory implements PaymentAppFactoryAddition {
public static Map<String, Pair<String, Drawable>> getAndroidPaymentAppsInfo() {
Map<String, Pair<String, Drawable>> paymentAppsInfo = new HashMap<>();
- PackageManager pm = ContextUtils.getApplicationContext().getPackageManager();
+ PackageManagerDelegate packageManagerDelegate = new PackageManagerDelegate();
Intent payIntent = new Intent(AndroidPaymentApp.ACTION_PAY);
- List<ResolveInfo> matches = pm.queryIntentActivities(payIntent, 0);
+ List<ResolveInfo> matches =
+ packageManagerDelegate.getActivitiesThatCanRespondToIntent(payIntent);
if (matches.isEmpty()) return paymentAppsInfo;
for (ResolveInfo match : matches) {
+ CharSequence label = packageManagerDelegate.getAppLabel(match);
+ if (TextUtils.isEmpty(label)) continue;
Pair<String, Drawable> appInfo =
- new Pair<>(match.loadLabel(pm).toString(), match.loadIcon(pm));
+ new Pair<>(label.toString(), packageManagerDelegate.getAppIcon(match));
paymentAppsInfo.put(match.activityInfo.packageName, appInfo);
}
« no previous file with comments | « chrome/android/java/DEPS ('k') | chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698