diff --git a/core/java/android/hardware/input/VirtualDpad.java b/core/java/android/hardware/input/VirtualDpad.java index d7cda9ec33cff..4d61553ccb52b 100644 --- a/core/java/android/hardware/input/VirtualDpad.java +++ b/core/java/android/hardware/input/VirtualDpad.java @@ -24,7 +24,6 @@ import android.os.IBinder; import android.os.RemoteException; import android.view.KeyEvent; -import java.io.Closeable; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; @@ -39,7 +38,7 @@ import java.util.Set; * @hide */ @SystemApi -public class VirtualDpad implements Closeable { +public class VirtualDpad extends VirtualInputDevice { private final Set mSupportedKeyCodes = Collections.unmodifiableSet( @@ -50,23 +49,10 @@ public class VirtualDpad implements Closeable { KeyEvent.KEYCODE_DPAD_LEFT, KeyEvent.KEYCODE_DPAD_RIGHT, KeyEvent.KEYCODE_DPAD_CENTER))); - private final IVirtualDevice mVirtualDevice; - private final IBinder mToken; /** @hide */ public VirtualDpad(IVirtualDevice virtualDevice, IBinder token) { - mVirtualDevice = virtualDevice; - mToken = token; - } - - @Override - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) - public void close() { - try { - mVirtualDevice.unregisterInputDevice(mToken); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } + super(virtualDevice, token); } /** diff --git a/core/java/android/hardware/input/VirtualInputDevice.java b/core/java/android/hardware/input/VirtualInputDevice.java new file mode 100644 index 0000000000000..2a79ef0e0afda --- /dev/null +++ b/core/java/android/hardware/input/VirtualInputDevice.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.input; + +import android.annotation.RequiresPermission; +import android.companion.virtual.IVirtualDevice; +import android.os.IBinder; +import android.os.RemoteException; + +import java.io.Closeable; + +/** + * The base class for all virtual input devices such as VirtualKeyboard, VirtualMouse. + * This implements the shared functionality such as closing the device and keeping track of + * identifiers. + * + * @hide + */ +abstract class VirtualInputDevice implements Closeable { + + /** + * The virtual device to which this VirtualInputDevice belongs to. + */ + protected final IVirtualDevice mVirtualDevice; + + /** + * The token used to uniquely identify the virtual input device. + */ + protected final IBinder mToken; + + /** @hide */ + VirtualInputDevice( + IVirtualDevice virtualDevice, IBinder token) { + mVirtualDevice = virtualDevice; + mToken = token; + } + + + @Override + @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) + public void close() { + try { + mVirtualDevice.unregisterInputDevice(mToken); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } +} diff --git a/core/java/android/hardware/input/VirtualKeyboard.java b/core/java/android/hardware/input/VirtualKeyboard.java index 901401fea32cd..e569dbf6b6b60 100644 --- a/core/java/android/hardware/input/VirtualKeyboard.java +++ b/core/java/android/hardware/input/VirtualKeyboard.java @@ -24,8 +24,6 @@ import android.os.IBinder; import android.os.RemoteException; import android.view.KeyEvent; -import java.io.Closeable; - /** * A virtual keyboard representing a key input mechanism on a remote device, such as a built-in * keyboard on a laptop, a software keyboard on a tablet, or a keypad on a TV remote control. @@ -36,26 +34,13 @@ import java.io.Closeable; * @hide */ @SystemApi -public class VirtualKeyboard implements Closeable { +public class VirtualKeyboard extends VirtualInputDevice { private final int mUnsupportedKeyCode = KeyEvent.KEYCODE_DPAD_CENTER; - private final IVirtualDevice mVirtualDevice; - private final IBinder mToken; /** @hide */ public VirtualKeyboard(IVirtualDevice virtualDevice, IBinder token) { - mVirtualDevice = virtualDevice; - mToken = token; - } - - @Override - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) - public void close() { - try { - mVirtualDevice.unregisterInputDevice(mToken); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } + super(virtualDevice, token); } /** diff --git a/core/java/android/hardware/input/VirtualMouse.java b/core/java/android/hardware/input/VirtualMouse.java index 6e2b56a2b5bc4..7eba2b8bfdf03 100644 --- a/core/java/android/hardware/input/VirtualMouse.java +++ b/core/java/android/hardware/input/VirtualMouse.java @@ -25,8 +25,6 @@ import android.os.IBinder; import android.os.RemoteException; import android.view.MotionEvent; -import java.io.Closeable; - /** * A virtual mouse representing a relative input mechanism on a remote device, such as a mouse or * trackpad. @@ -37,25 +35,11 @@ import java.io.Closeable; * @hide */ @SystemApi -public class VirtualMouse implements Closeable { - - private final IVirtualDevice mVirtualDevice; - private final IBinder mToken; +public class VirtualMouse extends VirtualInputDevice { /** @hide */ public VirtualMouse(IVirtualDevice virtualDevice, IBinder token) { - mVirtualDevice = virtualDevice; - mToken = token; - } - - @Override - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) - public void close() { - try { - mVirtualDevice.unregisterInputDevice(mToken); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } + super(virtualDevice, token); } /** diff --git a/core/java/android/hardware/input/VirtualTouchscreen.java b/core/java/android/hardware/input/VirtualTouchscreen.java index c8d602acaff6f..0d07753b9b60a 100644 --- a/core/java/android/hardware/input/VirtualTouchscreen.java +++ b/core/java/android/hardware/input/VirtualTouchscreen.java @@ -23,8 +23,6 @@ import android.companion.virtual.IVirtualDevice; import android.os.IBinder; import android.os.RemoteException; -import java.io.Closeable; - /** * A virtual touchscreen representing a touch-based display input mechanism on a remote device. * @@ -34,25 +32,10 @@ import java.io.Closeable; * @hide */ @SystemApi -public class VirtualTouchscreen implements Closeable { - - private final IVirtualDevice mVirtualDevice; - private final IBinder mToken; - +public class VirtualTouchscreen extends VirtualInputDevice { /** @hide */ public VirtualTouchscreen(IVirtualDevice virtualDevice, IBinder token) { - mVirtualDevice = virtualDevice; - mToken = token; - } - - @Override - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) - public void close() { - try { - mVirtualDevice.unregisterInputDevice(mToken); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } + super(virtualDevice, token); } /**