Chromium Code Reviews| Index: base/android/java/src/org/chromium/base/BuildInfo.java |
| diff --git a/base/android/java/src/org/chromium/base/BuildInfo.java b/base/android/java/src/org/chromium/base/BuildInfo.java |
| index 79a128b7cd2fcc9b55df5f295cbaeaf1f5abfa57..63c37be4f7deeebb1fa27164d5e355502f6ab8fd 100644 |
| --- a/base/android/java/src/org/chromium/base/BuildInfo.java |
| +++ b/base/android/java/src/org/chromium/base/BuildInfo.java |
| @@ -5,12 +5,10 @@ |
| package org.chromium.base; |
| import android.content.Context; |
| -import android.content.pm.ApplicationInfo; |
| import android.content.pm.PackageInfo; |
| import android.content.pm.PackageManager; |
| import android.content.pm.PackageManager.NameNotFoundException; |
| import android.os.Build; |
| -import android.os.StrictMode; |
| import org.chromium.base.annotations.CalledByNative; |
| @@ -28,18 +26,32 @@ public class BuildInfo { |
| private BuildInfo() {} |
| @CalledByNative |
| - public static String getDevice() { |
| - return Build.DEVICE; |
| - } |
| + private static String[] getAll() { |
| + try { |
| + String packageName = ContextUtils.getApplicationContext().getPackageName(); |
| + PackageManager pm = ContextUtils.getApplicationContext().getPackageManager(); |
| + PackageInfo pi = pm.getPackageInfo(packageName, 0); |
| + String versionCode = pi.versionCode <= 0 ? "" : Integer.toString(pi.versionCode); |
| + String versionName = pi.versionName == null ? "" : pi.versionName; |
| - @CalledByNative |
| - public static String getBrand() { |
| - return Build.BRAND; |
| - } |
| + CharSequence label = pm.getApplicationLabel(pi.applicationInfo); |
| + String packageLabel = label == null ? "" : label.toString(); |
| - @CalledByNative |
| - public static String getAndroidBuildId() { |
| - return Build.ID; |
| + // Use lastUpdateTime when developing locally, since versionCode does not normally |
| + // change in this case. |
| + long version = pi.versionCode > 10 ? pi.versionCode : pi.lastUpdateTime; |
| + String extractedFileSuffix = String.format("@%s", Long.toHexString(version)); |
| + |
| + // Do not alter this list without updating callers of it. |
| + return new String[] { |
| + Build.BRAND, Build.DEVICE, Build.ID, Build.MANUFACTURER, Build.MODEL, |
| + String.valueOf(Build.VERSION.SDK_INT), Build.TYPE, packageLabel, packageName, |
| + versionCode, versionName, getAndroidBuildFingerprint(), getGMSVersionCode(pm), |
| + extractedFileSuffix, |
| + }; |
| + } catch (NameNotFoundException e) { |
| + throw new RuntimeException(e); |
| + } |
| } |
| /** |
| @@ -47,28 +59,14 @@ public class BuildInfo { |
| * 128 characters as this is used for crash and UMA reporting, which should avoid huge |
| * strings. |
| */ |
| - @CalledByNative |
| - public static String getAndroidBuildFingerprint() { |
| + private static String getAndroidBuildFingerprint() { |
| return Build.FINGERPRINT.substring( |
| 0, Math.min(Build.FINGERPRINT.length(), MAX_FINGERPRINT_LENGTH)); |
| } |
| - @CalledByNative |
| - public static String getDeviceManufacturer() { |
| - return Build.MANUFACTURER; |
| - } |
| - |
| - @CalledByNative |
| - public static String getDeviceModel() { |
| - return Build.MODEL; |
| - } |
| - |
| - @CalledByNative |
| - public static String getGMSVersionCode() { |
| + private static String getGMSVersionCode(PackageManager packageManager) { |
| String msg = "gms versionCode not available."; |
| try { |
| - PackageManager packageManager = |
| - ContextUtils.getApplicationContext().getPackageManager(); |
| PackageInfo packageInfo = packageManager.getPackageInfo("com.google.android.gms", 0); |
| msg = Integer.toString(packageInfo.versionCode); |
| } catch (NameNotFoundException e) { |
| @@ -77,85 +75,23 @@ public class BuildInfo { |
| return msg; |
| } |
| - @CalledByNative |
| - public static String getPackageVersionCode() { |
| - String msg = "versionCode not available."; |
| - try { |
| - PackageManager pm = ContextUtils.getApplicationContext().getPackageManager(); |
| - PackageInfo pi = pm.getPackageInfo(getPackageName(), 0); |
| - msg = ""; |
| - if (pi.versionCode > 0) { |
| - msg = Integer.toString(pi.versionCode); |
| - } |
| - } catch (NameNotFoundException e) { |
| - Log.d(TAG, msg); |
| - } |
| - return msg; |
| - } |
| - |
| - @CalledByNative |
| public static String getPackageVersionName() { |
| - String msg = "versionName not available"; |
| - try { |
| - PackageManager pm = ContextUtils.getApplicationContext().getPackageManager(); |
| - PackageInfo pi = pm.getPackageInfo(getPackageName(), 0); |
| - msg = ""; |
| - if (pi.versionName != null) { |
| - msg = pi.versionName; |
| - } |
| - } catch (NameNotFoundException e) { |
| - Log.d(TAG, msg); |
| - } |
| - return msg; |
| + return getAll()[10]; |
|
Torne
2017/04/21 19:41:25
Can we just retrieve all the values once and save
agrieve
2017/04/21 20:00:33
We could cache them, but we'd still need to call g
|
| } |
| /** Returns a string that is different each time the apk changes. */ |
| - @CalledByNative |
| public static String getExtractedFileSuffix() { |
| - PackageManager pm = ContextUtils.getApplicationContext().getPackageManager(); |
| - try { |
| - PackageInfo pi = |
| - pm.getPackageInfo(ContextUtils.getApplicationContext().getPackageName(), 0); |
| - // Use lastUpdateTime when developing locally, since versionCode does not normally |
| - // change in this case. |
| - long version = pi.versionCode > 10 ? pi.versionCode : pi.lastUpdateTime; |
| - return "@" + Long.toHexString(version); |
| - } catch (PackageManager.NameNotFoundException e) { |
| - throw new RuntimeException(e); |
| - } |
| + return getAll()[13]; |
| } |
| - @CalledByNative |
| public static String getPackageLabel() { |
| - // Third-party code does disk read on the getApplicationInfo call. http://crbug.com/614343 |
| - StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); |
| - try { |
| - PackageManager packageManager = |
| - ContextUtils.getApplicationContext().getPackageManager(); |
| - ApplicationInfo appInfo = packageManager.getApplicationInfo( |
| - getPackageName(), PackageManager.GET_META_DATA); |
| - CharSequence label = packageManager.getApplicationLabel(appInfo); |
| - return label != null ? label.toString() : ""; |
| - } catch (NameNotFoundException e) { |
| - return ""; |
| - } finally { |
| - StrictMode.setThreadPolicy(oldPolicy); |
| - } |
| + return getAll()[7]; |
| } |
| - @CalledByNative |
| public static String getPackageName() { |
| - if (ContextUtils.getApplicationContext() == null) { |
| - return ""; |
| - } |
| return ContextUtils.getApplicationContext().getPackageName(); |
| } |
| - @CalledByNative |
| - public static String getBuildType() { |
| - return Build.TYPE; |
| - } |
| - |
| /** |
| * Check if this is a debuggable build of Android. Use this to enable developer-only features. |
| */ |
| @@ -163,11 +99,6 @@ public class BuildInfo { |
| return "eng".equals(Build.TYPE) || "userdebug".equals(Build.TYPE); |
| } |
| - @CalledByNative |
| - public static int getSdkInt() { |
| - return Build.VERSION.SDK_INT; |
| - } |
| - |
| /** |
| * @return Whether the current device is running Android O release or newer. |
| */ |