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

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

Merge "AudioService: update getPreferredDevicesForStrategy" into main

parents 7c87916a 5334bcc0
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -836,5 +836,14 @@ public final class AudioDeviceInfo {
                TYPE_ECHO_REFERENCE, AudioSystem.DEVICE_IN_ECHO_REFERENCE);

    }

    @Override
    public String toString() {
        return new String("AudioDeviceInfo:"
                + " type: " + (isSink() ? AudioSystem.getOutputDeviceName(getInternalType())
                : AudioSystem.getInputDeviceName(getInternalType()))
                + " addr: " + getAddress()
                + " id: " + getId());
    }

}
+4 −0
Original line number Diff line number Diff line
@@ -1414,6 +1414,10 @@ public class AudioDeviceBroker {
        return mDeviceInventory.setPreferredDevicesForStrategyAndSave(strategy, devices);
    }

    /*package*/ List<AudioDeviceAttributes> getPreferredDevicesForStrategy(int strategy) {
        return mDeviceInventory.getPreferredDevicesForStrategy(strategy);
    }

    /*package*/ int removePreferredDevicesForStrategySync(int strategy) {
        return mDeviceInventory.removePreferredDevicesForStrategyAndSave(strategy);
    }
+26 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static android.media.AudioSystem.isBluetoothScoOutDevice;

import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE;
import static com.android.media.audio.Flags.asDeviceConnectionFailure;
import static com.android.media.audio.Flags.updatePreferredDevicesForStrategy;

import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -1426,6 +1427,31 @@ public class AudioDeviceInventory {
                    strategy, AudioSystem.DEVICE_ROLE_PREFERRED, true /*internal */);
    }

    /*package*/ List<AudioDeviceAttributes> getPreferredDevicesForStrategy(int strategy) {
        synchronized (mDevicesLock) {
            try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
                List<AudioDeviceAttributes> devices = new ArrayList<>();
                if (updatePreferredDevicesForStrategy()) {
                    Pair<Integer, Integer> key =
                            new Pair<>(strategy, AudioSystem.DEVICE_ROLE_PREFERRED);
                    devices = mAppliedStrategyRoles.get(key);
                    if (devices == null) {
                        return new ArrayList<AudioDeviceAttributes>();
                    }
                } else {
                    int status = AudioSystem.getDevicesForRoleAndStrategy(
                            strategy, AudioSystem.DEVICE_ROLE_PREFERRED, devices);
                    if (status != AudioSystem.SUCCESS) {
                        Log.e(TAG, String.format("Error %d in getPreferredDeviceForStrategy(%d)",
                                status, strategy));
                        return new ArrayList<AudioDeviceAttributes>();
                    }
                }
                return devices;
            }
        }
    }

    /*package*/ int setDeviceAsNonDefaultForStrategyAndSave(int strategy,
            @NonNull AudioDeviceAttributes device) {
        int status = AudioSystem.ERROR;
+7 −16
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ import static com.android.media.audio.Flags.optimizeBtDeviceSwitch;
import static com.android.media.audio.Flags.replaceStreamBtSco;
import static com.android.media.audio.Flags.ringMyCar;
import static com.android.media.audio.Flags.ringerModeAffectsAlarm;
import static com.android.media.audio.Flags.updatePreferredDevicesForStrategy;
import static com.android.media.flags.Flags.enableAudioInputDeviceRoutingAndVolumeControl;
import static com.android.server.audio.SoundDoseHelper.ACTION_CHECK_MUSIC_ACTIVE;
import static com.android.server.utils.EventLogger.Event.ALOGE;
@@ -3572,23 +3573,11 @@ public class AudioService extends IAudioService.Stub
    public List<AudioDeviceAttributes> getPreferredDevicesForStrategy(int strategy) {
        super.getPreferredDevicesForStrategy_enforcePermission();
        List<AudioDeviceAttributes> devices = new ArrayList<>();
        int status = AudioSystem.SUCCESS;
        final long identity = Binder.clearCallingIdentity();
        try {
            status = AudioSystem.getDevicesForRoleAndStrategy(
                    strategy, AudioSystem.DEVICE_ROLE_PREFERRED, devices);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
        if (status != AudioSystem.SUCCESS) {
            Log.e(TAG, String.format("Error %d in getPreferredDeviceForStrategy(%d)",
                    status, strategy));
            return new ArrayList<AudioDeviceAttributes>();
        } else {
        List<AudioDeviceAttributes> devices =
                mDeviceBroker.getPreferredDevicesForStrategy(strategy);
        return anonymizeAudioDeviceAttributesList(devices);
    }
    }
    /**
     * @see AudioManager#setDeviceAsNonDefaultForStrategy(AudioProductStrategy,
@@ -5304,6 +5293,8 @@ public class AudioService extends IAudioService.Stub
                + unifyAbsoluteVolumeManagement());
        pw.println("\tandroid.media.audio.Flags.registerVolumeCallbackApiHardening:"
                + registerVolumeCallbackApiHardening());
        pw.println("\tcom.android.media.audio.Flags.updatePreferredDevicesForStrategy:"
                + updatePreferredDevicesForStrategy());
    }
    private void dumpAudioMode(PrintWriter pw) {