diff options
Diffstat (limited to 'chromium/components/prefs/android')
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_ |