Chromium Code Reviews| 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 0f5a9fd65b148cb083aecbaa42765471a484dd7b..4e767d11722d5e6752ba78d410e30a28802d8e98 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; |
| @@ -1857,6 +1863,8 @@ public class Tab |
| for (TabObserver observer : mObservers) observer.onDestroyed(this); |
| mObservers.clear(); |
| + hideMediaDownloadInProductHelp(); |
| + |
| NativePage currentNativePage = mNativePage; |
| mNativePage = null; |
| destroyNativePageInternal(currentNativePage); |
| @@ -3110,6 +3118,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)) { |
|
mlamouri (slow - plz ping)
2017/07/25 17:29:08
Maybe you could do:
```
if (!tracker.shouldTrigger
Khushal
2017/08/03 02:41:21
Done.
|
| + 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. |
| + nativeMediaDownloadInProductHelpDismissed(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); |
| + nativeMediaDownloadInProductHelpDismissed(mNativeTabAndroid); |
| + } |
| + |
| private native void nativeInit(); |
| private native void nativeDestroy(long nativeTabAndroid); |
| private native void nativeInitWebContents(long nativeTabAndroid, boolean incognito, |
| @@ -3144,4 +3196,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 nativeMediaDownloadInProductHelpDismissed(long nativeTabAndroid); |
| } |