| 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.app.Activity; | 7 import android.app.Activity; |
| 8 import android.app.Dialog; | 8 import android.app.Dialog; |
| 9 import android.content.Context; | 9 import android.content.Context; |
| 10 import android.graphics.Bitmap; | 10 import android.graphics.Bitmap; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 import org.chromium.chrome.browser.compositor.layouts.content.InvalidationAwareT
humbnailProvider; | 29 import org.chromium.chrome.browser.compositor.layouts.content.InvalidationAwareT
humbnailProvider; |
| 30 import org.chromium.chrome.browser.document.DocumentMetricIds; | 30 import org.chromium.chrome.browser.document.DocumentMetricIds; |
| 31 import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkUtils; | 31 import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkUtils; |
| 32 import org.chromium.chrome.browser.favicon.FaviconHelper; | 32 import org.chromium.chrome.browser.favicon.FaviconHelper; |
| 33 import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback; | 33 import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback; |
| 34 import org.chromium.chrome.browser.favicon.FaviconHelper.IconAvailabilityCallbac
k; | 34 import org.chromium.chrome.browser.favicon.FaviconHelper.IconAvailabilityCallbac
k; |
| 35 import org.chromium.chrome.browser.favicon.LargeIconBridge; | 35 import org.chromium.chrome.browser.favicon.LargeIconBridge; |
| 36 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback; | 36 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback; |
| 37 import org.chromium.chrome.browser.metrics.StartupMetrics; | 37 import org.chromium.chrome.browser.metrics.StartupMetrics; |
| 38 import org.chromium.chrome.browser.ntp.BookmarksPage.BookmarkSelectedListener; | 38 import org.chromium.chrome.browser.ntp.BookmarksPage.BookmarkSelectedListener; |
| 39 import org.chromium.chrome.browser.ntp.InterestsPage.InterestsClickListener; |
| 39 import org.chromium.chrome.browser.ntp.LogoBridge.Logo; | 40 import org.chromium.chrome.browser.ntp.LogoBridge.Logo; |
| 40 import org.chromium.chrome.browser.ntp.LogoBridge.LogoObserver; | 41 import org.chromium.chrome.browser.ntp.LogoBridge.LogoObserver; |
| 41 import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; | 42 import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; |
| 42 import org.chromium.chrome.browser.preferences.DocumentModeManager; | 43 import org.chromium.chrome.browser.preferences.DocumentModeManager; |
| 43 import org.chromium.chrome.browser.preferences.DocumentModePreference; | 44 import org.chromium.chrome.browser.preferences.DocumentModePreference; |
| 44 import org.chromium.chrome.browser.preferences.PrefServiceBridge; | 45 import org.chromium.chrome.browser.preferences.PrefServiceBridge; |
| 45 import org.chromium.chrome.browser.preferences.PreferencesLauncher; | 46 import org.chromium.chrome.browser.preferences.PreferencesLauncher; |
| 46 import org.chromium.chrome.browser.profiles.MostVisitedSites; | 47 import org.chromium.chrome.browser.profiles.MostVisitedSites; |
| 47 import org.chromium.chrome.browser.profiles.MostVisitedSites.MostVisitedURLsObse
rver; | 48 import org.chromium.chrome.browser.profiles.MostVisitedSites.MostVisitedURLsObse
rver; |
| 48 import org.chromium.chrome.browser.profiles.MostVisitedSites.ThumbnailCallback; | 49 import org.chromium.chrome.browser.profiles.MostVisitedSites.ThumbnailCallback; |
| 49 import org.chromium.chrome.browser.profiles.Profile; | 50 import org.chromium.chrome.browser.profiles.Profile; |
| 50 import org.chromium.chrome.browser.search_engines.TemplateUrlService; | 51 import org.chromium.chrome.browser.search_engines.TemplateUrlService; |
| 51 import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl
ServiceObserver; | 52 import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl
ServiceObserver; |
| 52 import org.chromium.chrome.browser.tab.EmptyTabObserver; | 53 import org.chromium.chrome.browser.tab.EmptyTabObserver; |
| 53 import org.chromium.chrome.browser.tab.Tab; | 54 import org.chromium.chrome.browser.tab.Tab; |
| 54 import org.chromium.chrome.browser.tab.TabObserver; | 55 import org.chromium.chrome.browser.tab.TabObserver; |
| 55 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; | 56 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; |
| 56 import org.chromium.chrome.browser.tabmodel.TabModelSelector; | 57 import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
| 57 import org.chromium.chrome.browser.util.FeatureUtilities; | 58 import org.chromium.chrome.browser.util.FeatureUtilities; |
| 58 import org.chromium.content_public.browser.LoadUrlParams; | 59 import org.chromium.content_public.browser.LoadUrlParams; |
| 59 import org.chromium.net.NetworkChangeNotifier; | 60 import org.chromium.net.NetworkChangeNotifier; |
| 61 import org.chromium.sync.signin.ChromeSigninController; |
| 60 import org.chromium.ui.base.DeviceFormFactor; | 62 import org.chromium.ui.base.DeviceFormFactor; |
| 61 import org.chromium.ui.base.PageTransition; | 63 import org.chromium.ui.base.PageTransition; |
| 62 | 64 |
| 63 import java.util.concurrent.TimeUnit; | 65 import java.util.concurrent.TimeUnit; |
| 64 | 66 |
| 65 import jp.tomorrowkey.android.gifplayer.BaseGifImage; | 67 import jp.tomorrowkey.android.gifplayer.BaseGifImage; |
| 66 | 68 |
| 67 /** | 69 /** |
| 68 * Provides functionality when the user interacts with the NTP. | 70 * Provides functionality when the user interacts with the NTP. |
| 69 */ | 71 */ |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 NativePage page = BookmarksPage.buildPageInDocumentMode( | 172 NativePage page = BookmarksPage.buildPageInDocumentMode( |
| 171 activity, tab, tabModelSelector, Profile.getLastUsedProfile(
), | 173 activity, tab, tabModelSelector, Profile.getLastUsedProfile(
), |
| 172 listener); | 174 listener); |
| 173 page.updateForUrl(UrlConstants.BOOKMARKS_URL); | 175 page.updateForUrl(UrlConstants.BOOKMARKS_URL); |
| 174 Dialog dialog = new NativePageDialog(activity, page); | 176 Dialog dialog = new NativePageDialog(activity, page); |
| 175 listener.setDialog(dialog); | 177 listener.setDialog(dialog); |
| 176 dialog.show(); | 178 dialog.show(); |
| 177 } | 179 } |
| 178 } | 180 } |
| 179 | 181 |
| 182 public static void launchInterestsDialog(Activity activity, final Tab tab) { |
| 183 InterestsPage page = |
| 184 new InterestsPage(activity, tab, Profile.getLastUsedProfile()); |
| 185 final Dialog dialog = new NativePageDialog(activity, page); |
| 186 |
| 187 InterestsClickListener listener = new InterestsClickListener() { |
| 188 @Override |
| 189 public void onInterestClicked(String name) { |
| 190 tab.loadUrl(new LoadUrlParams( |
| 191 TemplateUrlService.getInstance().getUrlForSearchQuery(na
me))); |
| 192 dialog.dismiss(); |
| 193 } |
| 194 }; |
| 195 |
| 196 page.setListener(listener); |
| 197 dialog.show(); |
| 198 } |
| 199 |
| 180 public static void launchRecentTabsDialog(Activity activity, Tab tab) { | 200 public static void launchRecentTabsDialog(Activity activity, Tab tab) { |
| 181 DocumentRecentTabsManager manager = new DocumentRecentTabsManager(tab, a
ctivity); | 201 DocumentRecentTabsManager manager = new DocumentRecentTabsManager(tab, a
ctivity); |
| 182 NativePage page = new RecentTabsPage(activity, manager); | 202 NativePage page = new RecentTabsPage(activity, manager); |
| 183 page.updateForUrl(UrlConstants.RECENT_TABS_URL); | 203 page.updateForUrl(UrlConstants.RECENT_TABS_URL); |
| 184 Dialog dialog = new NativePageDialog(activity, page); | 204 Dialog dialog = new NativePageDialog(activity, page); |
| 185 manager.setDialog(dialog); | 205 manager.setDialog(dialog); |
| 186 dialog.show(); | 206 dialog.show(); |
| 187 } | 207 } |
| 188 | 208 |
| 189 @VisibleForTesting | 209 @VisibleForTesting |
| 190 static void setMostVisitedSitesForTests(MostVisitedSites mostVisitedSitesFor
Tests) { | 210 static void setMostVisitedSitesForTests(MostVisitedSites mostVisitedSitesFor
Tests) { |
| 191 sMostVisitedSitesForTests = mostVisitedSitesForTests; | 211 sMostVisitedSitesForTests = mostVisitedSitesForTests; |
| 192 } | 212 } |
| 193 | 213 |
| 194 private final NewTabPageManager mNewTabPageManager = new NewTabPageManager()
{ | 214 private final NewTabPageManager mNewTabPageManager = new NewTabPageManager()
{ |
| 195 @Override | 215 @Override |
| 196 public boolean isLocationBarShownInNTP() { | 216 public boolean isLocationBarShownInNTP() { |
| 197 if (mIsDestroyed) return false; | 217 if (mIsDestroyed) return false; |
| 198 Context context = mNewTabPageView.getContext(); | 218 Context context = mNewTabPageView.getContext(); |
| 199 return isInSingleUrlBarMode(context) | 219 return isInSingleUrlBarMode(context) |
| 200 && !mNewTabPageView.urlFocusAnimationsDisabled(); | 220 && !mNewTabPageView.urlFocusAnimationsDisabled(); |
| 201 } | 221 } |
| 202 | 222 |
| 203 @Override | 223 @Override |
| 204 public boolean isVoiceSearchEnabled() { | 224 public boolean isVoiceSearchEnabled() { |
| 205 return mFakeboxDelegate != null && mFakeboxDelegate.isVoiceSearchEna
bled(); | 225 return mFakeboxDelegate != null && mFakeboxDelegate.isVoiceSearchEna
bled(); |
| 206 } | 226 } |
| 207 | 227 |
| 228 @Override |
| 229 public boolean isUserSignedIn() { |
| 230 return ChromeSigninController.get(mActivity).isSignedIn(); |
| 231 } |
| 232 |
| 208 private void recordOpenedMostVisitedItem(MostVisitedItem item) { | 233 private void recordOpenedMostVisitedItem(MostVisitedItem item) { |
| 209 if (mIsDestroyed) return; | 234 if (mIsDestroyed) return; |
| 210 NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_MOST_VISITED_
ENTRY); | 235 NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_MOST_VISITED_
ENTRY); |
| 211 NewTabPageUma.recordExplicitUserNavigation( | 236 NewTabPageUma.recordExplicitUserNavigation( |
| 212 item.getUrl(), NewTabPageUma.RAPPOR_ACTION_VISITED_SUGGESTED
_TILE); | 237 item.getUrl(), NewTabPageUma.RAPPOR_ACTION_VISITED_SUGGESTED
_TILE); |
| 213 RecordHistogram.recordMediumTimesHistogram("NewTabPage.MostVisitedTi
me", | 238 RecordHistogram.recordMediumTimesHistogram("NewTabPage.MostVisitedTi
me", |
| 214 System.nanoTime() - mLastShownTimeNs, TimeUnit.NANOSECONDS); | 239 System.nanoTime() - mLastShownTimeNs, TimeUnit.NANOSECONDS); |
| 215 mMostVisitedSites.recordOpenedMostVisitedItem(item.getIndex(), item.
getTileType()); | 240 mMostVisitedSites.recordOpenedMostVisitedItem(item.getIndex(), item.
getTileType()); |
| 216 } | 241 } |
| 217 | 242 |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 if (mIsDestroyed) return; | 341 if (mIsDestroyed) return; |
| 317 RecordUserAction.record("MobileNTPSwitchToOpenTabs"); | 342 RecordUserAction.record("MobileNTPSwitchToOpenTabs"); |
| 318 if (FeatureUtilities.isDocumentMode(mActivity)) { | 343 if (FeatureUtilities.isDocumentMode(mActivity)) { |
| 319 launchRecentTabsDialog(mActivity, mTab); | 344 launchRecentTabsDialog(mActivity, mTab); |
| 320 } else { | 345 } else { |
| 321 mTab.loadUrl(new LoadUrlParams(UrlConstants.RECENT_TABS_URL)); | 346 mTab.loadUrl(new LoadUrlParams(UrlConstants.RECENT_TABS_URL)); |
| 322 } | 347 } |
| 323 } | 348 } |
| 324 | 349 |
| 325 @Override | 350 @Override |
| 351 public void navigateToInterests() { |
| 352 if (mIsDestroyed) return; |
| 353 RecordUserAction.record("MobileNTP.Interests.OpenDialog"); |
| 354 // TODO(peconn): Make this load a native page on tablets. |
| 355 launchInterestsDialog(mActivity, mTab); |
| 356 } |
| 357 |
| 358 @Override |
| 326 public void focusSearchBox(boolean beginVoiceSearch, String pastedText)
{ | 359 public void focusSearchBox(boolean beginVoiceSearch, String pastedText)
{ |
| 327 if (mIsDestroyed) return; | 360 if (mIsDestroyed) return; |
| 328 if (mFakeboxDelegate != null) { | 361 if (mFakeboxDelegate != null) { |
| 329 if (beginVoiceSearch) { | 362 if (beginVoiceSearch) { |
| 330 mFakeboxDelegate.startVoiceRecognition(); | 363 mFakeboxDelegate.startVoiceRecognition(); |
| 331 } else { | 364 } else { |
| 332 mFakeboxDelegate.requestUrlFocusFromFakebox(pastedText); | 365 mFakeboxDelegate.requestUrlFocusFromFakebox(pastedText); |
| 333 } | 366 } |
| 334 } | 367 } |
| 335 } | 368 } |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 694 public void onBookmarkSelected(String url, String title, Bitmap favicon)
{ | 727 public void onBookmarkSelected(String url, String title, Bitmap favicon)
{ |
| 695 if (mDialog != null) mDialog.dismiss(); | 728 if (mDialog != null) mDialog.dismiss(); |
| 696 mTab.loadUrl(new LoadUrlParams(url)); | 729 mTab.loadUrl(new LoadUrlParams(url)); |
| 697 } | 730 } |
| 698 | 731 |
| 699 public void setDialog(Dialog dialog) { | 732 public void setDialog(Dialog dialog) { |
| 700 mDialog = dialog; | 733 mDialog = dialog; |
| 701 } | 734 } |
| 702 } | 735 } |
| 703 } | 736 } |
| OLD | NEW |