Loading core/java/android/hardware/SystemSensorManager.java +34 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -518,7 +519,11 @@ public class SystemSensorManager extends SensorManager { } private List<Sensor> createRuntimeSensorListLocked(int deviceId) { if (android.companion.virtual.flags.Flags.vdmPublicApis()) { setupVirtualDeviceListener(); } else { setupRuntimeSensorBroadcastReceiver(); } List<Sensor> list = new ArrayList<>(); nativeGetRuntimeSensors(mNativeInstance, deviceId, list); mFullRuntimeSensorListByDevice.put(deviceId, list); Loading Loading @@ -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() { Loading @@ -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) { Loading services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +25 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -928,6 +929,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mContext.registerReceiverAsUser(receiver, UserHandle.ALL, filter, null, mMainHandler, Context.RECEIVER_EXPORTED); 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) { Loading @@ -937,10 +950,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } }; final IntentFilter virtualDeviceFilter = new IntentFilter(ACTION_VIRTUAL_DEVICE_REMOVED); final IntentFilter virtualDeviceFilter = new IntentFilter( ACTION_VIRTUAL_DEVICE_REMOVED); mContext.registerReceiver(virtualDeviceReceiver, virtualDeviceFilter, Context.RECEIVER_NOT_EXPORTED); } } /** * Disables the component returned by Loading services/core/java/com/android/server/clipboard/ClipboardService.java +23 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading @@ -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) { Loading Loading
core/java/android/hardware/SystemSensorManager.java +34 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -518,7 +519,11 @@ public class SystemSensorManager extends SensorManager { } private List<Sensor> createRuntimeSensorListLocked(int deviceId) { if (android.companion.virtual.flags.Flags.vdmPublicApis()) { setupVirtualDeviceListener(); } else { setupRuntimeSensorBroadcastReceiver(); } List<Sensor> list = new ArrayList<>(); nativeGetRuntimeSensors(mNativeInstance, deviceId, list); mFullRuntimeSensorListByDevice.put(deviceId, list); Loading Loading @@ -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() { Loading @@ -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) { Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +25 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -928,6 +929,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mContext.registerReceiverAsUser(receiver, UserHandle.ALL, filter, null, mMainHandler, Context.RECEIVER_EXPORTED); 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) { Loading @@ -937,10 +950,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } }; final IntentFilter virtualDeviceFilter = new IntentFilter(ACTION_VIRTUAL_DEVICE_REMOVED); final IntentFilter virtualDeviceFilter = new IntentFilter( ACTION_VIRTUAL_DEVICE_REMOVED); mContext.registerReceiver(virtualDeviceReceiver, virtualDeviceFilter, Context.RECEIVER_NOT_EXPORTED); } } /** * Disables the component returned by Loading
services/core/java/com/android/server/clipboard/ClipboardService.java +23 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading @@ -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) { Loading