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

Commit 9e47c41d authored by Linus Tufvesson's avatar Linus Tufvesson Committed by Android (Google) Code Review
Browse files

Merge "Give ActivityRecordInputSink its own surface"

parents 0d1ec389 2771c9ea
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -6905,8 +6905,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                getSyncTransaction().hide(mSurfaceControl);
            }
            if (show) {
                mActivityRecordInputSink.applyChangesToSurfaceIfChanged(
                        getSyncTransaction(), mSurfaceControl);
                mActivityRecordInputSink.applyChangesToSurfaceIfChanged(getSyncTransaction());
            }
        }
        if (mThumbnail != null) {
+17 −4
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ class ActivityRecordInputSink {
    // Hold on to InputEventReceiver to prevent it from getting GCd.
    private InputEventReceiver mInputEventReceiver;
    private InputWindowHandleWrapper mInputWindowHandleWrapper;

    private SurfaceControl mSurfaceControl;
    private int mRapidTouchCount = 0;
    private IBinder mToken;
    private boolean mDisabled = false;
@@ -73,14 +73,27 @@ class ActivityRecordInputSink {
                + mActivityRecord.mActivityComponent.getShortClassName();
    }

    public void applyChangesToSurfaceIfChanged(
            SurfaceControl.Transaction transaction, SurfaceControl surfaceControl) {
    public void applyChangesToSurfaceIfChanged(SurfaceControl.Transaction transaction) {
        InputWindowHandleWrapper inputWindowHandleWrapper = getInputWindowHandleWrapper();
        if (mSurfaceControl == null) {
            mSurfaceControl = createSurface(transaction);
        }
        if (inputWindowHandleWrapper.isChanged()) {
            inputWindowHandleWrapper.applyChangesToSurface(transaction, surfaceControl);
            inputWindowHandleWrapper.applyChangesToSurface(transaction, mSurfaceControl);
        }
    }

    private SurfaceControl createSurface(SurfaceControl.Transaction t) {
        SurfaceControl surfaceControl = mActivityRecord.makeChildSurface(null)
                .setName(mName)
                .setHidden(false)
                .setCallsite("ActivityRecordInputSink.createSurface")
                .build();
        // Put layer below all siblings (and the parent surface too)
        t.setLayer(surfaceControl, Integer.MIN_VALUE);
        return surfaceControl;
    }

    private InputWindowHandleWrapper getInputWindowHandleWrapper() {
        if (mInputWindowHandleWrapper == null) {
            mInputWindowHandleWrapper = new InputWindowHandleWrapper(createInputWindowHandle());