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.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 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.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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |