Fix CtsSecurityTestCases test_cve_2016_2499 fail

android.security.cts.MediaRecorderInfoLeakTest#test_cve_2016_2499

Bug: 151581582
Bug: 72507587
Test: Build CTS
Test: run cts -m CtsSecurityTestCases -t
android.security.cts.MediaRecorderInfoLeakTest#test_cve_2016_2499

Change-Id: Ifd9fc521b39d7352e442bbf25aaca7d571728394
Merged-In: Ifd9fc521b39d7352e442bbf25aaca7d571728394
(cherry picked from commit f5160f790ca77452e60d16f179978925796c5ef0)
diff --git a/tests/tests/security/src/android/security/cts/MediaRecorderInfoLeakTest.java b/tests/tests/security/src/android/security/cts/MediaRecorderInfoLeakTest.java
index 0277338..af62105 100644
--- a/tests/tests/security/src/android/security/cts/MediaRecorderInfoLeakTest.java
+++ b/tests/tests/security/src/android/security/cts/MediaRecorderInfoLeakTest.java
@@ -19,6 +19,7 @@
 import android.platform.test.annotations.SecurityTest;
 import android.media.MediaRecorder;
 import android.test.AndroidTestCase;
+import android.util.Log;
 
 import java.io.File;
 
@@ -32,24 +33,46 @@
     public void test_cve_2016_2499() throws Exception {
         MediaRecorder mediaRecorder = null;
         long end = System.currentTimeMillis() + 600_000; // 10 minutes from now
+        String TAG = "MediaRecorderInfoLeakTest";
+        boolean recorderPrepare = false;
+        int retryCount = 2;
+
         try {
             while(System.currentTimeMillis() < end) {
-                mediaRecorder = new MediaRecorder();
-                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
-                mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
-                mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
-                mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
-                mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
-                mediaRecorder.setVideoFrameRate(30);
-                mediaRecorder.setVideoSize(352, 288);
-                mediaRecorder.setOutputFile(
-                        new File(getContext().getFilesDir(), "record.output").getPath());
-                mediaRecorder.prepare();
-                int test = mediaRecorder.getMaxAmplitude();
-                mediaRecorder.reset();
-                mediaRecorder.release();
-                if(test != 0){
-                    fail("MediaRecorderInfoLeakTest failed");
+                recorderPrepare = false;
+                for (int i = 0; i < retryCount; i++) {
+                    try {
+                        mediaRecorder = new MediaRecorder();
+                        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
+                        mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
+                        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
+                        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
+                        mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
+                        mediaRecorder.setVideoFrameRate(30);
+                        mediaRecorder.setVideoSize(352, 288);
+                        mediaRecorder.setOutputFile(
+                                new File(getContext().getFilesDir(), "record.output").getPath());
+                        mediaRecorder.prepare();
+                        recorderPrepare = true;
+                        break;
+                    } catch (Exception ex) {
+                        Log.w(TAG, "Media Recorder Prepare Exception" + ex.getMessage());
+                        Thread.sleep(200);
+                    } finally {
+                        if (recorderPrepare == false && mediaRecorder != null){
+                            mediaRecorder.release();
+                        }
+                    }
+                }
+                if(recorderPrepare){
+                    int test = mediaRecorder.getMaxAmplitude();
+                    mediaRecorder.reset();
+                    mediaRecorder.release();
+                    if(test != 0){
+                        fail("MediaRecorderInfoLeakTest failed");
+                    }
+                } else {
+                    fail("Media Recorder prepare fail");
                 }
             }
         } catch (Exception e) {