OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include <jni.h> | |
6 #include <sys/system_properties.h> | |
7 | |
8 #include "sync/util/session_utils_android.h" | |
9 | |
10 #include "base/android/jni_android.h" | |
11 #include "base/android/jni_string.h" | |
12 #include "base/android/scoped_java_ref.h" | |
13 #include "base/logging.h" | |
14 | |
15 using base::android::AttachCurrentThread; | |
16 using base::android::CheckException; | |
17 using base::android::ConvertUTF8ToJavaString; | |
18 using base::android::GetApplicationContext; | |
19 using base::android::GetClass; | |
20 using base::android::JavaRef; | |
21 using base::android::MethodID; | |
22 using base::android::ScopedJavaLocalRef; | |
23 | |
24 namespace { | |
25 | |
26 ScopedJavaLocalRef<jstring> GetAndroidIdJNI( | |
27 JNIEnv* env, const JavaRef<jobject>& content_resolver) { | |
28 ScopedJavaLocalRef<jclass> clazz( | |
29 GetClass(env, "android/provider/Settings$Secure")); | |
30 jmethodID j_get_string = MethodID::Get<MethodID::TYPE_STATIC>( | |
31 env, clazz.obj(), "getString", | |
32 "(Landroid/content/ContentResolver;Ljava/lang/String;)" | |
33 "Ljava/lang/String;"); | |
34 ScopedJavaLocalRef<jstring> j_android_id = | |
35 ConvertUTF8ToJavaString(env, "android_id"); | |
36 jstring android_id = static_cast<jstring>( | |
37 env->CallStaticObjectMethod( | |
38 clazz.obj(), j_get_string, content_resolver.obj(), | |
39 j_android_id.obj())); | |
40 CheckException(env); | |
41 return ScopedJavaLocalRef<jstring>(env, android_id); | |
42 } | |
43 | |
44 ScopedJavaLocalRef<jobject> GetContentResolver(JNIEnv* env) { | |
45 ScopedJavaLocalRef<jclass> clazz(GetClass(env, "android/content/Context")); | |
46 jmethodID j_get_content_resolver_method = MethodID::Get< | |
47 MethodID::TYPE_INSTANCE>( | |
48 env, clazz.obj(), "getContentResolver", | |
49 "()Landroid/content/ContentResolver;"); | |
50 jobject content_resolver = env->CallObjectMethod( | |
51 GetApplicationContext(), j_get_content_resolver_method); | |
52 CheckException(env); | |
53 return ScopedJavaLocalRef<jobject>(env, content_resolver); | |
54 } | |
55 | |
56 } | |
57 | |
58 namespace syncer { | |
59 namespace internal { | |
60 | |
61 std::string GetAndroidId() { | |
62 JNIEnv* env = AttachCurrentThread(); | |
63 ScopedJavaLocalRef<jstring> android_id = | |
64 GetAndroidIdJNI(env, GetContentResolver(env)); | |
65 return ConvertJavaStringToUTF8(android_id); | |
66 } | |
67 | |
68 std::string GetModel() { | |
69 char model[PROP_VALUE_MAX]; | |
70 __system_property_get("ro.product.model", model); | |
71 return model; | |
72 } | |
73 | |
74 } // namespace internal | |
75 } // namespace syncer | |
OLD | NEW |