Merge "Created a new testAPI isFullVolumeDevice in AudioManager" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0039406fa3
@@ -5062,8 +5062,8 @@ package android.media {
|
||||
method @IntRange(from=0) public long getAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioProductStrategy> getAudioProductStrategies();
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioVolumeGroup> getAudioVolumeGroups();
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getDeviceVolumeBehavior(@NonNull android.media.AudioDeviceAttributes);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public java.util.List<android.media.AudioDeviceAttributes> getDevicesForAttributes(@NonNull android.media.AudioAttributes);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, "android.permission.QUERY_AUDIO_STATE"}) public int getDeviceVolumeBehavior(@NonNull android.media.AudioDeviceAttributes);
|
||||
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, "android.permission.QUERY_AUDIO_STATE"}) public java.util.List<android.media.AudioDeviceAttributes> getDevicesForAttributes(@NonNull android.media.AudioAttributes);
|
||||
method @IntRange(from=0) public long getMaxAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
|
||||
method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMaxVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
|
||||
method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMinVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
|
||||
|
||||
@@ -1335,6 +1335,7 @@ package android.media {
|
||||
public class AudioManager {
|
||||
method @Nullable public static android.media.AudioDeviceInfo getDeviceInfoFromType(int);
|
||||
method public boolean hasRegisteredDynamicPolicy();
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, android.Manifest.permission.QUERY_AUDIO_STATE}) public boolean isFullVolumeDevice();
|
||||
}
|
||||
|
||||
public static final class AudioRecord.MetricsConstants {
|
||||
|
||||
@@ -5287,7 +5287,10 @@ public class AudioManager {
|
||||
* otherwise (typically one device, except for duplicated paths).
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
||||
@RequiresPermission(anyOf = {
|
||||
android.Manifest.permission.MODIFY_AUDIO_ROUTING,
|
||||
android.Manifest.permission.QUERY_AUDIO_STATE
|
||||
})
|
||||
public @NonNull List<AudioDeviceAttributes> getDevicesForAttributes(
|
||||
@NonNull AudioAttributes attributes) {
|
||||
Objects.requireNonNull(attributes);
|
||||
@@ -5426,7 +5429,10 @@ public class AudioManager {
|
||||
* @return the volume behavior for the device
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
||||
@RequiresPermission(anyOf = {
|
||||
android.Manifest.permission.MODIFY_AUDIO_ROUTING,
|
||||
android.Manifest.permission.QUERY_AUDIO_STATE
|
||||
})
|
||||
public @DeviceVolumeBehavior
|
||||
int getDeviceVolumeBehavior(@NonNull AudioDeviceAttributes device) {
|
||||
// verify arguments (validity of device type is enforced in server)
|
||||
@@ -5440,6 +5446,28 @@ public class AudioManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
* Returns {@code true} if the volume device behavior is {@link #DEVICE_VOLUME_BEHAVIOR_FULL}.
|
||||
*/
|
||||
@TestApi
|
||||
@RequiresPermission(anyOf = {
|
||||
android.Manifest.permission.MODIFY_AUDIO_ROUTING,
|
||||
android.Manifest.permission.QUERY_AUDIO_STATE
|
||||
})
|
||||
public boolean isFullVolumeDevice() {
|
||||
final AudioAttributes attributes = new AudioAttributes.Builder()
|
||||
.setUsage(AudioAttributes.USAGE_MEDIA)
|
||||
.build();
|
||||
final List<AudioDeviceAttributes> devices = getDevicesForAttributes(attributes);
|
||||
for (AudioDeviceAttributes device : devices) {
|
||||
if (getDeviceVolumeBehavior(device) == DEVICE_VOLUME_BEHAVIOR_FULL) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate wired accessory connection state change.
|
||||
* @param device type of device connected/disconnected (AudioManager.DEVICE_OUT_xxx)
|
||||
|
||||
@@ -2258,7 +2258,7 @@ public class AudioService extends IAudioService.Stub
|
||||
/** @see AudioManager#getDevicesForAttributes(AudioAttributes) */
|
||||
public @NonNull ArrayList<AudioDeviceAttributes> getDevicesForAttributes(
|
||||
@NonNull AudioAttributes attributes) {
|
||||
enforceModifyAudioRoutingPermission();
|
||||
enforceQueryStateOrModifyRoutingPermission();
|
||||
return getDevicesForAttributesInt(attributes);
|
||||
}
|
||||
|
||||
@@ -2900,6 +2900,16 @@ public class AudioService extends IAudioService.Stub
|
||||
}
|
||||
}
|
||||
|
||||
private void enforceQueryStateOrModifyRoutingPermission() {
|
||||
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
||||
!= PackageManager.PERMISSION_GRANTED
|
||||
&& mContext.checkCallingOrSelfPermission(Manifest.permission.QUERY_AUDIO_STATE)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
throw new SecurityException(
|
||||
"Missing MODIFY_AUDIO_ROUTING or QUERY_AUDIO_STATE permissions");
|
||||
}
|
||||
}
|
||||
|
||||
/** @see AudioManager#setVolumeIndexForAttributes(attr, int, int) */
|
||||
public void setVolumeIndexForAttributes(@NonNull AudioAttributes attr, int index, int flags,
|
||||
String callingPackage) {
|
||||
@@ -5814,7 +5824,7 @@ public class AudioService extends IAudioService.Stub
|
||||
public @AudioManager.DeviceVolumeBehavior
|
||||
int getDeviceVolumeBehavior(@NonNull AudioDeviceAttributes device) {
|
||||
// verify permissions
|
||||
enforceModifyAudioRoutingPermission();
|
||||
enforceQueryStateOrModifyRoutingPermission();
|
||||
|
||||
// translate Java device type to native device type (for the devices masks for full / fixed)
|
||||
final int audioSystemDeviceOut = AudioDeviceInfo.convertDeviceTypeToInternalDevice(
|
||||
|
||||
Reference in New Issue
Block a user