blob: 327559ffaee260eb7e7aa300bd9383e9ded7c3bc [file] [log] [blame]
// 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/android_info.h"
#include "base/android/apk_info.h"
#include "base/android/device_info.h"
#include "base/android/jni_android.h"
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
#include "base/check_op.h"
#include "base/memory/singleton.h"
#include "base/notreached.h"
#include "base/strings/string_number_conversions.h"
// Must come after all headers that specialize FromJniType() / ToJniType().
#include "base/build_info_jni/BuildInfo_jni.h"
namespace base {
namespace android {
struct BuildInfoSingletonTraits {
static BuildInfo* New() { return new BuildInfo(); }
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()
: brand_(android_info::brand()),
device_(android_info::device()),
android_build_id_(android_info::android_build_id()),
manufacturer_(android_info::manufacturer()),
model_(android_info::model()),
sdk_int_(android_info::sdk_int()),
build_type_(android_info::build_type()),
board_(android_info::board()),
host_package_name_(apk_info::host_package_name()),
host_version_code_(apk_info::host_version_code()),
host_package_label_(apk_info::host_package_label()),
package_name_(apk_info::package_name()),
package_version_code_(apk_info::package_version_code()),
package_version_name_(apk_info::package_version_name()),
android_build_fp_(android_info::android_build_fp()),
installer_package_name_(apk_info::installer_package_name()),
abi_name_(android_info::abi_name()),
resources_version_(apk_info::resources_version()),
target_sdk_version_(apk_info::target_sdk_version()),
is_debug_android_(android_info::is_debug_android()),
is_tv_(device_info::is_tv()),
version_incremental_(android_info::version_incremental()),
hardware_(android_info::hardware()),
is_automotive_(device_info::is_automotive()),
codename_(android_info::codename()),
vulkan_deqp_level_(device_info::vulkan_deqp_level()),
is_foldable_(device_info::is_foldable()),
soc_manufacturer_(android_info::soc_manufacturer()),
is_debug_app_(apk_info::is_debug_app()),
is_desktop_(device_info::is_desktop()) {}
BuildInfo::~BuildInfo() = default;
const std::string& BuildInfo::gms_version_code() const {
return device_info::gms_version_code();
}
void BuildInfo::set_gms_version_code_for_test(
const std::string& gms_version_code) {
device_info::set_gms_version_code_for_test(gms_version_code);
}
const std::string BuildInfo::host_signing_cert_sha256() {
JNIEnv* env = AttachCurrentThread();
return Java_BuildInfo_lazyGetHostSigningCertSha256(env);
}
// static
BuildInfo* BuildInfo::GetInstance() {
return Singleton<BuildInfo, BuildInfoSingletonTraits>::get();
}
} // namespace android
} // namespace base