Avoid duplicate ringtone load
When we create the ringtone defer creating the mediaplayer
until AudioAttributes are set, this avoids a duplicate
creation of the mediaplayer which causes a duplicate
asset load for the ringtone.
Bug: 240621827
Test: Receive a call and hear ringtone
Change-Id: Ic36412759bd17e63857182435c02c44b535f3210
diff --git a/src/com/android/server/telecom/RingtoneFactory.java b/src/com/android/server/telecom/RingtoneFactory.java
index b1846fe..5c46998 100644
--- a/src/com/android/server/telecom/RingtoneFactory.java
+++ b/src/com/android/server/telecom/RingtoneFactory.java
@@ -73,11 +73,13 @@
Uri ringtoneUri = incomingCall.getRingtone();
Ringtone ringtone = null;
+ AudioAttributes audioAttrs = getRingtoneAudioAttributes();
+
if(ringtoneUri != null && userContext != null) {
// Ringtone URI is explicitly specified. First, try to create a Ringtone with that.
try {
- ringtone = RingtoneManager.getRingtone(userContext, ringtoneUri,
- volumeShaperConfig);
+ ringtone = RingtoneManager.getRingtone(
+ userContext, ringtoneUri, volumeShaperConfig, audioAttrs);
} catch (NullPointerException npe) {
Log.e(this, npe, "getRingtone: NPE while getting ringtone.");
}
@@ -104,12 +106,19 @@
}
try {
ringtone = RingtoneManager.getRingtone(
- contextToUse, defaultRingtoneUri, volumeShaperConfig);
+ contextToUse, defaultRingtoneUri, volumeShaperConfig, audioAttrs);
} catch (NullPointerException npe) {
Log.e(this, npe, "getRingtone: NPE while getting ringtone.");
}
}
- return setRingtoneAudioAttributes(ringtone);
+ return ringtone;
+ }
+
+ public AudioAttributes getRingtoneAudioAttributes() {
+ return new AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
+ .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+ .build();
}
public Ringtone getRingtone(Call incomingCall) {
@@ -121,21 +130,12 @@
public Ringtone getHapticOnlyRingtone() {
Uri ringtoneUri = Uri.parse("file://" + mContext.getString(
com.android.internal.R.string.config_defaultRingtoneVibrationSound));
- Ringtone ringtone = RingtoneManager.getRingtone(mContext, ringtoneUri, null);
+ AudioAttributes audioAttrs = getRingtoneAudioAttributes();
+ Ringtone ringtone = RingtoneManager.getRingtone(mContext, ringtoneUri, null, audioAttrs);
if (ringtone != null) {
// Make sure the sound is muted.
ringtone.setVolume(0);
}
- return setRingtoneAudioAttributes(ringtone);
- }
-
- private Ringtone setRingtoneAudioAttributes(Ringtone ringtone) {
- if (ringtone != null) {
- ringtone.setAudioAttributes(new AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
- .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
- .build());
- }
return ringtone;
}