| Index: base/android/build_info.cc
|
| diff --git a/base/android/build_info.cc b/base/android/build_info.cc
|
| index 35e041fb192877c11e8ec2570f604261160e0339..c825be01a3c13bd1f981468b62767b944a5a3938 100644
|
| --- a/base/android/build_info.cc
|
| +++ b/base/android/build_info.cc
|
| @@ -7,28 +7,38 @@
|
| #include <string>
|
|
|
| #include "base/android/jni_android.h"
|
| -#include "base/android/jni_string.h"
|
| +#include "base/android/jni_array.h"
|
| #include "base/android/scoped_java_ref.h"
|
| #include "base/logging.h"
|
| #include "base/memory/singleton.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| #include "jni/BuildInfo_jni.h"
|
|
|
| +namespace base {
|
| +namespace android {
|
| +
|
| namespace {
|
|
|
| // We are leaking these strings.
|
| -const char* StrDupJString(const base::android::JavaRef<jstring>& java_string) {
|
| - std::string str = ConvertJavaStringToUTF8(java_string);
|
| - return strdup(str.c_str());
|
| +const char* StrDupParam(const std::vector<std::string>& params, int index) {
|
| + return strdup(params[index].c_str());
|
| }
|
|
|
| -} // namespace
|
| +int SdkIntParam(const std::vector<std::string>& params, int index) {
|
| + int ret = 0;
|
| + DCHECK(StringToInt(params[index], &ret));
|
| + return ret;
|
| +}
|
|
|
| -namespace base {
|
| -namespace android {
|
| +} // namespace
|
|
|
| struct BuildInfoSingletonTraits {
|
| static BuildInfo* New() {
|
| - return new BuildInfo(AttachCurrentThread());
|
| + JNIEnv* env = AttachCurrentThread();
|
| + ScopedJavaLocalRef<jobjectArray> params_objs = Java_BuildInfo_getAll(env);
|
| + std::vector<std::string> params;
|
| + AppendJavaStringArrayToStringVector(env, params_objs.obj(), ¶ms);
|
| + return new BuildInfo(params);
|
| }
|
|
|
| static void Delete(BuildInfo* x) {
|
| @@ -42,25 +52,21 @@ struct BuildInfoSingletonTraits {
|
| #endif
|
| };
|
|
|
| -BuildInfo::BuildInfo(JNIEnv* env)
|
| - : device_(StrDupJString(Java_BuildInfo_getDevice(env))),
|
| - manufacturer_(StrDupJString(Java_BuildInfo_getDeviceManufacturer(env))),
|
| - model_(StrDupJString(Java_BuildInfo_getDeviceModel(env))),
|
| - brand_(StrDupJString(Java_BuildInfo_getBrand(env))),
|
| - android_build_id_(StrDupJString(Java_BuildInfo_getAndroidBuildId(env))),
|
| - android_build_fp_(
|
| - StrDupJString(Java_BuildInfo_getAndroidBuildFingerprint(env))),
|
| - gms_version_code_(StrDupJString(Java_BuildInfo_getGMSVersionCode(env))),
|
| - package_version_code_(
|
| - StrDupJString(Java_BuildInfo_getPackageVersionCode(env))),
|
| - package_version_name_(
|
| - StrDupJString(Java_BuildInfo_getPackageVersionName(env))),
|
| - package_label_(StrDupJString(Java_BuildInfo_getPackageLabel(env))),
|
| - package_name_(StrDupJString(Java_BuildInfo_getPackageName(env))),
|
| - build_type_(StrDupJString(Java_BuildInfo_getBuildType(env))),
|
| - extracted_file_suffix_(
|
| - ConvertJavaStringToUTF8(Java_BuildInfo_getExtractedFileSuffix(env))),
|
| - sdk_int_(Java_BuildInfo_getSdkInt(env)),
|
| +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_(SdkIntParam(params, 5)),
|
| + build_type_(StrDupParam(params, 6)),
|
| + package_label_(StrDupParam(params, 7)),
|
| + package_name_(StrDupParam(params, 8)),
|
| + package_version_code_(StrDupParam(params, 9)),
|
| + package_version_name_(StrDupParam(params, 10)),
|
| + android_build_fp_(StrDupParam(params, 11)),
|
| + gms_version_code_(StrDupParam(params, 12)),
|
| + extracted_file_suffix_(params[13]),
|
| java_exception_info_(NULL) {}
|
|
|
| // static
|
|
|