summaryrefslogtreecommitdiffstats
path: root/core/java/android/preference
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2010-09-23 15:07:58 -0700
committerAmith Yamasani <yamasani@google.com>2010-09-23 15:14:59 -0700
commit82e7bc11342547d1480ef89208ed06943650e201 (patch)
tree4013f8539d1a6b8482f3d1affcf80219e9e0a1e1 /core/java/android/preference
parent00ec86940370bdeb4b255fd5f8bb2e1da9c8ac17 (diff)
downloadframeworks_base-82e7bc11342547d1480ef89208ed06943650e201.zip
frameworks_base-82e7bc11342547d1480ef89208ed06943650e201.tar.gz
frameworks_base-82e7bc11342547d1480ef89208ed06943650e201.tar.bz2
Fix for Ringtones not being saved when using Preference fragments.
Bug: 2988732 RingtonePreference was calling startActivityForResult on Activity instead of on Fragment, so the result was not being delivered to the fragment. Setting a fragment owner on the PreferenceManager instance so that it can be used instead of getActivity() for launching the intent. Not exposing any new public APIs at this time.
Diffstat (limited to 'core/java/android/preference')
-rw-r--r--core/java/android/preference/PreferenceFragment.java1
-rw-r--r--core/java/android/preference/PreferenceManager.java30
-rw-r--r--core/java/android/preference/RingtonePreference.java8
3 files changed, 31 insertions, 8 deletions
diff --git a/core/java/android/preference/PreferenceFragment.java b/core/java/android/preference/PreferenceFragment.java
index 479497a..7629c31 100644
--- a/core/java/android/preference/PreferenceFragment.java
+++ b/core/java/android/preference/PreferenceFragment.java
@@ -144,6 +144,7 @@ public abstract class PreferenceFragment extends Fragment implements
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPreferenceManager = new PreferenceManager(getActivity(), FIRST_REQUEST_CODE);
+ mPreferenceManager.setFragment(this);
mPreferenceManager.setOnPreferenceTreeClickListener(this);
}
diff --git a/core/java/android/preference/PreferenceManager.java b/core/java/android/preference/PreferenceManager.java
index fa83897..42150ed 100644
--- a/core/java/android/preference/PreferenceManager.java
+++ b/core/java/android/preference/PreferenceManager.java
@@ -16,12 +16,7 @@
package android.preference;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-
import android.app.Activity;
-import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -34,6 +29,10 @@ import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.util.Log;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
/**
* Used to help create {@link Preference} hierarchies
* from activities or XML.
@@ -61,6 +60,11 @@ public class PreferenceManager {
private Activity mActivity;
/**
+ * Fragment that owns this instance.
+ */
+ private PreferenceFragment mFragment;
+
+ /**
* The context to use. This should always be set.
*
* @see #mActivity
@@ -158,7 +162,21 @@ public class PreferenceManager {
setSharedPreferencesName(getDefaultSharedPreferencesName(context));
}
-
+
+ /**
+ * Sets the owning preference fragment
+ */
+ void setFragment(PreferenceFragment fragment) {
+ mFragment = fragment;
+ }
+
+ /**
+ * Returns the owning preference fragment, if any.
+ */
+ PreferenceFragment getFragment() {
+ return mFragment;
+ }
+
/**
* Returns a list of {@link Activity} (indirectly) that match a given
* {@link Intent}.
diff --git a/core/java/android/preference/RingtonePreference.java b/core/java/android/preference/RingtonePreference.java
index b46f180..cf14097 100644
--- a/core/java/android/preference/RingtonePreference.java
+++ b/core/java/android/preference/RingtonePreference.java
@@ -24,7 +24,6 @@ import android.net.Uri;
import android.provider.Settings.System;
import android.text.TextUtils;
import android.util.AttributeSet;
-import android.util.Log;
/**
* A {@link Preference} that allows the user to choose a ringtone from those on the device.
@@ -137,7 +136,12 @@ public class RingtonePreference extends Preference implements
// Launch the ringtone picker
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
onPrepareRingtonePickerIntent(intent);
- getPreferenceManager().getActivity().startActivityForResult(intent, mRequestCode);
+ PreferenceFragment owningFragment = getPreferenceManager().getFragment();
+ if (owningFragment != null) {
+ owningFragment.startActivityForResult(intent, mRequestCode);
+ } else {
+ getPreferenceManager().getActivity().startActivityForResult(intent, mRequestCode);
+ }
}
/**