summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jean-Michel Trivi <jmtrivi@google.com> 2024-08-28 00:20:35 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-08-28 00:20:35 +0000
commitfecb83600cc255e64b0884b1e7324ca79bbee0eb (patch)
tree35d5f4889921c0e00cf0df1e57bb4edcd36ee118
parentd84495f8d1e20407e83571ce513cfe59541fa095 (diff)
parent15e4f34c719e367844230b2ea9dbf28402f33acd (diff)
Merge "Audio focus: replace durationHint by focusReqType" into main
-rw-r--r--media/java/android/media/AudioManager.java22
-rw-r--r--media/java/android/media/IAudioService.aidl4
-rw-r--r--services/core/java/com/android/server/audio/AudioService.java16
-rw-r--r--services/core/java/com/android/server/audio/HardeningEnforcer.java8
4 files changed, 25 insertions, 25 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 029e6f49b062..25fae76768d9 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -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(),
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index e0c346100d03..a96562d55f67 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -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);
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 14dca4e03b07..b738482ba66c 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -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*/);
}
diff --git a/services/core/java/com/android/server/audio/HardeningEnforcer.java b/services/core/java/com/android/server/audio/HardeningEnforcer.java
index 3c509bca1b84..faeba5d068fc 100644
--- a/services/core/java/com/android/server/audio/HardeningEnforcer.java
+++ b/services/core/java/com/android/server/audio/HardeningEnforcer.java
@@ -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);