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

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

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 months 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
(Empty)
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
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.ntp;
6
7 import android.annotation.TargetApi;
8 import android.app.Activity;
9 import android.app.Dialog;
10 import android.graphics.Bitmap;
11 import android.os.Build;
12 import android.view.ContextMenu;
13 import android.view.LayoutInflater;
14 import android.view.Menu;
15 import android.view.MenuItem.OnMenuItemClickListener;
16 import android.view.View;
17
18 import com.google.android.apps.chrome.R;
19
20 import org.chromium.base.metrics.RecordHistogram;
21 import org.chromium.base.metrics.RecordUserAction;
22 import org.chromium.chrome.browser.LogoBridge.LogoObserver;
23 import org.chromium.chrome.browser.NativePage;
24 import org.chromium.chrome.browser.Tab;
25 import org.chromium.chrome.browser.UrlConstants;
26 import org.chromium.chrome.browser.document.DocumentMetricIds;
27 import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkUtils;
28 import org.chromium.chrome.browser.favicon.FaviconHelper;
29 import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback;
30 import org.chromium.chrome.browser.favicon.LargeIconBridge;
31 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
32 import org.chromium.chrome.browser.ntp.BookmarksPage.BookmarkSelectedListener;
33 import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager;
34 import org.chromium.chrome.browser.preferences.DocumentModeManager;
35 import org.chromium.chrome.browser.preferences.DocumentModePreference;
36 import org.chromium.chrome.browser.preferences.PrefServiceBridge;
37 import org.chromium.chrome.browser.preferences.PreferencesLauncher;
38 import org.chromium.chrome.browser.profiles.MostVisitedSites;
39 import org.chromium.chrome.browser.profiles.MostVisitedSites.MostVisitedURLsObse rver;
40 import org.chromium.chrome.browser.profiles.MostVisitedSites.ThumbnailCallback;
41 import org.chromium.chrome.browser.profiles.Profile;
42 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
43 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
44 import org.chromium.content_public.browser.LoadUrlParams;
45 import org.chromium.ui.base.PageTransition;
46
47 /**
48 * Provides functionality when the user interacts with the most visited websites page.
49 */
50 public class DocumentNewTabPage implements NativePage {
51 private static final int ID_OPEN_IN_NEW_TAB = 0;
52 private static final int ID_OPEN_IN_INCOGNITO_TAB = 1;
53 private static final int ID_REMOVE = 2;
54
55 // The number of times that an opt-out promo will be shown.
56 private static final int MAX_OPT_OUT_PROMO_COUNT = 10;
57
58 private final Tab mTab;
59 private final TabModelSelector mTabModelSelector;
60 private final Activity mActivity;
61
62 private final Profile mProfile;
63 private final String mTitle;
64 private final int mBackgroundColor;
65 private final NewTabPageView mNewTabPageView;
66
67 private MostVisitedSites mMostVisitedSites;
68 private FaviconHelper mFaviconHelper;
69 private LargeIconBridge mLargeIconBridge;
70
71 private final NewTabPageManager mNewTabPageManager = new NewTabPageManager() {
72 private void recordOpenedMostVisitedItem(MostVisitedItem item) {
73 NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_MOST_VISITED_ ENTRY);
74 RecordHistogram.recordEnumeratedHistogram("NewTabPage.MostVisited", item.getIndex(),
75 NewTabPageView.MAX_MOST_VISITED_SITES);
76 mMostVisitedSites.recordOpenedMostVisitedItem(item.getIndex());
77 }
78
79 private void recordDocumentOptOutPromoClick(int which) {
80 RecordHistogram.recordEnumeratedHistogram("DocumentActivity.OptOutCl ick", which,
81 DocumentMetricIds.OPT_OUT_CLICK_COUNT);
82 }
83
84 @Override
85 public void open(MostVisitedItem item) {
86 String url = item.getUrl();
87 mTab.loadUrl(new LoadUrlParams(url, PageTransition.LINK));
88 }
89
90 @Override
91 public void onCreateContextMenu(ContextMenu menu, OnMenuItemClickListene r listener) {
92 menu.add(Menu.NONE, ID_OPEN_IN_NEW_TAB, Menu.NONE, R.string.contextm enu_open_in_new_tab)
93 .setOnMenuItemClickListener(listener);
94 if (PrefServiceBridge.getInstance().isIncognitoModeEnabled()) {
95 menu.add(Menu.NONE, ID_OPEN_IN_INCOGNITO_TAB, Menu.NONE,
96 R.string.contextmenu_open_in_incognito_tab).setOnMenuIte mClickListener(
97 listener);
98 }
99 menu.add(Menu.NONE, ID_REMOVE, Menu.NONE, R.string.remove)
100 .setOnMenuItemClickListener(listener);
101 }
102
103 @Override
104 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
105 public boolean onMenuItemClick(int menuId, MostVisitedItem item) {
106 switch (menuId) {
107 case ID_OPEN_IN_NEW_TAB:
108 recordOpenedMostVisitedItem(item);
109 mTabModelSelector.openNewTab(new LoadUrlParams(item.getUrl() ),
110 TabLaunchType.FROM_LONGPRESS_BACKGROUND, mTab, false );
111 return true;
112 case ID_OPEN_IN_INCOGNITO_TAB:
113 recordOpenedMostVisitedItem(item);
114 mActivity.finishAndRemoveTask();
115 mTabModelSelector.openNewTab(new LoadUrlParams(item.getUrl() ),
116 TabLaunchType.FROM_LONGPRESS_FOREGROUND, mTab, true) ;
117 return true;
118 case ID_REMOVE:
119 mMostVisitedSites.blacklistUrl(item.getUrl());
120 return true;
121 default:
122 return false;
123 }
124 }
125
126 @Override
127 public void setMostVisitedURLsObserver(MostVisitedURLsObserver observer, int numResults) {
128 mMostVisitedSites.setMostVisitedURLsObserver(observer, numResults);
129 }
130
131 @Override
132 public void getURLThumbnail(String url, ThumbnailCallback thumbnailCallb ack) {
133 mMostVisitedSites.getURLThumbnail(url, thumbnailCallback);
134 }
135
136 @Override
137 public void getLocalFaviconImageForURL(
138 String url, int size, FaviconImageCallback faviconCallback) {
139 if (mFaviconHelper == null) mFaviconHelper = new FaviconHelper();
140 mFaviconHelper.getLocalFaviconImageForURL(mProfile, url, FaviconHelp er.FAVICON
141 | FaviconHelper.TOUCH_ICON | FaviconHelper.TOUCH_PRECOMPOSED _ICON, size,
142 faviconCallback);
143 }
144
145 @Override
146 public void getLargeIconForUrl(String url, int size, LargeIconCallback c allback) {
147 if (mLargeIconBridge == null) mLargeIconBridge = new LargeIconBridge ();
148 mLargeIconBridge.getLargeIconForUrl(mProfile, url, size, callback);
149 }
150
151 @Override
152 public void onLoadingComplete() {
153 }
154
155 @Override
156 public void navigateToBookmarks() {
157 RecordUserAction.record("MobileNTPSwitchToBookmarks");
158 launchBookmarksDialog(mActivity, mTab, mTabModelSelector);
159 }
160
161 @Override
162 public void navigateToRecentTabs() {
163 RecordUserAction.record("MobileNTPSwitchToOpenTabs");
164 launchRecentTabsDialog(mActivity, mTab, true);
165 }
166
167 @Override
168 public boolean isLocationBarShownInNTP() {
169 return false;
170 }
171
172 @Override
173 public void focusSearchBox(boolean beginVoiceSearch, String pastedText) {
174 }
175
176 @Override
177 public void openLogoLink() {
178 }
179
180 @Override
181 public void getSearchProviderLogo(LogoObserver logoObserver) {
182 }
183
184 @Override
185 public boolean shouldShowOptOutPromo() {
186 DocumentModeManager documentModeManager = DocumentModeManager.getIns tance(mActivity);
187 return !documentModeManager.isOptOutPromoDismissed()
188 && (documentModeManager.getOptOutShownCount() < MAX_OPT_OUT_ PROMO_COUNT);
189 }
190
191 @Override
192 public void optOutPromoShown() {
193 DocumentModeManager.getInstance(mActivity).incrementOptOutShownCount ();
194 RecordUserAction.record("DocumentActivity_OptOutShownOnHome");
195 }
196
197 @Override
198 public void optOutPromoClicked(boolean settingsClicked) {
199 if (settingsClicked) {
200 recordDocumentOptOutPromoClick(DocumentMetricIds.OPT_OUT_CLICK_S ETTINGS);
201 PreferencesLauncher.launchSettingsPage(mActivity,
202 DocumentModePreference.class.getName());
203 } else {
204 recordDocumentOptOutPromoClick(DocumentMetricIds.OPT_OUT_CLICK_G OT_IT);
205 DocumentModeManager documentModeManager = DocumentModeManager.ge tInstance(
206 mActivity);
207 documentModeManager.setOptedOutState(DocumentModeManager.OPT_OUT _PROMO_DISMISSED);
208 }
209 }
210 };
211
212 /**
213 * Constructs a NewTabPage.
214 * @param activity Activity that owns the page.
215 * @param tab Tab displayed on the page.
216 */
217 public DocumentNewTabPage(Activity activity, Tab tab, TabModelSelector tabMo delSelector) {
218 mTab = tab;
219 mActivity = activity;
220 mTabModelSelector = tabModelSelector;
221 mProfile = tab.getProfile().getOriginalProfile();
222
223 mTitle = activity.getResources().getString(R.string.button_new_tab);
224 mBackgroundColor = activity.getResources().getColor(R.color.ntp_bg);
225
226 mMostVisitedSites = new MostVisitedSites(mProfile);
227
228 LayoutInflater inflater = LayoutInflater.from(activity);
229 mNewTabPageView = (NewTabPageView) inflater.inflate(R.layout.new_tab_pag e, null);
230 mNewTabPageView.initialize(mNewTabPageManager, false, false);
231 }
232
233 @Override
234 public View getView() {
235 return mNewTabPageView;
236 }
237
238 @Override
239 public void destroy() {
240 assert getView().getParent() == null : "Destroy called before removed fr om window";
241 if (mFaviconHelper != null) {
242 mFaviconHelper.destroy();
243 mFaviconHelper = null;
244 }
245 if (mLargeIconBridge != null) {
246 mLargeIconBridge.destroy();
247 mLargeIconBridge = null;
248 }
249 if (mMostVisitedSites != null) {
250 mMostVisitedSites.destroy();
251 mMostVisitedSites = null;
252 }
253 }
254
255 @Override
256 public String getTitle() {
257 return mTitle;
258 }
259
260 @Override
261 public String getUrl() {
262 return UrlConstants.NTP_URL;
263 }
264
265 @Override
266 public String getHost() {
267 return UrlConstants.NTP_HOST;
268 }
269
270 @Override
271 public int getBackgroundColor() {
272 return mBackgroundColor;
273 }
274
275 @Override
276 public void updateForUrl(String url) {
277 }
278
279 private static class BookmarkDialogSelectedListener implements BookmarkSelec tedListener {
280 private Dialog mDialog;
281 private final Tab mTab;
282
283 public BookmarkDialogSelectedListener(Tab tab) {
284 mTab = tab;
285 }
286
287 @Override
288 public void onNewTabOpened() {
289 if (mDialog != null) mDialog.dismiss();
290 }
291
292 @Override
293 public void onBookmarkSelected(String url, String title, Bitmap favicon) {
294 if (mDialog != null) mDialog.dismiss();
295 mTab.loadUrl(new LoadUrlParams(url));
296 }
297
298 public void setDialog(Dialog dialog) {
299 mDialog = dialog;
300 }
301 }
302
303 public static void launchBookmarksDialog(Activity activity, Tab tab,
304 TabModelSelector tabModelSelector) {
305 if (!EnhancedBookmarkUtils.showEnhancedBookmarkIfEnabled(activity)) {
306 BookmarkDialogSelectedListener listener = new BookmarkDialogSelected Listener(tab);
307 NativePage page = BookmarksPage.buildPageInDocumentMode(
308 activity, tab, tabModelSelector, Profile.getLastUsedProfile( ),
309 listener);
310 page.updateForUrl(UrlConstants.BOOKMARKS_URL);
311 Dialog dialog = new NativePageDialog(activity, page);
312 listener.setDialog(dialog);
313 dialog.show();
314 }
315 }
316
317 public static void launchRecentTabsDialog(Activity activity, Tab tab,
318 boolean finishActivityOnOpen) {
319 DocumentRecentTabsManager manager =
320 new DocumentRecentTabsManager(tab, activity, finishActivityOnOpe n);
321 NativePage page = new RecentTabsPage(activity, manager);
322 page.updateForUrl(UrlConstants.RECENT_TABS_URL);
323 Dialog dialog = new NativePageDialog(activity, page);
324 manager.setDialog(dialog);
325 dialog.show();
326 }
327 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698