Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21bba84f authored by Eric Laurent's avatar Eric Laurent Committed by Android (Google) Code Review
Browse files

Merge "AudioService: use AttributionSource for communication route" into main

parents b8bd4a55 0ce4046f
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
import android.compat.annotation.Overridable;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.AttributionSource;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -1918,12 +1919,18 @@ public class AudioManager {
    @Deprecated public void setSpeakerphoneOn(boolean on) {
        final IAudioService service = getService();
        try {
            service.setSpeakerphoneOn(mICallBack, on);
            service.setSpeakerphoneOn(mICallBack, on, getAttributionSource());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    private AttributionSource getAttributionSource() {
        Context context = getContext();
        return (context != null)
                     ? context.getAttributionSource() : AttributionSource.myAttributionSource();
    }

    /**
     * Checks whether the speakerphone is on or off.
     *
@@ -3089,7 +3096,8 @@ public class AudioManager {
        final IAudioService service = getService();
        try {
            service.startBluetoothSco(mICallBack,
                    getContext().getApplicationInfo().targetSdkVersion);
                    getContext().getApplicationInfo().targetSdkVersion,
                    getAttributionSource());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -3114,7 +3122,7 @@ public class AudioManager {
    public void startBluetoothScoVirtualCall() {
        final IAudioService service = getService();
        try {
            service.startBluetoothScoVirtualCall(mICallBack);
            service.startBluetoothScoVirtualCall(mICallBack, getAttributionSource());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -3134,7 +3142,7 @@ public class AudioManager {
    @Deprecated public void stopBluetoothSco() {
        final IAudioService service = getService();
        try {
            service.stopBluetoothSco(mICallBack);
            service.stopBluetoothSco(mICallBack,  getAttributionSource());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -9023,7 +9031,8 @@ public class AudioManager {
                Log.w(TAG, "setCommunicationDevice: device not found: " + device);
                return false;
            }
            return getService().setCommunicationDevice(mICallBack, device.getId());
            return getService().setCommunicationDevice(mICallBack, device.getId(),
                    getAttributionSource());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -9035,7 +9044,7 @@ public class AudioManager {
     */
    public void clearCommunicationDevice() {
        try {
            getService().setCommunicationDevice(mICallBack, 0);
            getService().setCommunicationDevice(mICallBack, 0, getAttributionSource());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+6 −5
Original line number Diff line number Diff line
@@ -234,7 +234,7 @@ interface IAudioService {

    int getEncodedSurroundMode(int targetSdkVersion);

    void setSpeakerphoneOn(IBinder cb, boolean on);
    void setSpeakerphoneOn(IBinder cb, boolean on, in AttributionSource attributionSource);

    boolean isSpeakerphoneOn();

@@ -263,9 +263,10 @@ interface IAudioService {

    int getCurrentAudioFocus();

    void startBluetoothSco(IBinder cb, int targetSdkVersion);
    void startBluetoothScoVirtualCall(IBinder cb);
    void stopBluetoothSco(IBinder cb);
    void startBluetoothSco(IBinder cb, int targetSdkVersion,
            in AttributionSource attributionSource);
    void startBluetoothScoVirtualCall(IBinder cb, in AttributionSource attributionSource);
    void stopBluetoothSco(IBinder cb, in AttributionSource attributionSource);

    void forceVolumeControlStream(int streamType, IBinder cb);

@@ -542,7 +543,7 @@ interface IAudioService {

    int[] getAvailableCommunicationDeviceIds();

    boolean setCommunicationDevice(IBinder cb, int portId);
    boolean setCommunicationDevice(IBinder cb, int portId, in AttributionSource attributionSource);

    int getCommunicationDevice();

+123 −87

File changed.

Preview size limit exceeded, changes collapsed.

+45 −22
Original line number Diff line number Diff line
@@ -6840,9 +6840,13 @@ public class AudioService extends IAudioService.Stub
     * @see AudioManager#setCommunicationDevice(int)
     * @see AudioManager#clearCommunicationDevice()
     */
    public boolean setCommunicationDevice(IBinder cb, int portId) {
        final int uid = Binder.getCallingUid();
        final int pid = Binder.getCallingPid();
    public boolean setCommunicationDevice(IBinder cb, int portId,
            @NonNull AttributionSource attributionSource) {
        if (attributionSource == null) {
            return false;
        }
        final int uid = attributionSource.getUid();
        final int pid = attributionSource.getPid();
        AudioDeviceInfo device = null;
        if (portId != 0) {
@@ -6892,7 +6896,8 @@ public class AudioService extends IAudioService.Stub
                == PackageManager.PERMISSION_GRANTED;
        final long ident = Binder.clearCallingIdentity();
        try {
            return mDeviceBroker.setCommunicationDevice(cb, uid, device, isPrivileged, eventSource);
            return mDeviceBroker.setCommunicationDevice(
                    cb, attributionSource, device, isPrivileged, eventSource);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
@@ -6934,7 +6939,11 @@ public class AudioService extends IAudioService.Stub
    }
    /** @see AudioManager#setSpeakerphoneOn(boolean) */
    public void setSpeakerphoneOn(IBinder cb, boolean on) {
    public void setSpeakerphoneOn(IBinder cb, boolean on,
            @NonNull AttributionSource attributionSource) {
        if (attributionSource == null) {
            return;
        }
        if (!checkAudioSettingsPermission("setSpeakerphoneOn()")) {
            return;
        }
@@ -6942,8 +6951,8 @@ public class AudioService extends IAudioService.Stub
                == PackageManager.PERMISSION_GRANTED;
        // for logging only
        final int uid = Binder.getCallingUid();
        final int pid = Binder.getCallingPid();
        final int uid = attributionSource.getUid();
        final int pid = attributionSource.getPid();
        final String eventSource = new StringBuilder("setSpeakerphoneOn(").append(on)
                .append(") from u/pid:").append(uid).append("/")
@@ -6958,7 +6967,7 @@ public class AudioService extends IAudioService.Stub
        final long ident = Binder.clearCallingIdentity();
        try {
            mDeviceBroker.setSpeakerphoneOn(cb, uid, on, isPrivileged, eventSource);
            mDeviceBroker.setSpeakerphoneOn(cb, attributionSource, on, isPrivileged, eventSource);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
@@ -7062,13 +7071,17 @@ public class AudioService extends IAudioService.Stub
    }
    /** @see AudioManager#startBluetoothSco() */
    public void startBluetoothSco(IBinder cb, int targetSdkVersion) {
    public void startBluetoothSco(IBinder cb, int targetSdkVersion,
            @NonNull AttributionSource attributionSource) {
        if (attributionSource == null) {
            return;
        }
        if (!checkAudioSettingsPermission("startBluetoothSco()")) {
            return;
        }
        final int uid = Binder.getCallingUid();
        final int pid = Binder.getCallingPid();
        final int uid = attributionSource.getUid();
        final int pid = attributionSource.getPid();
        final int scoAudioMode =
                (targetSdkVersion < Build.VERSION_CODES.JELLY_BEAN_MR2) ?
                        BtHelper.SCO_MODE_VIRTUAL_CALL : BtHelper.SCO_MODE_UNDEFINED;
@@ -7083,18 +7096,22 @@ public class AudioService extends IAudioService.Stub
                .set(MediaMetrics.Property.SCO_AUDIO_MODE,
                        BtHelper.scoAudioModeToString(scoAudioMode))
                .record();
        startBluetoothScoInt(cb, uid, scoAudioMode, eventSource);
        startBluetoothScoInt(cb, attributionSource, scoAudioMode, eventSource);
    }
    /** @see AudioManager#startBluetoothScoVirtualCall() */
    public void startBluetoothScoVirtualCall(IBinder cb) {
    public void startBluetoothScoVirtualCall(IBinder cb,
            @NonNull AttributionSource attributionSource) {
        if (attributionSource == null) {
            return;
        }
        if (!checkAudioSettingsPermission("startBluetoothScoVirtualCall()")) {
            return;
        }
        final int uid = Binder.getCallingUid();
        final int pid = Binder.getCallingPid();
        final int uid = attributionSource.getUid();
        final int pid = attributionSource.getPid();
        final String eventSource = new StringBuilder("startBluetoothScoVirtualCall()")
                .append(") from u/pid:").append(uid).append("/")
                .append(pid).toString();
@@ -7106,10 +7123,11 @@ public class AudioService extends IAudioService.Stub
                .set(MediaMetrics.Property.SCO_AUDIO_MODE,
                        BtHelper.scoAudioModeToString(BtHelper.SCO_MODE_VIRTUAL_CALL))
                .record();
        startBluetoothScoInt(cb, uid, BtHelper.SCO_MODE_VIRTUAL_CALL, eventSource);
        startBluetoothScoInt(cb, attributionSource, BtHelper.SCO_MODE_VIRTUAL_CALL, eventSource);
    }
    void startBluetoothScoInt(IBinder cb, int uid, int scoAudioMode, @NonNull String eventSource) {
    void startBluetoothScoInt(IBinder cb, AttributionSource attributionSource,
            int scoAudioMode, @NonNull String eventSource) {
        MediaMetrics.Item mmi = new MediaMetrics.Item(MediaMetrics.Name.AUDIO_BLUETOOTH)
                .set(MediaMetrics.Property.EVENT, "startBluetoothScoInt")
                .set(MediaMetrics.Property.SCO_AUDIO_MODE,
@@ -7125,7 +7143,7 @@ public class AudioService extends IAudioService.Stub
        final long ident = Binder.clearCallingIdentity();
        try {
            mDeviceBroker.startBluetoothScoForClient(
                    cb, uid, scoAudioMode, isPrivileged, eventSource);
                    cb, attributionSource, scoAudioMode, isPrivileged, eventSource);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
@@ -7133,13 +7151,17 @@ public class AudioService extends IAudioService.Stub
    }
    /** @see AudioManager#stopBluetoothSco() */
    public void stopBluetoothSco(IBinder cb){
    public void stopBluetoothSco(IBinder cb,
            @NonNull AttributionSource attributionSource) {
        if (attributionSource == null) {
            return;
        }
        if (!checkAudioSettingsPermission("stopBluetoothSco()") ||
                !mSystemReady) {
            return;
        }
        final int uid = Binder.getCallingUid();
        final int pid = Binder.getCallingPid();
        final int uid = attributionSource.getUid();
        final int pid = attributionSource.getPid();
        final String eventSource =  new StringBuilder("stopBluetoothSco()")
                .append(") from u/pid:").append(uid).append("/")
                .append(pid).toString();
@@ -7147,7 +7169,8 @@ public class AudioService extends IAudioService.Stub
                == PackageManager.PERMISSION_GRANTED;
        final long ident = Binder.clearCallingIdentity();
        try {
            mDeviceBroker.stopBluetoothScoForClient(cb, uid, isPrivileged, eventSource);
            mDeviceBroker.stopBluetoothScoForClient(
                    cb, attributionSource, isPrivileged, eventSource);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }