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(); |