diff --git a/app/src/main/java/com/limelight/binding/input/capture/AndroidCaptureProvider.java b/app/src/main/java/com/limelight/binding/input/capture/AndroidCaptureProvider.java new file mode 100644 index 00000000..f1133512 --- /dev/null +++ b/app/src/main/java/com/limelight/binding/input/capture/AndroidCaptureProvider.java @@ -0,0 +1,59 @@ +package com.limelight.binding.input.capture; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Context; +import android.os.Build; +import android.view.MotionEvent; +import android.view.PointerIcon; +import android.view.View; +import android.view.ViewGroup; + +@TargetApi(Build.VERSION_CODES.N) +public class AndroidCaptureProvider extends InputCaptureProvider { + private ViewGroup rootViewGroup; + private Context context; + + public AndroidCaptureProvider(Activity activity) { + this.context = activity; + this.rootViewGroup = (ViewGroup) activity.getWindow().getDecorView(); + } + + public static boolean isCaptureProviderSupported() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N; + } + + private void setPointerIconOnAllViews(PointerIcon icon) { + for (int i = 0; i < rootViewGroup.getChildCount(); i++) { + View view = rootViewGroup.getChildAt(i); + view.setPointerIcon(icon); + } + rootViewGroup.setPointerIcon(icon); + } + + @Override + public void enableCapture() { + setPointerIconOnAllViews(PointerIcon.getSystemIcon(context, PointerIcon.TYPE_NULL)); + } + + @Override + public void disableCapture() { + setPointerIconOnAllViews(null); + } + + @Override + public boolean eventHasRelativeMouseAxes(MotionEvent event) { + return event.getAxisValue(MotionEvent.AXIS_RELATIVE_X) != 0 || + event.getAxisValue(MotionEvent.AXIS_RELATIVE_Y) != 0; + } + + @Override + public float getRelativeAxisX(MotionEvent event) { + return event.getAxisValue(MotionEvent.AXIS_RELATIVE_X); + } + + @Override + public float getRelativeAxisY(MotionEvent event) { + return event.getAxisValue(MotionEvent.AXIS_RELATIVE_Y); + } +} diff --git a/app/src/main/java/com/limelight/binding/input/capture/InputCaptureManager.java b/app/src/main/java/com/limelight/binding/input/capture/InputCaptureManager.java index add31c98..2411e8df 100644 --- a/app/src/main/java/com/limelight/binding/input/capture/InputCaptureManager.java +++ b/app/src/main/java/com/limelight/binding/input/capture/InputCaptureManager.java @@ -8,11 +8,11 @@ import com.limelight.binding.input.evdev.EvdevListener; public class InputCaptureManager { public static InputCaptureProvider getInputCaptureProvider(Activity activity, EvdevListener rootListener) { - /*if (AndroidCaptureProvider.isCaptureProviderSupported()) { + if (AndroidCaptureProvider.isCaptureProviderSupported()) { LimeLog.info("Using Android N+ native mouse capture"); - return new AndroidCaptureProvider(); + return new AndroidCaptureProvider(activity); } - else*/ if (ShieldCaptureProvider.isCaptureProviderSupported()) { + else if (ShieldCaptureProvider.isCaptureProviderSupported()) { LimeLog.info("Using NVIDIA mouse capture extension"); return new ShieldCaptureProvider(activity); }