diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java index 9c96eec7..d8112c34 100644 --- a/app/src/main/java/com/limelight/Game.java +++ b/app/src/main/java/com/limelight/Game.java @@ -1268,6 +1268,8 @@ public class Game extends Activity implements SurfaceHolder.Callback, if (connecting || connected) { connecting = connected = false; + controllerHandler.stop(); + // Stop may take a few hundred ms to do some network I/O to tell // the server we're going away and clean up. Let it run in a separate // thread to keep things smooth for the UI. Inside moonlight-common, diff --git a/app/src/main/java/com/limelight/binding/input/ControllerHandler.java b/app/src/main/java/com/limelight/binding/input/ControllerHandler.java index 69a2d27b..601a1837 100644 --- a/app/src/main/java/com/limelight/binding/input/ControllerHandler.java +++ b/app/src/main/java/com/limelight/binding/input/ControllerHandler.java @@ -155,6 +155,16 @@ public class ControllerHandler implements InputManager.InputDeviceListener, UsbD onInputDeviceAdded(deviceId); } + public void stop() { + for (int i = 0; i < inputDeviceContexts.size(); i++) { + InputDeviceContext deviceContext = inputDeviceContexts.valueAt(i); + + if (deviceContext.vibrator != null) { + deviceContext.vibrator.cancel(); + } + } + } + private static boolean hasJoystickAxes(InputDevice device) { return (device.getSources() & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK && getMotionRangeForJoystickAxis(device, MotionEvent.AXIS_X) != null && diff --git a/app/src/main/java/com/limelight/binding/input/driver/AbstractXboxController.java b/app/src/main/java/com/limelight/binding/input/driver/AbstractXboxController.java index 11892b03..1ca9467a 100644 --- a/app/src/main/java/com/limelight/binding/input/driver/AbstractXboxController.java +++ b/app/src/main/java/com/limelight/binding/input/driver/AbstractXboxController.java @@ -131,6 +131,9 @@ public abstract class AbstractXboxController extends AbstractController { stopped = true; + // Cancel any rumble effects + rumble((short)0, (short)0); + // Stop the input thread if (inputThread != null) { inputThread.interrupt();