• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 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_change_registrar_android.h"
6 
7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h"
9 #include "base/functional/bind.h"
10 #include "components/prefs/android/pref_service_android.h"
11 
12 // Must come after all headers that specialize FromJniType() / ToJniType().
13 #include "components/prefs/android/jni_headers/PrefChangeRegistrar_jni.h"
14 
15 using base::android::AttachCurrentThread;
16 using base::android::ConvertJavaStringToUTF8;
17 using base::android::ConvertUTF8ToJavaString;
18 
PrefChangeRegistrarAndroid(JNIEnv * env,const JavaParamRef<jobject> & obj,PrefService * prefs)19 PrefChangeRegistrarAndroid::PrefChangeRegistrarAndroid(
20     JNIEnv* env,
21     const JavaParamRef<jobject>& obj,
22     PrefService* prefs) {
23   pref_change_registrar_.Init(prefs);
24   pref_change_registrar_jobject_.Reset(env, obj);
25 }
26 
27 PrefChangeRegistrarAndroid::~PrefChangeRegistrarAndroid() = default;
28 
Destroy(JNIEnv *,const JavaParamRef<jobject> &)29 void PrefChangeRegistrarAndroid::Destroy(JNIEnv*,
30                                          const JavaParamRef<jobject>&) {
31   delete this;
32 }
33 
Add(JNIEnv * env,const JavaParamRef<jobject> & obj,const JavaParamRef<jstring> & j_preference)34 void PrefChangeRegistrarAndroid::Add(
35     JNIEnv* env,
36     const JavaParamRef<jobject>& obj,
37     const JavaParamRef<jstring>& j_preference) {
38   std::string preference =
39       base::android::ConvertJavaStringToUTF8(env, j_preference);
40   pref_change_registrar_.Add(
41       preference,
42       base::BindRepeating(&PrefChangeRegistrarAndroid::OnPreferenceChange,
43                           base::Unretained(this), preference));
44 }
45 
Remove(JNIEnv * env,const JavaParamRef<jobject> & obj,const JavaParamRef<jstring> & j_preference)46 void PrefChangeRegistrarAndroid::Remove(
47     JNIEnv* env,
48     const JavaParamRef<jobject>& obj,
49     const JavaParamRef<jstring>& j_preference) {
50   pref_change_registrar_.Remove(
51       base::android::ConvertJavaStringToUTF8(env, j_preference));
52 }
53 
OnPreferenceChange(std::string preference)54 void PrefChangeRegistrarAndroid::OnPreferenceChange(std::string preference) {
55   JNIEnv* env = AttachCurrentThread();
56   Java_PrefChangeRegistrar_onPreferenceChange(
57       env, pref_change_registrar_jobject_,
58       base::android::ConvertUTF8ToJavaString(env, preference));
59 }
60 
JNI_PrefChangeRegistrar_Init(JNIEnv * env,const JavaParamRef<jobject> & obj,PrefService * prefs)61 jlong JNI_PrefChangeRegistrar_Init(JNIEnv* env,
62                                    const JavaParamRef<jobject>& obj,
63                                    PrefService* prefs) {
64   return reinterpret_cast<intptr_t>(
65       new PrefChangeRegistrarAndroid(env, obj, prefs));
66 }
67