| Index: chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
|
| index 560c3030fb240b4584d0d25ef99cbcabda797b7f..411f44b825cdbaa06ac749306e49aceb50b9b693 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
|
| @@ -18,6 +18,7 @@ import android.view.View.OnAttachStateChangeListener;
|
| import android.view.View.OnClickListener;
|
| import android.view.ViewGroup.MarginLayoutParams;
|
| import android.widget.FrameLayout;
|
| +import android.widget.PopupWindow.OnDismissListener;
|
|
|
| import org.chromium.base.ApiCompatibilityUtils;
|
| import org.chromium.base.Callback;
|
| @@ -27,6 +28,7 @@ import org.chromium.base.metrics.RecordHistogram;
|
| import org.chromium.base.metrics.RecordUserAction;
|
| import org.chromium.chrome.R;
|
| import org.chromium.chrome.browser.ChromeActivity;
|
| +import org.chromium.chrome.browser.ChromeTabbedActivity;
|
| import org.chromium.chrome.browser.NativePage;
|
| import org.chromium.chrome.browser.TabLoadStatus;
|
| import org.chromium.chrome.browser.UrlConstants;
|
| @@ -43,11 +45,14 @@ import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
|
| import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
|
| import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior.OverviewModeObserver;
|
| import org.chromium.chrome.browser.compositor.layouts.SceneChangeObserver;
|
| +import org.chromium.chrome.browser.download.DownloadUtils;
|
| +import org.chromium.chrome.browser.feature_engagement_tracker.FeatureEngagementTrackerFactory;
|
| import org.chromium.chrome.browser.fullscreen.BrowserStateBrowserControlsVisibilityDelegate;
|
| import org.chromium.chrome.browser.fullscreen.FullscreenManager;
|
| import org.chromium.chrome.browser.ntp.IncognitoNewTabPage;
|
| import org.chromium.chrome.browser.ntp.NativePageFactory;
|
| import org.chromium.chrome.browser.ntp.NewTabPage;
|
| +import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
|
| import org.chromium.chrome.browser.omnibox.LocationBar;
|
| import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener;
|
| import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
|
| @@ -70,6 +75,10 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver;
|
| import org.chromium.chrome.browser.toolbar.ActionModeController.ActionBarDelegate;
|
| import org.chromium.chrome.browser.widget.findinpage.FindToolbarManager;
|
| import org.chromium.chrome.browser.widget.findinpage.FindToolbarObserver;
|
| +import org.chromium.chrome.browser.widget.textbubble.ViewAnchoredTextBubble;
|
| +import org.chromium.components.feature_engagement_tracker.EventConstants;
|
| +import org.chromium.components.feature_engagement_tracker.FeatureConstants;
|
| +import org.chromium.components.feature_engagement_tracker.FeatureEngagementTracker;
|
| import org.chromium.content_public.browser.LoadUrlParams;
|
| import org.chromium.content_public.browser.NavigationController;
|
| import org.chromium.content_public.browser.NavigationEntry;
|
| @@ -139,6 +148,7 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe
|
| private final ActionModeController mActionModeController;
|
| private final LoadProgressSimulator mLoadProgressSimulator;
|
| private final Callback<Boolean> mUrlFocusChangedCallback;
|
| + private final Handler mHandler = new Handler();
|
|
|
| private BrowserStateBrowserControlsVisibilityDelegate mControlsVisibilityDelegate;
|
| private int mFullscreenFocusToken = FullscreenManager.INVALID_TOKEN;
|
| @@ -153,6 +163,8 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe
|
|
|
| private AppMenuButtonHelper mAppMenuButtonHelper;
|
|
|
| + private ViewAnchoredTextBubble mTextBubble;
|
| +
|
| private HomepageStateListener mHomepageStateListener;
|
|
|
| private boolean mInitializedWithNative;
|
| @@ -340,6 +352,16 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe
|
| }
|
|
|
| @Override
|
| + public void onPageLoadFinished(Tab tab) {
|
| + if (tab.isShowingErrorPage()) {
|
| + handleIPHForErrorPageShown(tab);
|
| + return;
|
| + }
|
| +
|
| + handleIPHForSuccessfulPageLoad(tab);
|
| + }
|
| +
|
| + @Override
|
| public void onLoadStarted(Tab tab, boolean toDifferentDocument) {
|
| if (!toDifferentDocument) return;
|
| updateButtonStatus();
|
| @@ -481,6 +503,67 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe
|
| if (mToolbar.getProgressBar() != null) mToolbar.getProgressBar().finish(false);
|
| }
|
| }
|
| +
|
| + private void handleIPHForSuccessfulPageLoad(final Tab tab) {
|
| + if (mTextBubble != null) {
|
| + mTextBubble.dismiss();
|
| + mTextBubble = null;
|
| + return;
|
| + }
|
| +
|
| + // TODO(shaktisahu): Find out if the download menu button is enabled (crbug/712438).
|
| + if (!(activity instanceof ChromeTabbedActivity)
|
| + || DeviceFormFactor.isTablet(mToolbar.getContext())
|
| + || activity.isInOverviewMode()
|
| + || !DownloadUtils.isAllowedToDownloadPage(tab)) {
|
| + return;
|
| + }
|
| +
|
| + final FeatureEngagementTracker tracker =
|
| + FeatureEngagementTrackerFactory.getFeatureEngagementTrackerForProfile(
|
| + tab.getProfile());
|
| +
|
| + if (!tracker.shouldTriggerHelpUI(FeatureConstants.DOWNLOAD_PAGE_FEATURE)) return;
|
| +
|
| + mTextBubble = new ViewAnchoredTextBubble(mToolbar.getContext(), getMenuAnchor(),
|
| + R.string.iph_download_page_for_offline_usage_text);
|
| + mTextBubble.setDismissOnTouchInteraction(true);
|
| + mTextBubble.addOnDismissListener(new OnDismissListener() {
|
| + @Override
|
| + public void onDismiss() {
|
| + mHandler.post(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + tracker.dismissed();
|
| + activity.getAppMenuHandler().setMenuHighlight(null);
|
| + }
|
| + });
|
| + }
|
| + });
|
| + activity.getAppMenuHandler().setMenuHighlight(R.id.offline_page_id);
|
| + int yInsetPx = activity.getResources().getDimensionPixelOffset(
|
| + R.dimen.text_bubble_menu_anchor_y_inset);
|
| + mTextBubble.setInsetPx(0, yInsetPx, 0, 0);
|
| + mTextBubble.show();
|
| + }
|
| +
|
| + private void handleIPHForErrorPageShown(Tab tab) {
|
| + if (!(activity instanceof ChromeTabbedActivity)
|
| + || DeviceFormFactor.isTablet(mToolbar.getContext())) {
|
| + return;
|
| + }
|
| +
|
| + OfflinePageBridge bridge = OfflinePageBridge.getForProfile(tab.getProfile());
|
| + if (bridge == null
|
| + || !bridge.isShowingDownloadButtonInErrorPage(tab.getWebContents())) {
|
| + return;
|
| + }
|
| +
|
| + FeatureEngagementTracker tracker =
|
| + FeatureEngagementTrackerFactory.getFeatureEngagementTrackerForProfile(
|
| + tab.getProfile());
|
| + tracker.notifyEvent(EventConstants.USER_HAS_SEEN_DINO);
|
| + }
|
| };
|
|
|
| mBookmarksObserver = new BookmarkBridge.BookmarkModelObserver() {
|
|
|