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

Commit 6cb8be7c authored by Vlad Popa's avatar Vlad Popa Committed by Android (Google) Code Review
Browse files

Merge "CSD: expose TestApi methods to test the feature"

parents 0be99fac 4e9d10be
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
@@ -6441,6 +6441,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.
@@ -6503,6 +6517,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 =
@@ -10110,6 +10107,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:
@@ -10461,7 +10507,6 @@ public class AudioService extends IAudioService.Stub
                        + " FromRestrictions=" + mMicMuteFromRestrictions
                        + " FromApi=" + mMicMuteFromApi
                        + " from system=" + mMicMuteFromSystemCached);
        pw.print("  mCurrentImeUid="); pw.println(mCurrentImeUid);
        dumpAccessibilityServiceUids(pw);
        dumpAssistantServicesUids(pw);
@@ -10595,6 +10640,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");
@@ -10640,6 +10694,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