• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2020 The Chromium Authors
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 "components/prefs/android/pref_service_android.h"
6 
7 #include <string>
8 
9 #include "components/prefs/android/jni_headers/PrefService_jni.h"
10 #include "components/prefs/pref_service.h"
11 
12 using base::android::AttachCurrentThread;
13 using base::android::JavaParamRef;
14 using base::android::ScopedJavaLocalRef;
15 
PrefServiceAndroid(PrefService * pref_service)16 PrefServiceAndroid::PrefServiceAndroid(PrefService* pref_service)
17     : pref_service_(pref_service) {}
18 
~PrefServiceAndroid()19 PrefServiceAndroid::~PrefServiceAndroid() {
20   if (java_ref_) {
21     Java_PrefService_clearNativePtr(AttachCurrentThread(), java_ref_);
22     java_ref_.Reset();
23   }
24 }
25 
26 // static
FromPrefServiceAndroid(const JavaParamRef<jobject> & obj)27 PrefService* PrefServiceAndroid::FromPrefServiceAndroid(
28     const JavaParamRef<jobject>& obj) {
29   if (obj.is_null()) {
30     return nullptr;
31   }
32 
33   PrefServiceAndroid* pref_service_android =
34       reinterpret_cast<PrefServiceAndroid*>(
35           Java_PrefService_getNativePointer(AttachCurrentThread(), obj));
36   if (!pref_service_android) {
37     return nullptr;
38   }
39   return pref_service_android->pref_service_;
40 }
41 
GetJavaObject()42 ScopedJavaLocalRef<jobject> PrefServiceAndroid::GetJavaObject() {
43   JNIEnv* env = AttachCurrentThread();
44   if (!java_ref_) {
45     java_ref_.Reset(
46         Java_PrefService_create(env, reinterpret_cast<intptr_t>(this)));
47   }
48   return ScopedJavaLocalRef<jobject>(java_ref_);
49 }
50 
ClearPref(JNIEnv * env,const JavaParamRef<jstring> & j_preference)51 void PrefServiceAndroid::ClearPref(JNIEnv* env,
52                                    const JavaParamRef<jstring>& j_preference) {
53   pref_service_->ClearPref(
54       base::android::ConvertJavaStringToUTF8(env, j_preference));
55 }
56 
HasPrefPath(JNIEnv * env,const base::android::JavaParamRef<jstring> & j_preference)57 jboolean PrefServiceAndroid::HasPrefPath(
58     JNIEnv* env,
59     const base::android::JavaParamRef<jstring>& j_preference) {
60   return pref_service_->HasPrefPath(
61       base::android::ConvertJavaStringToUTF8(env, j_preference));
62 }
63 
GetBoolean(JNIEnv * env,const JavaParamRef<jstring> & j_preference)64 jboolean PrefServiceAndroid::GetBoolean(
65     JNIEnv* env,
66     const JavaParamRef<jstring>& j_preference) {
67   return pref_service_->GetBoolean(
68       base::android::ConvertJavaStringToUTF8(env, j_preference));
69 }
70 
SetBoolean(JNIEnv * env,const JavaParamRef<jstring> & j_preference,const jboolean j_value)71 void PrefServiceAndroid::SetBoolean(JNIEnv* env,
72                                     const JavaParamRef<jstring>& j_preference,
73                                     const jboolean j_value) {
74   pref_service_->SetBoolean(
75       base::android::ConvertJavaStringToUTF8(env, j_preference), j_value);
76 }
77 
GetInteger(JNIEnv * env,const JavaParamRef<jstring> & j_preference)78 jint PrefServiceAndroid::GetInteger(JNIEnv* env,
79                                     const JavaParamRef<jstring>& j_preference) {
80   return pref_service_->GetInteger(
81       base::android::ConvertJavaStringToUTF8(env, j_preference));
82 }
83 
SetInteger(JNIEnv * env,const JavaParamRef<jstring> & j_preference,const jint j_value)84 void PrefServiceAndroid::SetInteger(JNIEnv* env,
85                                     const JavaParamRef<jstring>& j_preference,
86                                     const jint j_value) {
87   pref_service_->SetInteger(
88       base::android::ConvertJavaStringToUTF8(env, j_preference), j_value);
89 }
90 
GetDouble(JNIEnv * env,const JavaParamRef<jstring> & j_preference)91 jdouble PrefServiceAndroid::GetDouble(
92     JNIEnv* env,
93     const JavaParamRef<jstring>& j_preference) {
94   return pref_service_->GetDouble(
95       base::android::ConvertJavaStringToUTF8(env, j_preference));
96 }
97 
SetDouble(JNIEnv * env,const JavaParamRef<jstring> & j_preference,const jdouble j_value)98 void PrefServiceAndroid::SetDouble(JNIEnv* env,
99                                    const JavaParamRef<jstring>& j_preference,
100                                    const jdouble j_value) {
101   pref_service_->SetDouble(
102       base::android::ConvertJavaStringToUTF8(env, j_preference), j_value);
103 }
104 
GetString(JNIEnv * env,const JavaParamRef<jstring> & j_preference)105 ScopedJavaLocalRef<jstring> PrefServiceAndroid::GetString(
106     JNIEnv* env,
107     const JavaParamRef<jstring>& j_preference) {
108   return base::android::ConvertUTF8ToJavaString(
109       env, pref_service_->GetString(
110                base::android::ConvertJavaStringToUTF8(env, j_preference)));
111 }
112 
SetString(JNIEnv * env,const JavaParamRef<jstring> & j_preference,const base::android::JavaParamRef<jstring> & j_value)113 void PrefServiceAndroid::SetString(
114     JNIEnv* env,
115     const JavaParamRef<jstring>& j_preference,
116     const base::android::JavaParamRef<jstring>& j_value) {
117   pref_service_->SetString(
118       base::android::ConvertJavaStringToUTF8(env, j_preference),
119       base::android::ConvertJavaStringToUTF8(env, j_value));
120 }
121 
IsManagedPreference(JNIEnv * env,const JavaParamRef<jstring> & j_preference)122 jboolean PrefServiceAndroid::IsManagedPreference(
123     JNIEnv* env,
124     const JavaParamRef<jstring>& j_preference) {
125   return pref_service_->IsManagedPreference(
126       base::android::ConvertJavaStringToUTF8(env, j_preference));
127 }
128 
IsDefaultValuePreference(JNIEnv * env,const base::android::JavaParamRef<jstring> & j_preference)129 jboolean PrefServiceAndroid::IsDefaultValuePreference(
130     JNIEnv* env,
131     const base::android::JavaParamRef<jstring>& j_preference) {
132   const PrefService::Preference* pref = pref_service_->FindPreference(
133       base::android::ConvertJavaStringToUTF8(env, j_preference));
134   return pref && pref->IsDefaultValue();
135 }
136