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;
     }