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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java

Issue 2814843006: IPH - Added triggers for Download page (Closed)
Patch Set: nits Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
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() {

Powered by Google App Engine
This is Rietveld 408576698