OSDN Git Service

AudioRecord.Builder should throw exception on failure.
authorAndy Hung <hunga@google.com>
Sat, 13 Jun 2015 05:49:15 +0000 (22:49 -0700)
committerAndy Hung <hunga@google.com>
Wed, 17 Jun 2015 15:40:53 +0000 (08:40 -0700)
Should throw UnsupportedOperationException instead of returning
an uninitialized record object.

Bug: 21890643
Change-Id: I9c05a4cff9f5e1d5513c76acace09699a567008f

media/java/android/media/AudioRecord.java

index 3cbc405..974b62e 100644 (file)
@@ -527,10 +527,11 @@ public class AudioRecord
         }
 
         /**
-         * @return a new {@link AudioRecord} instance initialized with all the parameters set
-         *     on this <code>Builder</code>
+         * @return a new {@link AudioRecord} instance successfully initialized with all
+         *     the parameters set on this <code>Builder</code>.
          * @throws UnsupportedOperationException if the parameters set on the <code>Builder</code>
-         *     were incompatible, or if they are not supported by the device.
+         *     were incompatible, or if they are not supported by the device,
+         *     or if the device was not available.
          */
         public AudioRecord build() throws UnsupportedOperationException {
             if (mFormat == null) {
@@ -564,7 +565,13 @@ public class AudioRecord
                     mBufferSizeInBytes = mFormat.getChannelCount()
                             * mFormat.getBytesPerSample(mFormat.getEncoding());
                 }
-                return new AudioRecord(mAttributes, mFormat, mBufferSizeInBytes, mSessionId);
+                final AudioRecord record = new AudioRecord(
+                        mAttributes, mFormat, mBufferSizeInBytes, mSessionId);
+                if (record.getState() == STATE_UNINITIALIZED) {
+                    // release is not necessary
+                    throw new UnsupportedOperationException("Cannot create AudioRecord");
+                }
+                return record;
             } catch (IllegalArgumentException e) {
                 throw new UnsupportedOperationException(e.getMessage());
             }