| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ui/android/hats/survey_config_android.h" |
| |
| #include "base/android/jni_android.h" |
| #include "base/android/jni_array.h" |
| #include "base/android/jni_string.h" |
| #include "chrome/browser/ui/android/hats/jni_headers/SurveyConfig_jni.h" |
| |
| using base::android::AttachCurrentThread; |
| using base::android::ConvertUTF8ToJavaString; |
| using base::android::JavaParamRef; |
| using base::android::ScopedJavaLocalRef; |
| |
| namespace hats { |
| |
| SurveyConfigHolder::SurveyConfigHolder(JNIEnv* env, |
| const JavaParamRef<jobject>& obj) { |
| jobj_.Reset(env, obj); |
| GetActiveSurveyConfigs(survey_configs_by_triggers_); |
| InitJavaHolder(); |
| } |
| |
| SurveyConfigHolder::~SurveyConfigHolder() = default; |
| |
| // Initialize the holder on the java side. |
| void SurveyConfigHolder::InitJavaHolder() { |
| JNIEnv* env = AttachCurrentThread(); |
| |
| for (auto entry : survey_configs_by_triggers_) { |
| auto survey_config = entry.second; |
| |
| ScopedJavaLocalRef<jstring> jtrigger = |
| ConvertUTF8ToJavaString(env, survey_config.trigger); |
| ScopedJavaLocalRef<jstring> jtrigger_id = |
| ConvertUTF8ToJavaString(env, survey_config.trigger_id); |
| ScopedJavaLocalRef<jobjectArray> jpsd_bits_data_fields = |
| base::android::ToJavaArrayOfStrings( |
| env, survey_config.product_specific_bits_data_fields); |
| ScopedJavaLocalRef<jobjectArray> jpsd_string_data_fields = |
| base::android::ToJavaArrayOfStrings( |
| env, survey_config.product_specific_string_data_fields); |
| jboolean juser_prompted = survey_config.user_prompted; |
| jdouble jprobability = survey_config.probability; |
| Java_SurveyConfig_addActiveSurveyConfigToHolder( |
| env, jobj_, jtrigger, jtrigger_id, jprobability, juser_prompted, |
| jpsd_bits_data_fields, jpsd_string_data_fields); |
| } |
| } |
| |
| void SurveyConfigHolder::Destroy(JNIEnv* env) { |
| survey_configs_by_triggers_.clear(); |
| jobj_.Reset(); |
| } |
| |
| // static |
| jlong JNI_SurveyConfig_InitHolder( |
| JNIEnv* env, |
| const base::android::JavaParamRef<jobject>& caller) { |
| SurveyConfigHolder* holder = new SurveyConfigHolder(env, caller); |
| return reinterpret_cast<intptr_t>(holder); |
| } |
| |
| } // namespace hats |