From 22031865271d36d497d60392faf753b869b3aee8 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 8 May 2022 14:39:32 -0500 Subject: [PATCH] Remove extra ViewGroup between OSC and StreamView This allows touch events to be properly split --- .../virtual_controller/VirtualController.java | 44 ++++++++++--------- .../VirtualControllerElement.java | 10 ++--- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java index ffea313a..db7068ad 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java @@ -9,12 +9,11 @@ import android.util.DisplayMetrics; import android.view.View; import android.widget.Button; import android.widget.FrameLayout; -import android.widget.RelativeLayout; import android.widget.Toast; +import com.limelight.LimeLog; import com.limelight.R; import com.limelight.binding.input.ControllerHandler; -import com.limelight.nvstream.NvConnection; import java.util.ArrayList; import java.util.List; @@ -40,11 +39,10 @@ public class VirtualController { private static final boolean _PRINT_DEBUG_INFORMATION = false; - private ControllerHandler controllerHandler; - private Context context = null; + private final ControllerHandler controllerHandler; + private final Context context; private FrameLayout frame_layout = null; - private RelativeLayout relative_layout = null; private Timer retransmitTimer; @@ -60,10 +58,6 @@ public class VirtualController { this.frame_layout = layout; this.context = context; - relative_layout = new RelativeLayout(context); - - frame_layout.addView(relative_layout); - buttonConfigure = new Button(context); buttonConfigure.setAlpha(0.25f); buttonConfigure.setFocusable(false); @@ -87,7 +81,7 @@ public class VirtualController { Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); - relative_layout.invalidate(); + buttonConfigure.invalidate(); for (VirtualControllerElement element : elements) { element.invalidate(); @@ -99,11 +93,20 @@ public class VirtualController { public void hide() { retransmitTimer.cancel(); - relative_layout.setVisibility(View.INVISIBLE); + + for (VirtualControllerElement element : elements) { + element.setVisibility(View.INVISIBLE); + } + + buttonConfigure.setVisibility(View.INVISIBLE); } public void show() { - relative_layout.setVisibility(View.VISIBLE); + for (VirtualControllerElement element : elements) { + element.setVisibility(View.VISIBLE); + } + + buttonConfigure.setVisibility(View.VISIBLE); // HACK: GFE sometimes discards gamepad packets when they are received // very shortly after another. This can be critical if an axis zeroing packet @@ -120,9 +123,11 @@ public class VirtualController { public void removeElements() { for (VirtualControllerElement element : elements) { - relative_layout.removeView(element); + frame_layout.removeView(element); } elements.clear(); + + frame_layout.removeView(buttonConfigure); } public void setOpacity(int opacity) { @@ -134,10 +139,10 @@ public class VirtualController { public void addElement(VirtualControllerElement element, int x, int y, int width, int height) { elements.add(element); - RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height); + FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(width, height); layoutParams.setMargins(x, y, 0, 0); - relative_layout.addView(element, layoutParams); + frame_layout.addView(element, layoutParams); } public List getElements() { @@ -146,23 +151,20 @@ public class VirtualController { private static final void _DBG(String text) { if (_PRINT_DEBUG_INFORMATION) { - System.out.println("VirtualController: " + text); + LimeLog.info("VirtualController: " + text); } } public void refreshLayout() { - relative_layout.removeAllViews(); removeElements(); DisplayMetrics screen = context.getResources().getDisplayMetrics(); int buttonSize = (int)(screen.heightPixels*0.06f); - RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(buttonSize, buttonSize); - params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); - params.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(buttonSize, buttonSize); params.leftMargin = 15; params.topMargin = 15; - relative_layout.addView(buttonConfigure, params); + frame_layout.addView(buttonConfigure, params); // Start with the default layout VirtualControllerConfigurationLoader.createDefaultLayout(this, context); diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java index 5c92db20..ad843778 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java @@ -12,7 +12,7 @@ import android.graphics.Paint; import android.util.DisplayMetrics; import android.view.MotionEvent; import android.view.View; -import android.widget.RelativeLayout; +import android.widget.FrameLayout; import org.json.JSONException; import org.json.JSONObject; @@ -72,7 +72,7 @@ public abstract class VirtualControllerElement extends View { int newPos_x = (int) getX() + x - pressed_x; int newPos_y = (int) getY() + y - pressed_y; - RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) getLayoutParams(); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) getLayoutParams(); layoutParams.leftMargin = newPos_x > 0 ? newPos_x : 0; layoutParams.topMargin = newPos_y > 0 ? newPos_y : 0; @@ -83,7 +83,7 @@ public abstract class VirtualControllerElement extends View { } protected void resizeElement(int pressed_x, int pressed_y, int width, int height) { - RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) getLayoutParams(); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) getLayoutParams(); int newHeight = height + (startSize_y - pressed_y); int newWidth = width + (startSize_x - pressed_x); @@ -316,7 +316,7 @@ public abstract class VirtualControllerElement extends View { public JSONObject getConfiguration() throws JSONException { JSONObject configuration = new JSONObject(); - RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) getLayoutParams(); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) getLayoutParams(); configuration.put("LEFT", layoutParams.leftMargin); configuration.put("TOP", layoutParams.topMargin); @@ -327,7 +327,7 @@ public abstract class VirtualControllerElement extends View { } public void loadConfiguration(JSONObject configuration) throws JSONException { - RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) getLayoutParams(); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) getLayoutParams(); layoutParams.leftMargin = configuration.getInt("LEFT"); layoutParams.topMargin = configuration.getInt("TOP");