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 |