xref: /aosp_15_r20/external/cronet/base/android/build_info.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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.
4 
5 #include "base/android/build_info.h"
6 
7 #include <string>
8 
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"
17 
18 namespace base {
19 namespace android {
20 
21 namespace {
22 
23 // We are leaking these strings.
StrDupParam(const std::vector<std::string> & params,size_t index)24 const char* StrDupParam(const std::vector<std::string>& params, size_t index) {
25   return strdup(params[index].c_str());
26 }
27 
GetIntParam(const std::vector<std::string> & params,size_t index)28 int GetIntParam(const std::vector<std::string>& params, size_t index) {
29   int ret = 0;
30   bool success = StringToInt(params[index], &ret);
31   DCHECK(success);
32   return ret;
33 }
34 
35 }  // namespace
36 
37 struct BuildInfoSingletonTraits {
Newbase::android::BuildInfoSingletonTraits38   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, &params);
43     return new BuildInfo(params);
44   }
45 
Deletebase::android::BuildInfoSingletonTraits46   static void Delete(BuildInfo* x) {
47     // We're leaking this type, see kRegisterAtExit.
48     NOTREACHED();
49   }
50 
51   static const bool kRegisterAtExit = false;
52 #if DCHECK_IS_ON()
53   static const bool kAllowedToAccessOnNonjoinableThread = true;
54 #endif
55 };
56 
BuildInfo(const std::vector<std::string> & params)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)),
89       is_foldable_(GetIntParam(params, 31)) {}
90 
91 // static
GetInstance()92 BuildInfo* BuildInfo::GetInstance() {
93   return Singleton<BuildInfo, BuildInfoSingletonTraits >::get();
94 }
95 
96 }  // namespace android
97 }  // namespace base
98