xref: /aosp_15_r20/external/libchrome/base/android/build_info.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #include "base/android/build_info.h"
6*635a8641SAndroid Build Coastguard Worker 
7*635a8641SAndroid Build Coastguard Worker #include <string>
8*635a8641SAndroid Build Coastguard Worker 
9*635a8641SAndroid Build Coastguard Worker #include "base/android/jni_android.h"
10*635a8641SAndroid Build Coastguard Worker #include "base/android/jni_array.h"
11*635a8641SAndroid Build Coastguard Worker #include "base/android/scoped_java_ref.h"
12*635a8641SAndroid Build Coastguard Worker #include "base/logging.h"
13*635a8641SAndroid Build Coastguard Worker #include "base/memory/singleton.h"
14*635a8641SAndroid Build Coastguard Worker #include "base/strings/string_number_conversions.h"
15*635a8641SAndroid Build Coastguard Worker #include "jni/BuildInfo_jni.h"
16*635a8641SAndroid Build Coastguard Worker 
17*635a8641SAndroid Build Coastguard Worker namespace base {
18*635a8641SAndroid Build Coastguard Worker namespace android {
19*635a8641SAndroid Build Coastguard Worker 
20*635a8641SAndroid Build Coastguard Worker namespace {
21*635a8641SAndroid Build Coastguard Worker 
22*635a8641SAndroid Build Coastguard Worker // We are leaking these strings.
StrDupParam(const std::vector<std::string> & params,int index)23*635a8641SAndroid Build Coastguard Worker const char* StrDupParam(const std::vector<std::string>& params, int index) {
24*635a8641SAndroid Build Coastguard Worker   return strdup(params[index].c_str());
25*635a8641SAndroid Build Coastguard Worker }
26*635a8641SAndroid Build Coastguard Worker 
GetIntParam(const std::vector<std::string> & params,int index)27*635a8641SAndroid Build Coastguard Worker int GetIntParam(const std::vector<std::string>& params, int index) {
28*635a8641SAndroid Build Coastguard Worker   int ret = 0;
29*635a8641SAndroid Build Coastguard Worker   bool success = StringToInt(params[index], &ret);
30*635a8641SAndroid Build Coastguard Worker   DCHECK(success);
31*635a8641SAndroid Build Coastguard Worker   return ret;
32*635a8641SAndroid Build Coastguard Worker }
33*635a8641SAndroid Build Coastguard Worker 
34*635a8641SAndroid Build Coastguard Worker }  // namespace
35*635a8641SAndroid Build Coastguard Worker 
36*635a8641SAndroid Build Coastguard Worker struct BuildInfoSingletonTraits {
Newbase::android::BuildInfoSingletonTraits37*635a8641SAndroid Build Coastguard Worker   static BuildInfo* New() {
38*635a8641SAndroid Build Coastguard Worker     JNIEnv* env = AttachCurrentThread();
39*635a8641SAndroid Build Coastguard Worker     ScopedJavaLocalRef<jobjectArray> params_objs = Java_BuildInfo_getAll(env);
40*635a8641SAndroid Build Coastguard Worker     std::vector<std::string> params;
41*635a8641SAndroid Build Coastguard Worker     AppendJavaStringArrayToStringVector(env, params_objs.obj(), &params);
42*635a8641SAndroid Build Coastguard Worker     return new BuildInfo(params);
43*635a8641SAndroid Build Coastguard Worker   }
44*635a8641SAndroid Build Coastguard Worker 
Deletebase::android::BuildInfoSingletonTraits45*635a8641SAndroid Build Coastguard Worker   static void Delete(BuildInfo* x) {
46*635a8641SAndroid Build Coastguard Worker     // We're leaking this type, see kRegisterAtExit.
47*635a8641SAndroid Build Coastguard Worker     NOTREACHED();
48*635a8641SAndroid Build Coastguard Worker   }
49*635a8641SAndroid Build Coastguard Worker 
50*635a8641SAndroid Build Coastguard Worker   static const bool kRegisterAtExit = false;
51*635a8641SAndroid Build Coastguard Worker #if DCHECK_IS_ON()
52*635a8641SAndroid Build Coastguard Worker   static const bool kAllowedToAccessOnNonjoinableThread = true;
53*635a8641SAndroid Build Coastguard Worker #endif
54*635a8641SAndroid Build Coastguard Worker };
55*635a8641SAndroid Build Coastguard Worker 
BuildInfo(const std::vector<std::string> & params)56*635a8641SAndroid Build Coastguard Worker BuildInfo::BuildInfo(const std::vector<std::string>& params)
57*635a8641SAndroid Build Coastguard Worker     : brand_(StrDupParam(params, 0)),
58*635a8641SAndroid Build Coastguard Worker       device_(StrDupParam(params, 1)),
59*635a8641SAndroid Build Coastguard Worker       android_build_id_(StrDupParam(params, 2)),
60*635a8641SAndroid Build Coastguard Worker       manufacturer_(StrDupParam(params, 3)),
61*635a8641SAndroid Build Coastguard Worker       model_(StrDupParam(params, 4)),
62*635a8641SAndroid Build Coastguard Worker       sdk_int_(GetIntParam(params, 5)),
63*635a8641SAndroid Build Coastguard Worker       build_type_(StrDupParam(params, 6)),
64*635a8641SAndroid Build Coastguard Worker       board_(StrDupParam(params, 7)),
65*635a8641SAndroid Build Coastguard Worker       host_package_name_(StrDupParam(params, 8)),
66*635a8641SAndroid Build Coastguard Worker       host_version_code_(StrDupParam(params, 9)),
67*635a8641SAndroid Build Coastguard Worker       host_package_label_(StrDupParam(params, 10)),
68*635a8641SAndroid Build Coastguard Worker       package_name_(StrDupParam(params, 11)),
69*635a8641SAndroid Build Coastguard Worker       package_version_code_(StrDupParam(params, 12)),
70*635a8641SAndroid Build Coastguard Worker       package_version_name_(StrDupParam(params, 13)),
71*635a8641SAndroid Build Coastguard Worker       android_build_fp_(StrDupParam(params, 14)),
72*635a8641SAndroid Build Coastguard Worker       gms_version_code_(StrDupParam(params, 15)),
73*635a8641SAndroid Build Coastguard Worker       installer_package_name_(StrDupParam(params, 16)),
74*635a8641SAndroid Build Coastguard Worker       abi_name_(StrDupParam(params, 17)),
75*635a8641SAndroid Build Coastguard Worker       firebase_app_id_(StrDupParam(params, 18)),
76*635a8641SAndroid Build Coastguard Worker       custom_themes_(StrDupParam(params, 19)),
77*635a8641SAndroid Build Coastguard Worker       resources_version_(StrDupParam(params, 20)),
78*635a8641SAndroid Build Coastguard Worker       extracted_file_suffix_(params[21]),
79*635a8641SAndroid Build Coastguard Worker       is_at_least_p_(GetIntParam(params, 22)) {}
80*635a8641SAndroid Build Coastguard Worker 
81*635a8641SAndroid Build Coastguard Worker // static
GetInstance()82*635a8641SAndroid Build Coastguard Worker BuildInfo* BuildInfo::GetInstance() {
83*635a8641SAndroid Build Coastguard Worker   return Singleton<BuildInfo, BuildInfoSingletonTraits >::get();
84*635a8641SAndroid Build Coastguard Worker }
85*635a8641SAndroid Build Coastguard Worker 
86*635a8641SAndroid Build Coastguard Worker }  // namespace android
87*635a8641SAndroid Build Coastguard Worker }  // namespace base
88