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

Commit 9f22dc7c authored by Ján Sebechlebský's avatar Ján Sebechlebský Committed by Android (Google) Code Review
Browse files

Merge "Refactor showToastWhereUidIsRunning to avoid excessive locking" into udc-dev

parents b05a13af cfeb160e
Loading
Loading
Loading
Loading
+18 −6
Original line number Diff line number Diff line
@@ -1046,18 +1046,30 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
     */
    void showToastWhereUidIsRunning(int uid, String text, @Toast.Duration int duration,
            Looper looper) {
        synchronized (mVirtualDeviceLock) {
        ArrayList<Integer> displayIdsForUid = getDisplayIdsWhereUidIsRunning(uid);
        if (displayIdsForUid.isEmpty()) {
            return;
        }
        DisplayManager displayManager = mContext.getSystemService(DisplayManager.class);
            for (int i = 0; i < mVirtualDisplays.size(); i++) {
                if (mVirtualDisplays.valueAt(i).getWindowPolicyController().containsUid(uid)) {
                    Display display = displayManager.getDisplay(mVirtualDisplays.keyAt(i));
        for (int i = 0; i < displayIdsForUid.size(); i++) {
            Display display = displayManager.getDisplay(displayIdsForUid.get(i));
            if (display != null && display.isValid()) {
                Toast.makeText(mContext.createDisplayContext(display), looper, text,
                        duration).show();
            }
        }
    }

    private ArrayList<Integer> getDisplayIdsWhereUidIsRunning(int uid) {
        ArrayList<Integer> displayIdsForUid = new ArrayList<>();
        synchronized (mVirtualDeviceLock) {
            for (int i = 0; i < mVirtualDisplays.size(); i++) {
                if (mVirtualDisplays.valueAt(i).getWindowPolicyController().containsUid(uid)) {
                    displayIdsForUid.add(mVirtualDisplays.keyAt(i));
                }
            }
        }
        return displayIdsForUid;
    }

    boolean isDisplayOwnedByVirtualDevice(int displayId) {