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

Commit 5757704a authored by Patrick Williams's avatar Patrick Williams Committed by Android (Google) Code Review
Browse files

Merge "Fix SurfaceControl release on connection removed" into main

parents 935d59c6 8a7d2015
Loading
Loading
Loading
Loading
+11 −1
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ import static android.view.accessibility.AccessibilityNodeInfo.ACTION_CLICK;
import static android.view.accessibility.AccessibilityNodeInfo.ACTION_LONG_CLICK;
import static android.view.accessibility.AccessibilityNodeInfo.ACTION_LONG_CLICK;


import static com.android.server.pm.UserManagerService.enforceCurrentUserIfVisibleBackgroundEnabled;
import static com.android.server.pm.UserManagerService.enforceCurrentUserIfVisibleBackgroundEnabled;
import static com.android.window.flags.Flags.scvhSurfaceControlLifetimeFix;


import android.accessibilityservice.AccessibilityGestureEvent;
import android.accessibilityservice.AccessibilityGestureEvent;
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityService;
@@ -2809,7 +2810,15 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
        try {
        try {
            mSystemSupport.attachAccessibilityOverlayToDisplay(
            mSystemSupport.attachAccessibilityOverlayToDisplay(
                    interactionId, displayId, sc, callback);
                    interactionId, displayId, sc, callback);
            if (scvhSurfaceControlLifetimeFix()) {
                // AccessibilityManagerService#attachAccessibilityOverlayToDisplay releases the
                // SurfaceControl supplied to it. In order to reparent any attached overlays when
                // the session is removed, we need a not-released SurfaceControl. For this purpose,
                // we store a copy of the provided SurfaceControl in mOverlays.
                mOverlays.add(new SurfaceControl(sc, "attachAccessibilityOverlayToDisplay"));
            } else {
                mOverlays.add(sc);
                mOverlays.add(sc);
            }
        } finally {
        } finally {
            Binder.restoreCallingIdentity(identity);
            Binder.restoreCallingIdentity(identity);
        }
        }
@@ -2854,6 +2863,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
        for (SurfaceControl sc : mOverlays) {
        for (SurfaceControl sc : mOverlays) {
            if (sc.isValid()) {
            if (sc.isValid()) {
                t.reparent(sc, null);
                t.reparent(sc, null);
                sc.release();
            }
            }
        }
        }
        t.apply();
        t.apply();