Fix ringtone persistance after device rotation.

Bug: 26122624
Change-Id: I187fe673dea250e93c6e9603239f01845ed378a3
This commit is contained in:
Julia Reynolds
2016-04-01 14:45:58 -04:00
parent f9db17e3cc
commit c736efcb61
2 changed files with 26 additions and 14 deletions

View File

@@ -49,8 +49,6 @@ public class RingtonePreference extends Preference {
private static final String TAG = "RingtonePreference"; private static final String TAG = "RingtonePreference";
private static int sRequestCode = 100;
private int mRingtoneType; private int mRingtoneType;
private boolean mShowDefault; private boolean mShowDefault;
private boolean mShowSilent; private boolean mShowSilent;
@@ -213,24 +211,18 @@ public class RingtonePreference extends Preference {
} }
protected void onAttachedToHierarchy(PreferenceManager preferenceManager) { protected void onAttachedToHierarchy(PreferenceManager preferenceManager) {
super.onAttachedToHierarchy(preferenceManager); super.onAttachedToHierarchy(preferenceManager);
mRequestCode = sRequestCode++;
} }
public boolean onActivityResult(int requestCode, int resultCode, Intent data) { public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == mRequestCode) { if (data != null) {
if (data != null) { Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if (callChangeListener(uri != null ? uri.toString() : "")) { if (callChangeListener(uri != null ? uri.toString() : "")) {
onSaveRingtone(uri); onSaveRingtone(uri);
}
} }
return true;
} }
return false; return true;
} }
} }

View File

@@ -48,7 +48,9 @@ import android.provider.Settings;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceChangeListener; import android.support.v7.preference.Preference.OnPreferenceChangeListener;
import android.support.v7.preference.TwoStatePreference; import android.support.v7.preference.TwoStatePreference;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.RingtonePreference; import com.android.settings.RingtonePreference;
@@ -83,6 +85,9 @@ public class SoundSettings extends SettingsPreferenceFragment implements Indexab
private static final String KEY_ZEN_MODE = "zen_mode"; private static final String KEY_ZEN_MODE = "zen_mode";
private static final String KEY_CELL_BROADCAST_SETTINGS = "cell_broadcast_settings"; 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 = { private static final String[] RESTRICTED_KEYS = {
KEY_MEDIA_VOLUME, KEY_MEDIA_VOLUME,
KEY_ALARM_VOLUME, KEY_ALARM_VOLUME,
@@ -175,6 +180,13 @@ public class SoundSettings extends SettingsPreferenceFragment implements Indexab
initVibrateWhenRinging(); initVibrateWhenRinging();
updateRingerMode(); updateRingerMode();
updateEffectsSuppressor(); updateEffectsSuppressor();
if (savedInstanceState != null) {
String selectedPreference = savedInstanceState.getString(SELECTED_PREFERENCE_KEY, null);
if (!TextUtils.isEmpty(selectedPreference)) {
mRequestPreference = (RingtonePreference) findPreference(selectedPreference);
}
}
} }
@Override @Override
@@ -226,7 +238,7 @@ public class SoundSettings extends SettingsPreferenceFragment implements Indexab
if (preference instanceof RingtonePreference) { if (preference instanceof RingtonePreference) {
mRequestPreference = (RingtonePreference) preference; mRequestPreference = (RingtonePreference) preference;
mRequestPreference.onPrepareRingtonePickerIntent(mRequestPreference.getIntent()); mRequestPreference.onPrepareRingtonePickerIntent(mRequestPreference.getIntent());
startActivityForResult(preference.getIntent(), mRequestPreference.getRequestCode()); startActivityForResult(preference.getIntent(), REQUEST_CODE);
return true; return true;
} }
return super.onPreferenceTreeClick(preference); return super.onPreferenceTreeClick(preference);
@@ -240,6 +252,14 @@ public class SoundSettings extends SettingsPreferenceFragment implements Indexab
} }
} }
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mRequestPreference != null) {
outState.putString(SELECTED_PREFERENCE_KEY, mRequestPreference.getKey());
}
}
// === Volumes === // === Volumes ===
private VolumeSeekBarPreference initVolumePreference(String key, int stream, int muteIcon) { private VolumeSeekBarPreference initVolumePreference(String key, int stream, int muteIcon) {