Chromium Code Reviews| Index: remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java |
| diff --git a/remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java b/remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java |
| index e31c2a3d83236669f74ad20ea4ffee1dbf5b65be..91fa6a776ff1c604601d1b3eed22a9b886bbb446 100644 |
| --- a/remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java |
| +++ b/remoting/android/java/src/org/chromium/chromoting/TouchInputHandler.java |
| @@ -14,6 +14,8 @@ import android.view.MotionEvent; |
| import android.view.ScaleGestureDetector; |
| import android.view.ViewConfiguration; |
| +import org.chromium.chromoting.jni.Client; |
| + |
| /** |
| * This class is responsible for handling Touch input from the user. Touch events which manipulate |
| * the local canvas are handled in this class and any input which should be sent to the remote host |
| @@ -21,6 +23,7 @@ import android.view.ViewConfiguration; |
| */ |
| public class TouchInputHandler implements TouchInputHandlerInterface { |
| private final DesktopViewInterface mViewer; |
| + private final Context mContext; |
| private final RenderData mRenderData; |
| private final DesktopCanvas mDesktopCanvas; |
| private InputStrategyInterface mInputStrategy; |
| @@ -180,6 +183,7 @@ public class TouchInputHandler implements TouchInputHandlerInterface { |
| public TouchInputHandler(DesktopViewInterface viewer, Context context, RenderData renderData) { |
| mViewer = viewer; |
| + mContext = context; |
| mRenderData = renderData; |
| mDesktopCanvas = new DesktopCanvas(mViewer, mRenderData); |
| @@ -257,20 +261,6 @@ public class TouchInputHandler implements TouchInputHandlerInterface { |
| } |
| @Override |
| - public void onSoftInputMethodVisibilityChanged(boolean inputMethodVisible, Rect bounds) { |
| - synchronized (mRenderData) { |
| - if (inputMethodVisible) { |
| - mDesktopCanvas.setInputMethodOffsetValues(mRenderData.screenWidth - bounds.right, |
| - mRenderData.screenHeight - bounds.bottom); |
| - } else { |
| - mDesktopCanvas.setInputMethodOffsetValues(0, 0); |
| - } |
| - } |
| - |
| - mDesktopCanvas.repositionImage(true); |
| - } |
| - |
| - @Override |
| public void processAnimation() { |
| boolean active = mCursorAnimationJob.processAnimation(); |
| active |= mScrollAnimationJob.processAnimation(); |
| @@ -281,7 +271,67 @@ public class TouchInputHandler implements TouchInputHandlerInterface { |
| } |
| @Override |
| - public void setInputStrategy(InputStrategyInterface inputStrategy) { |
| + public void init(Desktop desktop, final Client client) { |
| + desktop.onInputModeChanged().add( |
| + new Event.ParameterRunnable<InputModeChangedEventParameter>() { |
| + @Override |
| + public void run(InputModeChangedEventParameter parameter) { |
| + final Desktop.InputMode inputMode = parameter.inputMode; |
|
Lambros
2016/06/06 22:11:34
I think this would be more readable if you pull th
Hzj_jie
2016/06/07 01:26:13
Done.
|
| + final CapabilityManager.HostCapability hostTouchCapability = |
| + parameter.hostCapability; |
| + // We need both input mode and host input capabilities to select the input |
| + // strategy. |
| + if (!inputMode.isSet() || !hostTouchCapability.isSet()) { |
| + return; |
| + } |
| + |
| + switch (inputMode) { |
| + case TRACKPAD: |
| + setInputStrategy(new TrackpadInputStrategy(mRenderData, client)); |
| + break; |
| + |
| + case TOUCH: |
| + if (hostTouchCapability.isSupported()) { |
| + setInputStrategy(new TouchInputStrategy(mRenderData, client)); |
| + } else { |
| + setInputStrategy(new SimulatedTouchInputStrategy( |
| + mRenderData, client, mContext)); |
| + } |
| + break; |
| + |
| + default: |
| + // Unreachable, but required by Google Java style and findbugs. |
| + assert false : "Unreached"; |
| + } |
| + |
| + // Ensure the cursor state is updated appropriately. |
| + // TODO (zijiehe): Move repaint control out of DesktopView. |
| + if (mViewer instanceof DesktopView) { |
| + ((DesktopView) mViewer).requestRepaint(); |
| + } |
| + } |
| + }); |
| + |
| + desktop.onSoftInputMethodVisibilityChanged().add( |
| + new Event.ParameterRunnable<SoftInputMethodVisibilityChangedEventParameter>() { |
| + @Override |
| + public void run(SoftInputMethodVisibilityChangedEventParameter parameter) { |
| + synchronized (mRenderData) { |
|
Lambros
2016/06/06 22:11:34
And this.
Hzj_jie
2016/06/07 01:26:13
Done.
|
| + if (parameter.visible) { |
| + mDesktopCanvas.setInputMethodOffsetValues( |
| + mRenderData.screenWidth - parameter.right, |
| + mRenderData.screenHeight - parameter.bottom); |
| + } else { |
| + mDesktopCanvas.setInputMethodOffsetValues(0, 0); |
| + } |
| + } |
| + |
| + mDesktopCanvas.repositionImage(true); |
| + } |
| + }); |
| + } |
| + |
| + private void setInputStrategy(InputStrategyInterface inputStrategy) { |
| // Since the rules for flinging differ between input modes, we want to stop running the |
| // current fling animation when the mode changes to prevent a wonky experience. |
| mCursorAnimationJob.abortAnimation(); |