Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / components / cronet / android / java / src / org / chromium / net / UserAgent.java
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.net;
6
7 import android.content.Context;
8 import android.content.pm.PackageInfo;
9 import android.content.pm.PackageManager;
10 import android.content.pm.PackageManager.NameNotFoundException;
11 import android.os.Build;
12
13 import java.util.Locale;
14
15 /**
16  * Constructs a User-Agent string.
17  */
18 public final class UserAgent {
19     private static final Object sLock = new Object();
20
21     private static int sVersionCode;
22
23     private UserAgent() {
24     }
25
26     public static String from(Context context) {
27         StringBuilder builder = new StringBuilder();
28
29         // Our package name and version.
30         builder.append(context.getPackageName());
31         builder.append('/');
32         builder.append(versionFromContext(context));
33
34         // The platform version.
35         builder.append(" (Linux; U; Android ");
36         builder.append(Build.VERSION.RELEASE);
37         builder.append("; ");
38         builder.append(Locale.getDefault().toString());
39
40         String model = Build.MODEL;
41         if (model.length() > 0) {
42             builder.append("; ");
43             builder.append(model);
44         }
45
46         String id = Build.ID;
47         if (id.length() > 0) {
48             builder.append("; Build/");
49             builder.append(id);
50         }
51
52         builder.append(')');
53
54         return builder.toString();
55     }
56
57     private static int versionFromContext(Context context) {
58         synchronized (sLock) {
59             if (sVersionCode == 0) {
60                 PackageManager packageManager = context.getPackageManager();
61                 String packageName = context.getPackageName();
62                 try {
63                     PackageInfo packageInfo = packageManager.getPackageInfo(
64                             packageName, 0);
65                     sVersionCode = packageInfo.versionCode;
66                 } catch (NameNotFoundException e) {
67                     throw new IllegalStateException(
68                             "Cannot determine package version");
69                 }
70             }
71             return sVersionCode;
72         }
73     }
74 }