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