• 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 #ifndef COMPONENTS_PREFS_ANDROID_PREF_SERVICE_ANDROID_H_
6 #define COMPONENTS_PREFS_ANDROID_PREF_SERVICE_ANDROID_H_
7 
8 #include "base/android/jni_android.h"
9 #include "base/memory/raw_ptr.h"
10 #include "components/prefs/prefs_export.h"
11 
12 class PrefService;
13 
14 // The native side of the PrefServiceAndroid is created and destroyed by the
15 // Java.
16 class COMPONENTS_PREFS_EXPORT PrefServiceAndroid {
17  public:
18   explicit PrefServiceAndroid(PrefService* pref_service);
19   PrefServiceAndroid(const PrefServiceAndroid& other) = delete;
20   PrefServiceAndroid& operator=(const PrefServiceAndroid& other) = delete;
21   ~PrefServiceAndroid();
22 
23   // Returns the native counterpart of a Java `PrefService`.
24   static PrefService* FromPrefServiceAndroid(
25       const base::android::JavaRef<jobject>& obj);
26 
27   base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
28 
29   void ClearPref(JNIEnv* env,
30                  const base::android::JavaParamRef<jstring>& j_preference);
31   jboolean HasPrefPath(
32       JNIEnv* env,
33       const base::android::JavaParamRef<jstring>& j_preference);
34   jboolean GetBoolean(JNIEnv* env,
35                       const base::android::JavaParamRef<jstring>& j_preference);
36   void SetBoolean(JNIEnv* env,
37                   const base::android::JavaParamRef<jstring>& j_preference,
38                   const jboolean j_value);
39   jint GetInteger(JNIEnv* env,
40                   const base::android::JavaParamRef<jstring>& j_preference);
41   void SetInteger(JNIEnv* env,
42                   const base::android::JavaParamRef<jstring>& j_preference,
43                   const jint j_value);
44   jdouble GetDouble(JNIEnv* env,
45                     const base::android::JavaParamRef<jstring>& j_preference);
46   void SetDouble(JNIEnv* env,
47                  const base::android::JavaParamRef<jstring>& j_preference,
48                  const jdouble j_value);
49   jlong GetLong(JNIEnv* env,
50                 const base::android::JavaParamRef<jstring>& j_preference);
51   void SetLong(JNIEnv* env,
52                const base::android::JavaParamRef<jstring>& j_preference,
53                const jlong j_value);
54   base::android::ScopedJavaLocalRef<jstring> GetString(
55       JNIEnv* env,
56       const base::android::JavaParamRef<jstring>& j_preference);
57   void SetString(JNIEnv* env,
58                  const base::android::JavaParamRef<jstring>& j_preference,
59                  const base::android::JavaParamRef<jstring>& j_value);
60   jboolean IsManagedPreference(
61       JNIEnv* env,
62       const base::android::JavaParamRef<jstring>& j_preference);
63   jboolean IsDefaultValuePreference(
64       JNIEnv* env,
65       const base::android::JavaParamRef<jstring>& j_preference);
66 
67  private:
68   raw_ptr<PrefService> pref_service_;
69   base::android::ScopedJavaGlobalRef<jobject> java_ref_;
70 };
71 
72 namespace jni_zero {
73 template <>
74 inline PrefService* FromJniType<PrefService*>(JNIEnv* env,
75                                               const JavaRef<jobject>& obj) {
76   return PrefServiceAndroid::FromPrefServiceAndroid(obj);
77 }
78 }  // namespace jni_zero
79 
80 #endif  // COMPONENTS_PREFS_ANDROID_PREF_SERVICE_ANDROID_H_
81