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