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 71b17ddef8f2a2e72d7bb75dc069781fa06dd969..765277e2faefd6028294c5fdda571d6ac2e81163 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; |
@@ -43,6 +44,8 @@ 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; |
@@ -70,10 +73,14 @@ 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.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; |
import org.chromium.content_public.browser.WebContents; |
+import org.chromium.net.NetError; |
import org.chromium.ui.UiUtils; |
import org.chromium.ui.base.DeviceFormFactor; |
import org.chromium.ui.base.PageTransition; |
@@ -469,6 +476,8 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe |
mToolbar.onNavigatedToDifferentPage(); |
} |
+ displayFeatureEngagementTextBubbleIfNecessary(tab, errorCode); |
+ |
// If the load failed due to a different navigation, there is no need to reset the |
// location bar animations. |
if (errorCode != 0 && isInMainFrame && !hasPendingNonNtpNavigation(tab)) { |
@@ -480,6 +489,37 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe |
if (mToolbar.getProgressBar() != null) mToolbar.getProgressBar().finish(false); |
} |
} |
+ |
+ private void displayFeatureEngagementTextBubbleIfNecessary(Tab tab, int errorCode) { |
David Trainor- moved to gerrit
2017/04/13 03:58:24
Should we dismiss the bubble if the page navigates
|
+ final FeatureEngagementTracker tracker = |
+ FeatureEngagementTrackerFactory.getFeatureEngagementTrackerForProfile( |
+ tab.getProfile()); |
+ |
+ if (errorCode == NetError.ERR_INTERNET_DISCONNECTED) { |
+ tracker.notifyEvent(FeatureConstants.USER_HAS_SEEN_DINO_EVENT); |
+ return; |
+ } |
+ |
+ boolean shouldTrigger = false; |
+ if (errorCode == 0 && DownloadUtils.isAllowedToDownloadPage(tab)) { |
+ shouldTrigger = |
+ tracker.shouldTriggerHelpUI(FeatureConstants.DOWNLOAD_PAGE_FEATURE); |
+ } |
+ |
+ if (!shouldTrigger) return; |
+ |
+ ViewAnchoredTextBubble textBubble = |
+ new ViewAnchoredTextBubble(mToolbar.getContext(), getMenuAnchor(), |
+ R.string.iph_download_page_for_offline_usage_text); |
+ textBubble.setDismissOnTouchInteraction(true); |
+ textBubble.setOnDismissListener(new OnDismissListener() { |
+ @Override |
+ public void onDismiss() { |
+ tracker.dismissed(); |
+ } |
+ }); |
+ textBubble.show(); |
+ } |
}; |
mBookmarksObserver = new BookmarkBridge.BookmarkModelObserver() { |