Reducing the number of times contact detail reloads data
Change-Id: I85844fb9074d30529b81c4d5ba3232bd85923a9e
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 1ebac7b..f86af28 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -479,19 +479,15 @@
}
private void setupContactDetailFragment(final Uri contactLookupUri) {
- if (mDetailFragment != null && contactLookupUri != null
- && contactLookupUri.equals(mDetailFragment.getUri())) {
- return;
- }
-
if (mDetailFragment == null) {
mDetailFragment = new ContactDetailFragment();
+ mDetailFragment.loadUri(contactLookupUri);
getFragmentManager().openTransaction()
.replace(R.id.detail_container, mDetailFragment)
.commit();
+ } else {
+ mDetailFragment.loadUri(contactLookupUri);
}
-
- mDetailFragment.loadUri(contactLookupUri);
}
/**
diff --git a/src/com/android/contacts/views/detail/ContactDetailFragment.java b/src/com/android/contacts/views/detail/ContactDetailFragment.java
index 540af08..ecf972d 100644
--- a/src/com/android/contacts/views/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/views/detail/ContactDetailFragment.java
@@ -108,11 +108,13 @@
public class ContactDetailFragment extends Fragment implements OnCreateContextMenuListener,
OnItemClickListener, SelectAccountDialogFragment.Listener {
+
private static final String TAG = "ContactDetailFragment";
private static final int LOADER_DETAILS = 1;
private static final String KEY_CONTACT_URI = "contactUri";
+ private static final String LOADER_ARG_CONTACT_URI = "contactUri";
private Context mContext;
private View mView;
@@ -247,16 +249,27 @@
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- getLoaderManager().initLoader(LOADER_DETAILS, null, mDetailLoaderListener);
+ if (mLookupUri != null) {
+ Bundle args = new Bundle();
+ args.putParcelable(LOADER_ARG_CONTACT_URI, mLookupUri);
+ getLoaderManager().initLoader(LOADER_DETAILS, args, mDetailLoaderListener);
+ }
}
public void loadUri(Uri lookupUri) {
+ if ((lookupUri != null && !lookupUri.equals(mLookupUri))
+ || (lookupUri == null && mLookupUri != null)) {
+ return;
+ }
+
mLookupUri = lookupUri;
if (mLookupUri == null) {
mContactData = null;
bindData();
} else if (getActivity() != null) {
- getLoaderManager().restartLoader(LOADER_DETAILS, null, mDetailLoaderListener);
+ Bundle args = new Bundle();
+ args.putParcelable(LOADER_ARG_CONTACT_URI, mLookupUri);
+ getLoaderManager().restartLoader(LOADER_DETAILS, args, mDetailLoaderListener);
}
}
@@ -1208,7 +1221,8 @@
new LoaderCallbacks<ContactLoader.Result>() {
@Override
public Loader<ContactLoader.Result> onCreateLoader(int id, Bundle args) {
- return new ContactLoader(mContext, mLookupUri, true /* loadGroupMetaData */);
+ Uri lookupUri = args.getParcelable(LOADER_ARG_CONTACT_URI);
+ return new ContactLoader(mContext, lookupUri, true /* loadGroupMetaData */);
}
@Override