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

Commit 15e4f34c authored by Jean-Michel Trivi's avatar Jean-Michel Trivi
Browse files

Audio focus: replace durationHint by focusReqType

Replace the durationHint parameter, the old name for the focus
request type, by focusReqType that better matches the
AudioFocusRequest API and parameter description

Bug: 324780808
Flag: EXEMPT cleanup
Test: m
Change-Id: I1f53d8b66c7dbfcfe01eca56f2436b09b3025e14
parent 88f1c7e6
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -4567,8 +4567,8 @@ public class AudioManager {
     *     when the request is flagged with {@link #AUDIOFOCUS_FLAG_DELAY_OK}.
     * @param requestAttributes non null {@link AudioAttributes} describing the main reason for
     *     requesting audio focus.
     * @param durationHint use {@link #AUDIOFOCUS_GAIN_TRANSIENT} to indicate this focus request
     *      is temporary, and focus will be abandonned shortly. Examples of transient requests are
     * @param focusReqType use {@link #AUDIOFOCUS_GAIN_TRANSIENT} to indicate this focus request
     *      is temporary, and focus will be abandoned shortly. Examples of transient requests are
     *      for the playback of driving directions, or notifications sounds.
     *      Use {@link #AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK} to indicate also that it's ok for
     *      the previous focus owner to keep playing if it ducks its audio output.
@@ -4593,13 +4593,13 @@ public class AudioManager {
    @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
    public int requestAudioFocus(OnAudioFocusChangeListener l,
            @NonNull AudioAttributes requestAttributes,
            int durationHint,
            int focusReqType,
            int flags) throws IllegalArgumentException {
        if (flags != (flags & AUDIOFOCUS_FLAGS_APPS)) {
            throw new IllegalArgumentException("Invalid flags 0x"
                    + Integer.toHexString(flags).toUpperCase());
        }
        return requestAudioFocus(l, requestAttributes, durationHint,
        return requestAudioFocus(l, requestAttributes, focusReqType,
                flags & AUDIOFOCUS_FLAGS_APPS,
                null /* no AudioPolicy*/);
    }
@@ -4614,7 +4614,7 @@ public class AudioManager {
     *     {@link #requestAudioFocus(OnAudioFocusChangeListener, AudioAttributes, int, int)}
     * @param requestAttributes non null {@link AudioAttributes} describing the main reason for
     *     requesting audio focus.
     * @param durationHint see the description of the same parameter in
     * @param focusReqType see the description of the same parameter in
     *     {@link #requestAudioFocus(OnAudioFocusChangeListener, AudioAttributes, int, int)}
     * @param flags 0 or a combination of {link #AUDIOFOCUS_FLAG_DELAY_OK},
     *     {@link #AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS}, and {@link #AUDIOFOCUS_FLAG_LOCK}.
@@ -4636,14 +4636,14 @@ public class AudioManager {
    })
    public int requestAudioFocus(OnAudioFocusChangeListener l,
            @NonNull AudioAttributes requestAttributes,
            int durationHint,
            int focusReqType,
            int flags,
            AudioPolicy ap) throws IllegalArgumentException {
        // parameter checking
        if (requestAttributes == null) {
            throw new IllegalArgumentException("Illegal null AudioAttributes argument");
        }
        if (!AudioFocusRequest.isValidFocusGain(durationHint)) {
        if (!AudioFocusRequest.isValidFocusGain(focusReqType)) {
            throw new IllegalArgumentException("Invalid duration hint");
        }
        if (flags != (flags & AUDIOFOCUS_FLAGS_SYSTEM)) {
@@ -4664,7 +4664,7 @@ public class AudioManager {
                    "Illegal null audio policy when locking audio focus");
        }

        final AudioFocusRequest afr = new AudioFocusRequest.Builder(durationHint)
        final AudioFocusRequest afr = new AudioFocusRequest.Builder(focusReqType)
                .setOnAudioFocusChangeListenerInt(l, null /* no Handler for this legacy API */)
                .setAudioAttributes(requestAttributes)
                .setAcceptsDelayedFocusGain((flags & AUDIOFOCUS_FLAG_DELAY_OK)
@@ -5025,16 +5025,16 @@ public class AudioManager {
     * to identify this use case.
     * @param streamType use STREAM_RING for focus requests when ringing, VOICE_CALL for
     *    the establishment of the call
     * @param durationHint the type of focus request. AUDIOFOCUS_GAIN_TRANSIENT is recommended so
     * @param focusReqType the type of focus request. AUDIOFOCUS_GAIN_TRANSIENT is recommended so
     *    media applications resume after a call
     */
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    public void requestAudioFocusForCall(int streamType, int durationHint) {
    public void requestAudioFocusForCall(int streamType, int focusReqType) {
        final IAudioService service = getService();
        try {
            service.requestAudioFocus(new AudioAttributes.Builder()
                        .setInternalLegacyStreamType(streamType).build(),
                    durationHint, mICallBack, null,
                    focusReqType, mICallBack, null,
                    AudioSystem.IN_VOICE_COMM_FOCUS_ID,
                    getContext().getOpPackageName(),
                    getContext().getAttributionTag(),
+2 −2
Original line number Diff line number Diff line
@@ -252,7 +252,7 @@ interface IAudioService {

    boolean isBluetoothA2dpOn();

    int requestAudioFocus(in AudioAttributes aa, int durationHint, IBinder cb,
    int requestAudioFocus(in AudioAttributes aa, int focusReqType, IBinder cb,
            IAudioFocusDispatcher fd, in String clientId, in String callingPackageName,
            in String attributionTag, int flags, IAudioPolicyCallback pcb, int sdk);

@@ -562,7 +562,7 @@ interface IAudioService {

    long getMaxAdditionalOutputDeviceDelay(in AudioDeviceAttributes device);

    int requestAudioFocusForTest(in AudioAttributes aa, int durationHint, IBinder cb,
    int requestAudioFocusForTest(in AudioAttributes aa, int focusReqType, IBinder cb,
            in IAudioFocusDispatcher fd, in String clientId, in String callingPackageName,
            int flags, int uid, int sdk);

+8 −8
Original line number Diff line number Diff line
@@ -10730,7 +10730,7 @@ public class AudioService extends IAudioService.Stub
        return true;
    }
    public int requestAudioFocus(AudioAttributes aa, int durationHint, IBinder cb,
    public int requestAudioFocus(AudioAttributes aa, int focusReqType, IBinder cb,
            IAudioFocusDispatcher fd, String clientId, String callingPackageName,
            String attributionTag, int flags, IAudioPolicyCallback pcb, int sdk) {
        if ((flags & AudioManager.AUDIOFOCUS_FLAG_TEST) != 0) {
@@ -10739,7 +10739,7 @@ public class AudioService extends IAudioService.Stub
        final int uid = Binder.getCallingUid();
        MediaMetrics.Item mmi = new MediaMetrics.Item(mMetricsId + "focus")
                .setUid(uid)
                //.putInt("durationHint", durationHint)
                //.putInt("focusReqType", focusReqType)
                .set(MediaMetrics.Property.CALLING_PACKAGE, callingPackageName)
                .set(MediaMetrics.Property.CLIENT_NAME, clientId)
                .set(MediaMetrics.Property.EVENT, "requestAudioFocus")
@@ -10802,11 +10802,11 @@ public class AudioService extends IAudioService.Stub
            //TODO move inside HardeningEnforcer after refactor that moves permission checks
            //     in the blockFocusMethod
            if (permissionOverridesCheck) {
                mHardeningEnforcer.metricsLogFocusReq(/*blocked*/false, durationHint, uid);
                mHardeningEnforcer.metricsLogFocusReq(/*blocked*/false, focusReqType, uid);
            }
            if (!permissionOverridesCheck && mHardeningEnforcer.blockFocusMethod(uid,
                    HardeningEnforcer.METHOD_AUDIO_MANAGER_REQUEST_AUDIO_FOCUS,
                    clientId, durationHint, callingPackageName, attributionTag, sdk)) {
                    clientId, focusReqType, callingPackageName, attributionTag, sdk)) {
                final String reason = "Audio focus request blocked by hardening";
                Log.w(TAG, reason);
                mmi.set(MediaMetrics.Property.EARLY_RETURN, reason).record();
@@ -10817,14 +10817,14 @@ public class AudioService extends IAudioService.Stub
        }
        mmi.record();
        return mMediaFocusControl.requestAudioFocus(aa, durationHint, cb, fd,
        return mMediaFocusControl.requestAudioFocus(aa, focusReqType, cb, fd,
                clientId, callingPackageName, flags, sdk,
                forceFocusDuckingForAccessibility(aa, durationHint, uid), -1 /*testUid, ignored*/,
                forceFocusDuckingForAccessibility(aa, focusReqType, uid), -1 /*testUid, ignored*/,
                permissionOverridesCheck);
    }
    /** see {@link AudioManager#requestAudioFocusForTest(AudioFocusRequest, String, int, int)} */
    public int requestAudioFocusForTest(AudioAttributes aa, int durationHint, IBinder cb,
    public int requestAudioFocusForTest(AudioAttributes aa, int focusReqType, IBinder cb,
            IAudioFocusDispatcher fd, String clientId, String callingPackageName,
            int flags, int fakeUid, int sdk) {
        if (!enforceQueryAudioStateForTest("focus request")) {
@@ -10835,7 +10835,7 @@ public class AudioService extends IAudioService.Stub
            Log.e(TAG, reason);
            return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
        }
        return mMediaFocusControl.requestAudioFocus(aa, durationHint, cb, fd,
        return mMediaFocusControl.requestAudioFocus(aa, focusReqType, cb, fd,
                clientId, callingPackageName, flags,
                sdk, false /*forceDuck*/, fakeUid, true /*permissionOverridesCheck*/);
    }
+4 −4
Original line number Diff line number Diff line
@@ -155,14 +155,14 @@ public class HardeningEnforcer {
     * Checks whether the call in the current thread should be allowed or blocked
     * @param focusMethod name of the method to check, for logging purposes
     * @param clientId id of the requester
     * @param durationHint focus type being requested
     * @param focusReqType focus type being requested
     * @param attributionTag attribution of the caller
     * @param targetSdk target SDK of the caller
     * @return false if the method call is allowed, true if it should be a no-op
     */
    @SuppressWarnings("AndroidFrameworkCompatChange")
    protected boolean blockFocusMethod(int callingUid, int focusMethod, @NonNull String clientId,
            int durationHint, @NonNull String packageName, String attributionTag, int targetSdk) {
            int focusReqType, @NonNull String packageName, String attributionTag, int targetSdk) {
        if (packageName.isEmpty()) {
            packageName = getPackNameForUid(callingUid);
        }
@@ -181,14 +181,14 @@ public class HardeningEnforcer {
            blocked = false;
        }

        metricsLogFocusReq(blocked, durationHint, callingUid);
        metricsLogFocusReq(blocked, focusReqType, callingUid);

        if (!blocked) {
            return false;
        }

        String errorMssg = "Focus request DENIED for uid:" + callingUid
                + " clientId:" + clientId + " req:" + durationHint
                + " clientId:" + clientId + " req:" + focusReqType
                + " procState:" + mActivityManager.getUidProcessState(callingUid);
        mEventLogger.enqueueAndSlog(errorMssg, EventLogger.Event.ALOGI, TAG);