diff options
author | Vladimir Komsiyski <vladokom@google.com> | 2023-12-12 10:56:10 +0100 |
---|---|---|
committer | Vladimir Komsiyski <vladokom@google.com> | 2023-12-12 11:04:57 +0100 |
commit | fc3d6c6bee940b7d7c37108ee2536a9b62d06810 (patch) | |
tree | acc16f85a68272dc1ba89cb2675159d46e0e8cd3 | |
parent | 5e832488ac1e3cc8808a3415e2b2de6308bdfafa (diff) | |
download | development-fc3d6c6bee940b7d7c37108ee2536a9b62d06810.tar.gz |
VDM Client: Limit the resizing of virtual displays.
Also fix the NPE in SensorDemoActivity.
Fix: 314729191
Test: manual
Change-Id: I72e28b03d29cab2e86b5c6a14e37675997c8cf78
3 files changed, 30 insertions, 11 deletions
diff --git a/samples/VirtualDeviceManager/client/src/com/example/android/vdmdemo/client/ClientView.java b/samples/VirtualDeviceManager/client/src/com/example/android/vdmdemo/client/ClientView.java index 4844dd30a..0df2587f1 100644 --- a/samples/VirtualDeviceManager/client/src/com/example/android/vdmdemo/client/ClientView.java +++ b/samples/VirtualDeviceManager/client/src/com/example/android/vdmdemo/client/ClientView.java @@ -30,6 +30,10 @@ import java.util.function.Consumer; /** Recycler view that can resize a child dynamically. */ public final class ClientView extends RecyclerView { + + private static final int MIN_SIZE = 100; + private int mMaxSize = 0; + private boolean mIsResizing = false; private Consumer<Rect> mResizeDoneCallback = null; private Drawable mResizingRect = null; @@ -56,8 +60,10 @@ public final class ClientView extends RecyclerView { mResizingRect = getContext().getResources().getDrawable(R.drawable.resize_rect, null); } - void startResizing(View viewToResize, MotionEvent origin, Consumer<Rect> callback) { + void startResizing(View viewToResize, MotionEvent origin, int maxSize, + Consumer<Rect> callback) { mIsResizing = true; + mMaxSize = maxSize; mResizeDoneCallback = callback; viewToResize.getGlobalVisibleRect(mResizingBounds); mResizingRect.setBounds(mResizingBounds); @@ -88,7 +94,19 @@ public final class ClientView extends RecyclerView { case MotionEvent.ACTION_UP -> stopResizing(); case MotionEvent.ACTION_MOVE -> { mResizingBounds.right = (int) (ev.getRawX() - mResizeOffsetX); + if (mResizingBounds.width() > mMaxSize) { + mResizingBounds.right = mResizingBounds.left + mMaxSize; + } + if (mResizingBounds.width() < MIN_SIZE) { + mResizingBounds.right = mResizingBounds.left + MIN_SIZE; + } mResizingBounds.top = (int) (ev.getRawY() - mResizeOffsetY); + if (mResizingBounds.height() > mMaxSize) { + mResizingBounds.top = mResizingBounds.bottom - mMaxSize; + } + if (mResizingBounds.height() < MIN_SIZE) { + mResizingBounds.top = mResizingBounds.bottom - MIN_SIZE; + } mResizingRect.setBounds(mResizingBounds); } } diff --git a/samples/VirtualDeviceManager/client/src/com/example/android/vdmdemo/client/DisplayAdapter.java b/samples/VirtualDeviceManager/client/src/com/example/android/vdmdemo/client/DisplayAdapter.java index 00fdac386..e3376cdcf 100644 --- a/samples/VirtualDeviceManager/client/src/com/example/android/vdmdemo/client/DisplayAdapter.java +++ b/samples/VirtualDeviceManager/client/src/com/example/android/vdmdemo/client/DisplayAdapter.java @@ -269,15 +269,16 @@ final class DisplayAdapter extends RecyclerView.Adapter<DisplayHolder> { }); View resizeButton = itemView.findViewById(R.id.display_resize); - resizeButton.setOnTouchListener( - (v, event) -> { - if (event.getAction() == MotionEvent.ACTION_DOWN) { - mRecyclerView.startResizing( - mTextureView, event, DisplayHolder.this::resizeDisplay); - return true; - } - return false; - }); + resizeButton.setOnTouchListener((v, event) -> { + if (event.getAction() != MotionEvent.ACTION_DOWN) { + return false; + } + int maxSize = itemView.getHeight() + - itemView.findViewById(R.id.display_header).getHeight(); + mRecyclerView.startResizing( + mTextureView, event, maxSize, DisplayHolder.this::resizeDisplay); + return true; + }); mTextureView.setOnTouchListener( (v, event) -> { diff --git a/samples/VirtualDeviceManager/demos/src/com/example/android/vdmdemo/demos/SensorDemoActivity.java b/samples/VirtualDeviceManager/demos/src/com/example/android/vdmdemo/demos/SensorDemoActivity.java index a7e52569c..80cde97aa 100644 --- a/samples/VirtualDeviceManager/demos/src/com/example/android/vdmdemo/demos/SensorDemoActivity.java +++ b/samples/VirtualDeviceManager/demos/src/com/example/android/vdmdemo/demos/SensorDemoActivity.java @@ -57,7 +57,7 @@ public final class SensorDemoActivity extends AppCompatActivity implements Senso mVirtualDeviceManager = getSystemService(VirtualDeviceManager.class); mSensorManager = getSystemService(SensorManager.class); - mDeviceContext.registerDeviceIdChangeListener(getMainExecutor(), this::changeSensorDevice); + registerDeviceIdChangeListener(getMainExecutor(), this::changeSensorDevice); mDeviceContext = this; changeSensorDevice(mDeviceContext.getDeviceId()); |