Merge "Adding unknown constant to AudioManager ENCODED_SURROUND_OUTPUT mode constants" into sc-dev

This commit is contained in:
Kriti Dang
2021-04-09 12:51:31 +00:00
committed by Android (Google) Code Review
5 changed files with 56 additions and 6 deletions

View File

@@ -20475,6 +20475,7 @@ package android.media {
field public static final int ENCODED_SURROUND_OUTPUT_AUTO = 0; // 0x0
field public static final int ENCODED_SURROUND_OUTPUT_MANUAL = 3; // 0x3
field public static final int ENCODED_SURROUND_OUTPUT_NEVER = 1; // 0x1
field public static final int ENCODED_SURROUND_OUTPUT_UNKNOWN = -1; // 0xffffffff
field public static final int ERROR = -1; // 0xffffffff
field public static final int ERROR_DEAD_OBJECT = -6; // 0xfffffffa
field public static final String EXTRA_AUDIO_PLUG_STATE = "android.media.extra.AUDIO_PLUG_STATE";

View File

@@ -13825,6 +13825,12 @@ public final class Settings {
*/
public static final int ENCODED_SURROUND_OUTPUT_MANUAL = 3;
/**
* The maximum value for surround sound output mode in Android S.
* @hide
*/
public static final int ENCODED_SURROUND_SC_MAX = ENCODED_SURROUND_OUTPUT_MANUAL;
/**
* Set to ENCODED_SURROUND_OUTPUT_AUTO,
* ENCODED_SURROUND_OUTPUT_NEVER,

View File

@@ -569,6 +569,7 @@ public class AudioManager {
/** @hide */
@IntDef(prefix = {"ENCODED_SURROUND_OUTPUT_"}, value = {
ENCODED_SURROUND_OUTPUT_UNKNOWN,
ENCODED_SURROUND_OUTPUT_AUTO,
ENCODED_SURROUND_OUTPUT_NEVER,
ENCODED_SURROUND_OUTPUT_ALWAYS,
@@ -577,6 +578,11 @@ public class AudioManager {
@Retention(RetentionPolicy.SOURCE)
public @interface EncodedSurroundOutputMode {}
/**
* The mode for surround sound formats is unknown.
*/
public static final int ENCODED_SURROUND_OUTPUT_UNKNOWN = -1;
/**
* The surround sound formats are available for use if they are detected. This is the default
* mode.
@@ -6873,7 +6879,8 @@ public class AudioManager {
@RequiresPermission(android.Manifest.permission.WRITE_SETTINGS)
public @EncodedSurroundOutputMode int getEncodedSurroundMode() {
try {
return getService().getEncodedSurroundMode();
return getService().getEncodedSurroundMode(
getContext().getApplicationInfo().targetSdkVersion);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}

View File

@@ -164,7 +164,7 @@ interface IAudioService {
boolean setEncodedSurroundMode(int mode);
int getEncodedSurroundMode();
int getEncodedSurroundMode(int targetSdkVersion);
oneway void avrcpSupportsAbsoluteVolume(String address, boolean support);

View File

@@ -1925,7 +1925,7 @@ public class AudioService extends IAudioService.Stub
/** @see AudioManager#setEncodedSurroundMode(int) */
@Override
public boolean setEncodedSurroundMode(int mode) {
public boolean setEncodedSurroundMode(@AudioManager.EncodedSurroundOutputMode int mode) {
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.WRITE_SETTINGS)
!= PackageManager.PERMISSION_GRANTED) {
throw new SecurityException("Missing WRITE_SETTINGS permission");
@@ -1936,7 +1936,7 @@ public class AudioService extends IAudioService.Stub
synchronized (mSettingsLock) {
Settings.Global.putInt(mContentResolver,
Settings.Global.ENCODED_SURROUND_OUTPUT,
mode);
toEncodedSurroundSetting(mode));
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -1946,7 +1946,7 @@ public class AudioService extends IAudioService.Stub
/** @see AudioManager#getEncodedSurroundMode() */
@Override
public int getEncodedSurroundMode() {
public int getEncodedSurroundMode(int targetSdkVersion) {
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.WRITE_SETTINGS)
!= PackageManager.PERMISSION_GRANTED) {
throw new SecurityException("Missing WRITE_SETTINGS permission");
@@ -1955,9 +1955,10 @@ public class AudioService extends IAudioService.Stub
final long token = Binder.clearCallingIdentity();
try {
synchronized (mSettingsLock) {
return Settings.Global.getInt(mContentResolver,
int encodedSurroundSetting = Settings.Global.getInt(mContentResolver,
Settings.Global.ENCODED_SURROUND_OUTPUT,
AudioManager.ENCODED_SURROUND_OUTPUT_AUTO);
return toEncodedSurroundOutputMode(encodedSurroundSetting, targetSdkVersion);
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -1981,6 +1982,41 @@ public class AudioService extends IAudioService.Stub
return formats;
}
@SuppressWarnings("AndroidFrameworkCompatChange")
@AudioManager.EncodedSurroundOutputMode
private int toEncodedSurroundOutputMode(int encodedSurroundSetting, int targetSdkVersion) {
if (targetSdkVersion <= Build.VERSION_CODES.S
&& encodedSurroundSetting > Settings.Global.ENCODED_SURROUND_SC_MAX) {
return AudioManager.ENCODED_SURROUND_OUTPUT_UNKNOWN;
}
switch (encodedSurroundSetting) {
case Settings.Global.ENCODED_SURROUND_OUTPUT_AUTO:
return AudioManager.ENCODED_SURROUND_OUTPUT_AUTO;
case Settings.Global.ENCODED_SURROUND_OUTPUT_NEVER:
return AudioManager.ENCODED_SURROUND_OUTPUT_NEVER;
case Settings.Global.ENCODED_SURROUND_OUTPUT_ALWAYS:
return AudioManager.ENCODED_SURROUND_OUTPUT_ALWAYS;
case Settings.Global.ENCODED_SURROUND_OUTPUT_MANUAL:
return AudioManager.ENCODED_SURROUND_OUTPUT_MANUAL;
default:
return AudioManager.ENCODED_SURROUND_OUTPUT_UNKNOWN;
}
}
private int toEncodedSurroundSetting(
@AudioManager.EncodedSurroundOutputMode int encodedSurroundOutputMode) {
switch (encodedSurroundOutputMode) {
case AudioManager.ENCODED_SURROUND_OUTPUT_NEVER:
return Settings.Global.ENCODED_SURROUND_OUTPUT_NEVER;
case AudioManager.ENCODED_SURROUND_OUTPUT_ALWAYS:
return Settings.Global.ENCODED_SURROUND_OUTPUT_ALWAYS;
case AudioManager.ENCODED_SURROUND_OUTPUT_MANUAL:
return Settings.Global.ENCODED_SURROUND_OUTPUT_MANUAL;
default:
return Settings.Global.ENCODED_SURROUND_OUTPUT_AUTO;
}
}
private boolean isSurroundFormat(int audioFormat) {
for (int sf : AudioFormat.SURROUND_SOUND_ENCODING) {
if (sf == audioFormat) {