123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- // Copyright (c) 2012 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.
- #include "base/android/build_info.h"
- #include <string>
- #include "base/android/jni_android.h"
- #include "base/android/jni_array.h"
- #include "base/android/scoped_java_ref.h"
- #include "base/base_jni_headers/BuildInfo_jni.h"
- #include "base/check_op.h"
- #include "base/memory/singleton.h"
- #include "base/notreached.h"
- #include "base/strings/string_number_conversions.h"
- namespace base {
- namespace android {
- namespace {
- // We are leaking these strings.
- const char* StrDupParam(const std::vector<std::string>& params, size_t index) {
- return strdup(params[index].c_str());
- }
- int GetIntParam(const std::vector<std::string>& params, size_t index) {
- int ret = 0;
- bool success = StringToInt(params[index], &ret);
- DCHECK(success);
- return ret;
- }
- } // namespace
- struct BuildInfoSingletonTraits {
- static BuildInfo* New() {
- JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobjectArray> params_objs = Java_BuildInfo_getAll(env);
- std::vector<std::string> params;
- AppendJavaStringArrayToStringVector(env, params_objs, ¶ms);
- return new BuildInfo(params);
- }
- static void Delete(BuildInfo* x) {
- // We're leaking this type, see kRegisterAtExit.
- NOTREACHED();
- }
- static const bool kRegisterAtExit = false;
- #if DCHECK_IS_ON()
- static const bool kAllowedToAccessOnNonjoinableThread = true;
- #endif
- };
- BuildInfo::BuildInfo(const std::vector<std::string>& params)
- : brand_(StrDupParam(params, 0)),
- device_(StrDupParam(params, 1)),
- android_build_id_(StrDupParam(params, 2)),
- manufacturer_(StrDupParam(params, 3)),
- model_(StrDupParam(params, 4)),
- sdk_int_(GetIntParam(params, 5)),
- build_type_(StrDupParam(params, 6)),
- board_(StrDupParam(params, 7)),
- host_package_name_(StrDupParam(params, 8)),
- host_version_code_(StrDupParam(params, 9)),
- host_package_label_(StrDupParam(params, 10)),
- package_name_(StrDupParam(params, 11)),
- package_version_code_(StrDupParam(params, 12)),
- package_version_name_(StrDupParam(params, 13)),
- android_build_fp_(StrDupParam(params, 14)),
- gms_version_code_(StrDupParam(params, 15)),
- installer_package_name_(StrDupParam(params, 16)),
- abi_name_(StrDupParam(params, 17)),
- firebase_app_id_(StrDupParam(params, 18)),
- custom_themes_(StrDupParam(params, 19)),
- resources_version_(StrDupParam(params, 20)),
- target_sdk_version_(GetIntParam(params, 21)),
- is_debug_android_(GetIntParam(params, 22)),
- is_tv_(GetIntParam(params, 23)),
- version_incremental_(StrDupParam(params, 24)),
- hardware_(StrDupParam(params, 25)),
- is_at_least_t_(GetIntParam(params, 26)),
- is_automotive_(GetIntParam(params, 27)) {}
- // static
- BuildInfo* BuildInfo::GetInstance() {
- return Singleton<BuildInfo, BuildInfoSingletonTraits >::get();
- }
- } // namespace android
- } // namespace base
|