Index: net/cronet/android/java/src/org/chromium/net/UserAgent.java |
diff --git a/net/cronet/android/java/src/org/chromium/net/UserAgent.java b/net/cronet/android/java/src/org/chromium/net/UserAgent.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..77febd5782c33efe7550c95c5c02c1712aa2e804 |
--- /dev/null |
+++ b/net/cronet/android/java/src/org/chromium/net/UserAgent.java |
@@ -0,0 +1,74 @@ |
+// Copyright 2014 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.net; |
+ |
+import android.content.Context; |
+import android.content.pm.PackageInfo; |
+import android.content.pm.PackageManager; |
+import android.content.pm.PackageManager.NameNotFoundException; |
+import android.os.Build; |
+ |
+import java.util.Locale; |
+ |
+/** |
+ * Constructs a User-Agent string. |
+ */ |
+public final class UserAgent { |
+ private static final Object sLock = new Object(); |
+ |
+ private static int sVersionCode; |
+ |
+ private UserAgent() { |
+ } |
+ |
+ public static String from(Context context) { |
+ StringBuilder builder = new StringBuilder(); |
+ |
+ // Our package name and version. |
+ builder.append(context.getPackageName()); |
+ builder.append('/'); |
+ builder.append(versionFromContext(context)); |
+ |
+ // The platform version. |
+ builder.append(" (Linux; U; Android "); |
+ builder.append(Build.VERSION.RELEASE); |
+ builder.append("; "); |
+ builder.append(Locale.getDefault().toString()); |
+ |
+ String model = Build.MODEL; |
+ if (model.length() > 0) { |
+ builder.append("; "); |
+ builder.append(model); |
+ } |
+ |
+ String id = Build.ID; |
+ if (id.length() > 0) { |
+ builder.append("; Build/"); |
+ builder.append(id); |
+ } |
+ |
+ builder.append(')'); |
+ |
+ return builder.toString(); |
+ } |
+ |
+ private static int versionFromContext(Context context) { |
+ synchronized (sLock) { |
+ if (sVersionCode == 0) { |
+ PackageManager packageManager = context.getPackageManager(); |
+ String packageName = context.getPackageName(); |
+ try { |
+ PackageInfo packageInfo = packageManager.getPackageInfo( |
+ packageName, 0); |
+ sVersionCode = packageInfo.versionCode; |
+ } catch (NameNotFoundException e) { |
+ throw new IllegalStateException( |
+ "Cannot determine package version"); |
+ } |
+ } |
+ return sVersionCode; |
+ } |
+ } |
+} |