diff options
Diffstat (limited to 'services')
3 files changed, 73 insertions, 56 deletions
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 5f6491093453..f63c2ee5ee94 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -4186,6 +4186,62 @@ public class AudioService extends IAudioService.Stub } } + /** @see AudioManager#adjustSuggestedStreamVolumeForUid(int, int, int, String, int, int, int) */ + @Override + public void adjustSuggestedStreamVolumeForUid(int streamType, int direction, int flags, + @NonNull String packageName, int uid, int pid, UserHandle userHandle, + int targetSdkVersion) { + if (Binder.getCallingUid() != Process.SYSTEM_UID) { + throw new SecurityException("Should only be called from system process"); + } + + final boolean hasModifyAudioSettings = + mContext.checkPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS, pid, uid) + == PackageManager.PERMISSION_GRANTED; + // direction and stream type swap here because the public + // adjustSuggested has a different order than the other methods. + adjustSuggestedStreamVolume(direction, streamType, flags, packageName, packageName, uid, + hasModifyAudioSettings, VOL_ADJUST_NORMAL); + } + + /** @see AudioManager#adjustStreamVolumeForUid(int, int, int, String, int, int, int) */ + @Override + public void adjustStreamVolumeForUid(int streamType, int direction, int flags, + @NonNull String packageName, int uid, int pid, UserHandle userHandle, + int targetSdkVersion) { + if (Binder.getCallingUid() != Process.SYSTEM_UID) { + throw new SecurityException("Should only be called from system process"); + } + + if (direction != AudioManager.ADJUST_SAME) { + sVolumeLogger.log(new VolumeEvent(VolumeEvent.VOL_ADJUST_VOL_UID, streamType, + direction/*val1*/, flags/*val2*/, + new StringBuilder(packageName).append(" uid:").append(uid) + .toString())); + } + final boolean hasModifyAudioSettings = + mContext.checkPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS, pid, uid) + == PackageManager.PERMISSION_GRANTED; + adjustStreamVolume(streamType, direction, flags, packageName, packageName, uid, + hasModifyAudioSettings, VOL_ADJUST_NORMAL); + } + + /** @see AudioManager#setStreamVolumeForUid(int, int, int, String, int, int, int) */ + @Override + public void setStreamVolumeForUid(int streamType, int index, int flags, + @NonNull String packageName, int uid, int pid, UserHandle userHandle, + int targetSdkVersion) { + if (Binder.getCallingUid() != Process.SYSTEM_UID) { + throw new SecurityException("Should only be called from system process"); + } + + final boolean hasModifyAudioSettings = + mContext.checkPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS, pid, uid) + == PackageManager.PERMISSION_GRANTED; + setStreamVolume(streamType, index, flags, packageName, packageName, uid, + hasModifyAudioSettings); + } + //========================================================================================== // Sound Effects //========================================================================================== @@ -8071,43 +8127,6 @@ public class AudioService extends IAudioService.Stub } @Override - public void adjustSuggestedStreamVolumeForUid(int streamType, int direction, int flags, - String callingPackage, int uid, int pid) { - final boolean hasModifyAudioSettings = - mContext.checkPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS, pid, uid) - == PackageManager.PERMISSION_GRANTED; - // direction and stream type swap here because the public - // adjustSuggested has a different order than the other methods. - adjustSuggestedStreamVolume(direction, streamType, flags, callingPackage, - callingPackage, uid, hasModifyAudioSettings, VOL_ADJUST_NORMAL); - } - - @Override - public void adjustStreamVolumeForUid(int streamType, int direction, int flags, - String callingPackage, int uid, int pid) { - if (direction != AudioManager.ADJUST_SAME) { - sVolumeLogger.log(new VolumeEvent(VolumeEvent.VOL_ADJUST_VOL_UID, streamType, - direction/*val1*/, flags/*val2*/, new StringBuilder(callingPackage) - .append(" uid:").append(uid).toString())); - } - final boolean hasModifyAudioSettings = - mContext.checkPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS, pid, uid) - == PackageManager.PERMISSION_GRANTED; - adjustStreamVolume(streamType, direction, flags, callingPackage, - callingPackage, uid, hasModifyAudioSettings, VOL_ADJUST_NORMAL); - } - - @Override - public void setStreamVolumeForUid(int streamType, int direction, int flags, - String callingPackage, int uid, int pid) { - final boolean hasModifyAudioSettings = - mContext.checkPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS, pid, uid) - == PackageManager.PERMISSION_GRANTED; - setStreamVolume(streamType, direction, flags, callingPackage, callingPackage, uid, - hasModifyAudioSettings); - } - - @Override public int getRingerModeInternal() { return AudioService.this.getRingerModeInternal(); } diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index 1e02f49c43e4..793cfcd77414 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -23,7 +23,6 @@ import android.content.Intent; import android.content.pm.ParceledListSlice; import android.media.AudioAttributes; import android.media.AudioManager; -import android.media.AudioManagerInternal; import android.media.AudioSystem; import android.media.MediaMetadata; import android.media.Rating; @@ -53,8 +52,6 @@ import android.os.SystemClock; import android.util.Log; import android.view.KeyEvent; -import com.android.server.LocalServices; - import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; @@ -144,7 +141,6 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR // Volume handling fields private AudioAttributes mAudioAttrs; private AudioManager mAudioManager; - private AudioManagerInternal mAudioManagerInternal; private int mVolumeType = PlaybackInfo.PLAYBACK_TYPE_LOCAL; private int mVolumeControlType = VolumeProvider.VOLUME_CONTROL_ABSOLUTE; private int mMaxVolume = 0; @@ -179,7 +175,6 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR mContext = mService.getContext(); mHandler = new MessageHandler(handlerLooper); mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); - mAudioManagerInternal = LocalServices.getService(AudioManagerInternal.class); mAudioAttrs = DEFAULT_ATTRIBUTES; mPolicies = policies; @@ -328,8 +323,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR @Override public void run() { try { - mAudioManagerInternal.setStreamVolumeForUid(stream, volumeValue, flags, - opPackageName, uid, pid); + mAudioManager.setStreamVolumeForUid(stream, volumeValue, flags, + opPackageName, uid, pid, + mContext.getApplicationInfo().targetSdkVersion); } catch (IllegalArgumentException | SecurityException e) { Log.e(TAG, "Cannot set volume: stream=" + stream + ", value=" + volumeValue + ", flags=" + flags, e); @@ -518,16 +514,19 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR try { if (useSuggested) { if (AudioSystem.isStreamActive(stream, 0)) { - mAudioManagerInternal.adjustSuggestedStreamVolumeForUid(stream, - direction, flags, opPackageName, uid, pid); + mAudioManager.adjustSuggestedStreamVolumeForUid(stream, + direction, flags, opPackageName, uid, pid, + mContext.getApplicationInfo().targetSdkVersion); } else { - mAudioManagerInternal.adjustSuggestedStreamVolumeForUid( + mAudioManager.adjustSuggestedStreamVolumeForUid( AudioManager.USE_DEFAULT_STREAM_TYPE, direction, - flags | previousFlagPlaySound, opPackageName, uid, pid); + flags | previousFlagPlaySound, opPackageName, uid, pid, + mContext.getApplicationInfo().targetSdkVersion); } } else { - mAudioManagerInternal.adjustStreamVolumeForUid(stream, direction, flags, - opPackageName, uid, pid); + mAudioManager.adjustStreamVolumeForUid(stream, direction, flags, + opPackageName, uid, pid, + mContext.getApplicationInfo().targetSdkVersion); } } catch (IllegalArgumentException | SecurityException e) { Log.e(TAG, "Cannot adjust volume: direction=" + direction + ", stream=" diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index 9521611c241d..d34502922b66 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -42,7 +42,6 @@ import android.content.pm.PackageManager; import android.content.pm.ParceledListSlice; import android.content.pm.UserInfo; import android.media.AudioManager; -import android.media.AudioManagerInternal; import android.media.AudioPlaybackConfiguration; import android.media.AudioSystem; import android.media.IRemoteVolumeController; @@ -85,7 +84,6 @@ import android.view.ViewConfiguration; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.DumpUtils; -import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.SystemService.TargetUser; import com.android.server.Watchdog; @@ -136,7 +134,7 @@ public class MediaSessionService extends SystemService implements Monitor { new ArrayList<>(); private KeyguardManager mKeyguardManager; - private AudioManagerInternal mAudioManagerInternal; + private AudioManager mAudioManager; private ContentResolver mContentResolver; private boolean mHasFeatureLeanback; @@ -162,6 +160,7 @@ public class MediaSessionService extends SystemService implements Monitor { PowerManager pm = mContext.getSystemService(PowerManager.class); mMediaEventWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "handleMediaEvent"); mNotificationManager = mContext.getSystemService(NotificationManager.class); + mAudioManager = mContext.getSystemService(AudioManager.class); } @Override @@ -169,7 +168,6 @@ public class MediaSessionService extends SystemService implements Monitor { publishBinderService(Context.MEDIA_SESSION_SERVICE, mSessionManagerImpl); Watchdog.getInstance().addMonitor(this); mKeyguardManager = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); - mAudioManagerInternal = LocalServices.getService(AudioManagerInternal.class); mAudioPlayerStateMonitor = AudioPlayerStateMonitor.getInstance(mContext); mAudioPlayerStateMonitor.registerListener( (config, isRemoved) -> { @@ -2057,8 +2055,9 @@ public class MediaSessionService extends SystemService implements Monitor { callingPid = pid; } try { - mAudioManagerInternal.adjustSuggestedStreamVolumeForUid(suggestedStream, - direction, flags, callingOpPackageName, callingUid, callingPid); + mAudioManager.adjustSuggestedStreamVolumeForUid(suggestedStream, + direction, flags, callingOpPackageName, callingUid, callingPid, + getContext().getApplicationInfo().targetSdkVersion); } catch (SecurityException | IllegalArgumentException e) { Log.e(TAG, "Cannot adjust volume: direction=" + direction + ", suggestedStream=" + suggestedStream + ", flags=" + flags |