diff options
Diffstat (limited to 'chromium/base/android/build_info.cc')
-rw-r--r-- | chromium/base/android/build_info.cc | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/chromium/base/android/build_info.cc b/chromium/base/android/build_info.cc new file mode 100644 index 00000000000..14a72674104 --- /dev/null +++ b/chromium/base/android/build_info.cc @@ -0,0 +1,93 @@ +// Copyright 2012 The Chromium Authors +// 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 |