Files
frameworks_base/media/java/android/media/AudioRouting.java
Jeff Sharkey ed2edc7a8e Clean up AudioRouting API internals.
Reuse existing OnRoutingChangedListener APIs and internal logic by
extending the new AudioRouting.OnRoutingChangedListener.  We use
new default methods to delegate incoming calls on the legacy
interfaces.

Fix a handful of locking bugs.

Bug: 27950070, 27952052, 27949198
Change-Id: Ie584108bcbeeab064d8e27d4984e541f31d36728
2016-04-11 13:01:55 -06:00

79 lines
3.1 KiB
Java

/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.media;
import android.os.Handler;
import android.os.Looper;
/**
* AudioRouting defines an interface for controlling routing and routing notifications in
* AudioTrack and AudioRecord objects.
*/
public interface AudioRouting {
/**
* Specifies an audio device (via an {@link AudioDeviceInfo} object) to route
* the output/input to/from.
* @param deviceInfo The {@link AudioDeviceInfo} specifying the audio sink or source.
* If deviceInfo is null, default routing is restored.
* @return true if succesful, false if the specified {@link AudioDeviceInfo} is non-null and
* does not correspond to a valid audio device.
*/
public boolean setPreferredDevice(AudioDeviceInfo deviceInfo);
/**
* Returns the selected output/input specified by {@link #setPreferredDevice}. Note that this
* is not guaranteed to correspond to the actual device being used for playback/recording.
*/
public AudioDeviceInfo getPreferredDevice();
/**
* Returns an {@link AudioDeviceInfo} identifying the current routing of this
* AudioTrack/AudioRecord.
* Note: The query is only valid if the AudioTrack/AudioRecord is currently playing.
* If it is not, <code>getRoutedDevice()</code> will return null.
*/
public AudioDeviceInfo getRoutedDevice();
/**
* Adds an {@link AudioRouting.OnRoutingChangedListener} to receive notifications of routing
* changes on this AudioTrack/AudioRecord.
* @param listener The {@link AudioRouting.OnRoutingChangedListener} interface to receive
* notifications of rerouting events.
* @param handler Specifies the {@link Handler} object for the thread on which to execute
* the callback. If <code>null</code>, the {@link Handler} associated with the main
* {@link Looper} will be used.
*/
public void addOnRoutingChangedListener(OnRoutingChangedListener listener,
Handler handler);
/**
* Removes an {@link AudioRouting.OnRoutingChangedListener} which has been previously added
* to receive rerouting notifications.
* @param listener The previously added {@link AudioRouting.OnRoutingChangedListener} interface
* to remove.
*/
public void removeOnRoutingChangedListener(OnRoutingChangedListener listener);
/**
* Defines the interface by which applications can receive notifications of routing
* changes for the associated {@link AudioRouting}.
*/
public interface OnRoutingChangedListener {
public void onRoutingChanged(AudioRouting router);
}
}