From 0ed8ad56ad9a181c7315a326cf80a2cb5b2a78af Mon Sep 17 00:00:00 2001
From: ezio84 <brabus84@gmail.com>
Date: Thu, 16 Feb 2017 22:47:17 +0100
Subject: [PATCH] Wired/BT headset: make ringtone audio focus customizable [1/2]

Allow to choose where to play incoming call ringtones from
if a wired or BT headset is plugged in.
Mode 0: play the ringtone from the headset but only if music is playing (if no
music, play from speakerphone)
Mode 1 (default aosp behavior): always play the ringtone from both speakerphone
and headset

thanks @xyyx for unlinking the code form the Telecomm tree

Change-Id: I065df661c1068ce11d8906539077c442b9152f29
---

diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 2582221..2da88d3 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -16755,6 +16755,12 @@
          */
         public static final String LOCKSCREEN_ENABLE_POWER_MENU = "lockscreen_enable_power_menu";
 
+        /**
+         * Audio focus mode for ringtones when headset is connected
+         * @hide
+         */
+        public static final String RINGTONE_FOCUS_MODE = "ringtone_focus_mode"
+
         /*****************************
          * AICP Global Settings end
          *****************************/
diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java
index 86a94a9..5a4933d 100644
--- a/media/java/android/media/Ringtone.java
+++ b/media/java/android/media/Ringtone.java
@@ -25,6 +25,7 @@
 import android.content.res.Resources.NotFoundException;
 import android.database.Cursor;
 import android.media.audiofx.HapticGenerator;
+import android.media.AudioDeviceInfo;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Build;
@@ -84,10 +85,18 @@
     private Uri mUri;
     private String mTitle;
 
+    private AudioAttributes mFinalAudioAttributes;
+
     private AudioAttributes mAudioAttributes = new AudioAttributes.Builder()
             .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
             .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
             .build();
+
+    private AudioAttributes mAudioAttributesHeadset = new AudioAttributes.Builder()
+            .setUsage(AudioAttributes.USAGE_NOTIFICATION)
+            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+            .build();
+
     // playback properties, use synchronized with mPlaybackSettingsLock
     private boolean mIsLooping = false;
     private float mVolume = 1.0f;
@@ -335,6 +344,39 @@
         return title;
     }
 
+    public void setCustomAudioAttributes() {
+        int focusmode = getRingtoneFocusMode();
+        boolean isHeadsetConnected = false;
+        AudioDeviceInfo[] connectedDevices = mAudioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
+        for (AudioDeviceInfo device : connectedDevices) {
+            if (device.getType() == AudioDeviceInfo.TYPE_WIRED_HEADSET ||
+                    device.getType() == AudioDeviceInfo.TYPE_WIRED_HEADPHONES ||
+                    device.getType() == AudioDeviceInfo.TYPE_BLUETOOTH_SCO) {
+                isHeadsetConnected = true;
+                break;
+            }
+        }
+        switch (focusmode) {
+            case 0: //play ringtone only from headset if music playing, otherwise from speakerphone
+                if (isHeadsetConnected && mAudioManager.isMusicActive()) {
+                    mFinalAudioAttributes = mAudioAttributesHeadset;
+                } else {
+                    mFinalAudioAttributes = mAudioAttributes;
+                }
+                break;
+            default:
+            case 1: //aosp behavior, ringtone always from both headset and speakerphone
+                    mFinalAudioAttributes = mAudioAttributes;
+                break;
+        }
+    }
+
+    private int getRingtoneFocusMode() {
+        int mode = Settings.Global.getInt(mContext.getContentResolver(),
+                Settings.Global.RINGTONE_FOCUS_MODE, 1);
+        return mode;
+    }
+
     /**
      * Set {@link Uri} to be used for ringtone playback. Attempts to open
      * locally, otherwise will delegate playback to remote
@@ -369,7 +411,8 @@
         mLocalPlayer = new MediaPlayer();
         try {
             mLocalPlayer.setDataSource(mContext, mUri);
-            mLocalPlayer.setAudioAttributes(mAudioAttributes);
+            setCustomAudioAttributes();
+            mLocalPlayer.setAudioAttributes(mFinalAudioAttributes);
             synchronized (mPlaybackSettingsLock) {
                 applyPlaybackProperties_sync();
             }
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java
index 4661a3d..6b53c1a 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java
@@ -84,5 +84,6 @@
         Settings.Global.USER_PREFERRED_RESOLUTION_WIDTH,
         Settings.Global.POWER_BUTTON_LONG_PRESS,
         Settings.Global.LOCKSCREEN_ENABLE_POWER_MENU,
+        Settings.Global.RINGTONE_FOCUS_MODE,
     };
 }
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java
index 732d494..4c2551a 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java
@@ -318,6 +318,7 @@
         VALIDATORS.put(Global.Wearable.WET_MODE_ON, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Global.Wearable.COOLDOWN_MODE_ON, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Global.LOCKSCREEN_ENABLE_POWER_MENU, BOOLEAN_VALIDATOR);
+        VALIDATORS.put(Global.RINGTONE_FOCUS_MODE, ANY_INTEGER_VALIDATOR);
     }
 }
 
