summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vladimir Komsiyski <vladokom@google.com> 2023-09-06 18:04:07 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-09-06 18:04:07 +0000
commit05e93f5d1e6225f68d947e95c87a78e6bb97156a (patch)
tree27bf9278625a828b4899732cfd99b5171f1a7474
parent1080497eb3fb5eef2eba4f7b3c20f2909a264d37 (diff)
parentb76e28c0d718fa907926c8dbd8d60379a74f505c (diff)
Merge "Replace the VDM broadcast for device closed with listener." into main
-rw-r--r--core/java/android/hardware/SystemSensorManager.java41
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java35
-rw-r--r--services/core/java/com/android/server/clipboard/ClipboardService.java26
3 files changed, 82 insertions, 20 deletions
diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java
index 0f6f6019c0f7..dfd380233662 100644
--- a/core/java/android/hardware/SystemSensorManager.java
+++ b/core/java/android/hardware/SystemSensorManager.java
@@ -129,6 +129,7 @@ public class SystemSensorManager extends SensorManager {
mDynamicSensorCallbacks = new HashMap<>();
private BroadcastReceiver mDynamicSensorBroadcastReceiver;
private BroadcastReceiver mRuntimeSensorBroadcastReceiver;
+ private VirtualDeviceManager.VirtualDeviceListener mVirtualDeviceListener;
// Looper associated with the context in which this instance was created.
private final Looper mMainLooper;
@@ -518,7 +519,11 @@ public class SystemSensorManager extends SensorManager {
}
private List<Sensor> createRuntimeSensorListLocked(int deviceId) {
- setupRuntimeSensorBroadcastReceiver();
+ if (android.companion.virtual.flags.Flags.vdmPublicApis()) {
+ setupVirtualDeviceListener();
+ } else {
+ setupRuntimeSensorBroadcastReceiver();
+ }
List<Sensor> list = new ArrayList<>();
nativeGetRuntimeSensors(mNativeInstance, deviceId, list);
mFullRuntimeSensorListByDevice.put(deviceId, list);
@@ -558,6 +563,34 @@ public class SystemSensorManager extends SensorManager {
}
}
+ private void setupVirtualDeviceListener() {
+ if (mVirtualDeviceListener != null) {
+ return;
+ }
+ if (mVdm == null) {
+ mVdm = mContext.getSystemService(VirtualDeviceManager.class);
+ if (mVdm == null) {
+ return;
+ }
+ }
+ mVirtualDeviceListener = new VirtualDeviceManager.VirtualDeviceListener() {
+ @Override
+ public void onVirtualDeviceClosed(int deviceId) {
+ synchronized (mFullRuntimeSensorListByDevice) {
+ List<Sensor> removedSensors =
+ mFullRuntimeSensorListByDevice.removeReturnOld(deviceId);
+ if (removedSensors != null) {
+ for (Sensor s : removedSensors) {
+ cleanupSensorConnection(s);
+ }
+ }
+ mRuntimeSensorListByDeviceByType.remove(deviceId);
+ }
+ }
+ };
+ mVdm.registerVirtualDeviceListener(mContext.getMainExecutor(), mVirtualDeviceListener);
+ }
+
private void setupDynamicSensorBroadcastReceiver() {
if (mDynamicSensorBroadcastReceiver == null) {
mDynamicSensorBroadcastReceiver = new BroadcastReceiver() {
@@ -581,12 +614,6 @@ public class SystemSensorManager extends SensorManager {
}
}
- private void teardownDynamicSensorBroadcastReceiver() {
- mDynamicSensorCallbacks.clear();
- mContext.unregisterReceiver(mDynamicSensorBroadcastReceiver);
- mDynamicSensorBroadcastReceiver = null;
- }
-
/** @hide */
protected void registerDynamicSensorCallbackImpl(
DynamicSensorCallback callback, Handler handler) {
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index cbf4cced0e9b..93ba362070d3 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -63,6 +63,7 @@ import android.app.PendingIntent;
import android.app.RemoteAction;
import android.app.admin.DevicePolicyManager;
import android.appwidget.AppWidgetManagerInternal;
+import android.companion.virtual.VirtualDeviceManager;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -928,18 +929,32 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
mContext.registerReceiverAsUser(receiver, UserHandle.ALL, filter, null, mMainHandler,
Context.RECEIVER_EXPORTED);
- final BroadcastReceiver virtualDeviceReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- final int deviceId = intent.getIntExtra(
- EXTRA_VIRTUAL_DEVICE_ID, DEVICE_ID_DEFAULT);
- mProxyManager.clearConnections(deviceId);
+ if (android.companion.virtual.flags.Flags.vdmPublicApis()) {
+ VirtualDeviceManager vdm = mContext.getSystemService(VirtualDeviceManager.class);
+ if (vdm != null) {
+ vdm.registerVirtualDeviceListener(mContext.getMainExecutor(),
+ new VirtualDeviceManager.VirtualDeviceListener() {
+ @Override
+ public void onVirtualDeviceClosed(int deviceId) {
+ mProxyManager.clearConnections(deviceId);
+ }
+ });
}
- };
+ } else {
+ final BroadcastReceiver virtualDeviceReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final int deviceId = intent.getIntExtra(
+ EXTRA_VIRTUAL_DEVICE_ID, DEVICE_ID_DEFAULT);
+ mProxyManager.clearConnections(deviceId);
+ }
+ };
- final IntentFilter virtualDeviceFilter = new IntentFilter(ACTION_VIRTUAL_DEVICE_REMOVED);
- mContext.registerReceiver(virtualDeviceReceiver, virtualDeviceFilter,
- Context.RECEIVER_NOT_EXPORTED);
+ final IntentFilter virtualDeviceFilter = new IntentFilter(
+ ACTION_VIRTUAL_DEVICE_REMOVED);
+ mContext.registerReceiver(virtualDeviceReceiver, virtualDeviceFilter,
+ Context.RECEIVER_NOT_EXPORTED);
+ }
}
/**
diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java
index 38c6a528e221..906c66d4fe8a 100644
--- a/services/core/java/com/android/server/clipboard/ClipboardService.java
+++ b/services/core/java/com/android/server/clipboard/ClipboardService.java
@@ -144,6 +144,7 @@ public class ClipboardService extends SystemService {
private final VirtualDeviceManagerInternal mVdmInternal;
private final VirtualDeviceManager mVdm;
private BroadcastReceiver mVirtualDeviceRemovedReceiver;
+ private VirtualDeviceManager.VirtualDeviceListener mVirtualDeviceListener;
private final IUserManager mUm;
private final PackageManager mPm;
private final AppOpsManager mAppOps;
@@ -216,12 +217,14 @@ public class ClipboardService extends SystemService {
@Override
public void onStart() {
publishBinderService(Context.CLIPBOARD_SERVICE, new ClipboardImpl());
- if (mVdmInternal != null) {
- registerVirtualDeviceRemovedListener();
+ if (!android.companion.virtual.flags.Flags.vdmPublicApis() && mVdmInternal != null) {
+ registerVirtualDeviceBroadcastReceiver();
+ } else if (android.companion.virtual.flags.Flags.vdmPublicApis() && mVdm != null) {
+ registerVirtualDeviceListener();
}
}
- private void registerVirtualDeviceRemovedListener() {
+ private void registerVirtualDeviceBroadcastReceiver() {
if (mVirtualDeviceRemovedReceiver != null) {
return;
}
@@ -245,6 +248,23 @@ public class ClipboardService extends SystemService {
Context.RECEIVER_NOT_EXPORTED);
}
+ private void registerVirtualDeviceListener() {
+ if (mVirtualDeviceListener != null) {
+ return;
+ }
+ mVirtualDeviceListener = new VirtualDeviceManager.VirtualDeviceListener() {
+ @Override
+ public void onVirtualDeviceClosed(int deviceId) {
+ synchronized (mLock) {
+ for (int i = mClipboards.numMaps() - 1; i >= 0; i--) {
+ mClipboards.delete(mClipboards.keyAt(i), deviceId);
+ }
+ }
+ }
+ };
+ mVdm.registerVirtualDeviceListener(getContext().getMainExecutor(), mVirtualDeviceListener);
+ }
+
@Override
public void onUserStopped(@NonNull TargetUser user) {
synchronized (mLock) {