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

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

Issue 1459593002: Added a UI for the Interests Prototype. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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.app.Activity; 8 import android.app.Activity;
9 import android.app.ActivityManager; 9 import android.app.ActivityManager;
10 import android.app.Dialog; 10 import android.app.Dialog;
(...skipping 27 matching lines...) Expand all
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.ntp.BookmarksPage.BookmarkSelectedListener; 44 import org.chromium.chrome.browser.ntp.BookmarksPage.BookmarkSelectedListener;
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.interests.InterestsPage;
49 import org.chromium.chrome.browser.ntp.interests.InterestsPage.InterestsClickLis tener;
48 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; 50 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
49 import org.chromium.chrome.browser.preferences.DocumentModeManager; 51 import org.chromium.chrome.browser.preferences.DocumentModeManager;
50 import org.chromium.chrome.browser.preferences.DocumentModePreference; 52 import org.chromium.chrome.browser.preferences.DocumentModePreference;
51 import org.chromium.chrome.browser.preferences.PrefServiceBridge; 53 import org.chromium.chrome.browser.preferences.PrefServiceBridge;
52 import org.chromium.chrome.browser.preferences.PreferencesLauncher; 54 import org.chromium.chrome.browser.preferences.PreferencesLauncher;
53 import org.chromium.chrome.browser.profiles.MostVisitedSites; 55 import org.chromium.chrome.browser.profiles.MostVisitedSites;
54 import org.chromium.chrome.browser.profiles.MostVisitedSites.MostVisitedURLsObse rver; 56 import org.chromium.chrome.browser.profiles.MostVisitedSites.MostVisitedURLsObse rver;
55 import org.chromium.chrome.browser.profiles.MostVisitedSites.ThumbnailCallback; 57 import org.chromium.chrome.browser.profiles.MostVisitedSites.ThumbnailCallback;
56 import org.chromium.chrome.browser.profiles.Profile; 58 import org.chromium.chrome.browser.profiles.Profile;
57 import org.chromium.chrome.browser.search_engines.TemplateUrlService; 59 import org.chromium.chrome.browser.search_engines.TemplateUrlService;
58 import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl ServiceObserver; 60 import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl ServiceObserver;
59 import org.chromium.chrome.browser.tab.EmptyTabObserver; 61 import org.chromium.chrome.browser.tab.EmptyTabObserver;
60 import org.chromium.chrome.browser.tab.Tab; 62 import org.chromium.chrome.browser.tab.Tab;
61 import org.chromium.chrome.browser.tab.TabObserver; 63 import org.chromium.chrome.browser.tab.TabObserver;
62 import org.chromium.chrome.browser.tabmodel.TabModel; 64 import org.chromium.chrome.browser.tabmodel.TabModel;
63 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; 65 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
64 import org.chromium.chrome.browser.tabmodel.TabModelSelector; 66 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
65 import org.chromium.chrome.browser.tabmodel.TabModelUtils; 67 import org.chromium.chrome.browser.tabmodel.TabModelUtils;
66 import org.chromium.chrome.browser.tabmodel.document.ActivityDelegate; 68 import org.chromium.chrome.browser.tabmodel.document.ActivityDelegate;
67 import org.chromium.chrome.browser.tabmodel.document.DocumentTabModel; 69 import org.chromium.chrome.browser.tabmodel.document.DocumentTabModel;
68 import org.chromium.chrome.browser.util.FeatureUtilities; 70 import org.chromium.chrome.browser.util.FeatureUtilities;
69 import org.chromium.chrome.browser.util.UrlUtilities; 71 import org.chromium.chrome.browser.util.UrlUtilities;
70 import org.chromium.content_public.browser.LoadUrlParams; 72 import org.chromium.content_public.browser.LoadUrlParams;
71 import org.chromium.net.NetworkChangeNotifier; 73 import org.chromium.net.NetworkChangeNotifier;
74 import org.chromium.sync.signin.ChromeSigninController;
72 import org.chromium.ui.base.DeviceFormFactor; 75 import org.chromium.ui.base.DeviceFormFactor;
73 import org.chromium.ui.base.PageTransition; 76 import org.chromium.ui.base.PageTransition;
74 77
75 import java.util.concurrent.TimeUnit; 78 import java.util.concurrent.TimeUnit;
76 79
77 import jp.tomorrowkey.android.gifplayer.BaseGifImage; 80 import jp.tomorrowkey.android.gifplayer.BaseGifImage;
78 81
79 /** 82 /**
80 * Provides functionality when the user interacts with the NTP. 83 * Provides functionality when the user interacts with the NTP.
81 */ 84 */
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 NativePage page = BookmarksPage.buildPageInDocumentMode( 186 NativePage page = BookmarksPage.buildPageInDocumentMode(
184 activity, tab, tabModelSelector, Profile.getLastUsedProfile( ), 187 activity, tab, tabModelSelector, Profile.getLastUsedProfile( ),
185 listener); 188 listener);
186 page.updateForUrl(UrlConstants.BOOKMARKS_URL); 189 page.updateForUrl(UrlConstants.BOOKMARKS_URL);
187 Dialog dialog = new NativePageDialog(activity, page); 190 Dialog dialog = new NativePageDialog(activity, page);
188 listener.setDialog(dialog); 191 listener.setDialog(dialog);
189 dialog.show(); 192 dialog.show();
190 } 193 }
191 } 194 }
192 195
196 public static void launchInterestsDialog(Activity activity, final Tab tab) {
197 InterestsPage page =
198 new InterestsPage(activity, tab, Profile.getLastUsedProfile());
199 final Dialog dialog = new NativePageDialog(activity, page);
200
201 InterestsClickListener listener = new InterestsClickListener() {
202 @Override
203 public void onInterestClicked(String name) {
204 tab.loadUrl(new LoadUrlParams(
205 TemplateUrlService.getInstance().getUrlForSearchQuery(na me)));
206 dialog.dismiss();
207 }
208 };
209
210 page.setListener(listener);
211 dialog.show();
212 }
213
193 public static void launchRecentTabsDialog(Activity activity, Tab tab) { 214 public static void launchRecentTabsDialog(Activity activity, Tab tab) {
194 DocumentRecentTabsManager manager = new DocumentRecentTabsManager(tab, a ctivity); 215 DocumentRecentTabsManager manager = new DocumentRecentTabsManager(tab, a ctivity);
195 NativePage page = new RecentTabsPage(activity, manager); 216 NativePage page = new RecentTabsPage(activity, manager);
196 page.updateForUrl(UrlConstants.RECENT_TABS_URL); 217 page.updateForUrl(UrlConstants.RECENT_TABS_URL);
197 Dialog dialog = new NativePageDialog(activity, page); 218 Dialog dialog = new NativePageDialog(activity, page);
198 manager.setDialog(dialog); 219 manager.setDialog(dialog);
199 dialog.show(); 220 dialog.show();
200 } 221 }
201 222
202 @VisibleForTesting 223 @VisibleForTesting
203 static void setMostVisitedSitesForTests(MostVisitedSites mostVisitedSitesFor Tests) { 224 static void setMostVisitedSitesForTests(MostVisitedSites mostVisitedSitesFor Tests) {
204 sMostVisitedSitesForTests = mostVisitedSitesForTests; 225 sMostVisitedSitesForTests = mostVisitedSitesForTests;
205 } 226 }
206 227
207 private final NewTabPageManager mNewTabPageManager = new NewTabPageManager() { 228 private final NewTabPageManager mNewTabPageManager = new NewTabPageManager() {
208 @Override 229 @Override
209 public boolean isLocationBarShownInNTP() { 230 public boolean isLocationBarShownInNTP() {
210 if (mIsDestroyed) return false; 231 if (mIsDestroyed) return false;
211 Context context = mNewTabPageView.getContext(); 232 Context context = mNewTabPageView.getContext();
212 return isInSingleUrlBarMode(context) 233 return isInSingleUrlBarMode(context)
213 && !mNewTabPageView.urlFocusAnimationsDisabled(); 234 && !mNewTabPageView.urlFocusAnimationsDisabled();
214 } 235 }
215 236
216 @Override 237 @Override
217 public boolean isVoiceSearchEnabled() { 238 public boolean isVoiceSearchEnabled() {
218 return mFakeboxDelegate != null && mFakeboxDelegate.isVoiceSearchEna bled(); 239 return mFakeboxDelegate != null && mFakeboxDelegate.isVoiceSearchEna bled();
219 } 240 }
220 241
242 @Override
243 public boolean isInterestsEnabled() {
244 return CommandLine.getInstance().hasSwitch(ChromeSwitches.ENABLE_INT ERESTS)
245 && ChromeSigninController.get(mActivity).isSignedIn();
246 }
247
221 private void recordOpenedMostVisitedItem(MostVisitedItem item) { 248 private void recordOpenedMostVisitedItem(MostVisitedItem item) {
222 if (mIsDestroyed) return; 249 if (mIsDestroyed) return;
223 NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_MOST_VISITED_ ENTRY); 250 NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_MOST_VISITED_ ENTRY);
224 NewTabPageUma.recordExplicitUserNavigation( 251 NewTabPageUma.recordExplicitUserNavigation(
225 item.getUrl(), NewTabPageUma.RAPPOR_ACTION_VISITED_SUGGESTED _TILE); 252 item.getUrl(), NewTabPageUma.RAPPOR_ACTION_VISITED_SUGGESTED _TILE);
226 RecordHistogram.recordMediumTimesHistogram("NewTabPage.MostVisitedTi me", 253 RecordHistogram.recordMediumTimesHistogram("NewTabPage.MostVisitedTi me",
227 System.nanoTime() - mLastShownTimeNs, TimeUnit.NANOSECONDS); 254 System.nanoTime() - mLastShownTimeNs, TimeUnit.NANOSECONDS);
228 mMostVisitedSites.recordOpenedMostVisitedItem(item.getIndex(), item. getTileType()); 255 mMostVisitedSites.recordOpenedMostVisitedItem(item.getIndex(), item. getTileType());
229 } 256 }
230 257
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 if (mIsDestroyed) return; 400 if (mIsDestroyed) return;
374 RecordUserAction.record("MobileNTPSwitchToOpenTabs"); 401 RecordUserAction.record("MobileNTPSwitchToOpenTabs");
375 if (FeatureUtilities.isDocumentMode(mActivity)) { 402 if (FeatureUtilities.isDocumentMode(mActivity)) {
376 launchRecentTabsDialog(mActivity, mTab); 403 launchRecentTabsDialog(mActivity, mTab);
377 } else { 404 } else {
378 mTab.loadUrl(new LoadUrlParams(UrlConstants.RECENT_TABS_URL)); 405 mTab.loadUrl(new LoadUrlParams(UrlConstants.RECENT_TABS_URL));
379 } 406 }
380 } 407 }
381 408
382 @Override 409 @Override
410 public void navigateToInterests() {
411 if (mIsDestroyed) return;
412 RecordUserAction.record("MobileNTP.Interests.OpenDialog");
413 // TODO(peconn): Make this load a native page on tablets.
414 launchInterestsDialog(mActivity, mTab);
415 }
416
417 @Override
383 public void focusSearchBox(boolean beginVoiceSearch, String pastedText) { 418 public void focusSearchBox(boolean beginVoiceSearch, String pastedText) {
384 if (mIsDestroyed) return; 419 if (mIsDestroyed) return;
385 if (mFakeboxDelegate != null) { 420 if (mFakeboxDelegate != null) {
386 if (beginVoiceSearch) { 421 if (beginVoiceSearch) {
387 mFakeboxDelegate.startVoiceRecognition(); 422 mFakeboxDelegate.startVoiceRecognition();
388 } else { 423 } else {
389 mFakeboxDelegate.requestUrlFocusFromFakebox(pastedText); 424 mFakeboxDelegate.requestUrlFocusFromFakebox(pastedText);
390 } 425 }
391 } 426 }
392 } 427 }
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 public void onBookmarkSelected(String url, String title, Bitmap favicon) { 797 public void onBookmarkSelected(String url, String title, Bitmap favicon) {
763 if (mDialog != null) mDialog.dismiss(); 798 if (mDialog != null) mDialog.dismiss();
764 mTab.loadUrl(new LoadUrlParams(url)); 799 mTab.loadUrl(new LoadUrlParams(url));
765 } 800 }
766 801
767 public void setDialog(Dialog dialog) { 802 public void setDialog(Dialog dialog) {
768 mDialog = dialog; 803 mDialog = dialog;
769 } 804 }
770 } 805 }
771 } 806 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698