Move recapture on focus gain logic to InputCaptureProvider

This commit is contained in:
Cameron Gutman
2022-02-12 13:58:55 -06:00
parent 8b692269c1
commit 530b48de71
3 changed files with 25 additions and 17 deletions

View File

@@ -3,6 +3,7 @@ package com.limelight.binding.input.capture;
import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;
import android.os.Handler;
import android.view.InputDevice;
import android.view.MotionEvent;
import android.view.View;
@@ -36,6 +37,25 @@ public class AndroidNativePointerCaptureProvider extends AndroidPointerIconCaptu
targetView.releasePointerCapture();
}
@Override
public void onWindowFocusChanged(boolean focusActive) {
if (!focusActive || !isCapturing) {
return;
}
// Recapture the pointer if focus was regained. On Android Q,
// we have to delay a bit before requesting capture because otherwise
// we'll hit the "requestPointerCapture called for a window that has no focus"
// error and it will not actually capture the cursor.
Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
targetView.requestPointerCapture();
}
}, 500);
}
@Override
public boolean eventHasRelativeMouseAxes(MotionEvent event) {
// SOURCE_MOUSE_RELATIVE is how SOURCE_MOUSE appears when our view has pointer capture.

View File

@@ -33,4 +33,6 @@ public abstract class InputCaptureProvider {
public float getRelativeAxisY(MotionEvent event) {
return 0;
}
public void onWindowFocusChanged(boolean focusActive) {}
}