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

Commit bc18fe85 authored by Jesse Hall's avatar Jesse Hall Committed by Android Git Automerger
Browse files

am fd1c028e: Merge "Handle hotplug events as described instead of rescanning"

# Via Gerrit Code Review
* commit 'fd1c028e':
  Handle hotplug events as described instead of rescanning
parents b9620a89 fd1c028e
Loading
Loading
Loading
Loading
+34 −23
Original line number Original line Diff line number Diff line
@@ -60,11 +60,13 @@ final class LocalDisplayAdapter extends DisplayAdapter {
        super.registerLocked();
        super.registerLocked();


        mHotplugReceiver = new HotplugDisplayEventReceiver(getHandler().getLooper());
        mHotplugReceiver = new HotplugDisplayEventReceiver(getHandler().getLooper());
        scanDisplaysLocked();
    }


    private void scanDisplaysLocked() {
        for (int builtInDisplayId : BUILT_IN_DISPLAY_IDS_TO_SCAN) {
        for (int builtInDisplayId : BUILT_IN_DISPLAY_IDS_TO_SCAN) {
            tryConnectDisplayLocked(builtInDisplayId);
        }
    }

    private void tryConnectDisplayLocked(int builtInDisplayId) {
        IBinder displayToken = Surface.getBuiltInDisplay(builtInDisplayId);
        IBinder displayToken = Surface.getBuiltInDisplay(builtInDisplayId);
        if (displayToken != null && Surface.getDisplayInfo(displayToken, mTempPhys)) {
        if (displayToken != null && Surface.getDisplayInfo(displayToken, mTempPhys)) {
            LocalDisplayDevice device = mDevices.get(builtInDisplayId);
            LocalDisplayDevice device = mDevices.get(builtInDisplayId);
@@ -78,6 +80,13 @@ final class LocalDisplayAdapter extends DisplayAdapter {
                sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_CHANGED);
                sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_CHANGED);
            }
            }
        } else {
        } else {
            // The display is no longer available. Ignore the attempt to add it.
            // If it was connected but has already been disconnected, we'll get a
            // disconnect event that will remove it from mDevices.
        }
    }

    private void tryDisconnectDisplayLocked(int builtInDisplayId) {
        LocalDisplayDevice device = mDevices.get(builtInDisplayId);
        LocalDisplayDevice device = mDevices.get(builtInDisplayId);
        if (device != null) {
        if (device != null) {
            // Display was removed.
            // Display was removed.
@@ -85,8 +94,6 @@ final class LocalDisplayAdapter extends DisplayAdapter {
            sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_REMOVED);
            sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_REMOVED);
        }
        }
    }
    }
        }
    }


    private final class LocalDisplayDevice extends DisplayDevice {
    private final class LocalDisplayDevice extends DisplayDevice {
        private final int mBuiltInDisplayId;
        private final int mBuiltInDisplayId;
@@ -191,7 +198,11 @@ final class LocalDisplayAdapter extends DisplayAdapter {
        @Override
        @Override
        public void onHotplug(long timestampNanos, int builtInDisplayId, boolean connected) {
        public void onHotplug(long timestampNanos, int builtInDisplayId, boolean connected) {
            synchronized (getSyncRoot()) {
            synchronized (getSyncRoot()) {
                scanDisplaysLocked();
                if (connected) {
                    tryConnectDisplayLocked(builtInDisplayId);
                } else {
                    tryDisconnectDisplayLocked(builtInDisplayId);
                }
            }
            }
        }
        }
    }
    }