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