blob: 7840eaba9b1ba5e977be448ed7ada86d5ea7ad75 [file] [log] [blame]
// 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/omnibox/browser/autocomplete_result.h"
#include <vector>
#include "base/android/jni_android.h"
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "components/omnibox/browser/jni_headers/AutocompleteResult_jni.h"
#include "components/omnibox/browser/search_suggestion_parser.h"
#include "components/query_tiles/android/tile_conversion_bridge.h"
#include "url/android/gurl_android.h"
using base::android::ScopedJavaLocalRef;
using base::android::ToJavaArrayOfStrings;
using base::android::ToJavaBooleanArray;
using base::android::ToJavaIntArray;
ScopedJavaLocalRef<jobject> AutocompleteResult::GetOrCreateJavaObject(
JNIEnv* env) const {
// Short circuit if we already built the java object.
if (java_result_)
return ScopedJavaLocalRef<jobject>(java_result_);
const size_t groups_count = headers_map_.size();
std::vector<int> group_ids(groups_count);
std::vector<base::string16> group_names(groups_count);
bool group_collapsed_states[groups_count];
size_t index = 0;
for (const auto& group_header : headers_map_) {
group_ids[index] = group_header.first;
group_names[index] = group_header.second;
group_collapsed_states[index] =
base::Contains(hidden_group_ids_, group_header.first);
++index;
}
ScopedJavaLocalRef<jintArray> j_group_ids = ToJavaIntArray(env, group_ids);
ScopedJavaLocalRef<jbooleanArray> j_group_collapsed_states =
ToJavaBooleanArray(env, group_collapsed_states, groups_count);
ScopedJavaLocalRef<jobjectArray> j_group_names =
ToJavaArrayOfStrings(env, group_names);
jclass clazz = AutocompleteMatch::GetClazz(env);
ScopedJavaLocalRef<jobjectArray> j_matches(
env, env->NewObjectArray(matches_.size(), clazz, nullptr));
base::android::CheckException(env);
for (index = 0; index < matches_.size(); ++index) {
env->SetObjectArrayElement(
j_matches.obj(), index,
matches_[index].GetOrCreateJavaObject(env).obj());
}
java_result_ = Java_AutocompleteResult_build(
env, j_matches, j_group_ids, j_group_names, j_group_collapsed_states);
return ScopedJavaLocalRef<jobject>(java_result_);
}