Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 05e93f5d authored by Vladimir Komsiyski's avatar Vladimir Komsiyski Committed by Android (Google) Code Review
Browse files

Merge "Replace the VDM broadcast for device closed with listener." into main

parents 1080497e b76e28c0
Loading
Loading
Loading
Loading
+34 −7
Original line number Diff line number Diff line
@@ -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) {
        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) {
+25 −10
Original line number Diff line number Diff line
@@ -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,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) {
@@ -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
+23 −3
Original line number Diff line number Diff line
@@ -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) {