/*
 *  Copyright 2018 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

package org.webrtc.audio;

/**
 * This interface is a thin wrapper on top of a native C++ webrtc::AudioDeviceModule (ADM). The
 * reason for basing it on a native ADM instead of a pure Java interface is that we have two native
 * Android implementations (OpenSLES and AAudio) that does not make sense to wrap through JNI.
 *
 * <p>Note: This class is still under development and may change without notice.
 */
public interface AudioDeviceModule {
  /**
   * Returns a C++ pointer to a webrtc::AudioDeviceModule. Caller does _not_ take ownership and
   * lifetime is handled through the release() call.
   */
  long getNativeAudioDeviceModulePointer();

  /**
   * Release resources for this AudioDeviceModule, including native resources. The object should not
   * be used after this call.
   */
  void release();

  /** Control muting/unmuting the speaker. */
  void setSpeakerMute(boolean mute);

  /** Control muting/unmuting the microphone. */
  void setMicrophoneMute(boolean mute);

  /**
   * Enable or disable built in noise suppressor. Returns true if the enabling was successful,
   * otherwise false is returned.
   */
  default boolean setNoiseSuppressorEnabled(boolean enabled) {
    return false;
  }

  /**
   * Sets the preferred field dimension for the built-in microphone. Returns
   * true if setting was successful, otherwise false is returned.
   * This functionality can be implemented with
   * {@code android.media.MicrophoneDirection.setPreferredMicrophoneFieldDimension}.
   */
  default boolean setPreferredMicrophoneFieldDimension(float dimension) {
    return false;
  }
}
