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

Commit 4e9d10be authored by Vlad Popa's avatar Vlad Popa
Browse files

CSD: expose TestApi methods to test the feature

Exposing methods for getting/setting RS2 and CSD value. Also introducing
the possibility to force the internal MEL computation and to force CSD
for all output devices.
Removed unused mCurrentImeUid to unblock the presubmit.

Test: atest SoundDoseHelperTest
Bug: 248565894
Change-Id: Ic40d41597ca3a91b9e219192bbc01ea7f5afd084
parent f126bff7
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1629,20 +1629,27 @@ package android.media {

  public class AudioManager {
    method @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public int abandonAudioFocusForTest(@NonNull android.media.AudioFocusRequest, @NonNull String);
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS) public void forceComputeCsdOnAllDevices(boolean);
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS) public void forceUseFrameworkMel(boolean);
    method @NonNull @RequiresPermission(android.Manifest.permission.CALL_AUDIO_INTERCEPTION) public android.media.AudioRecord getCallDownlinkExtractionAudioRecord(@NonNull android.media.AudioFormat);
    method @NonNull @RequiresPermission(android.Manifest.permission.CALL_AUDIO_INTERCEPTION) public android.media.AudioTrack getCallUplinkInjectionAudioTrack(@NonNull android.media.AudioFormat);
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS) public float getCsd();
    method @Nullable public static android.media.AudioDeviceInfo getDeviceInfoFromType(int);
    method @IntRange(from=0) @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public long getFadeOutDurationOnFocusLossMillis(@NonNull android.media.AudioAttributes);
    method @Nullable public static android.media.AudioHalVersionInfo getHalVersion();
    method public static final int[] getPublicStreamTypes();
    method @NonNull public java.util.List<java.lang.Integer> getReportedSurroundFormats();
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS) public float getRs2Value();
    method public int getStreamMinVolumeInt(int);
    method @NonNull public java.util.Map<java.lang.Integer,java.lang.Boolean> getSurroundFormats();
    method public boolean hasRegisteredDynamicPolicy();
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS) public boolean isCsdEnabled();
    method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, android.Manifest.permission.QUERY_AUDIO_STATE}) public boolean isFullVolumeDevice();
    method @RequiresPermission(android.Manifest.permission.CALL_AUDIO_INTERCEPTION) public boolean isPstnCallAudioInterceptable();
    method @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public int requestAudioFocusForTest(@NonNull android.media.AudioFocusRequest, @NonNull String, int, int);
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS) public void setCsd(float);
    method public void setRampingRingerEnabled(boolean);
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS) public void setRs2Value(float);
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setTestDeviceConnectionState(@NonNull android.media.AudioDeviceAttributes, boolean);
  }

+114 −0
Original line number Diff line number Diff line
@@ -6442,6 +6442,20 @@ public class AudioManager {
        }
    }

    /**
     * Returns the registered volume controller interface.
     *
     * @hide
     */
    @Nullable
    public IVolumeController getVolumeController() {
        try {
            return getService().getVolumeController();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Notify audio manager about volume controller visibility changes.
     * Currently limited to SystemUI.
@@ -6504,6 +6518,106 @@ public class AudioManager {
        }
    }

    /**
     * @hide
     * @return the RS2 value used for momentary exposure warnings
     */
    @TestApi
    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public float getRs2Value() {
        try {
            return getService().getRs2Value();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * @hide
     * Sets the RS2 value used for momentary exposure warnings
     */
    @TestApi
    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public void setRs2Value(float rs2Value) {
        try {
            getService().setRs2Value(rs2Value);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * @hide
     * @return the current computed sound dose value
     */
    @TestApi
    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public float getCsd() {
        try {
            return getService().getCsd();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * @hide
     * Sets the computed sound dose value to {@code csd}
     */
    @TestApi
    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public void setCsd(float csd) {
        try {
            getService().setCsd(csd);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * @hide
     * Forces the computation of MEL values (used for CSD) on framework level. This will have the
     * result of ignoring the MEL values computed on HAL level. Should only be used in testing
     * since this can affect the certification of a device with EN50332-3 regulation.
     */
    @TestApi
    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public void forceUseFrameworkMel(boolean useFrameworkMel) {
        try {
            getService().forceUseFrameworkMel(useFrameworkMel);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * @hide
     * Forces the computation of CSD on all output devices.
     */
    @TestApi
    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public void forceComputeCsdOnAllDevices(boolean computeCsdOnAllDevices) {
        try {
            getService().forceComputeCsdOnAllDevices(computeCsdOnAllDevices);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * @hide
     * Returns whether CSD is enabled on this device.
     */
    @TestApi
    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public boolean isCsdEnabled() {
        try {
            return getService().isCsdEnabled();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * @hide
     * Sound dose warning at every 100% of dose during integration window
+23 −0
Original line number Diff line number Diff line
@@ -260,6 +260,8 @@ interface IAudioService {

    void setVolumeController(in IVolumeController controller);

    @nullable IVolumeController getVolumeController();

    void notifyVolumeControllerVisible(in IVolumeController controller, boolean visible);

    boolean isStreamAffectedByRingerMode(int streamType);
@@ -270,6 +272,27 @@ interface IAudioService {

    void lowerVolumeToRs1(String callingPackage);

    @EnforcePermission("MODIFY_AUDIO_SYSTEM_SETTINGS")
    float getRs2Value();

    @EnforcePermission("MODIFY_AUDIO_SYSTEM_SETTINGS")
    oneway void setRs2Value(float rs2Value);

    @EnforcePermission("MODIFY_AUDIO_SYSTEM_SETTINGS")
    float getCsd();

    @EnforcePermission("MODIFY_AUDIO_SYSTEM_SETTINGS")
    oneway void setCsd(float csd);

    @EnforcePermission("MODIFY_AUDIO_SYSTEM_SETTINGS")
    oneway void forceUseFrameworkMel(boolean useFrameworkMel);

    @EnforcePermission("MODIFY_AUDIO_SYSTEM_SETTINGS")
    oneway void forceComputeCsdOnAllDevices(boolean computeCsdOnAllDevices);

    @EnforcePermission("MODIFY_AUDIO_SYSTEM_SETTINGS")
    boolean isCsdEnabled();

    int setHdmiSystemAudioSupported(boolean on);

    boolean isHdmiSystemAudioSupported();
+3 −0
Original line number Diff line number Diff line
@@ -646,6 +646,9 @@
    <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_ROUTING" />

    <!-- Permission required for CTS test - SoundDoseHelperTest -->
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SYSTEM_SETTINGS" />

    <!-- Permission required for CTS test - CtsAmbientContextDetectionServiceDeviceTest -->
    <uses-permission android:name="android.permission.ACCESS_AMBIENT_CONTEXT_EVENT" />

+62 −4
Original line number Diff line number Diff line
@@ -908,9 +908,6 @@ public class AudioService extends IAudioService.Stub
    private final SoundDoseHelper mSoundDoseHelper;
    @GuardedBy("mSettingsLock")
    private int mCurrentImeUid;
    private final Object mSupportedSystemUsagesLock = new Object();
    @GuardedBy("mSupportedSystemUsagesLock")
    private @AttributeSystemUsage int[] mSupportedSystemUsages =
@@ -9939,6 +9936,55 @@ public class AudioService extends IAudioService.Stub
                "com.android.server.audio", "AudioService");
    }
    @Override
    @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public float getRs2Value() {
        super.getRs2Value_enforcePermission();
        return mSoundDoseHelper.getRs2Value();
    }
    @Override
    @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public void setRs2Value(float rs2Value) {
        super.setRs2Value_enforcePermission();
        mSoundDoseHelper.setRs2Value(rs2Value);
    }
    @Override
    @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public float getCsd() {
        super.getCsd_enforcePermission();
        return mSoundDoseHelper.getCsd();
    }
    @Override
    @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public void setCsd(float csd) {
        super.setCsd_enforcePermission();
        mSoundDoseHelper.setCsd(csd);
    }
    @Override
    @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public void forceUseFrameworkMel(boolean useFrameworkMel) {
        super.forceUseFrameworkMel_enforcePermission();
        mSoundDoseHelper.forceUseFrameworkMel(useFrameworkMel);
    }
    @Override
    @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public void forceComputeCsdOnAllDevices(boolean computeCsdOnAllDevices) {
        super.forceComputeCsdOnAllDevices_enforcePermission();
        mSoundDoseHelper.forceComputeCsdOnAllDevices(computeCsdOnAllDevices);
    }
    @Override
    @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
    public boolean isCsdEnabled() {
        super.isCsdEnabled_enforcePermission();
        return mSoundDoseHelper.isCsdEnabled();
    }
    //==========================================================================================
    // Hdmi CEC:
    // - System audio mode:
@@ -10290,7 +10336,6 @@ public class AudioService extends IAudioService.Stub
                        + " FromRestrictions=" + mMicMuteFromRestrictions
                        + " FromApi=" + mMicMuteFromApi
                        + " from system=" + mMicMuteFromSystemCached);
        pw.print("  mCurrentImeUid="); pw.println(mCurrentImeUid);
        dumpAccessibilityServiceUids(pw);
        dumpAssistantServicesUids(pw);
@@ -10424,6 +10469,15 @@ public class AudioService extends IAudioService.Stub
        if (DEBUG_VOL) Log.d(TAG, "Volume controller: " + mVolumeController);
    }
    @Override
    @Nullable
    public IVolumeController getVolumeController() {
        enforceVolumeController("get the volume controller");
        if (DEBUG_VOL) Log.d(TAG, "Volume controller: " + mVolumeController);
        return mVolumeController.getController();
    }
    @Override
    public void notifyVolumeControllerVisible(final IVolumeController controller, boolean visible) {
        enforceVolumeController("notify about volume controller visibility");
@@ -10469,6 +10523,10 @@ public class AudioService extends IAudioService.Stub
            mVisible = false;
        }
        public IVolumeController getController() {
            return mController;
        }
        public void loadSettings(ContentResolver cr) {
            mLongPressTimeout = mSettings.getSecureIntForUser(cr,
                    Settings.Secure.LONG_PRESS_TIMEOUT, 500, UserHandle.USER_CURRENT);
Loading