1 // Copyright 2012 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/android/build_info.h"
9 #include "base/android/jni_android.h"
10 #include "base/android/jni_array.h"
11 #include "base/android/scoped_java_ref.h"
12 #include "base/base_jni/BuildInfo_jni.h"
13 #include "base/check_op.h"
14 #include "base/memory/singleton.h"
15 #include "base/notreached.h"
16 #include "base/strings/string_number_conversions.h"
23 // We are leaking these strings.
24 const char* StrDupParam(const std::vector<std::string>& params, size_t index) {
25 return strdup(params[index].c_str());
28 int GetIntParam(const std::vector<std::string>& params, size_t index) {
30 bool success = StringToInt(params[index], &ret);
37 struct BuildInfoSingletonTraits {
38 static BuildInfo* New() {
39 JNIEnv* env = AttachCurrentThread();
40 ScopedJavaLocalRef<jobjectArray> params_objs = Java_BuildInfo_getAll(env);
41 std::vector<std::string> params;
42 AppendJavaStringArrayToStringVector(env, params_objs, ¶ms);
43 return new BuildInfo(params);
46 static void Delete(BuildInfo* x) {
47 // We're leaking this type, see kRegisterAtExit.
51 static const bool kRegisterAtExit = false;
53 static const bool kAllowedToAccessOnNonjoinableThread = true;
57 BuildInfo::BuildInfo(const std::vector<std::string>& params)
58 : brand_(StrDupParam(params, 0)),
59 device_(StrDupParam(params, 1)),
60 android_build_id_(StrDupParam(params, 2)),
61 manufacturer_(StrDupParam(params, 3)),
62 model_(StrDupParam(params, 4)),
63 sdk_int_(GetIntParam(params, 5)),
64 build_type_(StrDupParam(params, 6)),
65 board_(StrDupParam(params, 7)),
66 host_package_name_(StrDupParam(params, 8)),
67 host_version_code_(StrDupParam(params, 9)),
68 host_package_label_(StrDupParam(params, 10)),
69 package_name_(StrDupParam(params, 11)),
70 package_version_code_(StrDupParam(params, 12)),
71 package_version_name_(StrDupParam(params, 13)),
72 android_build_fp_(StrDupParam(params, 14)),
73 gms_version_code_(StrDupParam(params, 15)),
74 installer_package_name_(StrDupParam(params, 16)),
75 abi_name_(StrDupParam(params, 17)),
76 custom_themes_(StrDupParam(params, 18)),
77 resources_version_(StrDupParam(params, 19)),
78 target_sdk_version_(GetIntParam(params, 20)),
79 is_debug_android_(GetIntParam(params, 21)),
80 is_tv_(GetIntParam(params, 22)),
81 version_incremental_(StrDupParam(params, 23)),
82 hardware_(StrDupParam(params, 24)),
83 is_at_least_t_(GetIntParam(params, 25)),
84 is_automotive_(GetIntParam(params, 26)),
85 is_at_least_u_(GetIntParam(params, 27)),
86 targets_at_least_u_(GetIntParam(params, 28)),
87 codename_(StrDupParam(params, 29)),
88 vulkan_deqp_level_(GetIntParam(params, 30)) {}
91 BuildInfo* BuildInfo::GetInstance() {
92 return Singleton<BuildInfo, BuildInfoSingletonTraits >::get();
95 } // namespace android