Loading media/java/android/media/AudioPlaybackConfiguration.java +8 −6 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ public final class AudioPlaybackConfiguration implements Parcelable { /** @hide */ public final static int PLAYER_PIID_INVALID = -1; /** @hide */ public final static int PLAYER_UPID_INVALID = -1; // information about the implementation /** Loading Loading @@ -159,11 +161,11 @@ public final class AudioPlaybackConfiguration implements Parcelable { /** * @hide */ public AudioPlaybackConfiguration(PlayerBase.PlayerIdCard pic) { mPlayerIId = pic.mPIId; public AudioPlaybackConfiguration(PlayerBase.PlayerIdCard pic, int piid, int uid, int pid) { mPlayerIId = piid; mPlayerType = pic.mPlayerType; mClientUid = pic.mClientUid; mClientPid = pic.mClientPid; mClientUid = uid; mClientPid = pid; mPlayerState = PLAYER_STATE_IDLE; mPlayerAttr = pic.mAttributes; } Loading @@ -187,8 +189,8 @@ public final class AudioPlaybackConfiguration implements Parcelable { .build(); // anonymized data anonymCopy.mPlayerType = PLAYER_TYPE_UNKNOWN; anonymCopy.mClientUid = 0; anonymCopy.mClientPid = 0; anonymCopy.mClientUid = PLAYER_UPID_INVALID; anonymCopy.mClientPid = PLAYER_UPID_INVALID; return anonymCopy; } Loading media/java/android/media/IAudioService.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -184,7 +184,7 @@ interface IAudioService { List<AudioPlaybackConfiguration> getActivePlaybackConfigurations(); oneway void trackPlayer(in PlayerBase.PlayerIdCard pic); int trackPlayer(in PlayerBase.PlayerIdCard pic); oneway void playerAttributes(in int piid, in AudioAttributes attr); Loading media/java/android/media/PlayerBase.java +7 −17 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ public abstract class PlayerBase { } mAttributes = attr; mImplType = implType; mPlayerIId = AudioSystem.newAudioPlayerId(); int newPiid = AudioPlaybackConfiguration.PLAYER_PIID_INVALID; IBinder b = ServiceManager.getService(Context.APP_OPS_SERVICE); mAppOps = IAppOpsService.Stub.asInterface(b); // initialize mHasAppOpsPlayAudio Loading @@ -100,10 +100,11 @@ public abstract class PlayerBase { mHasAppOpsPlayAudio = false; } try { getService().trackPlayer(new PlayerIdCard(mPlayerIId, mImplType, mAttributes)); newPiid = getService().trackPlayer(new PlayerIdCard(mImplType, mAttributes)); } catch (RemoteException e) { Log.e(TAG, "Error talking to audio service, player will not be tracked", e); } mPlayerIId = newPiid; } Loading Loading @@ -311,26 +312,20 @@ public abstract class PlayerBase { * Class holding all the information about a player that needs to be known at registration time */ public static class PlayerIdCard implements Parcelable { public final int mPIId; public final int mPlayerType; public final int mClientUid; public final int mClientPid; public final static int AUDIO_ATTRIBUTES_NONE = 0; public final static int AUDIO_ATTRIBUTES_DEFINED = 1; public final AudioAttributes mAttributes; PlayerIdCard(int piid, int type, @NonNull AudioAttributes attr) { mPIId = piid; PlayerIdCard(int type, @NonNull AudioAttributes attr) { mPlayerType = type; mClientUid = Binder.getCallingUid(); mClientPid = Binder.getCallingPid(); mAttributes = attr; } @Override public int hashCode() { return Objects.hash(mPIId, mPlayerType); return Objects.hash(mPlayerType); } @Override Loading @@ -340,10 +335,7 @@ public abstract class PlayerBase { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mPIId); dest.writeInt(mPlayerType); dest.writeInt(mClientUid); dest.writeInt(mClientPid); mAttributes.writeToParcel(dest, 0); } Loading @@ -363,10 +355,7 @@ public abstract class PlayerBase { }; private PlayerIdCard(Parcel in) { mPIId = in.readInt(); mPlayerType = in.readInt(); mClientUid = in.readInt(); mClientPid = in.readInt(); mAttributes = AudioAttributes.CREATOR.createFromParcel(in); } Loading @@ -377,7 +366,8 @@ public abstract class PlayerBase { PlayerIdCard that = (PlayerIdCard) o; return (mPIId == that.mPIId); // FIXME change to the binder player interface once supported as a member return ((mPlayerType == that.mPlayerType) && mAttributes.equals(that.mAttributes)); } } Loading services/core/java/com/android/server/audio/AudioService.java +7 −4 Original line number Diff line number Diff line Loading @@ -6507,11 +6507,14 @@ public class AudioService extends IAudioService.Stub } public List<AudioPlaybackConfiguration> getActivePlaybackConfigurations() { return mPlaybackMonitor.getActivePlaybackConfigurations(); final boolean isPrivileged = (PackageManager.PERMISSION_GRANTED == mContext.checkCallingPermission( android.Manifest.permission.MODIFY_AUDIO_ROUTING)); return mPlaybackMonitor.getActivePlaybackConfigurations(isPrivileged); } public void trackPlayer(PlayerBase.PlayerIdCard pic) { mPlaybackMonitor.trackPlayer(pic); public int trackPlayer(PlayerBase.PlayerIdCard pic) { return mPlaybackMonitor.trackPlayer(pic); } public void playerAttributes(int piid, AudioAttributes attr) { Loading services/core/java/com/android/server/audio/PlaybackActivityMonitor.java +22 −8 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.media.AudioSystem; import android.media.IPlaybackConfigDispatcher; import android.media.MediaRecorder; import android.media.PlayerBase; import android.os.Binder; import android.os.IBinder; import android.os.RemoteException; import android.util.Log; Loading Loading @@ -61,16 +62,20 @@ public final class PlaybackActivityMonitor { //================================================================= // Track players and their states // methods trackPlayer, playerAttributes, playerEvent, releasePlayer are all oneway calls // methods playerAttributes, playerEvent, releasePlayer are all oneway calls // into AudioService. They trigger synchronous dispatchPlaybackChange() which updates // all listeners as oneway calls. public void trackPlayer(PlayerBase.PlayerIdCard pic) { if (DEBUG) { Log.v(TAG, "trackPlayer() for piid=" + pic.mPIId); } final AudioPlaybackConfiguration apc = new AudioPlaybackConfiguration(pic); public int trackPlayer(PlayerBase.PlayerIdCard pic) { final int newPiid = AudioSystem.newAudioPlayerId(); if (DEBUG) { Log.v(TAG, "trackPlayer() new piid=" + newPiid); } final AudioPlaybackConfiguration apc = new AudioPlaybackConfiguration(pic, newPiid, Binder.getCallingUid(), Binder.getCallingPid()); synchronized(mPlayerLock) { mPlayers.put(pic.mPIId, apc); mPlayers.put(newPiid, apc); } return newPiid; } public void playerAttributes(int piid, @NonNull AudioAttributes attr) { Loading @@ -90,7 +95,7 @@ public final class PlaybackActivityMonitor { } public void playerEvent(int piid, int event) { if (DEBUG) { Log.v(TAG, String.format("trackPlayer(piid=%d, event=%d)", piid, event)); } if (DEBUG) { Log.v(TAG, String.format("playerEvent(piid=%d, event=%d)", piid, event)); } final boolean change; synchronized(mPlayerLock) { final AudioPlaybackConfiguration apc = mPlayers.get(new Integer(piid)); Loading Loading @@ -228,9 +233,18 @@ public final class PlaybackActivityMonitor { } } List<AudioPlaybackConfiguration> getActivePlaybackConfigurations() { List<AudioPlaybackConfiguration> getActivePlaybackConfigurations(boolean isPrivileged) { synchronized(mPlayers) { if (isPrivileged) { return new ArrayList<AudioPlaybackConfiguration>(mPlayers.values()); } else { final List<AudioPlaybackConfiguration> configsPublic; synchronized (mPlayerLock) { configsPublic = anonymizeForPublicConsumption( new ArrayList<AudioPlaybackConfiguration>(mPlayers.values())); } return configsPublic; } } } Loading Loading
media/java/android/media/AudioPlaybackConfiguration.java +8 −6 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ public final class AudioPlaybackConfiguration implements Parcelable { /** @hide */ public final static int PLAYER_PIID_INVALID = -1; /** @hide */ public final static int PLAYER_UPID_INVALID = -1; // information about the implementation /** Loading Loading @@ -159,11 +161,11 @@ public final class AudioPlaybackConfiguration implements Parcelable { /** * @hide */ public AudioPlaybackConfiguration(PlayerBase.PlayerIdCard pic) { mPlayerIId = pic.mPIId; public AudioPlaybackConfiguration(PlayerBase.PlayerIdCard pic, int piid, int uid, int pid) { mPlayerIId = piid; mPlayerType = pic.mPlayerType; mClientUid = pic.mClientUid; mClientPid = pic.mClientPid; mClientUid = uid; mClientPid = pid; mPlayerState = PLAYER_STATE_IDLE; mPlayerAttr = pic.mAttributes; } Loading @@ -187,8 +189,8 @@ public final class AudioPlaybackConfiguration implements Parcelable { .build(); // anonymized data anonymCopy.mPlayerType = PLAYER_TYPE_UNKNOWN; anonymCopy.mClientUid = 0; anonymCopy.mClientPid = 0; anonymCopy.mClientUid = PLAYER_UPID_INVALID; anonymCopy.mClientPid = PLAYER_UPID_INVALID; return anonymCopy; } Loading
media/java/android/media/IAudioService.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -184,7 +184,7 @@ interface IAudioService { List<AudioPlaybackConfiguration> getActivePlaybackConfigurations(); oneway void trackPlayer(in PlayerBase.PlayerIdCard pic); int trackPlayer(in PlayerBase.PlayerIdCard pic); oneway void playerAttributes(in int piid, in AudioAttributes attr); Loading
media/java/android/media/PlayerBase.java +7 −17 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ public abstract class PlayerBase { } mAttributes = attr; mImplType = implType; mPlayerIId = AudioSystem.newAudioPlayerId(); int newPiid = AudioPlaybackConfiguration.PLAYER_PIID_INVALID; IBinder b = ServiceManager.getService(Context.APP_OPS_SERVICE); mAppOps = IAppOpsService.Stub.asInterface(b); // initialize mHasAppOpsPlayAudio Loading @@ -100,10 +100,11 @@ public abstract class PlayerBase { mHasAppOpsPlayAudio = false; } try { getService().trackPlayer(new PlayerIdCard(mPlayerIId, mImplType, mAttributes)); newPiid = getService().trackPlayer(new PlayerIdCard(mImplType, mAttributes)); } catch (RemoteException e) { Log.e(TAG, "Error talking to audio service, player will not be tracked", e); } mPlayerIId = newPiid; } Loading Loading @@ -311,26 +312,20 @@ public abstract class PlayerBase { * Class holding all the information about a player that needs to be known at registration time */ public static class PlayerIdCard implements Parcelable { public final int mPIId; public final int mPlayerType; public final int mClientUid; public final int mClientPid; public final static int AUDIO_ATTRIBUTES_NONE = 0; public final static int AUDIO_ATTRIBUTES_DEFINED = 1; public final AudioAttributes mAttributes; PlayerIdCard(int piid, int type, @NonNull AudioAttributes attr) { mPIId = piid; PlayerIdCard(int type, @NonNull AudioAttributes attr) { mPlayerType = type; mClientUid = Binder.getCallingUid(); mClientPid = Binder.getCallingPid(); mAttributes = attr; } @Override public int hashCode() { return Objects.hash(mPIId, mPlayerType); return Objects.hash(mPlayerType); } @Override Loading @@ -340,10 +335,7 @@ public abstract class PlayerBase { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mPIId); dest.writeInt(mPlayerType); dest.writeInt(mClientUid); dest.writeInt(mClientPid); mAttributes.writeToParcel(dest, 0); } Loading @@ -363,10 +355,7 @@ public abstract class PlayerBase { }; private PlayerIdCard(Parcel in) { mPIId = in.readInt(); mPlayerType = in.readInt(); mClientUid = in.readInt(); mClientPid = in.readInt(); mAttributes = AudioAttributes.CREATOR.createFromParcel(in); } Loading @@ -377,7 +366,8 @@ public abstract class PlayerBase { PlayerIdCard that = (PlayerIdCard) o; return (mPIId == that.mPIId); // FIXME change to the binder player interface once supported as a member return ((mPlayerType == that.mPlayerType) && mAttributes.equals(that.mAttributes)); } } Loading
services/core/java/com/android/server/audio/AudioService.java +7 −4 Original line number Diff line number Diff line Loading @@ -6507,11 +6507,14 @@ public class AudioService extends IAudioService.Stub } public List<AudioPlaybackConfiguration> getActivePlaybackConfigurations() { return mPlaybackMonitor.getActivePlaybackConfigurations(); final boolean isPrivileged = (PackageManager.PERMISSION_GRANTED == mContext.checkCallingPermission( android.Manifest.permission.MODIFY_AUDIO_ROUTING)); return mPlaybackMonitor.getActivePlaybackConfigurations(isPrivileged); } public void trackPlayer(PlayerBase.PlayerIdCard pic) { mPlaybackMonitor.trackPlayer(pic); public int trackPlayer(PlayerBase.PlayerIdCard pic) { return mPlaybackMonitor.trackPlayer(pic); } public void playerAttributes(int piid, AudioAttributes attr) { Loading
services/core/java/com/android/server/audio/PlaybackActivityMonitor.java +22 −8 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.media.AudioSystem; import android.media.IPlaybackConfigDispatcher; import android.media.MediaRecorder; import android.media.PlayerBase; import android.os.Binder; import android.os.IBinder; import android.os.RemoteException; import android.util.Log; Loading Loading @@ -61,16 +62,20 @@ public final class PlaybackActivityMonitor { //================================================================= // Track players and their states // methods trackPlayer, playerAttributes, playerEvent, releasePlayer are all oneway calls // methods playerAttributes, playerEvent, releasePlayer are all oneway calls // into AudioService. They trigger synchronous dispatchPlaybackChange() which updates // all listeners as oneway calls. public void trackPlayer(PlayerBase.PlayerIdCard pic) { if (DEBUG) { Log.v(TAG, "trackPlayer() for piid=" + pic.mPIId); } final AudioPlaybackConfiguration apc = new AudioPlaybackConfiguration(pic); public int trackPlayer(PlayerBase.PlayerIdCard pic) { final int newPiid = AudioSystem.newAudioPlayerId(); if (DEBUG) { Log.v(TAG, "trackPlayer() new piid=" + newPiid); } final AudioPlaybackConfiguration apc = new AudioPlaybackConfiguration(pic, newPiid, Binder.getCallingUid(), Binder.getCallingPid()); synchronized(mPlayerLock) { mPlayers.put(pic.mPIId, apc); mPlayers.put(newPiid, apc); } return newPiid; } public void playerAttributes(int piid, @NonNull AudioAttributes attr) { Loading @@ -90,7 +95,7 @@ public final class PlaybackActivityMonitor { } public void playerEvent(int piid, int event) { if (DEBUG) { Log.v(TAG, String.format("trackPlayer(piid=%d, event=%d)", piid, event)); } if (DEBUG) { Log.v(TAG, String.format("playerEvent(piid=%d, event=%d)", piid, event)); } final boolean change; synchronized(mPlayerLock) { final AudioPlaybackConfiguration apc = mPlayers.get(new Integer(piid)); Loading Loading @@ -228,9 +233,18 @@ public final class PlaybackActivityMonitor { } } List<AudioPlaybackConfiguration> getActivePlaybackConfigurations() { List<AudioPlaybackConfiguration> getActivePlaybackConfigurations(boolean isPrivileged) { synchronized(mPlayers) { if (isPrivileged) { return new ArrayList<AudioPlaybackConfiguration>(mPlayers.values()); } else { final List<AudioPlaybackConfiguration> configsPublic; synchronized (mPlayerLock) { configsPublic = anonymizeForPublicConsumption( new ArrayList<AudioPlaybackConfiguration>(mPlayers.values())); } return configsPublic; } } } Loading