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

Commit 286c4319 authored by Raj Goparaju's avatar Raj Goparaju
Browse files

Support hidden audio usage in fade manager configuration

USAGE_VIRTUAL_SOURCE is a valid audio usage but is neither
sdk nor system type. Add a hidden api to check such cases
and support them in fade manager configurations.

Bug: 329304462
Bug: 307354764
Test: atest -c FadeManagerConfigurationUnitTest
Change-Id: I9e65cbec654cebdd5a92800a0bf5c645db480acc
parent feaca87c
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -1689,6 +1689,18 @@ public final class AudioAttributes implements Parcelable {
        return SDK_USAGES.contains(usage);
    }

    /**
     * Query if the usage is a hidden (neither sdk nor SystemApi) usage
     *
     * @param usage the {@link android.media.AudioAttributes usage}
     * @return {@code true} if the usage is {@link AudioAttributes#USAGE_VIRTUAL_SOURCE} or
     *     {@code false} otherwise
     * @hide
     */
    public static boolean isHiddenUsage(@AttributeUsage int usage) {
        return usage == USAGE_VIRTUAL_SOURCE;
    }

    /**
     * Query if the content type is a valid sdk content type
     * @param contentType one of {@link AttributeContentType}
+2 −1
Original line number Diff line number Diff line
@@ -694,7 +694,8 @@ public final class FadeManagerConfiguration implements Parcelable {
    }

    private static boolean isUsageValid(int usage) {
        return AudioAttributes.isSdkUsage(usage) || AudioAttributes.isSystemUsage(usage);
        return AudioAttributes.isSdkUsage(usage) || AudioAttributes.isSystemUsage(usage)
                || AudioAttributes.isHiddenUsage(usage);
    }

    private void ensureFadingIsEnabled() {
+81 −0
Original line number Diff line number Diff line
@@ -758,6 +758,87 @@ public final class FadeManagerConfigurationUnitTest {
                .isEqualTo(FadeManagerConfiguration.CREATOR.createFromParcel(parcel));
    }

    @Test
    public void testGetFadeOutVolumeShaperConfigForUsage_withInvalidUsage_fails() {
        IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class, () ->
                mFmc.getFadeOutVolumeShaperConfigForUsage(TEST_INVALID_USAGE)
        );

        expect.withMessage("Fade out volume shaper config for invalid usage exception")
                .that(thrown).hasMessageThat().contains("Invalid usage");
    }

    @Test
    public void testGetFadeInVolumeShaperConfigForUsage_withInvalidUsage_fails() {
        IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class, () ->
                mFmc.getFadeInVolumeShaperConfigForUsage(TEST_INVALID_USAGE)
        );

        expect.withMessage("Fade in volume shaper config for invalid usage exception")
                .that(thrown).hasMessageThat().contains("Invalid usage");
    }

    @Test
    public void testGetFadeVolumeShaperConfigForUsage_forSdkUsages() {
        FadeManagerConfiguration.Builder builder = new FadeManagerConfiguration.Builder();
        for (int usage : AudioAttributes.getSdkUsages()) {
            builder.addFadeableUsage(usage);
            builder.setFadeOutVolumeShaperConfigForUsage(usage, TEST_FADE_OUT_VOLUME_SHAPER_CONFIG);
            builder.setFadeInVolumeShaperConfigForUsage(usage, TEST_FADE_IN_VOLUME_SHAPER_CONFIG);
        }
        FadeManagerConfiguration fmc = builder.build();

        for (int usage : AudioAttributes.getSdkUsages()) {
            expect.withMessage("Fade out volume shaper config for sdk usage")
                    .that(fmc.getFadeOutVolumeShaperConfigForUsage(usage))
                    .isEqualTo(TEST_FADE_OUT_VOLUME_SHAPER_CONFIG);
            expect.withMessage("Fade in volume shaper config for sdk usage")
                    .that(fmc.getFadeInVolumeShaperConfigForUsage(usage))
                    .isEqualTo(TEST_FADE_IN_VOLUME_SHAPER_CONFIG);
        }
    }

    @Test
    public void testGetFadeVolumeShaperConfigForUsage_forSystemUsages() {
        int[] systemUsages = {AudioAttributes.USAGE_CALL_ASSISTANT, AudioAttributes.USAGE_EMERGENCY,
                AudioAttributes.USAGE_SAFETY, AudioAttributes.USAGE_VEHICLE_STATUS,
                AudioAttributes.USAGE_ANNOUNCEMENT};
        FadeManagerConfiguration.Builder builder = new FadeManagerConfiguration.Builder();
        for (int usage : systemUsages) {
            builder.addFadeableUsage(usage);
            builder.setFadeOutVolumeShaperConfigForUsage(usage, TEST_FADE_OUT_VOLUME_SHAPER_CONFIG);
            builder.setFadeInVolumeShaperConfigForUsage(usage, TEST_FADE_IN_VOLUME_SHAPER_CONFIG);
        }
        FadeManagerConfiguration fmc = builder.build();

        for (int usage : systemUsages) {
            expect.withMessage("Fade out volume shaper config for system usage")
                    .that(fmc.getFadeOutVolumeShaperConfigForUsage(usage))
                    .isEqualTo(TEST_FADE_OUT_VOLUME_SHAPER_CONFIG);
            expect.withMessage("Fade in volume shaper config for system usage")
                    .that(fmc.getFadeInVolumeShaperConfigForUsage(usage))
                    .isEqualTo(TEST_FADE_IN_VOLUME_SHAPER_CONFIG);
        }
    }

    @Test
    public void testGetFadeVolumeShaperConfigForUsage_forHiddenUsage() {
        int hiddenUsage = AudioAttributes.USAGE_VIRTUAL_SOURCE;
        FadeManagerConfiguration fmc = new FadeManagerConfiguration.Builder()
                .addFadeableUsage(hiddenUsage)
                .setFadeOutVolumeShaperConfigForUsage(hiddenUsage,
                        TEST_FADE_OUT_VOLUME_SHAPER_CONFIG)
                .setFadeInVolumeShaperConfigForUsage(hiddenUsage,
                        TEST_FADE_IN_VOLUME_SHAPER_CONFIG).build();

        expect.withMessage("Fade out volume shaper config for hidden usage")
                .that(fmc.getFadeOutVolumeShaperConfigForUsage(hiddenUsage))
                .isEqualTo(TEST_FADE_OUT_VOLUME_SHAPER_CONFIG);
        expect.withMessage("Fade in volume shaper config for hidden usage")
                .that(fmc.getFadeInVolumeShaperConfigForUsage(hiddenUsage))
                .isEqualTo(TEST_FADE_IN_VOLUME_SHAPER_CONFIG);
    }

    private static AudioAttributes createAudioAttributesForUsage(int usage) {
        if (AudioAttributes.isSystemUsage(usage)) {
            return new AudioAttributes.Builder().setSystemUsage(usage).build();