summaryrefslogtreecommitdiff
path: root/chromium/components/prefs/android
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/prefs/android')
-rw-r--r--chromium/components/prefs/android/BUILD.gn19
-rw-r--r--chromium/components/prefs/android/java/src/org/chromium/components/prefs/PrefService.java105
-rw-r--r--chromium/components/prefs/android/pref_service_android.cc90
-rw-r--r--chromium/components/prefs/android/pref_service_android.h53
4 files changed, 267 insertions, 0 deletions
diff --git a/chromium/components/prefs/android/BUILD.gn b/chromium/components/prefs/android/BUILD.gn
new file mode 100644
index 00000000000..2aa2728dc22
--- /dev/null
+++ b/chromium/components/prefs/android/BUILD.gn
@@ -0,0 +1,19 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/android/rules.gni")
+
+generate_jni("jni_headers") {
+ sources = [ "java/src/org/chromium/components/prefs/PrefService.java" ]
+}
+
+android_library("java") {
+ sources = [ "java/src/org/chromium/components/prefs/PrefService.java" ]
+ deps = [
+ "//base:base_java",
+ "//base:jni_java",
+ "//third_party/android_deps:androidx_annotation_annotation_java",
+ ]
+ annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
+}
diff --git a/chromium/components/prefs/android/java/src/org/chromium/components/prefs/PrefService.java b/chromium/components/prefs/android/java/src/org/chromium/components/prefs/PrefService.java
new file mode 100644
index 00000000000..64f1d05b393
--- /dev/null
+++ b/chromium/components/prefs/android/java/src/org/chromium/components/prefs/PrefService.java
@@ -0,0 +1,105 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.prefs;
+
+import androidx.annotation.NonNull;
+
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.NativeMethods;
+
+/** PrefService provides read and write access to native PrefService. */
+public class PrefService {
+ private long mNativePrefServiceAndroid;
+
+ @CalledByNative
+ private static PrefService create(long nativePrefServiceAndroid) {
+ return new PrefService(nativePrefServiceAndroid);
+ }
+
+ @CalledByNative
+ private void clearNativePtr() {
+ mNativePrefServiceAndroid = 0;
+ }
+
+ private PrefService(long nativePrefServiceAndroid) {
+ mNativePrefServiceAndroid = nativePrefServiceAndroid;
+ }
+
+ /**
+ * @param preference The name of the preference.
+ */
+ public void clearPref(@NonNull String preference) {
+ PrefServiceJni.get().clearPref(mNativePrefServiceAndroid, preference);
+ }
+
+ /**
+ * @param preference The name of the preference.
+ * @return Whether the specified preference is enabled.
+ */
+ public boolean getBoolean(@NonNull String preference) {
+ return PrefServiceJni.get().getBoolean(mNativePrefServiceAndroid, preference);
+ }
+
+ /**
+ * @param preference The name of the preference.
+ * @param value The value the specified preference will be set to.
+ */
+ public void setBoolean(@NonNull String preference, boolean value) {
+ PrefServiceJni.get().setBoolean(mNativePrefServiceAndroid, preference, value);
+ }
+
+ /**
+ * @param preference The name of the preference.
+ * @return value The value of the specified preference.
+ */
+ public int getInteger(@NonNull String preference) {
+ return PrefServiceJni.get().getInteger(mNativePrefServiceAndroid, preference);
+ }
+
+ /**
+ * @param preference The name of the preference.
+ * @param value The value the specified preference will be set to.
+ */
+ public void setInteger(@NonNull String preference, int value) {
+ PrefServiceJni.get().setInteger(mNativePrefServiceAndroid, preference, value);
+ }
+
+ /**
+ * @param preference The name of the preference.
+ * @return value The value of the specified preference.
+ */
+ @NonNull
+ public String getString(@NonNull String preference) {
+ return PrefServiceJni.get().getString(mNativePrefServiceAndroid, preference);
+ }
+
+ /**
+ * @param preference The name of the preference.
+ * @param value The value the specified preference will be set to.
+ */
+ public void setString(@NonNull String preference, @NonNull String value) {
+ PrefServiceJni.get().setString(mNativePrefServiceAndroid, preference, value);
+ }
+
+ /**
+ * @param preference The name of the preference.
+ * @return Whether the specified preference is managed.
+ */
+ public boolean isManagedPreference(@NonNull String preference) {
+ return PrefServiceJni.get().isManagedPreference(mNativePrefServiceAndroid, preference);
+ }
+
+ @NativeMethods
+ interface Natives {
+ void clearPref(long nativePrefServiceAndroid, String preference);
+ boolean getBoolean(long nativePrefServiceAndroid, String preference);
+ void setBoolean(long nativePrefServiceAndroid, String preference, boolean value);
+ int getInteger(long nativePrefServiceAndroid, String preference);
+ void setInteger(long nativePrefServiceAndroid, String preference, int value);
+ String getString(long nativePrefServiceAndroid, String preference);
+ void setString(long nativePrefServiceAndroid, String preference, String value);
+ boolean isManagedPreference(long nativePrefServiceAndroid, String preference);
+ }
+}
diff --git a/chromium/components/prefs/android/pref_service_android.cc b/chromium/components/prefs/android/pref_service_android.cc
new file mode 100644
index 00000000000..93758b62ecf
--- /dev/null
+++ b/chromium/components/prefs/android/pref_service_android.cc
@@ -0,0 +1,90 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/prefs/android/pref_service_android.h"
+
+#include <string>
+
+#include "components/prefs/android/jni_headers/PrefService_jni.h"
+#include "components/prefs/pref_service.h"
+
+using base::android::JavaParamRef;
+using base::android::ScopedJavaLocalRef;
+
+PrefServiceAndroid::PrefServiceAndroid(PrefService* pref_service)
+ : pref_service_(pref_service) {}
+
+PrefServiceAndroid::~PrefServiceAndroid() {
+ if (java_ref_) {
+ Java_PrefService_clearNativePtr(base::android::AttachCurrentThread(),
+ java_ref_);
+ java_ref_.Reset();
+ }
+}
+
+ScopedJavaLocalRef<jobject> PrefServiceAndroid::GetJavaObject() {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ if (!java_ref_) {
+ java_ref_.Reset(
+ Java_PrefService_create(env, reinterpret_cast<intptr_t>(this)));
+ }
+ return ScopedJavaLocalRef<jobject>(java_ref_);
+}
+
+void PrefServiceAndroid::ClearPref(JNIEnv* env,
+ const JavaParamRef<jstring>& j_preference) {
+ pref_service_->ClearPref(
+ base::android::ConvertJavaStringToUTF8(env, j_preference));
+}
+
+jboolean PrefServiceAndroid::GetBoolean(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& j_preference) {
+ return pref_service_->GetBoolean(
+ base::android::ConvertJavaStringToUTF8(env, j_preference));
+}
+
+void PrefServiceAndroid::SetBoolean(JNIEnv* env,
+ const JavaParamRef<jstring>& j_preference,
+ const jboolean j_value) {
+ pref_service_->SetBoolean(
+ base::android::ConvertJavaStringToUTF8(env, j_preference), j_value);
+}
+
+jint PrefServiceAndroid::GetInteger(JNIEnv* env,
+ const JavaParamRef<jstring>& j_preference) {
+ return pref_service_->GetInteger(
+ base::android::ConvertJavaStringToUTF8(env, j_preference));
+}
+
+void PrefServiceAndroid::SetInteger(JNIEnv* env,
+ const JavaParamRef<jstring>& j_preference,
+ const jint j_value) {
+ pref_service_->SetInteger(
+ base::android::ConvertJavaStringToUTF8(env, j_preference), j_value);
+}
+
+ScopedJavaLocalRef<jstring> PrefServiceAndroid::GetString(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& j_preference) {
+ return base::android::ConvertUTF8ToJavaString(
+ env, pref_service_->GetString(
+ base::android::ConvertJavaStringToUTF8(env, j_preference)));
+}
+
+void PrefServiceAndroid::SetString(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& j_preference,
+ const base::android::JavaParamRef<jstring>& j_value) {
+ pref_service_->SetString(
+ base::android::ConvertJavaStringToUTF8(env, j_preference),
+ base::android::ConvertJavaStringToUTF8(env, j_value));
+}
+
+jboolean PrefServiceAndroid::IsManagedPreference(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& j_preference) {
+ return pref_service_->IsManagedPreference(
+ base::android::ConvertJavaStringToUTF8(env, j_preference));
+}
diff --git a/chromium/components/prefs/android/pref_service_android.h b/chromium/components/prefs/android/pref_service_android.h
new file mode 100644
index 00000000000..ba2e3646aab
--- /dev/null
+++ b/chromium/components/prefs/android/pref_service_android.h
@@ -0,0 +1,53 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_PREFS_ANDROID_PREF_SERVICE_ANDROID_H_
+#define COMPONENTS_PREFS_ANDROID_PREF_SERVICE_ANDROID_H_
+
+#include <jni.h>
+
+#include "base/android/jni_string.h"
+#include "base/android/scoped_java_ref.h"
+
+class PrefService;
+
+// The native side of the PrefServiceAndroid is created and destroyed by the
+// Java.
+class PrefServiceAndroid {
+ public:
+ explicit PrefServiceAndroid(PrefService* pref_service);
+ PrefServiceAndroid(const PrefServiceAndroid& other) = delete;
+ PrefServiceAndroid& operator=(const PrefServiceAndroid& other) = delete;
+ ~PrefServiceAndroid();
+
+ base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
+
+ void ClearPref(JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& j_preference);
+ jboolean GetBoolean(JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& j_preference);
+ void SetBoolean(JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& j_preference,
+ const jboolean j_value);
+ jint GetInteger(JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& j_preference);
+ void SetInteger(JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& j_preference,
+ const jint j_value);
+ base::android::ScopedJavaLocalRef<jstring> GetString(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& j_preference);
+ void SetString(JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& j_preference,
+ const base::android::JavaParamRef<jstring>& j_value);
+ jboolean IsManagedPreference(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& j_preference);
+
+ private:
+ PrefService* pref_service_;
+ base::android::ScopedJavaGlobalRef<jobject> java_ref_;
+};
+
+#endif // COMPONENTS_PREFS_ANDROID_PREF_SERVICE_ANDROID_H_