diff options
| author | 2023-05-18 14:43:59 +0000 | |
|---|---|---|
| committer | 2023-05-18 14:43:59 +0000 | |
| commit | dc318d9a4b705fc81861bee9888c173ecd7e0b4f (patch) | |
| tree | b5bc7d01a83e1922709584c0efd6cc9843682deb | |
| parent | 12e3835b8260164b4237df83b22891817f0055bf (diff) | |
| parent | 1e25b178abec2e521fb8f3eece051efc1ebb17de (diff) | |
Merge "Catch exception when muxing fails to start" into udc-dev am: 1e25b178ab
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23269263
Change-Id: I3486a95e9662aba435e0730aad0222fa68c68247
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
5 files changed, 31 insertions, 10 deletions
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 5795e4facad4..511b1a3881a6 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -295,9 +295,8 @@ <string name="screenrecord_save_title">Screen recording saved</string> <!-- Subtext for a notification shown after saving a screen recording to prompt the user to view it [CHAR_LIMIT=100] --> <string name="screenrecord_save_text">Tap to view</string> - <!-- A toast message shown when there is an error deleting a screen recording [CHAR LIMIT=NONE] --> - <string name="screenrecord_delete_error">Error deleting screen recording</string> - <!-- A toast message shown when the screen recording cannot be started due to insufficient permissions [CHAR LIMIT=NONE] --> + <!-- A toast message shown when there is an error saving a screen recording [CHAR LIMIT=NONE] --> + <string name="screenrecord_save_error">Error saving screen recording</string> <!-- A toast message shown when the screen recording cannot be started due to a generic error [CHAR LIMIT=NONE] --> <string name="screenrecord_start_error">Error starting screen recording</string> diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java index 84f358c303ca..e1ac0fd1fd16 100644 --- a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java +++ b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java @@ -453,9 +453,9 @@ public class RecordingService extends Service implements ScreenMediaRecorderList postGroupNotification(currentUser); mNotificationManager.notifyAsUser(null, mNotificationId, notification, currentUser); - } catch (IOException e) { + } catch (IOException | IllegalStateException e) { Log.e(TAG, "Error saving screen recording: " + e.getMessage()); - showErrorToast(R.string.screenrecord_delete_error); + showErrorToast(R.string.screenrecord_save_error); mNotificationManager.cancelAsUser(null, mNotificationId, currentUser); } }); diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java index b8d96f774e02..b80a01212ca0 100644 --- a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java +++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java @@ -52,8 +52,9 @@ import android.view.Surface; import android.view.WindowManager; import com.android.systemui.media.MediaProjectionCaptureTarget; -import java.io.File; + import java.io.Closeable; +import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.nio.file.Files; @@ -321,7 +322,7 @@ public class ScreenMediaRecorder extends MediaProjection.Callback { /** * Store recorded video */ - protected SavedRecording save() throws IOException { + protected SavedRecording save() throws IOException, IllegalStateException { String fileName = new SimpleDateFormat("'screen-'yyyyMMdd-HHmmss'.mp4'") .format(new Date()); diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordingMuxer.java b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordingMuxer.java index 7ffcfd46a1a4..dc3310dd3c9f 100644 --- a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordingMuxer.java +++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordingMuxer.java @@ -52,9 +52,8 @@ public class ScreenRecordingMuxer { /** * RUN IN THE BACKGROUND THREAD! */ - public void mux() throws IOException { - MediaMuxer muxer = null; - muxer = new MediaMuxer(mOutFile, mFormat); + public void mux() throws IOException, IllegalStateException { + MediaMuxer muxer = new MediaMuxer(mOutFile, mFormat); // Add extractors for (String file: mFiles) { MediaExtractor extractor = new MediaExtractor(); @@ -74,7 +73,10 @@ public class ScreenRecordingMuxer { } } + // This may throw IllegalStateException if no tracks were added above + // Let the error propagate up so we can notify the user. muxer.start(); + for (Pair<MediaExtractor, Integer> pair: mExtractorIndexToMuxerIndex.keySet()) { MediaExtractor extractor = pair.first; extractor.selectTrack(pair.second); diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingServiceTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingServiceTest.java index 7c30843bb70b..3def6ba1fc58 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingServiceTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingServiceTest.java @@ -46,6 +46,8 @@ import com.android.systemui.statusbar.phone.KeyguardDismissUtil; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; @@ -73,6 +75,8 @@ public class RecordingServiceTest extends SysuiTestCase { private Handler mHandler; @Mock private UserContextProvider mUserContextTracker; + @Captor + private ArgumentCaptor<Runnable> mRunnableCaptor; private KeyguardDismissUtil mKeyguardDismissUtil = new KeyguardDismissUtil() { public void executeWhenUnlocked(ActivityStarter.OnDismissAction action, boolean requiresShadeOpen) { @@ -209,4 +213,19 @@ public class RecordingServiceTest extends SysuiTestCase { verify(mScreenMediaRecorder).release(); } + + @Test + public void testOnErrorSaving() throws IOException { + // When the screen recording does not save properly + doThrow(new IllegalStateException("fail")).when(mScreenMediaRecorder).save(); + + Intent startIntent = RecordingService.getStopIntent(mContext); + mRecordingService.onStartCommand(startIntent, 0, 0); + verify(mExecutor).execute(mRunnableCaptor.capture()); + mRunnableCaptor.getValue().run(); + + // Then the state is set to not recording and we cancel the notification + verify(mController).updateState(false); + verify(mNotificationManager).cancelAsUser(any(), anyInt(), any()); + } } |