Set up fragments just after setContentView().
... except for ContactsUnavailableFragment, which is not in the layout.
(we dynamically create it.)
It's part of refactoring to prepare for ViewPager.
This also fixes the "mFavoritesFragment and mFrequentFragment are both
StrequentContactListFragment but we always assume StrequentContactListFragment
is Favorites in onAttachFragment" issue.
Change-Id: I9e0ad079714813a5bef898a51eb49cc88a78dbf2
diff --git a/src/com/android/contacts/ContactsActivity.java b/src/com/android/contacts/ContactsActivity.java
index b78fad2..1414f80 100644
--- a/src/com/android/contacts/ContactsActivity.java
+++ b/src/com/android/contacts/ContactsActivity.java
@@ -19,10 +19,13 @@
import com.android.contacts.test.InjectedServices;
import android.app.Activity;
+import android.app.Fragment;
+import android.app.FragmentManager;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
+import android.view.View;
/**
* A common superclass for Contacts activities that handles application-wide services.
@@ -86,4 +89,32 @@
public void onServiceCompleted(Intent callbackIntent) {
onNewIntent(callbackIntent);
}
+
+ /**
+ * Convenient version of {@link FragmentManager#findFragmentById(int)}, which throws
+ * an exception if the fragment doesn't exist.
+ */
+ @SuppressWarnings("unchecked")
+ public <T extends Fragment> T getFragment(int id) {
+ T result = (T)getFragmentManager().findFragmentById(id);
+ if (result == null) {
+ throw new IllegalArgumentException("fragment 0x" + Integer.toHexString(id)
+ + " doesn't exist");
+ }
+ return result;
+ }
+
+ /**
+ * Convenient version of {@link #findViewById(int)}, which throws
+ * an exception if the view doesn't exist.
+ */
+ @SuppressWarnings("unchecked")
+ public <T extends View> T getView(int id) {
+ T result = (T)findViewById(id);
+ if (result == null) {
+ throw new IllegalArgumentException("view 0x" + Integer.toHexString(id)
+ + " doesn't exist");
+ }
+ return result;
+ }
}
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 12a17f2..1bc5d06 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -90,7 +90,6 @@
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListPopupWindow;
-import android.widget.SearchView;
import android.widget.Toast;
import java.util.ArrayList;
@@ -210,38 +209,13 @@
@Override
public void onAttachFragment(Fragment fragment) {
- if (fragment instanceof DefaultContactBrowseListFragment) {
- mAllFragment = (DefaultContactBrowseListFragment)fragment;
- mAllFragment.setOnContactListActionListener(new ContactBrowserActionListener());
- if (!getWindow().hasFeature(Window.FEATURE_ACTION_BAR)) {
- mAllFragment.setContextMenuAdapter(
- new ContactBrowseListContextMenuAdapter(mAllFragment));
- }
- } else if (fragment instanceof GroupBrowseListFragment) {
- mGroupsFragment = (GroupBrowseListFragment) fragment;
- mGroupsFragment.setListener(new GroupBrowserActionListener());
- } else if (fragment instanceof ContactDetailFragment) {
- mContactDetailFragment = (ContactDetailFragment) fragment;
- mContactDetailFragment.setListener(mContactDetailFragmentListener);
- } else if (fragment instanceof ContactDetailUpdatesFragment) {
- mContactDetailUpdatesFragment = (ContactDetailUpdatesFragment) fragment;
- } else if (fragment instanceof ContactsUnavailableFragment) {
+ if (fragment instanceof ContactsUnavailableFragment) {
+ // This fragment is inflated dynamically, we'll initialize it here in onAttachFragment,
+ // as opposed to configureContentView().
mContactsUnavailableFragment = (ContactsUnavailableFragment)fragment;
mContactsUnavailableFragment.setProviderStatusLoader(mProviderStatusLoader);
mContactsUnavailableFragment.setOnContactsUnavailableActionListener(
new ContactsUnavailableFragmentListener());
- } else if (fragment instanceof ContactLoaderFragment) {
- mContactDetailLoaderFragment = (ContactLoaderFragment) fragment;
- mContactDetailLoaderFragment.setListener(mContactDetailLoaderFragmentListener);
- } else if (fragment instanceof GroupDetailFragment) {
- mGroupDetailFragment = (GroupDetailFragment) fragment;
- mGroupDetailFragment.setListener(mGroupDetailFragmentListener);
- mGroupDetailFragment.setQuickContact(PhoneCapabilityTester.isUsingTwoPanes(this));
- } else if (fragment instanceof StrequentContactListFragment) {
- mFavoritesFragment = (StrequentContactListFragment) fragment;
- mFavoritesFragment.setListener(mFavoritesFragmentListener);
- mFavoritesFragment.setDisplayType(DisplayType.STARRED_ONLY);
- mFavoritesFragment.setQuickContact(PhoneCapabilityTester.isUsingTwoPanes(this));
}
}
@@ -275,39 +249,6 @@
return;
}
- if (createContentView) {
- setContentView(R.layout.people_activity);
-
- mFavoritesView = findViewById(R.id.favorites_view);
- mDetailsView = findViewById(R.id.details_view);
- mBrowserView = findViewById(R.id.browse_view);
-
- final FragmentManager fragmentManager = getFragmentManager();
- mFavoritesFragment = (StrequentContactListFragment) fragmentManager
- .findFragmentById(R.id.favorites_fragment);
- mFrequentFragment = (StrequentContactListFragment) fragmentManager
- .findFragmentById(R.id.frequent_fragment);
- mAllFragment = (DefaultContactBrowseListFragment) fragmentManager
- .findFragmentById(R.id.all_fragment);
- mGroupsFragment = (GroupBrowseListFragment) fragmentManager
- .findFragmentById(R.id.groups_fragment);
- // Hide all tabs (the current tab will later be reshown once a tab is selected)
- final FragmentTransaction transaction = fragmentManager.beginTransaction();
- transaction.hide(mAllFragment);
- transaction.hide(mGroupsFragment);
-
- if (mFrequentFragment != null) {
- mFrequentFragment.setDisplayType(DisplayType.FREQUENT_ONLY);
- }
- if (mContactDetailFragment != null) {
- transaction.hide(mContactDetailFragment);
- }
- if (mGroupDetailFragment != null) {
- transaction.hide(mGroupDetailFragment);
- }
- transaction.commit();
- }
-
if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT
&& !PhoneCapabilityTester.isUsingTwoPanes(this)) {
redirect = new Intent(this, ContactDetailActivity.class);
@@ -318,6 +259,65 @@
return;
}
+ if (createContentView) {
+ setContentView(R.layout.people_activity);
+
+ final FragmentManager fragmentManager = getFragmentManager();
+
+ // Hide all tabs (the current tab will later be reshown once a tab is selected)
+ final FragmentTransaction transaction = fragmentManager.beginTransaction();
+
+ // Common fragments that exist on both 1 and 2 panes.
+ mFavoritesFragment = getFragment(R.id.favorites_fragment);
+ mFavoritesFragment.setListener(mFavoritesFragmentListener);
+ mFavoritesFragment.setDisplayType(DisplayType.STARRED_ONLY);
+
+ mAllFragment = getFragment(R.id.all_fragment);
+ mAllFragment.setOnContactListActionListener(new ContactBrowserActionListener());
+ if (!getWindow().hasFeature(Window.FEATURE_ACTION_BAR)) {
+ mAllFragment.setContextMenuAdapter(
+ new ContactBrowseListContextMenuAdapter(mAllFragment));
+ }
+
+ mGroupsFragment = getFragment(R.id.groups_fragment);
+ mGroupsFragment.setListener(new GroupBrowserActionListener());
+
+ transaction.hide(mAllFragment);
+ transaction.hide(mGroupsFragment);
+
+ if (PhoneCapabilityTester.isUsingTwoPanes(this)) {
+ mFavoritesFragment.setQuickContact(true);
+
+ // Container views for fragments
+ mFavoritesView = getView(R.id.favorites_view);
+ mDetailsView = getView(R.id.details_view);
+ mBrowserView = getView(R.id.browse_view);
+
+ // 2-pane only fragments
+ mFrequentFragment = getFragment(R.id.frequent_fragment);
+ mFrequentFragment.setListener(mFavoritesFragmentListener);
+ mFrequentFragment.setDisplayType(DisplayType.FREQUENT_ONLY);
+ mFrequentFragment.setQuickContact(true);
+
+ mContactDetailFragment = getFragment(R.id.about_fragment);
+ mContactDetailFragment.setListener(mContactDetailFragmentListener);
+
+ mContactDetailUpdatesFragment = getFragment(R.id.updates_fragment);
+
+ mContactDetailLoaderFragment = getFragment(R.id.contact_detail_loader_fragment);
+ mContactDetailLoaderFragment.setListener(mContactDetailLoaderFragmentListener);
+
+ mGroupDetailFragment = getFragment(R.id.group_detail_fragment);
+ mGroupDetailFragment.setListener(mGroupDetailFragmentListener);
+ mGroupDetailFragment.setQuickContact(true);
+
+ transaction.hide(mContactDetailFragment);
+ transaction.hide(mGroupDetailFragment);
+ }
+ transaction.commit();
+ fragmentManager.executePendingTransactions();
+ }
+
setTitle(mRequest.getActivityTitle());
ActionBar actionBar = getActionBar();
mActionBarAdapter = new ActionBarAdapter(this, this);