Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/ContextMenuManager.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/ContextMenuManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/ContextMenuManager.java |
index 8a290a96734fb3906a81f876440ee482fa62f0f8..79910e5857edb491729a8f3a898764bae5f45968 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/ContextMenuManager.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/ContextMenuManager.java |
@@ -17,6 +17,7 @@ |
import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; |
import org.chromium.chrome.browser.ntp.snippets.SnippetsConfig; |
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; |
+import org.chromium.chrome.browser.tab.Tab; |
import org.chromium.ui.base.WindowAndroid.OnCloseContextMenuListener; |
import org.chromium.ui.mojom.WindowOpenDisposition; |
@@ -42,10 +43,9 @@ |
public static final int ID_SAVE_FOR_OFFLINE = 3; |
public static final int ID_REMOVE = 4; |
- private final Activity mActivity; |
private final NewTabPageManager mManager; |
+ private final Tab mTab; |
private final TouchDisableableView mOuterView; |
- private boolean mContextMenuOpen; |
/** Defines callback to configure the context menu and respond to user interaction. */ |
public interface Delegate { |
@@ -65,10 +65,10 @@ |
/** Interface for a view that can be set to stop responding to touches. */ |
public interface TouchDisableableView { void setTouchEnabled(boolean enabled); } |
- public ContextMenuManager(Activity activity, NewTabPageManager newTabPageManager, |
- TouchDisableableView outerView) { |
- mActivity = activity; |
+ public ContextMenuManager( |
+ NewTabPageManager newTabPageManager, Tab tab, TouchDisableableView outerView) { |
mManager = newTabPageManager; |
+ mTab = tab; |
mOuterView = outerView; |
} |
@@ -111,19 +111,22 @@ |
// or swiping to dismiss an item (eg. https://crbug.com/638854, https://crbug.com/638555, |
// https://crbug.com/636296) |
mOuterView.setTouchEnabled(false); |
- mContextMenuOpen = true; |
+ |
+ mTab.getWindowAndroid().addContextMenuCloseListener(this); |
} |
@Override |
public void onContextMenuClosed() { |
- if (!mContextMenuOpen) return; |
mOuterView.setTouchEnabled(true); |
- mContextMenuOpen = false; |
+ mTab.getWindowAndroid().removeContextMenuCloseListener(this); |
} |
/** Closes the context menu, if open. */ |
public void closeContextMenu() { |
- mActivity.closeContextMenu(); |
+ Activity activity = mTab.getWindowAndroid().getActivity().get(); |
+ if (activity == null) return; |
+ |
+ activity.closeContextMenu(); |
} |
private boolean shouldShowItem(@ContextMenuItemId int itemId, Delegate delegate) { |