Index: chrome/browser/android/ntp/ntp_snippets_bridge.cc |
diff --git a/chrome/browser/android/ntp/ntp_snippets_bridge.cc b/chrome/browser/android/ntp/ntp_snippets_bridge.cc |
index 49ef541d84e94329742a05da8c3ed716ffec5c6f..605ce563031a07b18f52f54e0c17ed93223e869e 100644 |
--- a/chrome/browser/android/ntp/ntp_snippets_bridge.cc |
+++ b/chrome/browser/android/ntp/ntp_snippets_bridge.cc |
@@ -25,12 +25,15 @@ |
using base::android::AttachCurrentThread; |
using base::android::ConvertJavaStringToUTF8; |
+using base::android::ConvertUTF8ToJavaString; |
using base::android::JavaParamRef; |
using base::android::ToJavaArrayOfStrings; |
+using base::android::ToJavaIntArray; |
using base::android::ToJavaLongArray; |
using base::android::ToJavaFloatArray; |
using base::android::ScopedJavaGlobalRef; |
using base::android::ScopedJavaLocalRef; |
+using ntp_snippets::ContentSuggestion; |
using ntp_snippets::ContentSuggestionsCategory; |
using ntp_snippets::ContentSuggestionsCategoryStatus; |
@@ -122,18 +125,70 @@ void NTPSnippetsBridge::SnippetVisited(JNIEnv* env, |
&tracker_); |
} |
-int NTPSnippetsBridge::GetCategoryStatus(JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
+ScopedJavaLocalRef<jintArray> NTPSnippetsBridge::GetCategories( |
+ JNIEnv* env, |
+ const base::android::JavaParamRef<jobject>& obj) { |
+ std::vector<ContentSuggestionsCategory> categories = |
+ content_suggestions_service_->GetCategories(); |
+ return ToJavaIntArray(env, reinterpret_cast<int*>(categories.data()), |
+ categories.size()); |
+} |
+ |
+ScopedJavaLocalRef<jobjectArray> NTPSnippetsBridge::GetSuggestionsForCategory( |
+ JNIEnv* env, |
+ const base::android::JavaParamRef<jobject>& obj, |
+ jint category) { |
+ // Could potentially cache these? |
+ ScopedJavaLocalRef<jclass> content_suggestion_clazz( |
+ env, env->FindClass( |
+ "org/chromium/chrome/browser/ntp/snippets/SnippetArticle")); |
+ const std::vector<ContentSuggestion>& suggestions = |
+ content_suggestions_service_->GetSuggestionsForCategory( |
+ static_cast<ContentSuggestionsCategory>(category)); |
+ ScopedJavaLocalRef<jobjectArray> result( |
+ env, env->NewObjectArray(suggestions.size(), |
+ content_suggestion_clazz.obj(), nullptr)); |
+ for (size_t index = 0; index < suggestions.size(); index++) { |
+ const ContentSuggestion& suggestion = suggestions[index]; |
+ ScopedJavaLocalRef<jobject> javaSuggestion = |
+ Java_SnippetsBridge_createContentSuggestion( |
+ env, obj.obj(), ConvertUTF8ToJavaString(env, suggestion.id()).obj(), |
+ ConvertUTF8ToJavaString(env, suggestion.title()).obj(), |
+ ConvertUTF8ToJavaString(env, suggestion.url().spec()).obj(), |
+ ConvertUTF8ToJavaString(env, suggestion.amp_url().spec()).obj(), |
+ ConvertUTF8ToJavaString(env, suggestion.snippet_text()).obj(), |
+ static_cast<jlong>(suggestion.publish_date().ToJavaTime()), |
+ ConvertUTF8ToJavaString(env, suggestion.publisher_name()).obj(), |
+ static_cast<jfloat>(suggestion.score()), JniIntWrapper(index)); |
+ env->SetObjectArrayElement(result.obj(), index, javaSuggestion.obj()); |
+ } |
+ return result; |
+} |
+ |
+int NTPSnippetsBridge::GetArticlesCategoryStatus( |
+ JNIEnv* env, |
+ const JavaParamRef<jobject>& obj) { |
return static_cast<int>(content_suggestions_service_->GetCategoryStatus( |
ContentSuggestionsCategory::ARTICLES)); |
} |
+int NTPSnippetsBridge::GetCategoryStatus( |
+ JNIEnv* env, |
+ const base::android::JavaParamRef<jobject>& obj, |
+ jint category) { |
+ return static_cast<int>(content_suggestions_service_->GetCategoryStatus( |
+ static_cast<ContentSuggestionsCategory>(category))); |
+} |
+ |
NTPSnippetsBridge::~NTPSnippetsBridge() {} |
void NTPSnippetsBridge::OnNewSuggestions() { |
if (observer_.is_null()) |
return; |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_SnippetsBridge_onNewSuggestions(env, observer_.obj()); |
+ |
std::vector<std::string> ids; |
std::vector<std::string> titles; |
// URL for the article. This will also be used to find the favicon for the |
@@ -161,7 +216,6 @@ void NTPSnippetsBridge::OnNewSuggestions() { |
scores.push_back(suggestion.score()); |
} |
- JNIEnv* env = base::android::AttachCurrentThread(); |
Java_SnippetsBridge_onSnippetsAvailable( |
env, observer_.obj(), ToJavaArrayOfStrings(env, ids).obj(), |
ToJavaArrayOfStrings(env, titles).obj(), |