OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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; | 5 package org.chromium.chrome.browser.ntp; |
6 | 6 |
7 import android.annotation.TargetApi; | 7 import android.annotation.TargetApi; |
8 import android.content.Context; | 8 import android.content.Context; |
9 import android.graphics.Canvas; | 9 import android.graphics.Canvas; |
10 import android.graphics.Point; | 10 import android.graphics.Point; |
(...skipping 27 matching lines...) Expand all Loading... |
38 import org.chromium.chrome.browser.favicon.FaviconHelper; | 38 import org.chromium.chrome.browser.favicon.FaviconHelper; |
39 import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback; | 39 import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback; |
40 import org.chromium.chrome.browser.favicon.FaviconHelper.IconAvailabilityCallbac
k; | 40 import org.chromium.chrome.browser.favicon.FaviconHelper.IconAvailabilityCallbac
k; |
41 import org.chromium.chrome.browser.favicon.LargeIconBridge; | 41 import org.chromium.chrome.browser.favicon.LargeIconBridge; |
42 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback; | 42 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback; |
43 import org.chromium.chrome.browser.metrics.StartupMetrics; | 43 import org.chromium.chrome.browser.metrics.StartupMetrics; |
44 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; | 44 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; |
45 import org.chromium.chrome.browser.ntp.LogoBridge.Logo; | 45 import org.chromium.chrome.browser.ntp.LogoBridge.Logo; |
46 import org.chromium.chrome.browser.ntp.LogoBridge.LogoObserver; | 46 import org.chromium.chrome.browser.ntp.LogoBridge.LogoObserver; |
47 import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; | 47 import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; |
| 48 import org.chromium.chrome.browser.ntp.snippets.KnownCategories; |
48 import org.chromium.chrome.browser.ntp.snippets.SnippetArticle; | 49 import org.chromium.chrome.browser.ntp.snippets.SnippetArticle; |
49 import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge; | 50 import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge; |
50 import org.chromium.chrome.browser.ntp.snippets.SnippetsConfig; | 51 import org.chromium.chrome.browser.ntp.snippets.SnippetsConfig; |
51 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; | 52 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; |
52 import org.chromium.chrome.browser.preferences.PrefServiceBridge; | 53 import org.chromium.chrome.browser.preferences.PrefServiceBridge; |
53 import org.chromium.chrome.browser.profiles.MostVisitedSites; | 54 import org.chromium.chrome.browser.profiles.MostVisitedSites; |
54 import org.chromium.chrome.browser.profiles.MostVisitedSites.MostVisitedURLsObse
rver; | 55 import org.chromium.chrome.browser.profiles.MostVisitedSites.MostVisitedURLsObse
rver; |
55 import org.chromium.chrome.browser.profiles.Profile; | 56 import org.chromium.chrome.browser.profiles.Profile; |
56 import org.chromium.chrome.browser.search_engines.TemplateUrlService; | 57 import org.chromium.chrome.browser.search_engines.TemplateUrlService; |
57 import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl
ServiceObserver; | 58 import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl
ServiceObserver; |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 mMostVisitedSites.recordOpenedMostVisitedItem( | 233 mMostVisitedSites.recordOpenedMostVisitedItem( |
233 item.getIndex(), item.getTileType(), item.getSource()); | 234 item.getIndex(), item.getTileType(), item.getSource()); |
234 } | 235 } |
235 | 236 |
236 @Override | 237 @Override |
237 public void openMostVisitedItem(MostVisitedItem item) { | 238 public void openMostVisitedItem(MostVisitedItem item) { |
238 if (mIsDestroyed) return; | 239 if (mIsDestroyed) return; |
239 recordOpenedMostVisitedItem(item); | 240 recordOpenedMostVisitedItem(item); |
240 String url = item.getUrl(); | 241 String url = item.getUrl(); |
241 if (!switchToExistingTab(url)) { | 242 if (!switchToExistingTab(url)) { |
242 openUrl(WindowOpenDisposition.CURRENT_TAB, url); | 243 openUrlMostVisited(WindowOpenDisposition.CURRENT_TAB, url); |
243 } | 244 } |
244 } | 245 } |
245 | 246 |
246 @Override | 247 @Override |
247 public void onLearnMoreClicked() { | 248 public void onLearnMoreClicked() { |
248 if (mIsDestroyed) return; | 249 if (mIsDestroyed) return; |
249 NewTabPageUma.recordAction(NewTabPageUma.ACTION_CLICKED_LEARN_MORE); | 250 NewTabPageUma.recordAction(NewTabPageUma.ACTION_CLICKED_LEARN_MORE); |
250 String url = "https://support.google.com/chrome/?p=new_tab"; | 251 String url = "https://support.google.com/chrome/?p=new_tab"; |
251 openUrl(WindowOpenDisposition.CURRENT_TAB, url); | 252 // TODO(mastiz): Change this to LINK? |
| 253 openUrl(WindowOpenDisposition.CURRENT_TAB, |
| 254 new LoadUrlParams(url, |
| 255 PageTransition.AUTO_BOOKMARK | PageTransition.IGNORE
_FOR_NTP_TILES)); |
252 } | 256 } |
253 | 257 |
254 @TargetApi(Build.VERSION_CODES.LOLLIPOP) | 258 @TargetApi(Build.VERSION_CODES.LOLLIPOP) |
255 private boolean switchToExistingTab(String url) { | 259 private boolean switchToExistingTab(String url) { |
256 String matchPattern = CommandLine.getInstance().getSwitchValue( | 260 String matchPattern = CommandLine.getInstance().getSwitchValue( |
257 ChromeSwitches.NTP_SWITCH_TO_EXISTING_TAB); | 261 ChromeSwitches.NTP_SWITCH_TO_EXISTING_TAB); |
258 boolean matchByHost; | 262 boolean matchByHost; |
259 if ("url".equals(matchPattern)) { | 263 if ("url".equals(matchPattern)) { |
260 matchByHost = false; | 264 matchByHost = false; |
261 } else if ("host".equals(matchPattern)) { | 265 } else if ("host".equals(matchPattern)) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 public void trackSnippetCategoryActionClick(int category, int position)
{ | 309 public void trackSnippetCategoryActionClick(int category, int position)
{ |
306 mSnippetsBridge.onMoreButtonClicked(category, position); | 310 mSnippetsBridge.onMoreButtonClicked(category, position); |
307 } | 311 } |
308 | 312 |
309 @Override | 313 @Override |
310 public void openSnippet(int windowOpenDisposition, SnippetArticle articl
e) { | 314 public void openSnippet(int windowOpenDisposition, SnippetArticle articl
e) { |
311 mSnippetsBridge.onSuggestionOpened(article.mGlobalPosition, article.
mCategory, | 315 mSnippetsBridge.onSuggestionOpened(article.mGlobalPosition, article.
mCategory, |
312 article.mPosition, article.mPublishTimestampMilliseconds, ar
ticle.mScore, | 316 article.mPosition, article.mPublishTimestampMilliseconds, ar
ticle.mScore, |
313 windowOpenDisposition); | 317 windowOpenDisposition); |
314 NewTabPageUma.monitorContentSuggestionVisit(mTab, article.mCategory)
; | 318 NewTabPageUma.monitorContentSuggestionVisit(mTab, article.mCategory)
; |
315 openUrl(windowOpenDisposition, article.mUrl); | 319 PageTransition pageTransition = PageTransition.AUTO_BOOKMARK; |
| 320 if (article.mCategory == KnownCategories.ARTICLES) { |
| 321 pageTransition |= PageTransition.IGNORE_FOR_NTP_TILES; |
| 322 } |
| 323 |
| 324 openUrl(windowOpenDisposition, new LoadUrlParams(article.mUrl, pageT
ransition)); |
316 } | 325 } |
317 | 326 |
318 private void openUrl(int windowOpenDisposition, String url) { | 327 // TODO(mastiz): Merge with openMostVisitedItem(). |
| 328 private void openUrlMostVisited(int windowOpenDisposition, String url) { |
| 329 openUrl(windowOpenDisposition, new LoadUrlParams(url, PageTransition
.AUTO_BOOKMARK)); |
| 330 } |
| 331 |
| 332 private void openUrl(int windowOpenDisposition, LoadUrlParams loadUrlPar
ams) { |
319 assert !mIsDestroyed; | 333 assert !mIsDestroyed; |
320 switch (windowOpenDisposition) { | 334 switch (windowOpenDisposition) { |
321 case WindowOpenDisposition.CURRENT_TAB: | 335 case WindowOpenDisposition.CURRENT_TAB: |
322 mTab.loadUrl(new LoadUrlParams(url, PageTransition.AUTO_BOOK
MARK)); | 336 mTab.loadUrl(loadUrlParams); |
323 break; | 337 break; |
324 case WindowOpenDisposition.NEW_FOREGROUND_TAB: | 338 case WindowOpenDisposition.NEW_FOREGROUND_TAB: |
325 openUrlInNewTab(url, false); | 339 openUrlInNewTab(loadUrlParams, false); |
326 break; | 340 break; |
327 case WindowOpenDisposition.OFF_THE_RECORD: | 341 case WindowOpenDisposition.OFF_THE_RECORD: |
328 openUrlInNewTab(url, true); | 342 openUrlInNewTab(loadUrlParams, true); |
329 break; | 343 break; |
330 case WindowOpenDisposition.NEW_WINDOW: | 344 case WindowOpenDisposition.NEW_WINDOW: |
331 openUrlInNewWindow(url); | 345 openUrlInNewWindow(loadUrlParams); |
332 break; | 346 break; |
333 case WindowOpenDisposition.SAVE_TO_DISK: | 347 case WindowOpenDisposition.SAVE_TO_DISK: |
334 saveUrlForOffline(url); | 348 saveUrlForOffline(loadUrlParams.getUrl()); |
335 break; | 349 break; |
336 default: | 350 default: |
337 assert false; | 351 assert false; |
338 } | 352 } |
339 } | 353 } |
340 | 354 |
341 @Override | 355 @Override |
342 public void onCreateContextMenu(ContextMenu menu, OnMenuItemClickListene
r listener) { | 356 public void onCreateContextMenu(ContextMenu menu, OnMenuItemClickListene
r listener) { |
343 if (mIsDestroyed) return; | 357 if (mIsDestroyed) return; |
344 if (isOpenInNewWindowEnabled()) { | 358 if (isOpenInNewWindowEnabled()) { |
(...skipping 11 matching lines...) Expand all Loading... |
356 menu.add(Menu.NONE, ID_REMOVE, Menu.NONE, R.string.remove) | 370 menu.add(Menu.NONE, ID_REMOVE, Menu.NONE, R.string.remove) |
357 .setOnMenuItemClickListener(listener); | 371 .setOnMenuItemClickListener(listener); |
358 } | 372 } |
359 | 373 |
360 @Override | 374 @Override |
361 public boolean onMenuItemClick(int menuId, MostVisitedItem item) { | 375 public boolean onMenuItemClick(int menuId, MostVisitedItem item) { |
362 if (mIsDestroyed) return false; | 376 if (mIsDestroyed) return false; |
363 switch (menuId) { | 377 switch (menuId) { |
364 case ID_OPEN_IN_NEW_WINDOW: | 378 case ID_OPEN_IN_NEW_WINDOW: |
365 // TODO(treib): Should we call recordOpenedMostVisitedItem h
ere? | 379 // TODO(treib): Should we call recordOpenedMostVisitedItem h
ere? |
366 openUrl(WindowOpenDisposition.NEW_WINDOW, item.getUrl()); | 380 openUrlMostVisited(WindowOpenDisposition.NEW_WINDOW, item.ge
tUrl()); |
367 return true; | 381 return true; |
368 case ID_OPEN_IN_NEW_TAB: | 382 case ID_OPEN_IN_NEW_TAB: |
369 recordOpenedMostVisitedItem(item); | 383 recordOpenedMostVisitedItem(item); |
370 openUrl(WindowOpenDisposition.NEW_FOREGROUND_TAB, item.getUr
l()); | 384 openUrlMostVisited(WindowOpenDisposition.NEW_FOREGROUND_TAB,
item.getUrl()); |
371 return true; | 385 return true; |
372 case ID_OPEN_IN_INCOGNITO_TAB: | 386 case ID_OPEN_IN_INCOGNITO_TAB: |
373 recordOpenedMostVisitedItem(item); | 387 recordOpenedMostVisitedItem(item); |
374 openUrl(WindowOpenDisposition.OFF_THE_RECORD, item.getUrl())
; | 388 openUrlMostVisited(WindowOpenDisposition.OFF_THE_RECORD, ite
m.getUrl()); |
375 return true; | 389 return true; |
376 case ID_REMOVE: | 390 case ID_REMOVE: |
377 mMostVisitedSites.addBlacklistedUrl(item.getUrl()); | 391 mMostVisitedSites.addBlacklistedUrl(item.getUrl()); |
378 showMostVisitedItemRemovedSnackbar(item.getUrl()); | 392 showMostVisitedItemRemovedSnackbar(item.getUrl()); |
379 return true; | 393 return true; |
380 default: | 394 default: |
381 return false; | 395 return false; |
382 } | 396 } |
383 } | 397 } |
384 | 398 |
385 @Override | 399 @Override |
386 public boolean isOpenInNewWindowEnabled() { | 400 public boolean isOpenInNewWindowEnabled() { |
387 return MultiWindowUtils.getInstance().isOpenInOtherWindowSupported(m
Activity); | 401 return MultiWindowUtils.getInstance().isOpenInOtherWindowSupported(m
Activity); |
388 } | 402 } |
389 | 403 |
390 @Override | 404 @Override |
391 public boolean isOpenInIncognitoEnabled() { | 405 public boolean isOpenInIncognitoEnabled() { |
392 return PrefServiceBridge.getInstance().isIncognitoModeEnabled(); | 406 return PrefServiceBridge.getInstance().isIncognitoModeEnabled(); |
393 } | 407 } |
394 | 408 |
395 private void openUrlInNewWindow(String url) { | 409 private void openUrlInNewWindow(LoadUrlParams loadUrlParams) { |
396 TabDelegate tabDelegate = new TabDelegate(false); | 410 TabDelegate tabDelegate = new TabDelegate(false); |
397 // TODO(treib): Should this use PageTransition.AUTO_BOOKMARK? | |
398 LoadUrlParams loadUrlParams = new LoadUrlParams(url); | |
399 tabDelegate.createTabInOtherWindow(loadUrlParams, mActivity, mTab.ge
tParentId()); | 411 tabDelegate.createTabInOtherWindow(loadUrlParams, mActivity, mTab.ge
tParentId()); |
400 } | 412 } |
401 | 413 |
402 private void openUrlInNewTab(String url, boolean incognito) { | 414 private void openUrlInNewTab(LoadUrlParams loadUrlParams, boolean incogn
ito) { |
403 mTabModelSelector.openNewTab(new LoadUrlParams(url, PageTransition.A
UTO_BOOKMARK), | 415 mTabModelSelector.openNewTab( |
404 TabLaunchType.FROM_LONGPRESS_BACKGROUND, mTab, incognito); | 416 loadUrlParams, TabLaunchType.FROM_LONGPRESS_BACKGROUND, mTab
, incognito); |
405 } | 417 } |
406 | 418 |
407 private void saveUrlForOffline(String url) { | 419 private void saveUrlForOffline(String url) { |
408 OfflinePageBridge.getForProfile(mProfile) | 420 OfflinePageBridge.getForProfile(mProfile) |
409 .savePageLater(url, "ntp_suggestions", true /* userRequested
*/); | 421 .savePageLater(url, "ntp_suggestions", true /* userRequested
*/); |
410 } | 422 } |
411 | 423 |
412 @Override | 424 @Override |
413 public void navigateToBookmarks() { | 425 public void navigateToBookmarks() { |
414 if (mIsDestroyed) return; | 426 if (mIsDestroyed) return; |
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
914 @Override | 926 @Override |
915 public boolean shouldCaptureThumbnail() { | 927 public boolean shouldCaptureThumbnail() { |
916 return mNewTabPageView.shouldCaptureThumbnail(); | 928 return mNewTabPageView.shouldCaptureThumbnail(); |
917 } | 929 } |
918 | 930 |
919 @Override | 931 @Override |
920 public void captureThumbnail(Canvas canvas) { | 932 public void captureThumbnail(Canvas canvas) { |
921 mNewTabPageView.captureThumbnail(canvas); | 933 mNewTabPageView.captureThumbnail(canvas); |
922 } | 934 } |
923 } | 935 } |
OLD | NEW |