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

Commit d449468a authored by Omar Eissa's avatar Omar Eissa
Browse files

Refactor notifyScreenshotListeners method in WMS

Refactored notfiyScreenshotListeners method in WindowManagerService to
reduce unnecessary iteration over visible activities.

Bug: 274128914
Test: atest CtsWindowManagerDeviceTestCases:ActivityCaptureCallbackTests
Change-Id: I6ca97dba0dfd4674ab8fc6f2ad0762c7e30c1356
parent 9397e311
Loading
Loading
Loading
Loading
+13 −31
Original line number Diff line number Diff line
@@ -9528,30 +9528,6 @@ public class WindowManagerService extends IWindowManager.Stub
        mSurfaceSyncGroupController.markSyncGroupReady(syncGroupToken);
    }

    private ArraySet<ActivityRecord> getVisibleActivityRecords(int displayId) {
        ArraySet<ActivityRecord> result = new ArraySet<>();
        synchronized (mGlobalLock) {
            ArraySet<ComponentName> addedActivities = new ArraySet<>();
            DisplayContent displayContent = mRoot.getDisplayContent(displayId);
            if (displayContent != null) {
                displayContent.forAllWindows(
                        (w) -> {
                            if (w.isVisible()
                                    && w.isDisplayed()
                                    && w.mActivityRecord != null
                                    && !addedActivities.contains(
                                    w.mActivityRecord.mActivityComponent)
                                    && w.mActivityRecord.isVisible()
                                    && w.isVisibleNow()) {
                                addedActivities.add(w.mActivityRecord.mActivityComponent);
                                result.add(w.mActivityRecord);
                            }
                        },
                        true /* traverseTopToBottom */);
            }
        }
        return result;
    }

    /**
     * Must be called when a screenshot is taken via hardware chord.
@@ -9567,14 +9543,20 @@ public class WindowManagerService extends IWindowManager.Stub
            throw new SecurityException("Requires STATUS_BAR_SERVICE permission");
        }
        synchronized (mGlobalLock) {
            final DisplayContent displayContent = mRoot.getDisplayContent(displayId);
            if (displayContent == null) {
                return new ArrayList<>();
            }
            ArraySet<ComponentName> notifiedApps = new ArraySet<>();
            ArraySet<ActivityRecord> visibleApps = getVisibleActivityRecords(displayId);
            for (ActivityRecord ar : visibleApps) {
                if (ar.isRegisteredForScreenCaptureCallback()) {
            displayContent.forAllActivities(
                    (ar) -> {
                        if (!notifiedApps.contains(ar.mActivityComponent) && ar.isVisible()
                                && ar.isRegisteredForScreenCaptureCallback()) {
                            ar.reportScreenCaptured();
                            notifiedApps.add(ar.mActivityComponent);
                        }
            }
                    },
                    true /* traverseTopToBottom */);
            return List.copyOf(notifiedApps);
        }
    }