// Copyright 2020 The Chromium Authors // 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 #include "components/prefs/android/jni_headers/PrefService_jni.h" #include "components/prefs/pref_service.h" #include "components/prefs/prefs_export.h" using base::android::JavaParamRef; using base::android::JavaRef; using base::android::ScopedJavaLocalRef; using jni_zero::AttachCurrentThread; namespace jni_zero { template <> COMPONENTS_PREFS_EXPORT PrefService* FromJniType( JNIEnv* env, const JavaRef& obj) { return PrefServiceAndroid::FromPrefServiceAndroid(obj); } } // namespace jni_zero PrefServiceAndroid::PrefServiceAndroid(PrefService* pref_service) : pref_service_(pref_service) {} PrefServiceAndroid::~PrefServiceAndroid() { if (java_ref_) { Java_PrefService_clearNativePtr(AttachCurrentThread(), java_ref_); java_ref_.Reset(); } } // static PrefService* PrefServiceAndroid::FromPrefServiceAndroid( const JavaRef& obj) { if (obj.is_null()) { return nullptr; } PrefServiceAndroid* pref_service_android = reinterpret_cast( Java_PrefService_getNativePointer(AttachCurrentThread(), obj)); if (!pref_service_android) { return nullptr; } return pref_service_android->pref_service_; } ScopedJavaLocalRef PrefServiceAndroid::GetJavaObject() { JNIEnv* env = AttachCurrentThread(); if (!java_ref_) { java_ref_.Reset( Java_PrefService_create(env, reinterpret_cast(this))); } return ScopedJavaLocalRef(java_ref_); } void PrefServiceAndroid::ClearPref(JNIEnv* env, const JavaParamRef& j_preference) { pref_service_->ClearPref( base::android::ConvertJavaStringToUTF8(env, j_preference)); } jboolean PrefServiceAndroid::HasPrefPath( JNIEnv* env, const base::android::JavaParamRef& j_preference) { return pref_service_->HasPrefPath( base::android::ConvertJavaStringToUTF8(env, j_preference)); } jboolean PrefServiceAndroid::GetBoolean( JNIEnv* env, const JavaParamRef& j_preference) { return pref_service_->GetBoolean( base::android::ConvertJavaStringToUTF8(env, j_preference)); } void PrefServiceAndroid::SetBoolean(JNIEnv* env, const JavaParamRef& j_preference, const jboolean j_value) { pref_service_->SetBoolean( base::android::ConvertJavaStringToUTF8(env, j_preference), j_value); } jint PrefServiceAndroid::GetInteger(JNIEnv* env, const JavaParamRef& j_preference) { return pref_service_->GetInteger( base::android::ConvertJavaStringToUTF8(env, j_preference)); } void PrefServiceAndroid::SetInteger(JNIEnv* env, const JavaParamRef& j_preference, const jint j_value) { pref_service_->SetInteger( base::android::ConvertJavaStringToUTF8(env, j_preference), j_value); } jdouble PrefServiceAndroid::GetDouble( JNIEnv* env, const JavaParamRef& j_preference) { return pref_service_->GetDouble( base::android::ConvertJavaStringToUTF8(env, j_preference)); } void PrefServiceAndroid::SetDouble(JNIEnv* env, const JavaParamRef& j_preference, const jdouble j_value) { pref_service_->SetDouble( base::android::ConvertJavaStringToUTF8(env, j_preference), j_value); } ScopedJavaLocalRef PrefServiceAndroid::GetString( JNIEnv* env, const JavaParamRef& j_preference) { return base::android::ConvertUTF8ToJavaString( env, pref_service_->GetString( base::android::ConvertJavaStringToUTF8(env, j_preference))); } void PrefServiceAndroid::SetString( JNIEnv* env, const JavaParamRef& j_preference, const base::android::JavaParamRef& j_value) { pref_service_->SetString( base::android::ConvertJavaStringToUTF8(env, j_preference), base::android::ConvertJavaStringToUTF8(env, j_value)); } jboolean PrefServiceAndroid::IsManagedPreference( JNIEnv* env, const JavaParamRef& j_preference) { return pref_service_->IsManagedPreference( base::android::ConvertJavaStringToUTF8(env, j_preference)); } jboolean PrefServiceAndroid::IsDefaultValuePreference( JNIEnv* env, const base::android::JavaParamRef& j_preference) { const PrefService::Preference* pref = pref_service_->FindPreference( base::android::ConvertJavaStringToUTF8(env, j_preference)); return pref && pref->IsDefaultValue(); }