Loading core/res/res/values/config.xml +5 −0 Original line number Diff line number Diff line Loading @@ -1329,6 +1329,11 @@ device is data-only. --> <bool name="config_voice_capable">true</bool> <!-- Flag indicating whether all audio streams should be mapped to one single stream. If true, all audio streams are mapped to STREAM_MUSIC as if it's on TV platform. --> <bool name="config_single_volume">false</bool> <!-- Flag indicating that an outbound call must have a call capable phone account that has declared it can process the call's handle. --> <bool name="config_requireCallCapableAccountForHandle">false</bool> Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -264,6 +264,7 @@ <java-symbol type="bool" name="config_telephony_use_own_number_for_voicemail" /> <java-symbol type="bool" name="config_ui_enableFadingMarquee" /> <java-symbol type="bool" name="config_use_strict_phone_number_comparation" /> <java-symbol type="bool" name="config_single_volume" /> <java-symbol type="bool" name="config_voice_capable" /> <java-symbol type="bool" name="config_requireCallCapableAccountForHandle" /> <java-symbol type="bool" name="config_user_notification_of_restrictied_mobile_access" /> Loading media/java/android/media/AudioSystem.java +10 −0 Original line number Diff line number Diff line Loading @@ -805,6 +805,16 @@ public class AudioSystem } } /** * @hide * @return whether the system uses a single volume stream. */ public static boolean isSingleVolume(Context context) { boolean forceSingleVolume = context.getResources().getBoolean( com.android.internal.R.bool.config_single_volume); return getPlatformType(context) == PLATFORM_TELEVISION || forceSingleVolume; } public static final int DEFAULT_MUTE_STREAMS_AFFECTED = (1 << STREAM_MUSIC) | (1 << STREAM_RING) | Loading services/core/java/com/android/server/audio/AudioService.java +31 −27 Original line number Diff line number Diff line Loading @@ -174,6 +174,9 @@ public class AudioService extends IAudioService.Stub { // the platform type affects volume and silent mode behavior private final int mPlatformType; // indicates whether the system maps all streams to a single stream. private final boolean mIsSingleVolume; private boolean isPlatformVoice() { return mPlatformType == AudioSystem.PLATFORM_VOICE; } Loading Loading @@ -606,6 +609,8 @@ public class AudioService extends IAudioService.Stub { mPlatformType = AudioSystem.getPlatformType(context); mIsSingleVolume = AudioSystem.isSingleVolume(context); mUserManagerInternal = LocalServices.getService(UserManagerInternal.class); PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); Loading Loading @@ -958,21 +963,22 @@ public class AudioService extends IAudioService.Stub { private void updateStreamVolumeAlias(boolean updateVolumes, String caller) { int dtmfStreamAlias; if (mIsSingleVolume) { mStreamVolumeAlias = STREAM_VOLUME_ALIAS_TELEVISION; dtmfStreamAlias = AudioSystem.STREAM_MUSIC; } else { switch (mPlatformType) { case AudioSystem.PLATFORM_VOICE: mStreamVolumeAlias = STREAM_VOLUME_ALIAS_VOICE; dtmfStreamAlias = AudioSystem.STREAM_RING; break; case AudioSystem.PLATFORM_TELEVISION: mStreamVolumeAlias = STREAM_VOLUME_ALIAS_TELEVISION; dtmfStreamAlias = AudioSystem.STREAM_MUSIC; break; default: mStreamVolumeAlias = STREAM_VOLUME_ALIAS_DEFAULT; dtmfStreamAlias = AudioSystem.STREAM_MUSIC; } } if (isPlatformTelevision()) { if (mIsSingleVolume) { mRingerModeAffectedStreams = 0; } else { if (isInCommunication()) { Loading Loading @@ -1080,7 +1086,7 @@ public class AudioService extends IAudioService.Stub { if (ringerMode != ringerModeFromSettings) { Settings.Global.putInt(cr, Settings.Global.MODE_RINGER, ringerMode); } if (mUseFixedVolume || isPlatformTelevision()) { if (mUseFixedVolume || mIsSingleVolume) { ringerMode = AudioManager.RINGER_MODE_NORMAL; } synchronized(mSettingsLock) { Loading Loading @@ -1354,7 +1360,7 @@ public class AudioService extends IAudioService.Stub { // unmute immediately for volume up streamState.mute(false); } else if (direction == AudioManager.ADJUST_LOWER) { if (mPlatformType == AudioSystem.PLATFORM_TELEVISION) { if (mIsSingleVolume) { sendMsg(mAudioHandler, MSG_UNMUTE_STREAM, SENDMSG_QUEUE, streamTypeAlias, flags, null, UNMUTE_STREAM_DELAY); } Loading Loading @@ -2067,7 +2073,7 @@ public class AudioService extends IAudioService.Stub { } private void setRingerMode(int ringerMode, String caller, boolean external) { if (mUseFixedVolume || isPlatformTelevision()) { if (mUseFixedVolume || mIsSingleVolume) { return; } if (caller == null || caller.length() == 0) { Loading Loading @@ -3384,7 +3390,6 @@ public class AudioService extends IAudioService.Stub { */ private int checkForRingerModeChange(int oldIndex, int direction, int step, boolean isMuted, String caller, int flags) { final boolean isTv = mPlatformType == AudioSystem.PLATFORM_TELEVISION; int result = FLAG_ADJUST_VOLUME; int ringerMode = getRingerModeInternal(); Loading @@ -3406,7 +3411,7 @@ public class AudioService extends IAudioService.Stub { ringerMode = RINGER_MODE_SILENT; } } } else if (isTv && (direction == AudioManager.ADJUST_TOGGLE_MUTE } else if (mIsSingleVolume && (direction == AudioManager.ADJUST_TOGGLE_MUTE || direction == AudioManager.ADJUST_MUTE)) { if (mHasVibrator) { ringerMode = RINGER_MODE_VIBRATE; Loading @@ -3425,7 +3430,7 @@ public class AudioService extends IAudioService.Stub { } if ((direction == AudioManager.ADJUST_LOWER)) { // This is the case we were muted with the volume turned up if (isTv && oldIndex >= 2 * step && isMuted) { if (mIsSingleVolume && oldIndex >= 2 * step && isMuted) { ringerMode = RINGER_MODE_NORMAL; } else if (mPrevVolDirection != AudioManager.ADJUST_LOWER) { if (mVolumePolicy.volumeDownToEnterSilent) { Loading @@ -3447,7 +3452,7 @@ public class AudioService extends IAudioService.Stub { result &= ~FLAG_ADJUST_VOLUME; break; case RINGER_MODE_SILENT: if (isTv && direction == AudioManager.ADJUST_LOWER && oldIndex >= 2 * step && isMuted) { if (mIsSingleVolume && direction == AudioManager.ADJUST_LOWER && oldIndex >= 2 * step && isMuted) { // This is the case we were muted with the volume turned up ringerMode = RINGER_MODE_NORMAL; } else if (direction == AudioManager.ADJUST_RAISE Loading Loading @@ -3501,7 +3506,7 @@ public class AudioService extends IAudioService.Stub { (1 << AudioSystem.STREAM_SYSTEM)|(1 << AudioSystem.STREAM_SYSTEM_ENFORCED)), UserHandle.USER_CURRENT); if (mPlatformType == AudioSystem.PLATFORM_TELEVISION) { if (mIsSingleVolume) { ringerModeAffectedStreams = 0; } else if (mRingerModeDelegate != null) { ringerModeAffectedStreams = mRingerModeDelegate Loading Loading @@ -3586,6 +3591,11 @@ public class AudioService extends IAudioService.Stub { } private int getActiveStreamType(int suggestedStreamType) { if (mIsSingleVolume && suggestedStreamType == AudioManager.USE_DEFAULT_STREAM_TYPE) { return AudioSystem.STREAM_MUSIC; } switch (mPlatformType) { case AudioSystem.PLATFORM_VOICE: if (isInCommunication()) { Loading Loading @@ -3613,12 +3623,6 @@ public class AudioService extends IAudioService.Stub { return AudioSystem.STREAM_MUSIC; } break; case AudioSystem.PLATFORM_TELEVISION: if (suggestedStreamType == AudioManager.USE_DEFAULT_STREAM_TYPE) { // TV always defaults to STREAM_MUSIC return AudioSystem.STREAM_MUSIC; } break; default: if (isInCommunication()) { if (AudioSystem.getForceUse(AudioSystem.FOR_COMMUNICATION) Loading Loading @@ -4300,7 +4304,7 @@ public class AudioService extends IAudioService.Stub { if (mUseFixedVolume) { return; } if (isPlatformTelevision() && (streamState.mStreamType != AudioSystem.STREAM_MUSIC)) { if (mIsSingleVolume && (streamState.mStreamType != AudioSystem.STREAM_MUSIC)) { return; } System.putIntForUser(mContentResolver, Loading Loading @@ -5522,7 +5526,7 @@ public class AudioService extends IAudioService.Stub { } } if (cameraSoundForcedChanged) { if (!isPlatformTelevision()) { if (!mIsSingleVolume) { VolumeStreamState s = mStreamStates[AudioSystem.STREAM_SYSTEM_ENFORCED]; if (cameraSoundForced) { s.setAllIndexesToMax(); Loading Loading
core/res/res/values/config.xml +5 −0 Original line number Diff line number Diff line Loading @@ -1329,6 +1329,11 @@ device is data-only. --> <bool name="config_voice_capable">true</bool> <!-- Flag indicating whether all audio streams should be mapped to one single stream. If true, all audio streams are mapped to STREAM_MUSIC as if it's on TV platform. --> <bool name="config_single_volume">false</bool> <!-- Flag indicating that an outbound call must have a call capable phone account that has declared it can process the call's handle. --> <bool name="config_requireCallCapableAccountForHandle">false</bool> Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -264,6 +264,7 @@ <java-symbol type="bool" name="config_telephony_use_own_number_for_voicemail" /> <java-symbol type="bool" name="config_ui_enableFadingMarquee" /> <java-symbol type="bool" name="config_use_strict_phone_number_comparation" /> <java-symbol type="bool" name="config_single_volume" /> <java-symbol type="bool" name="config_voice_capable" /> <java-symbol type="bool" name="config_requireCallCapableAccountForHandle" /> <java-symbol type="bool" name="config_user_notification_of_restrictied_mobile_access" /> Loading
media/java/android/media/AudioSystem.java +10 −0 Original line number Diff line number Diff line Loading @@ -805,6 +805,16 @@ public class AudioSystem } } /** * @hide * @return whether the system uses a single volume stream. */ public static boolean isSingleVolume(Context context) { boolean forceSingleVolume = context.getResources().getBoolean( com.android.internal.R.bool.config_single_volume); return getPlatformType(context) == PLATFORM_TELEVISION || forceSingleVolume; } public static final int DEFAULT_MUTE_STREAMS_AFFECTED = (1 << STREAM_MUSIC) | (1 << STREAM_RING) | Loading
services/core/java/com/android/server/audio/AudioService.java +31 −27 Original line number Diff line number Diff line Loading @@ -174,6 +174,9 @@ public class AudioService extends IAudioService.Stub { // the platform type affects volume and silent mode behavior private final int mPlatformType; // indicates whether the system maps all streams to a single stream. private final boolean mIsSingleVolume; private boolean isPlatformVoice() { return mPlatformType == AudioSystem.PLATFORM_VOICE; } Loading Loading @@ -606,6 +609,8 @@ public class AudioService extends IAudioService.Stub { mPlatformType = AudioSystem.getPlatformType(context); mIsSingleVolume = AudioSystem.isSingleVolume(context); mUserManagerInternal = LocalServices.getService(UserManagerInternal.class); PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); Loading Loading @@ -958,21 +963,22 @@ public class AudioService extends IAudioService.Stub { private void updateStreamVolumeAlias(boolean updateVolumes, String caller) { int dtmfStreamAlias; if (mIsSingleVolume) { mStreamVolumeAlias = STREAM_VOLUME_ALIAS_TELEVISION; dtmfStreamAlias = AudioSystem.STREAM_MUSIC; } else { switch (mPlatformType) { case AudioSystem.PLATFORM_VOICE: mStreamVolumeAlias = STREAM_VOLUME_ALIAS_VOICE; dtmfStreamAlias = AudioSystem.STREAM_RING; break; case AudioSystem.PLATFORM_TELEVISION: mStreamVolumeAlias = STREAM_VOLUME_ALIAS_TELEVISION; dtmfStreamAlias = AudioSystem.STREAM_MUSIC; break; default: mStreamVolumeAlias = STREAM_VOLUME_ALIAS_DEFAULT; dtmfStreamAlias = AudioSystem.STREAM_MUSIC; } } if (isPlatformTelevision()) { if (mIsSingleVolume) { mRingerModeAffectedStreams = 0; } else { if (isInCommunication()) { Loading Loading @@ -1080,7 +1086,7 @@ public class AudioService extends IAudioService.Stub { if (ringerMode != ringerModeFromSettings) { Settings.Global.putInt(cr, Settings.Global.MODE_RINGER, ringerMode); } if (mUseFixedVolume || isPlatformTelevision()) { if (mUseFixedVolume || mIsSingleVolume) { ringerMode = AudioManager.RINGER_MODE_NORMAL; } synchronized(mSettingsLock) { Loading Loading @@ -1354,7 +1360,7 @@ public class AudioService extends IAudioService.Stub { // unmute immediately for volume up streamState.mute(false); } else if (direction == AudioManager.ADJUST_LOWER) { if (mPlatformType == AudioSystem.PLATFORM_TELEVISION) { if (mIsSingleVolume) { sendMsg(mAudioHandler, MSG_UNMUTE_STREAM, SENDMSG_QUEUE, streamTypeAlias, flags, null, UNMUTE_STREAM_DELAY); } Loading Loading @@ -2067,7 +2073,7 @@ public class AudioService extends IAudioService.Stub { } private void setRingerMode(int ringerMode, String caller, boolean external) { if (mUseFixedVolume || isPlatformTelevision()) { if (mUseFixedVolume || mIsSingleVolume) { return; } if (caller == null || caller.length() == 0) { Loading Loading @@ -3384,7 +3390,6 @@ public class AudioService extends IAudioService.Stub { */ private int checkForRingerModeChange(int oldIndex, int direction, int step, boolean isMuted, String caller, int flags) { final boolean isTv = mPlatformType == AudioSystem.PLATFORM_TELEVISION; int result = FLAG_ADJUST_VOLUME; int ringerMode = getRingerModeInternal(); Loading @@ -3406,7 +3411,7 @@ public class AudioService extends IAudioService.Stub { ringerMode = RINGER_MODE_SILENT; } } } else if (isTv && (direction == AudioManager.ADJUST_TOGGLE_MUTE } else if (mIsSingleVolume && (direction == AudioManager.ADJUST_TOGGLE_MUTE || direction == AudioManager.ADJUST_MUTE)) { if (mHasVibrator) { ringerMode = RINGER_MODE_VIBRATE; Loading @@ -3425,7 +3430,7 @@ public class AudioService extends IAudioService.Stub { } if ((direction == AudioManager.ADJUST_LOWER)) { // This is the case we were muted with the volume turned up if (isTv && oldIndex >= 2 * step && isMuted) { if (mIsSingleVolume && oldIndex >= 2 * step && isMuted) { ringerMode = RINGER_MODE_NORMAL; } else if (mPrevVolDirection != AudioManager.ADJUST_LOWER) { if (mVolumePolicy.volumeDownToEnterSilent) { Loading @@ -3447,7 +3452,7 @@ public class AudioService extends IAudioService.Stub { result &= ~FLAG_ADJUST_VOLUME; break; case RINGER_MODE_SILENT: if (isTv && direction == AudioManager.ADJUST_LOWER && oldIndex >= 2 * step && isMuted) { if (mIsSingleVolume && direction == AudioManager.ADJUST_LOWER && oldIndex >= 2 * step && isMuted) { // This is the case we were muted with the volume turned up ringerMode = RINGER_MODE_NORMAL; } else if (direction == AudioManager.ADJUST_RAISE Loading Loading @@ -3501,7 +3506,7 @@ public class AudioService extends IAudioService.Stub { (1 << AudioSystem.STREAM_SYSTEM)|(1 << AudioSystem.STREAM_SYSTEM_ENFORCED)), UserHandle.USER_CURRENT); if (mPlatformType == AudioSystem.PLATFORM_TELEVISION) { if (mIsSingleVolume) { ringerModeAffectedStreams = 0; } else if (mRingerModeDelegate != null) { ringerModeAffectedStreams = mRingerModeDelegate Loading Loading @@ -3586,6 +3591,11 @@ public class AudioService extends IAudioService.Stub { } private int getActiveStreamType(int suggestedStreamType) { if (mIsSingleVolume && suggestedStreamType == AudioManager.USE_DEFAULT_STREAM_TYPE) { return AudioSystem.STREAM_MUSIC; } switch (mPlatformType) { case AudioSystem.PLATFORM_VOICE: if (isInCommunication()) { Loading Loading @@ -3613,12 +3623,6 @@ public class AudioService extends IAudioService.Stub { return AudioSystem.STREAM_MUSIC; } break; case AudioSystem.PLATFORM_TELEVISION: if (suggestedStreamType == AudioManager.USE_DEFAULT_STREAM_TYPE) { // TV always defaults to STREAM_MUSIC return AudioSystem.STREAM_MUSIC; } break; default: if (isInCommunication()) { if (AudioSystem.getForceUse(AudioSystem.FOR_COMMUNICATION) Loading Loading @@ -4300,7 +4304,7 @@ public class AudioService extends IAudioService.Stub { if (mUseFixedVolume) { return; } if (isPlatformTelevision() && (streamState.mStreamType != AudioSystem.STREAM_MUSIC)) { if (mIsSingleVolume && (streamState.mStreamType != AudioSystem.STREAM_MUSIC)) { return; } System.putIntForUser(mContentResolver, Loading Loading @@ -5522,7 +5526,7 @@ public class AudioService extends IAudioService.Stub { } } if (cameraSoundForcedChanged) { if (!isPlatformTelevision()) { if (!mIsSingleVolume) { VolumeStreamState s = mStreamStates[AudioSystem.STREAM_SYSTEM_ENFORCED]; if (cameraSoundForced) { s.setAllIndexesToMax(); Loading