Skip to content

Commit 7dc5040

Browse files
nift4RakeshBatra
authored andcommitted
SystemUI: fix race condition in ScreenshotController
// java.lang.IllegalStateException // at android.media.MediaPlayer._start(Native Method) // at android.media.MediaPlayer.startImpl(MediaPlayer.java:1371) // at android.media.MediaPlayer.start(MediaPlayer.java:1345) // at com.android.systemui.user.CreateUserActivity$$ExternalSyntheticLambda1.run(R8$$SyntheticClass:194) // at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) // at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) // at java.lang.Thread.run(Thread.java:1012) // ** Monkey aborted due to error. Change-Id: Ic159f3c32d2074f4002dc36f8cd24cc518ba288f Signed-off-by: RakeshBatra <raakesh.batra@rediffmail.com>
1 parent f46b8ea commit 7dc5040

File tree

1 file changed

+25
-12
lines changed

1 file changed

+25
-12
lines changed

packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,8 @@ interface TransitionDestination {
275275
private final WindowManager mWindowManager;
276276
private final WindowManager.LayoutParams mWindowLayoutParams;
277277
private final AccessibilityManager mAccessibilityManager;
278-
private final ListenableFuture<MediaPlayer> mCameraSound;
278+
279+
private ListenableFuture<MediaPlayer> mCameraSound;
279280
private final AudioManager mAudioManager;
280281
private final Vibrator mVibrator;
281282
private final CameraManager mCameraManager;
@@ -492,9 +493,12 @@ private void releaseMediaPlayer() {
492493
// Note that this may block if the sound is still being loaded (very unlikely) but we can't
493494
// reliably release in the background because the service is being destroyed.
494495
try {
495-
MediaPlayer player = mCameraSound.get();
496-
if (player != null) {
497-
player.release();
496+
if (mCameraSound != null) {
497+
MediaPlayer player = mCameraSound.get();
498+
if (player != null) {
499+
player.release();
500+
}
501+
mCameraSound = null;
498502
}
499503
} catch (InterruptedException | ExecutionException e) {
500504
}
@@ -910,15 +914,24 @@ private ListenableFuture<MediaPlayer> loadCameraSound() {
910914
}
911915

912916
private void playCameraSound() {
913-
mCameraSound.addListener(() -> {
914-
try {
915-
MediaPlayer player = mCameraSound.get();
916-
if (player != null) {
917-
player.start();
917+
if (Settings.System.getIntForUser(mContext.getContentResolver(),
918+
Settings.System.SCREENSHOT_SHUTTER_SOUND, 1, UserHandle.USER_CURRENT) == 0) {
919+
return;
920+
}
921+
922+
if (mCameraSound != null) {
923+
mCameraSound.addListener(() -> {
924+
try {
925+
if (mCameraSound != null) {
926+
MediaPlayer player = mCameraSound.get();
927+
if (player != null) {
928+
player.start();
929+
}
930+
}
931+
} catch (InterruptedException | ExecutionException e) {
918932
}
919-
} catch (InterruptedException | ExecutionException e) {
920-
}
921-
}, mBgExecutor);
933+
}, mBgExecutor);
934+
}
922935
}
923936

924937
/**

0 commit comments

Comments
 (0)