Fix ringtone persistance after device rotation.

Bug: 26122624
Change-Id: I187fe673dea250e93c6e9603239f01845ed378a3
diff --git a/src/com/android/settings/RingtonePreference.java b/src/com/android/settings/RingtonePreference.java
index 454ae0b..41318f0 100644
--- a/src/com/android/settings/RingtonePreference.java
+++ b/src/com/android/settings/RingtonePreference.java
@@ -49,8 +49,6 @@
 
     private static final String TAG = "RingtonePreference";
 
-    private static int sRequestCode = 100;
-
     private int mRingtoneType;
     private boolean mShowDefault;
     private boolean mShowSilent;
@@ -213,24 +211,18 @@
     }
     protected void onAttachedToHierarchy(PreferenceManager preferenceManager) {
         super.onAttachedToHierarchy(preferenceManager);
-
-        mRequestCode = sRequestCode++;
     }
 
     public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == mRequestCode) {
-            if (data != null) {
-                Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
+        if (data != null) {
+            Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
 
-                if (callChangeListener(uri != null ? uri.toString() : "")) {
-                    onSaveRingtone(uri);
-                }
+            if (callChangeListener(uri != null ? uri.toString() : "")) {
+                onSaveRingtone(uri);
             }
-
-            return true;
         }
 
-        return false;
+        return true;
     }
 
 }
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 4a44a1d..566bb9a 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -48,7 +48,9 @@
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.Preference.OnPreferenceChangeListener;
 import android.support.v7.preference.TwoStatePreference;
+import android.text.TextUtils;
 import android.util.Log;
+
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.RingtonePreference;
@@ -83,6 +85,9 @@
     private static final String KEY_ZEN_MODE = "zen_mode";
     private static final String KEY_CELL_BROADCAST_SETTINGS = "cell_broadcast_settings";
 
+    private static final String SELECTED_PREFERENCE_KEY = "selected_preference";
+    private static final int REQUEST_CODE = 200;
+
     private static final String[] RESTRICTED_KEYS = {
         KEY_MEDIA_VOLUME,
         KEY_ALARM_VOLUME,
@@ -175,6 +180,13 @@
         initVibrateWhenRinging();
         updateRingerMode();
         updateEffectsSuppressor();
+
+        if (savedInstanceState != null) {
+            String selectedPreference = savedInstanceState.getString(SELECTED_PREFERENCE_KEY, null);
+            if (!TextUtils.isEmpty(selectedPreference)) {
+                mRequestPreference = (RingtonePreference) findPreference(selectedPreference);
+            }
+        }
     }
 
     @Override
@@ -226,7 +238,7 @@
         if (preference instanceof RingtonePreference) {
             mRequestPreference = (RingtonePreference) preference;
             mRequestPreference.onPrepareRingtonePickerIntent(mRequestPreference.getIntent());
-            startActivityForResult(preference.getIntent(), mRequestPreference.getRequestCode());
+            startActivityForResult(preference.getIntent(), REQUEST_CODE);
             return true;
         }
         return super.onPreferenceTreeClick(preference);
@@ -240,6 +252,14 @@
         }
     }
 
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        if (mRequestPreference != null) {
+            outState.putString(SELECTED_PREFERENCE_KEY, mRequestPreference.getKey());
+        }
+    }
+
     // === Volumes ===
 
     private VolumeSeekBarPreference initVolumePreference(String key, int stream, int muteIcon) {