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) {