Chromium Code Reviews| 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 a8d487dad2392cbd060eb53be311862bbc2ae1d4..b0fe1da0cd5404b1a7b837cc40f30b879ac3f2f7 100644 |
| --- a/chrome/browser/android/ntp/ntp_snippets_bridge.cc |
| +++ b/chrome/browser/android/ntp/ntp_snippets_bridge.cc |
| @@ -30,9 +30,12 @@ using base::android::ConvertUTF16ToJavaString; |
| using base::android::JavaParamRef; |
| using base::android::ScopedJavaGlobalRef; |
| using base::android::ScopedJavaLocalRef; |
| +using base::android::ToJavaIntArray; |
| using ntp_snippets::Category; |
| +using ntp_snippets::CategoryInfo; |
| using ntp_snippets::CategoryStatus; |
| using ntp_snippets::KnownCategories; |
| +using ntp_snippets::ContentSuggestion; |
| namespace { |
| @@ -93,31 +96,87 @@ void NTPSnippetsBridge::SetObserver(JNIEnv* env, |
| const JavaParamRef<jobject>& obj, |
| const JavaParamRef<jobject>& j_observer) { |
| observer_.Reset(env, j_observer); |
| - OnNewSuggestions(); |
|
Marc Treib
2016/08/09 13:38:16
Why this change? Does the UI now explicitly query
Philipp Keck
2016/08/09 14:02:54
Correct:
https://codereview.chromium.org/223047300
|
| } |
| -void NTPSnippetsBridge::FetchImage(JNIEnv* env, |
| - const JavaParamRef<jobject>& obj, |
| - const JavaParamRef<jstring>& snippet_id, |
| - const JavaParamRef<jobject>& j_callback) { |
| +ScopedJavaLocalRef<jintArray> NTPSnippetsBridge::GetCategories( |
| + JNIEnv* env, |
| + const base::android::JavaParamRef<jobject>& obj) { |
| + std::vector<Category> categories = |
| + content_suggestions_service_->GetCategories(); |
| + return ToJavaIntArray(env, reinterpret_cast<int*>(categories.data()), |
|
Marc Treib
2016/08/09 13:38:16
Ooh, I'm not sure this is safe. Rule of thumb, rei
Philipp Keck
2016/08/09 14:02:54
Done.
|
| + categories.size()); |
| +} |
| + |
| +int NTPSnippetsBridge::GetCategoryStatus(JNIEnv* env, |
| + const JavaParamRef<jobject>& obj, |
| + jint category) { |
| + return static_cast<int>(content_suggestions_service_->GetCategoryStatus( |
| + content_suggestions_service_->category_factory()->FromIDValue(category))); |
| +} |
| + |
| +base::android::ScopedJavaLocalRef<jobject> NTPSnippetsBridge::GetCategoryInfo( |
| + JNIEnv* env, |
| + const base::android::JavaParamRef<jobject>& obj, |
| + jint category) { |
| + base::Optional<CategoryInfo> info = |
| + content_suggestions_service_->GetCategoryInfo( |
| + content_suggestions_service_->category_factory()->FromIDValue( |
| + category)); |
| + if (!info) |
| + return base::android::ScopedJavaLocalRef<jobject>(env, nullptr); |
| + return Java_SnippetsBridge_createSuggestionsCategoryInfo( |
| + env, ConvertUTF16ToJavaString(env, info->title()).obj(), |
| + static_cast<int>(info->card_layout())); |
| +} |
| + |
| +ScopedJavaLocalRef<jobject> NTPSnippetsBridge::GetSuggestionsForCategory( |
| + JNIEnv* env, |
| + const base::android::JavaParamRef<jobject>& obj, |
| + jint category) { |
| + const std::vector<ContentSuggestion>& suggestions = |
| + content_suggestions_service_->GetSuggestionsForCategory( |
| + content_suggestions_service_->category_factory()->FromIDValue( |
| + category)); |
| + ScopedJavaLocalRef<jobject> result = |
| + Java_SnippetsBridge_createSuggestionList(env); |
| + for (const ContentSuggestion& suggestion : suggestions) { |
| + Java_SnippetsBridge_addSuggestion( |
| + env, result.obj(), ConvertUTF8ToJavaString(env, suggestion.id()).obj(), |
| + ConvertUTF16ToJavaString(env, suggestion.title()).obj(), |
| + ConvertUTF16ToJavaString(env, suggestion.publisher_name()).obj(), |
| + ConvertUTF16ToJavaString(env, suggestion.snippet_text()).obj(), |
| + ConvertUTF8ToJavaString(env, suggestion.url().spec()).obj(), |
| + ConvertUTF8ToJavaString(env, suggestion.amp_url().spec()).obj(), |
| + suggestion.publish_date().ToJavaTime(), suggestion.score()); |
| + } |
| + return result; |
| +} |
| + |
| +void NTPSnippetsBridge::FetchSuggestionImage( |
| + JNIEnv* env, |
| + const JavaParamRef<jobject>& obj, |
| + const JavaParamRef<jstring>& suggestion_id, |
| + const JavaParamRef<jobject>& j_callback) { |
| base::android::ScopedJavaGlobalRef<jobject> callback(j_callback); |
| content_suggestions_service_->FetchSuggestionImage( |
| - ConvertJavaStringToUTF8(env, snippet_id), |
| + ConvertJavaStringToUTF8(env, suggestion_id), |
| base::Bind(&NTPSnippetsBridge::OnImageFetched, |
| weak_ptr_factory_.GetWeakPtr(), callback)); |
| } |
| -void NTPSnippetsBridge::DiscardSnippet(JNIEnv* env, |
| - const JavaParamRef<jobject>& obj, |
| - const JavaParamRef<jstring>& id) { |
| +void NTPSnippetsBridge::DismissSuggestion( |
| + JNIEnv* env, |
| + const JavaParamRef<jobject>& obj, |
| + const JavaParamRef<jstring>& suggestion_id) { |
| content_suggestions_service_->DismissSuggestion( |
| - ConvertJavaStringToUTF8(env, id)); |
| + ConvertJavaStringToUTF8(env, suggestion_id)); |
| } |
| -void NTPSnippetsBridge::SnippetVisited(JNIEnv* env, |
| - const JavaParamRef<jobject>& obj, |
| - const JavaParamRef<jobject>& jcallback, |
| - const JavaParamRef<jstring>& jurl) { |
| +void NTPSnippetsBridge::GetSuggestionVisited( |
| + JNIEnv* env, |
| + const JavaParamRef<jobject>& obj, |
| + const JavaParamRef<jobject>& jcallback, |
| + const JavaParamRef<jstring>& jurl) { |
| base::android::ScopedJavaGlobalRef<jobject> callback(jcallback); |
| history_service_->QueryURL( |
| @@ -127,60 +186,20 @@ void NTPSnippetsBridge::SnippetVisited(JNIEnv* env, |
| &tracker_); |
| } |
| -int NTPSnippetsBridge::GetCategoryStatus(JNIEnv* env, |
| - const JavaParamRef<jobject>& obj, |
| - jint category) { |
| - return static_cast<int>(content_suggestions_service_->GetCategoryStatus( |
| - content_suggestions_service_->category_factory()->FromKnownCategory( |
| - KnownCategories::ARTICLES))); |
| -} |
| - |
| NTPSnippetsBridge::~NTPSnippetsBridge() {} |
| -void NTPSnippetsBridge::OnNewSuggestions() { |
| +void NTPSnippetsBridge::OnNewSuggestions(Category category) { |
| if (observer_.is_null()) |
| return; |
| - // Show all suggestions from all categories, even though we currently display |
| - // them in a single section on the UI. |
| - // TODO(pke): This is only for debugging new sections and will be replaced |
| - // with proper multi-section UI support. |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| - ScopedJavaLocalRef<jobject> suggestions = |
| - Java_SnippetsBridge_createSuggestionList(env); |
| - for (Category category : |
| - content_suggestions_service_->GetCategories()) { |
| - if (content_suggestions_service_->GetCategoryStatus(category) != |
| - CategoryStatus::AVAILABLE) { |
| - continue; |
| - } |
| - for (const ntp_snippets::ContentSuggestion& suggestion : |
| - content_suggestions_service_->GetSuggestionsForCategory(category)) { |
| - Java_SnippetsBridge_addSuggestion( |
| - env, suggestions.obj(), |
| - ConvertUTF8ToJavaString(env, suggestion.id()).obj(), |
| - ConvertUTF16ToJavaString(env, suggestion.title()).obj(), |
| - ConvertUTF16ToJavaString(env, suggestion.publisher_name()).obj(), |
| - ConvertUTF16ToJavaString(env, suggestion.snippet_text()).obj(), |
| - ConvertUTF8ToJavaString(env, suggestion.url().spec()).obj(), |
| - ConvertUTF8ToJavaString(env, suggestion.amp_url().spec()).obj(), |
| - suggestion.publish_date().ToJavaTime(), suggestion.score()); |
| - } |
| - } |
| - |
| - // TODO(mvanouwerkerk): Do not hard code ARTICLES. |
| - Java_SnippetsBridge_onSuggestionsAvailable( |
| - env, observer_.obj(), |
| - static_cast<int>( |
| - content_suggestions_service_->category_factory()->FromKnownCategory( |
| - KnownCategories::ARTICLES).id()), |
| - suggestions.obj()); |
| + Java_SnippetsBridge_onNewSuggestions(env, observer_.obj(), |
| + static_cast<int>(category.id())); |
| } |
| void NTPSnippetsBridge::OnCategoryStatusChanged(Category category, |
| CategoryStatus new_status) { |
| - // TODO(mvanouwerkerk): Do not hard code ARTICLES. |
| - if (!category.IsKnownCategory(KnownCategories::ARTICLES)) |
| + if (observer_.is_null()) |
| return; |
| JNIEnv* env = base::android::AttachCurrentThread(); |