Merge "Fix NullPointerException in ContentRecorder" into tm-qpr-dev am: 6bf944b758

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20055025

Change-Id: Ib096dc91bada99d683792e9c3d1923ffe4bbd673
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Oleg Blinnikov
2022-09-28 10:10:33 +00:00
committed by Automerger Merge Worker
2 changed files with 18 additions and 5 deletions

View File

@@ -388,8 +388,7 @@ final class ContentRecorder implements WindowContainerListener {
* </p>
*/
private void handleStartRecordingFailed() {
final boolean shouldExitTaskRecording = mContentRecordingSession != null
&& mContentRecordingSession.getContentToRecord() == RECORD_CONTENT_TASK;
final boolean shouldExitTaskRecording = isRecordingContentTask();
clearContentRecordingSession();
if (shouldExitTaskRecording) {
// Clean up the cached session first to ensure recording doesn't re-start, since
@@ -475,9 +474,10 @@ final class ContentRecorder implements WindowContainerListener {
ProtoLog.v(WM_DEBUG_CONTENT_RECORDING,
"Recorded task is removed, so stop recording on display %d",
mDisplayContent.getDisplayId());
Task recordedTask = mRecordedWindowContainer.asTask();
if (recordedTask == null
|| mContentRecordingSession.getContentToRecord() != RECORD_CONTENT_TASK) {
Task recordedTask = mRecordedWindowContainer != null
? mRecordedWindowContainer.asTask() : null;
if (recordedTask == null || !isRecordingContentTask()) {
return;
}
recordedTask.unregisterWindowContainerListener(this);
@@ -501,4 +501,9 @@ final class ContentRecorder implements WindowContainerListener {
@VisibleForTesting interface MediaProjectionManagerWrapper {
void stopActiveProjection();
}
private boolean isRecordingContentTask() {
return mContentRecordingSession != null
&& mContentRecordingSession.getContentToRecord() == RECORD_CONTENT_TASK;
}
}

View File

@@ -288,6 +288,14 @@ public class ContentRecorderTests extends WindowTestsBase {
verify(mMediaProjectionManagerWrapper).stopActiveProjection();
}
@Test
public void testRemoveTask_stopsRecording_nullSessionShouldNotThrowExceptions() {
mContentRecorder.setContentRecordingSession(mTaskSession);
mContentRecorder.updateRecording();
mContentRecorder.setContentRecordingSession(null);
mTask.removeImmediately();
}
@Test
public void testUpdateMirroredSurface_capturedAreaResized() {
mContentRecorder.setContentRecordingSession(mDisplaySession);