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 022a5aef..809fccfc 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 @@ -4,7 +4,7 @@ import android.app.Activity; import com.limelight.LimeLog; import com.limelight.R; -import com.limelight.binding.input.evdev.EvdevCaptureProvider; +import com.limelight.binding.input.evdev.EvdevCaptureProviderShim; import com.limelight.binding.input.evdev.EvdevListener; public class InputCaptureManager { @@ -17,9 +17,9 @@ public class InputCaptureManager { LimeLog.info("Using NVIDIA mouse capture extension"); return new ShieldCaptureProvider(activity); } - else if (EvdevCaptureProvider.isCaptureProviderSupported()) { + else if (EvdevCaptureProviderShim.isCaptureProviderSupported()) { LimeLog.info("Using Evdev mouse capture"); - return new EvdevCaptureProvider(activity, rootListener); + return EvdevCaptureProviderShim.createEvdevCaptureProvider(activity, rootListener); } else if (AndroidPointerIconCaptureProvider.isCaptureProviderSupported()) { // Android N's native capture can't capture over system UI elements diff --git a/app/src/main/java/com/limelight/binding/input/evdev/EvdevCaptureProviderShim.java b/app/src/main/java/com/limelight/binding/input/evdev/EvdevCaptureProviderShim.java new file mode 100644 index 00000000..62fd5e48 --- /dev/null +++ b/app/src/main/java/com/limelight/binding/input/evdev/EvdevCaptureProviderShim.java @@ -0,0 +1,24 @@ +package com.limelight.binding.input.evdev; + + +import android.app.Activity; + +import com.limelight.LimelightBuildProps; +import com.limelight.binding.input.capture.InputCaptureProvider; + +public class EvdevCaptureProviderShim { + public static boolean isCaptureProviderSupported() { + return LimelightBuildProps.ROOT_BUILD; + } + + // We need to construct our capture provider using reflection because it isn't included in non-root builds + public static InputCaptureProvider createEvdevCaptureProvider(Activity activity, EvdevListener listener) { + try { + Class providerClass = Class.forName("com.limelight.binding.input.evdev.EvdevCaptureProvider"); + return (InputCaptureProvider) providerClass.getConstructors()[0].newInstance(activity, listener); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } +} diff --git a/app/src/main/java/com/limelight/binding/input/evdev/EvdevCaptureProvider.java b/app/src/root/java/com.limelight/binding/input/evdev/EvdevCaptureProvider.java similarity index 98% rename from app/src/main/java/com/limelight/binding/input/evdev/EvdevCaptureProvider.java rename to app/src/root/java/com.limelight/binding/input/evdev/EvdevCaptureProvider.java index 47f8dd2a..3f3ed7e0 100644 --- a/app/src/main/java/com/limelight/binding/input/evdev/EvdevCaptureProvider.java +++ b/app/src/root/java/com.limelight/binding/input/evdev/EvdevCaptureProvider.java @@ -6,7 +6,6 @@ import android.os.Looper; import android.widget.Toast; import com.limelight.LimeLog; -import com.limelight.LimelightBuildProps; import com.limelight.binding.input.capture.InputCaptureProvider; import java.io.DataOutputStream; @@ -186,10 +185,6 @@ public class EvdevCaptureProvider extends InputCaptureProvider { this.libraryPath = activity.getApplicationInfo().nativeLibraryDir; } - public static boolean isCaptureProviderSupported() { - return LimelightBuildProps.ROOT_BUILD; - } - private void reportDeviceNotRooted() { activity.runOnUiThread(new Runnable() { @Override diff --git a/app/src/main/java/com/limelight/binding/input/evdev/EvdevEvent.java b/app/src/root/java/com.limelight/binding/input/evdev/EvdevEvent.java similarity index 100% rename from app/src/main/java/com/limelight/binding/input/evdev/EvdevEvent.java rename to app/src/root/java/com.limelight/binding/input/evdev/EvdevEvent.java diff --git a/app/src/main/java/com/limelight/binding/input/evdev/EvdevReader.java b/app/src/root/java/com.limelight/binding/input/evdev/EvdevReader.java similarity index 100% rename from app/src/main/java/com/limelight/binding/input/evdev/EvdevReader.java rename to app/src/root/java/com.limelight/binding/input/evdev/EvdevReader.java diff --git a/app/src/main/java/com/limelight/binding/input/evdev/EvdevTranslator.java b/app/src/root/java/com.limelight/binding/input/evdev/EvdevTranslator.java similarity index 100% rename from app/src/main/java/com/limelight/binding/input/evdev/EvdevTranslator.java rename to app/src/root/java/com.limelight/binding/input/evdev/EvdevTranslator.java