Merge "Trim unwanted whitespace from translations. DO NOT MERGE" into gingerbread
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 2e69994..a53f469 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -1024,6 +1024,13 @@
}
@Override
+ protected void onStart() {
+ super.onStart();
+
+ mContactsPrefs.registerChangeListener(mPreferencesChangeListener);
+ }
+
+ @Override
protected void onPause() {
super.onPause();
unregisterProviderStatusObserver();
@@ -1205,6 +1212,7 @@
protected void onStop() {
super.onStop();
+ mContactsPrefs.unregisterChangeListener();
mAdapter.setSuggestionsCursor(null);
mAdapter.changeCursor(null);
@@ -3586,4 +3594,14 @@
}
}
}
+
+ private ContactsPreferences.ChangeListener mPreferencesChangeListener =
+ new ContactsPreferences.ChangeListener() {
+ @Override
+ public void onChange() {
+ // When returning from DisplayOptions, onActivityResult ensures that we reload the list,
+ // so we do not have to do anything here. However, ContactsPreferences requires a change
+ // listener, otherwise it would not reload its settings.
+ }
+ };
}
diff --git a/src/com/android/contacts/ui/ContactsPreferences.java b/src/com/android/contacts/ui/ContactsPreferences.java
index 49a49ef..14c6e05 100644
--- a/src/com/android/contacts/ui/ContactsPreferences.java
+++ b/src/com/android/contacts/ui/ContactsPreferences.java
@@ -21,6 +21,7 @@
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
+import android.os.Handler;
import android.provider.ContactsContract;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
@@ -28,20 +29,17 @@
/**
* Manages user preferences for contacts.
*/
-public final class ContactsPreferences {
-
+public final class ContactsPreferences extends ContentObserver {
private Context mContext;
- private ContentResolver mContentResolver;
private int mSortOrder = -1;
private int mDisplayOrder = -1;
- private SettingsObserver mSettingsObserver;
+ private ChangeListener mListener = null;
+ private Handler mHandler;
public ContactsPreferences(Context context) {
+ super(null);
mContext = context;
- mContentResolver = context.getContentResolver();
-
- mSettingsObserver = new SettingsObserver();
- mSettingsObserver.register();
+ mHandler = new Handler();
}
public boolean isSortOrderUserChangeable() {
@@ -112,27 +110,45 @@
ContactsContract.Preferences.DISPLAY_ORDER, displayOrder);
}
- private class SettingsObserver extends ContentObserver {
+ public void registerChangeListener(ChangeListener listener) {
+ if (mListener != null) unregisterChangeListener();
- public SettingsObserver() {
- super(null);
+ // We didn't watch before, so ensure that we actually forget our cache here
+ mSortOrder = -1;
+ mDisplayOrder = -1;
+
+ mListener = listener;
+ final ContentResolver contentResolver = mContext.getContentResolver();
+ contentResolver.registerContentObserver(
+ Settings.System.getUriFor(
+ ContactsContract.Preferences.SORT_ORDER), false, this);
+ contentResolver.registerContentObserver(
+ Settings.System.getUriFor(
+ ContactsContract.Preferences.DISPLAY_ORDER), false, this);
+ }
+
+ public void unregisterChangeListener() {
+ if (mListener != null) {
+ mContext.getContentResolver().unregisterContentObserver(this);
+ mListener = null;
}
+ }
- public void register() {
- mContentResolver.registerContentObserver(
- Settings.System.getUriFor(
- ContactsContract.Preferences.SORT_ORDER), false, this);
- mContentResolver.registerContentObserver(
- Settings.System.getUriFor(
- ContactsContract.Preferences.DISPLAY_ORDER), false, this);
- }
+ @Override
+ public void onChange(boolean selfChange) {
+ // This notification is not sent on the Ui thread. Use the previously created Handler
+ // to switch to the Ui thread
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mSortOrder = -1;
+ mDisplayOrder = -1;
+ if (mListener != null) mListener.onChange();
+ }
+ });
+ }
- @Override
- public void onChange(boolean selfChange) {
- mSortOrder = -1;
- mDisplayOrder = -1;
-
- // TODO send a message to parent context to notify of the change
- }
+ public interface ChangeListener {
+ void onChange();
}
}