 Chromium Code Reviews
 Chromium Code Reviews Issue 2793573002:
  [Payments] Use <meta-data> tag instead of intent filter data to detect supported payment methods.  (Closed)
    
  
    Issue 2793573002:
  [Payments] Use <meta-data> tag instead of intent filter data to detect supported payment methods.  (Closed) 
  | Index: chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java | 
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java | 
| index 8afbbc2a609d5c5c4d9969f9db224309056a953f..a943eb3a9e67c08de35e7df874570bd4a037b57f 100644 | 
| --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java | 
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java | 
| @@ -5,10 +5,12 @@ | 
| package org.chromium.chrome.browser.payments; | 
| import android.content.Intent; | 
| +import android.content.pm.ApplicationInfo; | 
| import android.content.pm.PackageInfo; | 
| import android.content.pm.PackageManager; | 
| import android.content.pm.PackageManager.NameNotFoundException; | 
| import android.content.pm.ResolveInfo; | 
| +import android.content.res.Resources; | 
| import android.graphics.drawable.Drawable; | 
| import android.os.StrictMode; | 
| import android.os.StrictMode.ThreadPolicy; | 
| @@ -17,6 +19,8 @@ import org.chromium.base.ContextUtils; | 
| import java.util.List; | 
| +import javax.annotation.Nullable; | 
| + | 
| /** Abstraction of Android's package manager to enable unit testing. */ | 
| public class PackageManagerDelegate { | 
| /** | 
| @@ -96,4 +100,50 @@ public class PackageManagerDelegate { | 
| public Drawable getAppIcon(ResolveInfo resolveInfo) { | 
| return resolveInfo.loadIcon(ContextUtils.getApplicationContext().getPackageManager()); | 
| } | 
| + | 
| + /** | 
| + * Gets the given string array meta data from the given app. | 
| + * | 
| + * @param packageName The package name of the app containing the meta data. | 
| + * @param metaDataName The meta data name of the string array. | 
| + * @return The string array or null. | 
| + */ | 
| + @Nullable | 
| + public String[] getStringArrayMetaData(String packageName, String metaDataName) { | 
| + try { | 
| + PackageManager packageManager = | 
| + ContextUtils.getApplicationContext().getPackageManager(); | 
| + ApplicationInfo appInfo = | 
| + packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA); | 
| + if (appInfo.metaData == null) return null; | 
| + | 
| + int resId = appInfo.metaData.getInt(metaDataName); | 
| + Resources resources = packageManager.getResourcesForApplication(appInfo); | 
| + return resources.getStringArray(resId); | 
| + } catch (NameNotFoundException e) { | 
| 
please use gerrit instead
2017/03/31 15:47:08
Let's wrap in try-catch only the function that thr
 
gogerald1
2017/03/31 16:18:44
Done. getResourcesForApplication might also throug
 | 
| + return null; | 
| + } | 
| + } | 
| + | 
| + /** | 
| + * Gets the given string meta data from the given app. | 
| + * | 
| + * @param packageName The package name of the app containing the meta data. | 
| + * @param metaDataName The meta data name of the string. | 
| + * @return The string or null. | 
| + */ | 
| + @Nullable | 
| + public String getStringMetaData(String packageName, String metaDataName) { | 
| + try { | 
| + PackageManager packageManager = | 
| + ContextUtils.getApplicationContext().getPackageManager(); | 
| + ApplicationInfo appInfo = | 
| + packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA); | 
| + if (appInfo.metaData == null) return null; | 
| + | 
| + return appInfo.metaData.getString(metaDataName); | 
| + } catch (NameNotFoundException e) { | 
| 
please use gerrit instead
2017/03/31 15:47:08
Ditto.
 
gogerald1
2017/03/31 16:18:44
Done. Ditto
 | 
| + return null; | 
| + } | 
| + } | 
| } |