diff options
| author | 2021-04-14 16:30:17 -0400 | |
|---|---|---|
| committer | 2021-04-15 13:31:48 -0400 | |
| commit | 1cd1c555c26779cb6558f53f6cd19bedfb626849 (patch) | |
| tree | 4d08e7bea84d0871c1dd447961b891722cd3d4df | |
| parent | 41f4544e59c2860682f4557baefaa6d21e8f3615 (diff) | |
ScrollCaptureConnection: fix npe on close() when active
A reference to the callback was being removed while still
needed. Instead use a local copy for posted callback.
Bug: 12345678
Test: atest ScrollCaptureConnectionTest#testCloseWhileActive
Change-Id: I3a11ac86a8c291972f442ebce962ba8a3a1ddee6
| -rw-r--r-- | core/java/android/view/ScrollCaptureConnection.java | 3 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/view/ScrollCaptureConnectionTest.java | 12 |
2 files changed, 14 insertions, 1 deletions
diff --git a/core/java/android/view/ScrollCaptureConnection.java b/core/java/android/view/ScrollCaptureConnection.java index a6d786e1db21..5fcb011c76f1 100644 --- a/core/java/android/view/ScrollCaptureConnection.java +++ b/core/java/android/view/ScrollCaptureConnection.java @@ -185,7 +185,8 @@ public class ScrollCaptureConnection extends IScrollCaptureConnection.Stub { } Log.w(TAG, "close(): capture session still active! Ending now."); // -> UiThread - mUiThread.execute(() -> mLocal.onScrollCaptureEnd(() -> { /* ignore */ })); + final ScrollCaptureCallback callback = mLocal; + mUiThread.execute(() -> callback.onScrollCaptureEnd(() -> { /* ignore */ })); mActive = false; } mActive = false; diff --git a/core/tests/coretests/src/android/view/ScrollCaptureConnectionTest.java b/core/tests/coretests/src/android/view/ScrollCaptureConnectionTest.java index 22c71b527d48..e7b88c8df393 100644 --- a/core/tests/coretests/src/android/view/ScrollCaptureConnectionTest.java +++ b/core/tests/coretests/src/android/view/ScrollCaptureConnectionTest.java @@ -32,6 +32,7 @@ import android.graphics.Point; import android.graphics.Rect; import android.os.Handler; import android.os.ICancellationSignal; +import android.os.RemoteException; import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; @@ -189,4 +190,15 @@ public class ScrollCaptureConnectionTest { verifyNoMoreInteractions(mRemote); } + @Test + public void testClose_whileActive() throws RemoteException { + mConnection.startCapture(mSurface, mRemote); + + mCallback.completeStartRequest(); + assertTrue(mConnection.isActive()); + + mConnection.close(); + mCallback.completeEndRequest(); + assertFalse(mConnection.isActive()); + } } |