diff options
| author | 2023-09-06 18:04:07 +0000 | |
|---|---|---|
| committer | 2023-09-06 18:04:07 +0000 | |
| commit | 05e93f5d1e6225f68d947e95c87a78e6bb97156a (patch) | |
| tree | 27bf9278625a828b4899732cfd99b5171f1a7474 | |
| parent | 1080497eb3fb5eef2eba4f7b3c20f2909a264d37 (diff) | |
| parent | b76e28c0d718fa907926c8dbd8d60379a74f505c (diff) | |
Merge "Replace the VDM broadcast for device closed with listener." into main
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) { |