| 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 |