@@ -0,0 +1,1377 @@
+package omrecorder;%0A%0Aimport android.media.AudioRecord;%0A%0A/**%0A * An %7B@code PullableSource%7D represents %7B@link Source%7D which is Pullable%0A *%0A * @author Kailash Dabhi%0A * @date 01-07-2017%0A */%0Apublic interface PullableSource extends Source %7B%0A  /**%0A   * @return number of bytes to be read from @%7B@link Source%7D%0A   */%0A  int pullSizeInBytes();%0A%0A  void isEnableToBePulled(boolean enabledToBePulled);%0A%0A  boolean isEnableToBePulled();%0A%0A  AudioRecord preparedToBePulled();%0A%0A  class Default extends Source.Default implements PullableSource %7B%0A    private final int pullSizeInBytes;%0A    private volatile boolean pull;%0A%0A    public Default(AudioRecordConfig config, int pullSizeInBytes) %7B%0A      super(config);%0A      this.pullSizeInBytes = pullSizeInBytes;%0A    %7D%0A%0A    public Default(AudioRecordConfig config) %7B%0A      super(config);%0A      this.pullSizeInBytes = minimumBufferSize();%0A    %7D%0A%0A    @Override%0A    public int pullSizeInBytes() %7B%0A      return pullSizeInBytes;%0A    %7D%0A%0A    @Override%0A    public void isEnableToBePulled(boolean enabledToBePulled) %7B%0A      this.pull = enabledToBePulled;%0A    %7D%0A%0A    @Override%0A    public boolean isEnableToBePulled() %7B%0A      return pull;%0A    %7D%0A%0A    @Override%0A    public AudioRecord preparedToBePulled() %7B%0A      final AudioRecord audioRecord = audioRecord();%0A      audioRecord.startRecording();%0A      isEnableToBePulled(true);%0A      return audioRecord;%0A    %7D%0A  %7D%0A%0A%0A%7D

Add PullableSource interface with Default implementation