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

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

Issue 2715433008: 🏡 Add a ChromeHomeNewTabPage (Closed)
Patch Set: Cancel inprogress animation when FBV disabled Created 3 years, 9 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 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 16 matching lines...) Expand all
27 import org.chromium.chrome.R; 27 import org.chromium.chrome.R;
28 import org.chromium.chrome.browser.ChromeActivity; 28 import org.chromium.chrome.browser.ChromeActivity;
29 import org.chromium.chrome.browser.ChromeFeatureList; 29 import org.chromium.chrome.browser.ChromeFeatureList;
30 import org.chromium.chrome.browser.ChromeSwitches; 30 import org.chromium.chrome.browser.ChromeSwitches;
31 import org.chromium.chrome.browser.NativePage; 31 import org.chromium.chrome.browser.NativePage;
32 import org.chromium.chrome.browser.NativePageHost; 32 import org.chromium.chrome.browser.NativePageHost;
33 import org.chromium.chrome.browser.UrlConstants; 33 import org.chromium.chrome.browser.UrlConstants;
34 import org.chromium.chrome.browser.compositor.layouts.content.InvalidationAwareT humbnailProvider; 34 import org.chromium.chrome.browser.compositor.layouts.content.InvalidationAwareT humbnailProvider;
35 import org.chromium.chrome.browser.download.DownloadManagerService; 35 import org.chromium.chrome.browser.download.DownloadManagerService;
36 import org.chromium.chrome.browser.metrics.StartupMetrics; 36 import org.chromium.chrome.browser.metrics.StartupMetrics;
37 import org.chromium.chrome.browser.ntp.LogoBridge.Logo;
38 import org.chromium.chrome.browser.ntp.LogoBridge.LogoObserver;
39 import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; 37 import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager;
40 import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge; 38 import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge;
41 import org.chromium.chrome.browser.ntp.snippets.SuggestionsSource; 39 import org.chromium.chrome.browser.ntp.snippets.SuggestionsSource;
42 import org.chromium.chrome.browser.profiles.Profile; 40 import org.chromium.chrome.browser.profiles.Profile;
43 import org.chromium.chrome.browser.search_engines.TemplateUrlService; 41 import org.chromium.chrome.browser.search_engines.TemplateUrlService;
44 import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl ServiceObserver; 42 import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl ServiceObserver;
45 import org.chromium.chrome.browser.suggestions.SuggestionsMetricsReporter; 43 import org.chromium.chrome.browser.suggestions.SuggestionsMetricsReporter;
46 import org.chromium.chrome.browser.suggestions.SuggestionsNavigationDelegate; 44 import org.chromium.chrome.browser.suggestions.SuggestionsNavigationDelegate;
47 import org.chromium.chrome.browser.suggestions.SuggestionsNavigationDelegateImpl ; 45 import org.chromium.chrome.browser.suggestions.SuggestionsNavigationDelegateImpl ;
48 import org.chromium.chrome.browser.suggestions.SuggestionsUiDelegateImpl; 46 import org.chromium.chrome.browser.suggestions.SuggestionsUiDelegateImpl;
49 import org.chromium.chrome.browser.suggestions.Tile; 47 import org.chromium.chrome.browser.suggestions.Tile;
50 import org.chromium.chrome.browser.suggestions.TileGroup; 48 import org.chromium.chrome.browser.suggestions.TileGroup;
51 import org.chromium.chrome.browser.suggestions.TileGroupDelegateImpl; 49 import org.chromium.chrome.browser.suggestions.TileGroupDelegateImpl;
52 import org.chromium.chrome.browser.sync.SyncSessionsMetrics; 50 import org.chromium.chrome.browser.sync.SyncSessionsMetrics;
53 import org.chromium.chrome.browser.tab.EmptyTabObserver; 51 import org.chromium.chrome.browser.tab.EmptyTabObserver;
54 import org.chromium.chrome.browser.tab.Tab; 52 import org.chromium.chrome.browser.tab.Tab;
55 import org.chromium.chrome.browser.tab.TabObserver; 53 import org.chromium.chrome.browser.tab.TabObserver;
56 import org.chromium.chrome.browser.tabmodel.TabModel; 54 import org.chromium.chrome.browser.tabmodel.TabModel;
57 import org.chromium.chrome.browser.tabmodel.TabModelSelector; 55 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
58 import org.chromium.chrome.browser.tabmodel.TabModelUtils; 56 import org.chromium.chrome.browser.tabmodel.TabModelUtils;
59 import org.chromium.chrome.browser.util.FeatureUtilities; 57 import org.chromium.chrome.browser.util.FeatureUtilities;
60 import org.chromium.chrome.browser.util.UrlUtilities; 58 import org.chromium.chrome.browser.util.UrlUtilities;
61 import org.chromium.content_public.browser.LoadUrlParams;
62 import org.chromium.content_public.browser.NavigationController; 59 import org.chromium.content_public.browser.NavigationController;
63 import org.chromium.content_public.browser.NavigationEntry; 60 import org.chromium.content_public.browser.NavigationEntry;
64 import org.chromium.net.NetworkChangeNotifier; 61 import org.chromium.net.NetworkChangeNotifier;
65 import org.chromium.ui.base.DeviceFormFactor; 62 import org.chromium.ui.base.DeviceFormFactor;
66 import org.chromium.ui.base.PageTransition;
67 import org.chromium.ui.mojom.WindowOpenDisposition; 63 import org.chromium.ui.mojom.WindowOpenDisposition;
68 64
69 import java.util.concurrent.TimeUnit; 65 import java.util.concurrent.TimeUnit;
70 66
71 import jp.tomorrowkey.android.gifplayer.BaseGifImage;
72
73 /** 67 /**
74 * Provides functionality when the user interacts with the NTP. 68 * Provides functionality when the user interacts with the NTP.
75 */ 69 */
76 public class NewTabPage 70 public class NewTabPage
77 implements NativePage, InvalidationAwareThumbnailProvider, TemplateUrlSe rviceObserver { 71 implements NativePage, InvalidationAwareThumbnailProvider, TemplateUrlSe rviceObserver {
78 private static final String TAG = "NewTabPage"; 72 private static final String TAG = "NewTabPage";
79 73
80 // UMA enum constants. CTA means the "click-to-action" icon.
81 private static final String LOGO_SHOWN_UMA_NAME = "NewTabPage.LogoShown";
82 private static final int STATIC_LOGO_SHOWN = 0;
83 private static final int CTA_IMAGE_SHOWN = 1;
84
85 private static final String LOGO_CLICK_UMA_NAME = "NewTabPage.LogoClick";
86 private static final int STATIC_LOGO_CLICKED = 0;
87 private static final int CTA_IMAGE_CLICKED = 1;
88 private static final int ANIMATED_LOGO_CLICKED = 2;
89
90 // Key for the scroll position data that may be stored in a navigation entry . 74 // Key for the scroll position data that may be stored in a navigation entry .
91 private static final String NAVIGATION_ENTRY_SCROLL_POSITION_KEY = "NewTabPa geScrollPosition"; 75 private static final String NAVIGATION_ENTRY_SCROLL_POSITION_KEY = "NewTabPa geScrollPosition";
92 76
93 private static SuggestionsSource sSuggestionsSourceForTests; 77 private static SuggestionsSource sSuggestionsSourceForTests;
94 78
95 private final Tab mTab; 79 private final Tab mTab;
96 private final TabModelSelector mTabModelSelector; 80 private final TabModelSelector mTabModelSelector;
97 81
98 private final String mTitle; 82 private final String mTitle;
99 private final int mBackgroundColor; 83 private final int mBackgroundColor;
100 private final int mThemeColor; 84 private final int mThemeColor;
101 private final NewTabPageView mNewTabPageView; 85 private final NewTabPageView mNewTabPageView;
102 private final NewTabPageManagerImpl mNewTabPageManager; 86 private final NewTabPageManagerImpl mNewTabPageManager;
103 private final TileGroup.Delegate mTileGroupDelegate; 87 private final TileGroup.Delegate mTileGroupDelegate;
104 88
105 private TabObserver mTabObserver; 89 private TabObserver mTabObserver;
106 private LogoBridge mLogoBridge; 90 private LogoBridge mLogoBridge;
107 private boolean mSearchProviderHasLogo; 91 private boolean mSearchProviderHasLogo;
108 private String mOnLogoClickUrl;
109 private String mAnimatedLogoUrl;
110 private FakeboxDelegate mFakeboxDelegate; 92 private FakeboxDelegate mFakeboxDelegate;
111 private SnippetsBridge mSnippetsBridge; 93 private SnippetsBridge mSnippetsBridge;
112 94
113 // The timestamp at which the constructor was called. 95 // The timestamp at which the constructor was called.
114 private final long mConstructedTimeNs; 96 private final long mConstructedTimeNs;
115 97
116 // The timestamp at which this NTP was last shown to the user. 98 // The timestamp at which this NTP was last shown to the user.
117 private long mLastShownTimeNs; 99 private long mLastShownTimeNs;
118 100
119 private boolean mIsLoaded; 101 private boolean mIsLoaded;
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 if (mFakeboxDelegate != null) { 234 if (mFakeboxDelegate != null) {
253 if (beginVoiceSearch) { 235 if (beginVoiceSearch) {
254 mFakeboxDelegate.startVoiceRecognition(); 236 mFakeboxDelegate.startVoiceRecognition();
255 } else { 237 } else {
256 mFakeboxDelegate.requestUrlFocusFromFakebox(pastedText); 238 mFakeboxDelegate.requestUrlFocusFromFakebox(pastedText);
257 } 239 }
258 } 240 }
259 } 241 }
260 242
261 @Override 243 @Override
262 public void onLogoClicked(boolean isAnimatedLogoShowing) {
263 if (mIsDestroyed) return;
264
265 if (!isAnimatedLogoShowing && mAnimatedLogoUrl != null) {
266 RecordHistogram.recordSparseSlowlyHistogram(LOGO_CLICK_UMA_NAME, CTA_IMAGE_CLICKED);
267 mNewTabPageView.showLogoLoadingView();
268 mLogoBridge.getAnimatedLogo(new LogoBridge.AnimatedLogoCallback( ) {
269 @Override
270 public void onAnimatedLogoAvailable(BaseGifImage animatedLog oImage) {
271 if (mIsDestroyed) return;
272 mNewTabPageView.playAnimatedLogo(animatedLogoImage);
273 }
274 }, mAnimatedLogoUrl);
275 } else if (mOnLogoClickUrl != null) {
276 RecordHistogram.recordSparseSlowlyHistogram(LOGO_CLICK_UMA_NAME,
277 isAnimatedLogoShowing ? ANIMATED_LOGO_CLICKED : STATIC_L OGO_CLICKED);
278 mTab.loadUrl(new LoadUrlParams(mOnLogoClickUrl, PageTransition.L INK));
279 }
280 }
281
282 @Override
283 public void getSearchProviderLogo(final LogoObserver logoObserver) {
284 if (mIsDestroyed) return;
285 LogoObserver wrapperCallback = new LogoObserver() {
286 @Override
287 public void onLogoAvailable(Logo logo, boolean fromCache) {
288 if (mIsDestroyed) return;
289 mOnLogoClickUrl = logo != null ? logo.onClickUrl : null;
290 mAnimatedLogoUrl = logo != null ? logo.animatedLogoUrl : nul l;
291 if (logo != null) {
292 RecordHistogram.recordSparseSlowlyHistogram(LOGO_SHOWN_U MA_NAME,
293 logo.animatedLogoUrl == null ? STATIC_LOGO_SHOWN : CTA_IMAGE_SHOWN);
294 }
295 logoObserver.onLogoAvailable(logo, fromCache);
296 }
297 };
298 mLogoBridge.getCurrentLogo(wrapperCallback);
299 }
300
301 @Override
302 public SuggestionsSource getSuggestionsSource() { 244 public SuggestionsSource getSuggestionsSource() {
303 if (sSuggestionsSourceForTests != null) return sSuggestionsSourceFor Tests; 245 if (sSuggestionsSourceForTests != null) return sSuggestionsSourceFor Tests;
304 return mSnippetsBridge; 246 return mSnippetsBridge;
305 } 247 }
306 248
307 @Override 249 @Override
308 public boolean isCurrentPage() { 250 public boolean isCurrentPage() {
309 if (mIsDestroyed) return false; 251 if (mIsDestroyed) return false;
310 if (mFakeboxDelegate == null) return false; 252 if (mFakeboxDelegate == null) return false;
311 return mFakeboxDelegate.isCurrentPage(NewTabPage.this); 253 return mFakeboxDelegate.isCurrentPage(NewTabPage.this);
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 @Override 621 @Override
680 public boolean shouldCaptureThumbnail() { 622 public boolean shouldCaptureThumbnail() {
681 return mNewTabPageView.shouldCaptureThumbnail(); 623 return mNewTabPageView.shouldCaptureThumbnail();
682 } 624 }
683 625
684 @Override 626 @Override
685 public void captureThumbnail(Canvas canvas) { 627 public void captureThumbnail(Canvas canvas) {
686 mNewTabPageView.captureThumbnail(canvas); 628 mNewTabPageView.captureThumbnail(canvas);
687 } 629 }
688 } 630 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698