Commit 3f6eba8c authored by Simeon Anfinrud's avatar Simeon Anfinrud Committed by Commit Bot

[Chromecast] Do not use custom logic to dispatch key events.

Android can default to the WebContents' default handling of key
events.

Merge-With: eureka-internal/326040

      verify that key events are plumbed to JavaScript.

Bug: Internal b/142758140
Test: cast_shell_junit_tests
Test: cast_shell_unittests
Test: Use chrome://inspect to monitor key events in Cast app to
Change-Id: Ibb4a50ab3832acfdfa6115f5771ff6b7ffbb5c73
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1865756
Commit-Queue: Simeon Anfinrud <sanfin@chromium.org>
Reviewed-by: default avatarLuke Halliwell <halliwell@chromium.org>
Reviewed-by: default avatarSean Topping <seantopping@chromium.org>
Cr-Commit-Position: refs/heads/master@{#707152}
parent 3861ed0b
......@@ -21,7 +21,6 @@ import org.chromium.content_public.browser.WebContents;
*/
@JNINamespace("chromecast::shell")
public class CastContentWindowAndroid implements CastWebContentsComponent.OnComponentClosedHandler,
CastWebContentsComponent.OnKeyDownHandler,
CastWebContentsComponent.SurfaceEventHandler {
private static final String TAG = "cr_CastContentWindow";
private static final boolean DEBUG = true;
......@@ -54,7 +53,7 @@ public class CastContentWindowAndroid implements CastWebContentsComponent.OnComp
+ ") Seesion ID: " + sessionId);
// TODO call CastContentWindowAndroidJni.get().getId() to set ID to
// CastWebContentsComponent.
mComponent = new CastWebContentsComponent(sessionId, this, this, this, isHeadless,
mComponent = new CastWebContentsComponent(sessionId, this, this, isHeadless,
enableTouchInput, isRemoteControlMode, turnOnScreen);
}
......@@ -105,15 +104,6 @@ public class CastContentWindowAndroid implements CastWebContentsComponent.OnComp
mComponent.requestMoveOut();
}
@Override
public void onKeyDown(int keyCode) {
if (DEBUG) Log.d(TAG, "onKeyDown");
if (mNativeCastContentWindowAndroid != 0) {
CastContentWindowAndroidJni.get().onKeyDown(
mNativeCastContentWindowAndroid, CastContentWindowAndroid.this, keyCode);
}
}
@Override
public void onComponentClosed() {
if (DEBUG) Log.d(TAG, "onComponentClosed");
......@@ -146,8 +136,6 @@ public class CastContentWindowAndroid implements CastWebContentsComponent.OnComp
interface Natives {
void onActivityStopped(
long nativeCastContentWindowAndroid, CastContentWindowAndroid caller);
void onKeyDown(
long nativeCastContentWindowAndroid, CastContentWindowAndroid caller, int keyCode);
boolean consumeGesture(long nativeCastContentWindowAndroid, CastContentWindowAndroid caller,
int gestureType);
void onVisibilityChange(long nativeCastContentWindowAndroid,
......
......@@ -13,7 +13,6 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
......@@ -235,16 +234,6 @@ public class CastWebContentsActivity extends Activity {
}
}
@Override
public boolean dispatchGenericMotionEvent(MotionEvent ev) {
return false;
}
@Override
public boolean dispatchKeyShortcutEvent(KeyEvent event) {
return false;
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (mSurfaceHelper != null && mSurfaceHelper.isTouchInputEnabled()) {
......@@ -254,11 +243,6 @@ public class CastWebContentsActivity extends Activity {
}
}
@Override
public boolean dispatchTrackballEvent(MotionEvent ev) {
return false;
}
private void turnScreenOn() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setTurnScreenOn(true);
......
......@@ -31,12 +31,6 @@ public class CastWebContentsComponent {
*/
public interface OnComponentClosedHandler { void onComponentClosed(); }
/**
* Callback interface for passing along keyDown events. This only applies
* to CastWebContentsActivity, really.
*/
public interface OnKeyDownHandler { void onKeyDown(int keyCode); }
/**
* Callback interface for when UI events occur.
*/
......@@ -157,7 +151,6 @@ public class CastWebContentsComponent {
private static final boolean DEBUG = true;
private final OnComponentClosedHandler mComponentClosedHandler;
private final OnKeyDownHandler mKeyDownHandler;
private final String mSessionId;
private final SurfaceEventHandler mSurfaceEventHandler;
private final Controller<WebContents> mHasWebContentsState = new Controller<>();
......@@ -168,7 +161,7 @@ public class CastWebContentsComponent {
private final boolean mTurnOnScreen;
public CastWebContentsComponent(String sessionId,
OnComponentClosedHandler onComponentClosedHandler, OnKeyDownHandler onKeyDownHandler,
OnComponentClosedHandler onComponentClosedHandler,
SurfaceEventHandler surfaceEventHandler, boolean isHeadless, boolean enableTouchInput,
boolean isRemoteControlMode, boolean turnOnScreen) {
if (DEBUG) {
......@@ -180,7 +173,6 @@ public class CastWebContentsComponent {
mComponentClosedHandler = onComponentClosedHandler;
mEnableTouchInput = enableTouchInput;
mKeyDownHandler = onKeyDownHandler;
mSessionId = sessionId;
mSurfaceEventHandler = surfaceEventHandler;
mIsRemoteControlMode = isRemoteControlMode;
......@@ -215,10 +207,6 @@ public class CastWebContentsComponent {
if (CastWebContentsIntentUtils.isIntentOfActivityStopped(intent)) {
if (DEBUG) Log.d(TAG, "onReceive ACTION_ACTIVITY_STOPPED instance=" + mSessionId);
if (mComponentClosedHandler != null) mComponentClosedHandler.onComponentClosed();
} else if (CastWebContentsIntentUtils.isIntentOfKeyEvent(intent)) {
if (DEBUG) Log.d(TAG, "onReceive ACTION_KEY_EVENT instance=" + mSessionId);
int keyCode = CastWebContentsIntentUtils.getKeyCode(intent);
if (mKeyDownHandler != null) mKeyDownHandler.onKeyDown(keyCode);
} else if (CastWebContentsIntentUtils.isIntentOfVisibilityChange(intent)) {
int visibilityType = CastWebContentsIntentUtils.getVisibilityType(intent);
if (DEBUG) {
......@@ -290,10 +278,11 @@ public class CastWebContentsComponent {
}
public void requestVisibilityPriority(int visibilityPriority) {
if (DEBUG)
if (DEBUG) {
Log.d(TAG,
"requestVisibilityPriority: " + mSessionId
+ "; Visibility:" + visibilityPriority);
}
sendIntentSync(CastWebContentsIntentUtils.requestVisibilityPriority(
mSessionId, visibilityPriority));
}
......@@ -314,11 +303,6 @@ public class CastWebContentsComponent {
sendIntentSync(CastWebContentsIntentUtils.onActivityStopped(sessionId));
}
public static void onKeyDown(String sessionId, int keyCode) {
if (DEBUG) Log.d(TAG, "onKeyDown");
sendIntentSync(CastWebContentsIntentUtils.onKeyDown(sessionId, keyCode));
}
public static void onVisibilityChange(String sessionId, int visibilityType) {
if (DEBUG) Log.d(TAG, "onVisibilityChange");
sendIntentSync(CastWebContentsIntentUtils.onVisibilityChange(sessionId, visibilityType));
......
......@@ -178,14 +178,6 @@ public class CastWebContentsIntentUtils {
return intent;
}
// CastWebContentsActivity -> CastWebContentsComponent.Receiver
// -> CastContentWindowAndroid
public static Intent onKeyDown(String instanceId, int keyCode) {
Intent intent = new Intent(ACTION_KEY_EVENT, getInstanceUri(instanceId));
intent.putExtra(INTENT_EXTRA_KEY_CODE, keyCode);
return intent;
}
// Host activity of CastWebContentsFragment -> CastWebContentsComponent.Receiver
// -> CastContentWindowAndroid
public static Intent onVisibilityChange(String instanceId, @VisibilityType int visibilityType) {
......
......@@ -97,16 +97,6 @@ void CastContentWindowAndroid::OnActivityStopped(
delegate_->OnWindowDestroyed();
}
void CastContentWindowAndroid::OnKeyDown(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
int keycode) {
ui::KeyEvent key_event(ui::ET_KEY_PRESSED,
ui::KeyboardCodeFromAndroidKeyCode(keycode),
ui::EF_NONE);
delegate_->OnKeyEvent(key_event);
}
void CastContentWindowAndroid::RequestVisibility(
VisibilityPriority visibility_priority) {
JNIEnv* env = base::android::AttachCurrentThread();
......
......@@ -42,9 +42,6 @@ class CastContentWindowAndroid : public CastContentWindow {
// Called through JNI.
void OnActivityStopped(JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller);
void OnKeyDown(JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
int keycode);
bool ConsumeGesture(JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
int gesture_type);
......
......@@ -68,8 +68,8 @@ public class CastWebContentsComponentTest {
public void testStartStartsWebContentsActivity() {
Assume.assumeFalse(BuildConfig.DISPLAY_WEB_CONTENTS_IN_SERVICE);
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, null, null, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, null, null, false, false, false, true);
component.start(mStartParams);
Intent intent = mShadowActivity.getNextStartedActivity();
Assert.assertEquals(
......@@ -87,8 +87,8 @@ public class CastWebContentsComponentTest {
LocalBroadcastManager.getInstance(ContextUtils.getApplicationContext())
.registerReceiver(receiver, intentFilter);
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, null, null, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, null, null, false, false, false, true);
component.start(mStartParams);
component.stop(ContextUtils.getApplicationContext());
......@@ -102,8 +102,8 @@ public class CastWebContentsComponentTest {
public void testStartBindsWebContentsService() {
Assume.assumeTrue(BuildConfig.DISPLAY_WEB_CONTENTS_IN_SERVICE);
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, null, null, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, null, null, false, false, false, true);
component.start(mStartParams);
component.stop(mActivity);
......@@ -118,8 +118,8 @@ public class CastWebContentsComponentTest {
public void testStopUnbindsWebContentsService() {
Assume.assumeTrue(BuildConfig.DISPLAY_WEB_CONTENTS_IN_SERVICE);
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, null, null, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, null, null, false, false, false, true);
component.start(mStartParams);
component.stop(mActivity);
......@@ -136,8 +136,8 @@ public class CastWebContentsComponentTest {
LocalBroadcastManager.getInstance(ContextUtils.getApplicationContext())
.registerReceiver(receiver, intentFilter);
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, null, null, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, null, null, false, false, false, true);
component.enableTouchInput(true);
LocalBroadcastManager.getInstance(ContextUtils.getApplicationContext())
......@@ -151,8 +151,8 @@ public class CastWebContentsComponentTest {
Assume.assumeFalse(BuildConfig.DISPLAY_WEB_CONTENTS_IN_SERVICE);
Assume.assumeFalse(BuildConfig.ENABLE_CAST_FRAGMENT);
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, null, null, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, null, null, false, false, false, true);
component.enableTouchInput(true);
component.start(mStartParams);
......@@ -167,8 +167,8 @@ public class CastWebContentsComponentTest {
Assume.assumeFalse(BuildConfig.DISPLAY_WEB_CONTENTS_IN_SERVICE);
Assume.assumeFalse(BuildConfig.ENABLE_CAST_FRAGMENT);
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, null, null, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, null, null, false, false, false, true);
component.enableTouchInput(false);
component.start(mStartParams);
......@@ -183,8 +183,8 @@ public class CastWebContentsComponentTest {
CastWebContentsComponent.OnComponentClosedHandler callback =
Mockito.mock(CastWebContentsComponent.OnComponentClosedHandler.class);
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, callback, null, null, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, callback, null, false, false, false, true);
component.start(mStartParams);
CastWebContentsComponent.onComponentClosed(SESSION_ID);
verify(callback).onComponentClosed();
......@@ -192,24 +192,10 @@ public class CastWebContentsComponentTest {
component.stop(mActivity);
}
@Test
public void testOnKeyDownCallsCallback() {
CastWebContentsComponent.OnKeyDownHandler callback =
Mockito.mock(CastWebContentsComponent.OnKeyDownHandler.class);
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, callback, null, false, false, false, true);
component.start(mStartParams);
CastWebContentsComponent.onKeyDown(SESSION_ID, 42);
component.stop(mActivity);
verify(callback).onKeyDown(42);
}
@Test
public void testStopDoesNotUnbindServiceIfStartWasNotCalled() {
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, null, null, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, null, null, false, false, false, true);
component.stop(mActivity);
......@@ -221,8 +207,8 @@ public class CastWebContentsComponentTest {
CastWebContentsComponent.SurfaceEventHandler callback =
Mockito.mock(CastWebContentsComponent.SurfaceEventHandler.class);
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, null, callback, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, null, callback, false, false, false, true);
component.start(mStartParams);
CastWebContentsComponent.onVisibilityChange(SESSION_ID, 2);
component.stop(mActivity);
......@@ -235,8 +221,8 @@ public class CastWebContentsComponentTest {
CastWebContentsComponent.SurfaceEventHandler callback =
Mockito.mock(CastWebContentsComponent.SurfaceEventHandler.class);
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, null, callback, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, null, callback, false, false, false, true);
component.start(mStartParams);
CastWebContentsComponent.onGesture(SESSION_ID, 1);
component.stop(mActivity);
......@@ -246,8 +232,8 @@ public class CastWebContentsComponentTest {
@Test
public void testStartWebContentsComponentMultipleTimes() {
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, null, null, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, null, null, false, false, false, true);
CastWebContentsComponent.Delegate delegate = mock(CastWebContentsComponent.Delegate.class);
component.setDelegate(delegate);
component.start(mStartParams);
......@@ -268,8 +254,8 @@ public class CastWebContentsComponentTest {
// Sending focus events to a started Activity is unnecessary because the Activity is always
// in focus, and issues with onNewIntent() and duplicate detection can cause unintended
// side effects.
CastWebContentsComponent component = new CastWebContentsComponent(
SESSION_ID, null, null, null, false, false, false, true);
CastWebContentsComponent component =
new CastWebContentsComponent(SESSION_ID, null, null, false, false, false, true);
component.setDelegate(component.new ActivityDelegate());
component.start(mStartParams);
Assert.assertEquals(mShadowActivity.getNextStartedActivity().getComponent().getClassName(),
......
......@@ -71,17 +71,6 @@ public class CastWebContentsIntentUtilsTest {
Assert.assertTrue(CastWebContentsIntentUtils.isIntentOfGesturing(in));
}
@Test
public void testOnKeyDown() {
Intent in = CastWebContentsIntentUtils.onKeyDown(SESSION_ID, 32);
String uri = in.getDataString();
Assert.assertNotNull(uri);
Assert.assertEquals(EXPECTED_URI, uri);
int type = CastWebContentsIntentUtils.getKeyCode(in);
Assert.assertEquals(32, type);
Assert.assertTrue(CastWebContentsIntentUtils.isIntentOfKeyEvent(in));
}
@Test
public void testOnVisibilityChange() {
Intent in = CastWebContentsIntentUtils.onVisibilityChange(SESSION_ID, 3);
......
......@@ -94,9 +94,6 @@ class CastContentWindow {
// Notify window destruction.
virtual void OnWindowDestroyed() {}
// Notifies that a key event was triggered on the window.
virtual void OnKeyEvent(const ui::KeyEvent& key_event) {}
// Check to see if the gesture can be handled by the delegate. This is
// called prior to ConsumeGesture().
virtual bool CanHandleGesture(GestureType gesture_type) = 0;
......
......@@ -92,8 +92,6 @@ void CastServiceSimple::StopInternal() {
void CastServiceSimple::OnWindowDestroyed() {}
void CastServiceSimple::OnKeyEvent(const ui::KeyEvent& key_event) {}
bool CastServiceSimple::CanHandleGesture(GestureType gesture_type) {
return false;
}
......
......@@ -37,7 +37,6 @@ class CastServiceSimple : public CastService, public CastWebView::Delegate {
// CastContentWindow::Delegate implementation:
void OnWindowDestroyed() override;
void OnKeyEvent(const ui::KeyEvent& key_event) override;
bool CanHandleGesture(GestureType gesture_type) override;
bool ConsumeGesture(GestureType gesture_type) override;
void OnVisibilityChange(VisibilityType visibility_type) override;
......
......@@ -86,8 +86,6 @@ content::WebContents* CastBrowserTest::NavigateToURL(const GURL& url) {
void CastBrowserTest::OnWindowDestroyed() {}
void CastBrowserTest::OnKeyEvent(const ui::KeyEvent& key_event) {}
void CastBrowserTest::OnVisibilityChange(VisibilityType visibility_type) {}
bool CastBrowserTest::CanHandleGesture(GestureType gesture_type) {
......
......@@ -45,7 +45,6 @@ class CastBrowserTest : public content::BrowserTestBase, CastWebView::Delegate {
private:
// CastWebView::Delegate implementation:
void OnWindowDestroyed() override;
void OnKeyEvent(const ui::KeyEvent& key_event) override;
void OnVisibilityChange(VisibilityType visibility_type) override;
bool CanHandleGesture(GestureType gesture_type) override;
bool ConsumeGesture(GestureType gesture_type) override;
......
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