Commit 06e87ea8 authored by Becky Zhou's avatar Becky Zhou Committed by Commit Bot

[Feed] Disable touch event on context menu opened or URL bar focused

Bug: 862425
Change-Id: I317be9b1cd25e921c04712fe0e04cdd0d77bd27b
Reviewed-on: https://chromium-review.googlesource.com/1185377Reviewed-by: default avatarTheresa <twellington@chromium.org>
Commit-Queue: Becky Zhou <huayinz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#585235}
parent 0d326b48
...@@ -11,6 +11,7 @@ import android.graphics.Canvas; ...@@ -11,6 +11,7 @@ import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.widget.FrameLayout; import android.widget.FrameLayout;
...@@ -32,7 +33,6 @@ import org.chromium.chrome.browser.ChromeActivity; ...@@ -32,7 +33,6 @@ import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.feed.action.FeedActionHandler; import org.chromium.chrome.browser.feed.action.FeedActionHandler;
import org.chromium.chrome.browser.native_page.NativePageHost; import org.chromium.chrome.browser.native_page.NativePageHost;
import org.chromium.chrome.browser.ntp.ContextMenuManager; import org.chromium.chrome.browser.ntp.ContextMenuManager;
import org.chromium.chrome.browser.ntp.ContextMenuManager.TouchEnabledDelegate;
import org.chromium.chrome.browser.ntp.NewTabPage; import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.ntp.NewTabPageLayout; import org.chromium.chrome.browser.ntp.NewTabPageLayout;
import org.chromium.chrome.browser.ntp.SnapScrollHelper; import org.chromium.chrome.browser.ntp.SnapScrollHelper;
...@@ -56,7 +56,7 @@ import java.util.List; ...@@ -56,7 +56,7 @@ import java.util.List;
/** /**
* Provides a new tab page that displays an interest feed rendered list of content suggestions. * Provides a new tab page that displays an interest feed rendered list of content suggestions.
*/ */
public class FeedNewTabPage extends NewTabPage implements TouchEnabledDelegate { public class FeedNewTabPage extends NewTabPage {
private final FeedNewTabPageMediator mMediator; private final FeedNewTabPageMediator mMediator;
private final StreamLifecycleManager mStreamLifecycleManager; private final StreamLifecycleManager mStreamLifecycleManager;
private final Stream mStream; private final Stream mStream;
...@@ -174,6 +174,12 @@ public class FeedNewTabPage extends NewTabPage implements TouchEnabledDelegate { ...@@ -174,6 +174,12 @@ public class FeedNewTabPage extends NewTabPage implements TouchEnabledDelegate {
super.onConfigurationChanged(newConfig); super.onConfigurationChanged(newConfig);
mUiConfig.updateDisplayStyle(); mUiConfig.updateDisplayStyle();
} }
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return !mMediator.getTouchEnabled() || mFakeboxDelegate.isUrlBarFocused()
|| super.onInterceptTouchEvent(ev);
}
} }
/** /**
...@@ -227,8 +233,8 @@ public class FeedNewTabPage extends NewTabPage implements TouchEnabledDelegate { ...@@ -227,8 +233,8 @@ public class FeedNewTabPage extends NewTabPage implements TouchEnabledDelegate {
// TODO(twellington): Move this somewhere it can be shared with NewTabPageView? // TODO(twellington): Move this somewhere it can be shared with NewTabPageView?
Runnable closeContextMenuCallback = () -> mTab.getActivity().closeContextMenu(); Runnable closeContextMenuCallback = () -> mTab.getActivity().closeContextMenu();
ContextMenuManager contextMenuManager = ContextMenuManager contextMenuManager =
new ContextMenuManager(mNewTabPageManager.getNavigationDelegate(), new ContextMenuManager(mNewTabPageManager.getNavigationDelegate(), mMediator,
this::setTouchEnabled, closeContextMenuCallback, false); closeContextMenuCallback, false);
mTab.getWindowAndroid().addContextMenuCloseListener(contextMenuManager); mTab.getWindowAndroid().addContextMenuCloseListener(contextMenuManager);
mNewTabPageLayout.initialize(mNewTabPageManager, mTab, mTileGroupDelegate, mNewTabPageLayout.initialize(mNewTabPageManager, mTab, mTileGroupDelegate,
...@@ -298,13 +304,6 @@ public class FeedNewTabPage extends NewTabPage implements TouchEnabledDelegate { ...@@ -298,13 +304,6 @@ public class FeedNewTabPage extends NewTabPage implements TouchEnabledDelegate {
return mSectionHeaderView; return mSectionHeaderView;
} }
// TouchEnabledDelegate interface.
@Override
public void setTouchEnabled(boolean enabled) {
// TODO(twellington): implement this method.
}
/** /**
* Configures the {@link FeedNewTabPage} for testing. * Configures the {@link FeedNewTabPage} for testing.
* @param inTestMode Whether test mode is enabled. If true, test implementations of Feed * @param inTestMode Whether test mode is enabled. If true, test implementations of Feed
......
...@@ -13,6 +13,7 @@ import com.google.android.libraries.feed.api.stream.Stream; ...@@ -13,6 +13,7 @@ import com.google.android.libraries.feed.api.stream.Stream;
import org.chromium.base.MemoryPressureListener; import org.chromium.base.MemoryPressureListener;
import org.chromium.base.memory.MemoryPressureCallback; import org.chromium.base.memory.MemoryPressureCallback;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ntp.ContextMenuManager;
import org.chromium.chrome.browser.ntp.NewTabPageLayout; import org.chromium.chrome.browser.ntp.NewTabPageLayout;
import org.chromium.chrome.browser.ntp.SnapScrollHelper; import org.chromium.chrome.browser.ntp.SnapScrollHelper;
import org.chromium.chrome.browser.ntp.snippets.SectionHeader; import org.chromium.chrome.browser.ntp.snippets.SectionHeader;
...@@ -24,7 +25,8 @@ import org.chromium.chrome.browser.preferences.PrefServiceBridge; ...@@ -24,7 +25,8 @@ import org.chromium.chrome.browser.preferences.PrefServiceBridge;
* A mediator for the {@link FeedNewTabPage} responsible for interacting with the * A mediator for the {@link FeedNewTabPage} responsible for interacting with the
* native library and handling business logic. * native library and handling business logic.
*/ */
class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate { class FeedNewTabPageMediator
implements NewTabPageLayout.ScrollDelegate, ContextMenuManager.TouchEnabledDelegate {
private final FeedNewTabPage mCoordinator; private final FeedNewTabPage mCoordinator;
private final SnapScrollHelper mSnapScrollHelper; private final SnapScrollHelper mSnapScrollHelper;
private final PrefChangeRegistrar mPrefChangeRegistrar; private final PrefChangeRegistrar mPrefChangeRegistrar;
...@@ -34,6 +36,7 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate { ...@@ -34,6 +36,7 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
private SectionHeader mSectionHeader; private SectionHeader mSectionHeader;
private MemoryPressureCallback mMemoryPressureCallback; private MemoryPressureCallback mMemoryPressureCallback;
private boolean mTouchEnabled = true;
private boolean mStreamContentChanged; private boolean mStreamContentChanged;
private int mThumbnailWidth; private int mThumbnailWidth;
private int mThumbnailHeight; private int mThumbnailHeight;
...@@ -136,6 +139,21 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate { ...@@ -136,6 +139,21 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
mStreamContentChanged = false; mStreamContentChanged = false;
} }
/**
* @return Whether the touch events are enabled on the {@link FeedNewTabPage}.
* TODO(huayinz): Move this method to a Model once a Model is introduced.
*/
boolean getTouchEnabled() {
return mTouchEnabled;
}
// TouchEnabledDelegate interface.
@Override
public void setTouchEnabled(boolean enabled) {
mTouchEnabled = enabled;
}
// ScrollDelegate interface. // ScrollDelegate interface.
@Override @Override
......
...@@ -92,7 +92,7 @@ public class NewTabPage ...@@ -92,7 +92,7 @@ public class NewTabPage
private TabObserver mTabObserver; private TabObserver mTabObserver;
protected boolean mSearchProviderHasLogo; protected boolean mSearchProviderHasLogo;
private FakeboxDelegate mFakeboxDelegate; protected FakeboxDelegate mFakeboxDelegate;
private LocationBarVoiceRecognitionHandler mVoiceRecognitionHandler; private LocationBarVoiceRecognitionHandler mVoiceRecognitionHandler;
// The timestamp at which the constructor was called. // The timestamp at which the constructor was called.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment