| Index: chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
|
| index 05424a1ee0886db14bf52e7539ab60ca7f6bc69c..4d577440eac97f447fc725050ccafcc30979cab1 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
|
| @@ -87,6 +87,7 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelector;
|
| import org.chromium.chrome.browser.tabmodel.TabReparentingParams;
|
| import org.chromium.chrome.browser.util.ColorUtils;
|
| import org.chromium.chrome.browser.util.FeatureUtilities;
|
| +import org.chromium.chrome.browser.widget.textbubble.TextBubble;
|
| import org.chromium.chrome.browser.widget.textbubble.ViewAnchoredTextBubble;
|
| import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
|
| import org.chromium.components.feature_engagement_tracker.EventConstants;
|
| @@ -382,6 +383,11 @@ public class Tab
|
|
|
| private ChromeDownloadDelegate mDownloadDelegate;
|
|
|
| + /**
|
| + * The Text bubble used to display In Product help widget for download feature on videos.
|
| + */
|
| + private TextBubble mDownloadIPHBubble;
|
| +
|
| /** Whether or not the tab closing the tab can send the user back to the app that opened it. */
|
| private boolean mIsAllowedToReturnToExternalApp;
|
|
|
| @@ -1856,6 +1862,8 @@ public class Tab
|
| for (TabObserver observer : mObservers) observer.onDestroyed(this);
|
| mObservers.clear();
|
|
|
| + hideMediaDownloadInProductHelp();
|
| +
|
| NativePage currentNativePage = mNativePage;
|
| mNativePage = null;
|
| destroyNativePageInternal(currentNativePage);
|
| @@ -3104,6 +3112,50 @@ public class Tab
|
| nativeEnableEmbeddedMediaExperience(mNativeTabAndroid, enabled);
|
| }
|
|
|
| + @CalledByNative
|
| + private void showMediaDownloadInProductHelp(int x, int y, int width, int height) {
|
| + // If we are not currently showing the widget, ask the tracker if we can show it.
|
| + if (mDownloadIPHBubble == null) {
|
| + FeatureEngagementTracker tracker =
|
| + FeatureEngagementTrackerFactory.getFeatureEngagementTrackerForProfile(
|
| + getProfile());
|
| + tracker.notifyEvent(EventConstants.MEDIA_DOWNLOAD_BUTTON_DISPLAYED);
|
| + if (tracker.shouldTriggerHelpUI(FeatureConstants.MEDIA_DOWNLOAD_FEATURE)) {
|
| + mDownloadIPHBubble = new TextBubble(getApplicationContext(),
|
| + mContentViewCore.getContainerView(), R.string.iph_media_download_text,
|
| + R.string.iph_media_download_accessibility_text);
|
| + mDownloadIPHBubble.setDismissOnTouchInteraction(true);
|
| + mDownloadIPHBubble.addOnDismissListener(new OnDismissListener() {
|
| + @Override
|
| + public void onDismiss() {
|
| + hideMediaDownloadInProductHelp();
|
| + }
|
| + });
|
| + } else {
|
| + // Inform native that the button was dismissed to notify the renderer that the
|
| + // request was rejected.
|
| + nativeDownloadMediaInProductHelpDismissed(mNativeTabAndroid);
|
| + return;
|
| + }
|
| + }
|
| +
|
| + Rect rect = new Rect(x, y, x + width, y + height);
|
| + mDownloadIPHBubble.setAnchorRect(rect);
|
| + mDownloadIPHBubble.show();
|
| + }
|
| +
|
| + @CalledByNative
|
| + private void hideMediaDownloadInProductHelp() {
|
| + if (mDownloadIPHBubble == null) return;
|
| +
|
| + mDownloadIPHBubble.dismiss();
|
| + mDownloadIPHBubble = null;
|
| + FeatureEngagementTracker tracker =
|
| + FeatureEngagementTrackerFactory.getFeatureEngagementTrackerForProfile(getProfile());
|
| + tracker.dismissed(FeatureConstants.MEDIA_DOWNLOAD_FEATURE);
|
| + nativeDownloadMediaInProductHelpDismissed(mNativeTabAndroid);
|
| + }
|
| +
|
| private native void nativeInit();
|
| private native void nativeDestroy(long nativeTabAndroid);
|
| private native void nativeInitWebContents(long nativeTabAndroid, boolean incognito,
|
| @@ -3136,4 +3188,5 @@ public class Tab
|
| private native void nativeSetWebappManifestScope(long nativeTabAndroid, String scope);
|
| private native void nativeEnableEmbeddedMediaExperience(long nativeTabAndroid, boolean enabled);
|
| private native void nativeAttachDetachedTab(long nativeTabAndroid);
|
| + private native void nativeDownloadMediaInProductHelpDismissed(long nativeTabAndroid);
|
| }
|
|
|