Add Settings item to select sound effects control panel.

Change-Id: I7952aad3afbc9dea8ea54be9afcad7969a0f23bc
diff --git a/src/com/android/settings/SoundSettings.java b/src/com/android/settings/SoundSettings.java
index 4ca7d4a..f6090c2 100644
--- a/src/com/android/settings/SoundSettings.java
+++ b/src/com/android/settings/SoundSettings.java
@@ -21,7 +21,10 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.media.AudioManager;
+import android.media.audiofx.AudioEffect;
 import android.os.Bundle;
 import android.os.Vibrator;
 import android.preference.CheckBoxPreference;
@@ -34,6 +37,8 @@
 import android.telephony.TelephonyManager;
 import android.util.Log;
 
+import java.util.List;
+
 public class SoundSettings extends SettingsPreferenceFragment implements
         Preference.OnPreferenceChangeListener {
     private static final String TAG = "SoundAndDisplaysSettings";
@@ -44,6 +49,7 @@
     private static final String KEY_SILENT = "silent";
     private static final String KEY_VIBRATE = "vibrate";
     private static final String KEY_RING_VOLUME = "ring_volume";
+    private static final String KEY_MUSICFX = "musicfx";
     private static final String KEY_DTMF_TONE = "dtmf_tone";
     private static final String KEY_SOUND_EFFECTS = "sound_effects";
     private static final String KEY_HAPTIC_FEEDBACK = "haptic_feedback";
@@ -80,6 +86,7 @@
     private CheckBoxPreference mSoundEffects;
     private CheckBoxPreference mHapticFeedback;
     private CheckBoxPreference mNotificationPulse;
+    private Preference mMusicFx;
     private CheckBoxPreference mLockSounds;
 
     private AudioManager mAudioManager;
@@ -165,6 +172,19 @@
             }
         }
 
+        mMusicFx = mSoundSettings.findPreference(KEY_MUSICFX);
+        Intent i = new Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL);
+        PackageManager p = getPackageManager();
+        List<ResolveInfo> ris = p.queryIntentActivities(i, PackageManager.GET_DISABLED_COMPONENTS);
+        if (ris.size() <= 2) {
+            // no need to show the item if there is no choice for the user to make
+            // note: the built in musicfx panel has two activities (one being a
+            // compatibility shim that launches either the other activity, or a
+            // third party one), hence the check for <=2. If the implementation
+            // of the compatbility layer changes, this check may need to be updated.
+            mSoundSettings.removePreference(mMusicFx);
+        }
+
         if (!Utils.isVoiceCapable(getActivity())) {
             for (String prefKey : NEED_VOICE_CAPABILITY) {
                 Preference pref = findPreference(prefKey);
@@ -335,6 +355,9 @@
             boolean value = mNotificationPulse.isChecked();
             Settings.System.putInt(getContentResolver(),
                     Settings.System.NOTIFICATION_LIGHT_PULSE, value ? 1 : 0);
+        } else if (preference == mMusicFx) {
+            // let the framework fire off the intent
+            return false;
         }
 
         return true;