Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsBridge.java

Issue 2618893003: 📰 Tweak the suggestion ranks for UMA to handle fetchMore (Closed)
Patch Set: Fix action item reported position Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.ntp.snippets; 5 package org.chromium.chrome.browser.ntp.snippets;
6 6
7 import android.graphics.Bitmap; 7 import android.graphics.Bitmap;
8 8
9 import org.chromium.base.Callback; 9 import org.chromium.base.Callback;
10 import org.chromium.base.annotations.CalledByNative; 10 import org.chromium.base.annotations.CalledByNative;
11 import org.chromium.chrome.browser.ntp.NewTabPageUma;
12 import org.chromium.chrome.browser.ntp.cards.ActionItem;
11 import org.chromium.chrome.browser.ntp.cards.SuggestionsCategoryInfo; 13 import org.chromium.chrome.browser.ntp.cards.SuggestionsCategoryInfo;
12 import org.chromium.chrome.browser.ntp.snippets.CategoryStatus.CategoryStatusEnu m; 14 import org.chromium.chrome.browser.ntp.snippets.CategoryStatus.CategoryStatusEnu m;
13 import org.chromium.chrome.browser.profiles.Profile; 15 import org.chromium.chrome.browser.profiles.Profile;
16 import org.chromium.chrome.browser.suggestions.SuggestionsMetricsReporter;
14 17
15 import java.util.ArrayList; 18 import java.util.ArrayList;
16 import java.util.List; 19 import java.util.List;
17 20
18 /** 21 /**
19 * Provides access to the snippets to display on the NTP using the C++ ContentSu ggestionsService. 22 * Provides access to the snippets to display on the NTP using the C++ ContentSu ggestionsService.
20 */ 23 */
21 public class SnippetsBridge implements SuggestionsSource { 24 public class SnippetsBridge implements SuggestionsSource, SuggestionsMetricsRepo rter {
22 private static final String TAG = "SnippetsBridge"; 25 private static final String TAG = "SnippetsBridge";
23 26
24 private long mNativeSnippetsBridge; 27 private long mNativeSnippetsBridge;
25 private SuggestionsSource.Observer mObserver; 28 private SuggestionsSource.Observer mObserver;
26 29
27 public static boolean isCategoryStatusAvailable(@CategoryStatusEnum int stat us) { 30 public static boolean isCategoryStatusAvailable(@CategoryStatusEnum int stat us) {
28 // Note: This code is duplicated in content_suggestions_category_status. cc. 31 // Note: This code is duplicated in content_suggestions_category_status. cc.
29 return status == CategoryStatus.AVAILABLE_LOADING || status == CategoryS tatus.AVAILABLE; 32 return status == CategoryStatus.AVAILABLE_LOADING || status == CategoryS tatus.AVAILABLE;
30 } 33 }
31 34
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 @Override 115 @Override
113 public void fetchSuggestionImage(SnippetArticle suggestion, Callback<Bitmap> callback) { 116 public void fetchSuggestionImage(SnippetArticle suggestion, Callback<Bitmap> callback) {
114 assert mNativeSnippetsBridge != 0; 117 assert mNativeSnippetsBridge != 0;
115 nativeFetchSuggestionImage(mNativeSnippetsBridge, suggestion.mCategory, 118 nativeFetchSuggestionImage(mNativeSnippetsBridge, suggestion.mCategory,
116 suggestion.mIdWithinCategory, callback); 119 suggestion.mIdWithinCategory, callback);
117 } 120 }
118 121
119 @Override 122 @Override
120 public void dismissSuggestion(SnippetArticle suggestion) { 123 public void dismissSuggestion(SnippetArticle suggestion) {
121 assert mNativeSnippetsBridge != 0; 124 assert mNativeSnippetsBridge != 0;
122 nativeDismissSuggestion(mNativeSnippetsBridge, suggestion.mUrl, suggesti on.mGlobalPosition, 125 nativeDismissSuggestion(mNativeSnippetsBridge, suggestion.mUrl, suggesti on.getGlobalRank(),
123 suggestion.mCategory, suggestion.mPosition, suggestion.mIdWithin Category); 126 suggestion.mCategory, suggestion.getPerSectionRank(), suggestion .mIdWithinCategory);
124 } 127 }
125 128
126 @Override 129 @Override
127 public void dismissCategory(@CategoryInt int category) { 130 public void dismissCategory(@CategoryInt int category) {
128 assert mNativeSnippetsBridge != 0; 131 assert mNativeSnippetsBridge != 0;
129 nativeDismissCategory(mNativeSnippetsBridge, category); 132 nativeDismissCategory(mNativeSnippetsBridge, category);
130 } 133 }
131 134
132 @Override 135 @Override
133 public void restoreDismissedCategories() { 136 public void restoreDismissedCategories() {
134 assert mNativeSnippetsBridge != 0; 137 assert mNativeSnippetsBridge != 0;
135 nativeRestoreDismissedCategories(mNativeSnippetsBridge); 138 nativeRestoreDismissedCategories(mNativeSnippetsBridge);
136 } 139 }
137 140
141 @Override
138 public void onPageShown(int[] categories, int[] suggestionsPerCategory) { 142 public void onPageShown(int[] categories, int[] suggestionsPerCategory) {
139 assert mNativeSnippetsBridge != 0; 143 assert mNativeSnippetsBridge != 0;
140 nativeOnPageShown(mNativeSnippetsBridge, categories, suggestionsPerCateg ory); 144 nativeOnPageShown(mNativeSnippetsBridge, categories, suggestionsPerCateg ory);
141 } 145 }
142 146
147 @Override
143 public void onSuggestionShown(SnippetArticle suggestion) { 148 public void onSuggestionShown(SnippetArticle suggestion) {
144 assert mNativeSnippetsBridge != 0; 149 assert mNativeSnippetsBridge != 0;
145 nativeOnSuggestionShown(mNativeSnippetsBridge, suggestion.mGlobalPositio n, 150 nativeOnSuggestionShown(mNativeSnippetsBridge, suggestion.getGlobalRank( ),
146 suggestion.mCategory, suggestion.mPosition, 151 suggestion.mCategory, suggestion.getPerSectionRank(),
147 suggestion.mPublishTimestampMilliseconds, suggestion.mScore); 152 suggestion.mPublishTimestampMilliseconds, suggestion.mScore);
148 } 153 }
149 154
155 @Override
150 public void onSuggestionOpened(SnippetArticle suggestion, int windowOpenDisp osition) { 156 public void onSuggestionOpened(SnippetArticle suggestion, int windowOpenDisp osition) {
151 assert mNativeSnippetsBridge != 0; 157 assert mNativeSnippetsBridge != 0;
152 nativeOnSuggestionOpened(mNativeSnippetsBridge, suggestion.mGlobalPositi on, 158 nativeOnSuggestionOpened(mNativeSnippetsBridge, suggestion.getGlobalRank (),
153 suggestion.mCategory, suggestion.mPosition, 159 suggestion.mCategory, suggestion.getPerSectionRank(),
154 suggestion.mPublishTimestampMilliseconds, suggestion.mScore, win dowOpenDisposition); 160 suggestion.mPublishTimestampMilliseconds, suggestion.mScore, win dowOpenDisposition);
155 } 161 }
156 162
163 @Override
157 public void onSuggestionMenuOpened(SnippetArticle suggestion) { 164 public void onSuggestionMenuOpened(SnippetArticle suggestion) {
158 assert mNativeSnippetsBridge != 0; 165 assert mNativeSnippetsBridge != 0;
159 nativeOnSuggestionMenuOpened(mNativeSnippetsBridge, suggestion.mGlobalPo sition, 166 nativeOnSuggestionMenuOpened(mNativeSnippetsBridge, suggestion.getGlobal Rank(),
160 suggestion.mCategory, suggestion.mPosition, 167 suggestion.mCategory, suggestion.getPerSectionRank(),
161 suggestion.mPublishTimestampMilliseconds, suggestion.mScore); 168 suggestion.mPublishTimestampMilliseconds, suggestion.mScore);
162 } 169 }
163 170
164 public void onMoreButtonShown(int category, int position) { 171 @Override
172 public void onMoreButtonShown(ActionItem actionItem) {
165 assert mNativeSnippetsBridge != 0; 173 assert mNativeSnippetsBridge != 0;
166 nativeOnMoreButtonShown(mNativeSnippetsBridge, category, position); 174 nativeOnMoreButtonShown(
175 mNativeSnippetsBridge, actionItem.getCategory(), actionItem.getP erSectionRank());
167 } 176 }
168 177
169 public void onMoreButtonClicked(int category, int position) { 178 @Override
179 public void onMoreButtonClicked(ActionItem actionItem) {
170 assert mNativeSnippetsBridge != 0; 180 assert mNativeSnippetsBridge != 0;
171 nativeOnMoreButtonClicked(mNativeSnippetsBridge, category, position); 181 @CategoryInt
182 int category = actionItem.getCategory();
183 nativeOnMoreButtonClicked(mNativeSnippetsBridge, category, actionItem.ge tPerSectionRank());
184 switch (category) {
185 case KnownCategories.BOOKMARKS:
186 NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_BOOKMARKS _MANAGER);
187 break;
188 // MORE button in both categories leads to the recent tabs manager
189 case KnownCategories.FOREIGN_TABS:
190 case KnownCategories.RECENT_TABS:
191 NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_RECENT_TA BS_MANAGER);
192 break;
193 case KnownCategories.DOWNLOADS:
194 NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_DOWNLOADS _MANAGER);
195 break;
196 default:
197 // No action associated
198 break;
199 }
172 } 200 }
173 201
174 /** 202 /**
175 * Notifies the scheduler to adjust the plan due to a newly opened NTP. 203 * Notifies the scheduler to adjust the plan due to a newly opened NTP.
176 */ 204 */
177 public void onNtpInitialized() { 205 public void onNtpInitialized() {
178 assert mNativeSnippetsBridge != 0; 206 assert mNativeSnippetsBridge != 0;
179 nativeOnNTPInitialized(mNativeSnippetsBridge); 207 nativeOnNTPInitialized(mNativeSnippetsBridge);
180 } 208 }
181 209
182 public static void notifySchedulerAboutWarmResume() { 210 public static void notifySchedulerAboutWarmResume() {
183 SnippetsBridge snippetsBridge = new SnippetsBridge(Profile.getLastUsedPr ofile()); 211 SnippetsBridge snippetsBridge = new SnippetsBridge(Profile.getLastUsedPr ofile());
184 snippetsBridge.onActivityWarmResumed(); 212 snippetsBridge.onActivityWarmResumed();
185 } 213 }
186 214
187 public static void notifySchedulerAboutColdStart() { 215 public static void notifySchedulerAboutColdStart() {
188 SnippetsBridge snippetsBridge = new SnippetsBridge(Profile.getLastUsedPr ofile()); 216 SnippetsBridge snippetsBridge = new SnippetsBridge(Profile.getLastUsedPr ofile());
189 snippetsBridge.onColdStart(); 217 snippetsBridge.onColdStart();
190 } 218 }
191 219
192 public static void onSuggestionTargetVisited(int category, long visitTimeMs) { 220 public static void onSuggestionTargetVisited(int category, long visitTimeMs) {
193 nativeOnSuggestionTargetVisited(category, visitTimeMs); 221 nativeOnSuggestionTargetVisited(category, visitTimeMs);
194 } 222 }
195 223
196 /**
197 * Sets the recipient for the fetched snippets.
198 *
199 * An observer needs to be set before the native code attempts to transmit s nippets them to
200 * java. Upon registration, the observer will be notified of already fetched snippets.
201 *
202 * @param observer object to notify when snippets are received.
203 */
204 @Override 224 @Override
205 public void setObserver(SuggestionsSource.Observer observer) { 225 public void setObserver(Observer observer) {
206 assert observer != null; 226 assert observer != null;
207 mObserver = observer; 227 mObserver = observer;
208 } 228 }
209 229
210 @Override 230 @Override
211 public void fetchSuggestions(@CategoryInt int category, String[] displayedSu ggestionIds) { 231 public void fetchSuggestions(@CategoryInt int category, String[] displayedSu ggestionIds) {
212 nativeFetch(mNativeSnippetsBridge, category, displayedSuggestionIds); 232 nativeFetch(mNativeSnippetsBridge, category, displayedSuggestionIds);
213 } 233 }
214 234
215 private void onActivityWarmResumed() { 235 private void onActivityWarmResumed() {
(...skipping 10 matching lines...) Expand all
226 private static List<SnippetArticle> createSuggestionList() { 246 private static List<SnippetArticle> createSuggestionList() {
227 return new ArrayList<>(); 247 return new ArrayList<>();
228 } 248 }
229 249
230 @CalledByNative 250 @CalledByNative
231 private static SnippetArticle addSuggestion(List<SnippetArticle> suggestions , int category, 251 private static SnippetArticle addSuggestion(List<SnippetArticle> suggestions , int category,
232 String id, String title, String publisher, String previewText, Strin g url, 252 String id, String title, String publisher, String previewText, Strin g url,
233 long timestamp, float score) { 253 long timestamp, float score) {
234 int position = suggestions.size(); 254 int position = suggestions.size();
235 suggestions.add(new SnippetArticle( 255 suggestions.add(new SnippetArticle(
236 category, id, title, publisher, previewText, url, timestamp, sco re, position)); 256 category, id, title, publisher, previewText, url, timestamp, sco re));
237 return suggestions.get(position); 257 return suggestions.get(position);
238 } 258 }
239 259
240 @CalledByNative 260 @CalledByNative
241 private static void setAssetDownloadDataForSuggestion( 261 private static void setAssetDownloadDataForSuggestion(
242 SnippetArticle suggestion, String filePath, String mimeType) { 262 SnippetArticle suggestion, String filePath, String mimeType) {
243 suggestion.setAssetDownloadData(filePath, mimeType); 263 suggestion.setAssetDownloadData(filePath, mimeType);
244 } 264 }
245 265
246 @CalledByNative 266 @CalledByNative
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 float score); 340 float score);
321 private native void nativeOnMoreButtonShown( 341 private native void nativeOnMoreButtonShown(
322 long nativeNTPSnippetsBridge, int category, int position); 342 long nativeNTPSnippetsBridge, int category, int position);
323 private native void nativeOnMoreButtonClicked( 343 private native void nativeOnMoreButtonClicked(
324 long nativeNTPSnippetsBridge, int category, int position); 344 long nativeNTPSnippetsBridge, int category, int position);
325 private native void nativeOnActivityWarmResumed(long nativeNTPSnippetsBridge ); 345 private native void nativeOnActivityWarmResumed(long nativeNTPSnippetsBridge );
326 private native void nativeOnColdStart(long nativeNTPSnippetsBridge); 346 private native void nativeOnColdStart(long nativeNTPSnippetsBridge);
327 private static native void nativeOnSuggestionTargetVisited(int category, lon g visitTimeMs); 347 private static native void nativeOnSuggestionTargetVisited(int category, lon g visitTimeMs);
328 private static native void nativeOnNTPInitialized(long nativeNTPSnippetsBrid ge); 348 private static native void nativeOnNTPInitialized(long nativeNTPSnippetsBrid ge);
329 } 349 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698