Add section headers back to group lists

Bug 29509309
Bug 18641067

Change-Id: I94a4ae9c9bc6f0df5f8f8e51c13dd2e9435d63cd
diff --git a/src/com/android/contacts/GroupMemberLoader.java b/src/com/android/contacts/GroupMemberLoader.java
deleted file mode 100644
index 8bc7d04..0000000
--- a/src/com/android/contacts/GroupMemberLoader.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.contacts;
-
-import android.content.Context;
-import android.content.CursorLoader;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Directory;
-
-import com.android.contacts.common.preference.ContactsPreferences;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Group Member loader. Loads all group members from the given groupId
- */
-public final class GroupMemberLoader extends CursorLoader {
-
-    public static class GroupEditorQuery {
-        private static final String[] PROJECTION = new String[] {
-            Data.CONTACT_ID,                        // 0
-            Data.RAW_CONTACT_ID,                    // 1
-            Data.DISPLAY_NAME_PRIMARY,              // 2
-            Data.PHOTO_URI,                         // 3
-            Data.LOOKUP_KEY,                        // 4
-            Data.PHOTO_ID,                          // 5
-        };
-
-        public static final int CONTACT_ID                   = 0;
-        public static final int RAW_CONTACT_ID               = 1;
-        public static final int CONTACT_DISPLAY_NAME_PRIMARY = 2;
-        public static final int CONTACT_PHOTO_URI            = 3;
-        public static final int CONTACT_LOOKUP_KEY           = 4;
-        public static final int CONTACT_PHOTO_ID             = 5;
-    }
-
-    private final long mGroupId;
-
-    private GroupMemberLoader(Context context, long groupId, String[] projection) {
-        super(context);
-        mGroupId = groupId;
-        setUri(createUri());
-        setProjection(projection);
-        setSelection(createSelection());
-        setSelectionArgs(createSelectionArgs());
-
-        ContactsPreferences prefs = new ContactsPreferences(context);
-        if (prefs.getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
-            setSortOrder(Contacts.SORT_KEY_PRIMARY);
-        } else {
-            setSortOrder(Contacts.SORT_KEY_ALTERNATIVE);
-        }
-    }
-
-    private Uri createUri() {
-        Uri uri = Data.CONTENT_URI;
-        uri = uri.buildUpon().appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
-                String.valueOf(Directory.DEFAULT)).build();
-        return uri;
-    }
-
-    private String createSelection() {
-        StringBuilder selection = new StringBuilder();
-        selection.append(Data.MIMETYPE + "=?" + " AND " + GroupMembership.GROUP_ROW_ID + "=?");
-        return selection.toString();
-    }
-
-    private String[] createSelectionArgs() {
-        List<String> selectionArgs = new ArrayList<String>();
-        selectionArgs.add(GroupMembership.CONTENT_ITEM_TYPE);
-        selectionArgs.add(String.valueOf(mGroupId));
-        return selectionArgs.toArray(new String[0]);
-    }
-}
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index bdb246a..c65bf49 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -198,13 +198,10 @@
     }
 
     public GroupMembersFragment() {
-        setHasOptionsMenu(true);
-
         setPhotoLoaderEnabled(true);
         setSectionHeaderDisplayEnabled(true);
-        // Don't show the scrollbar until after group members have been loaded
-        setVisibleScrollbarEnabled(false);
-        setQuickContactEnabled(false);
+        setHasOptionsMenu(true);
+
         setListType(ListType.GROUP);
     }
 
@@ -243,6 +240,9 @@
     @Override
     public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
         if (data != null) {
+            // Wait until contacts are loaded before showing the scrollbar
+            setVisibleScrollbarEnabled(true);
+
             final FilterCursorWrapper cursorWrapper = new FilterCursorWrapper(data);
             bindMembersCount(cursorWrapper.getCount());
             super.onLoadFinished(loader, cursorWrapper);
@@ -299,6 +299,7 @@
     @Override
     protected GroupMembersAdapter createListAdapter() {
         final GroupMembersAdapter adapter = new GroupMembersAdapter(getContext());
+        adapter.setSectionHeaderDisplayEnabled(true);
         adapter.setDisplayPhotos(true);
         return adapter;
     }
diff --git a/src/com/android/contacts/list/GroupMemberPickerFragment.java b/src/com/android/contacts/list/GroupMemberPickerFragment.java
index de856a4..d7ad9ed 100644
--- a/src/com/android/contacts/list/GroupMemberPickerFragment.java
+++ b/src/com/android/contacts/list/GroupMemberPickerFragment.java
@@ -153,9 +153,7 @@
 
     public GroupMemberPickerFragment() {
         setPhotoLoaderEnabled(true);
-        setSectionHeaderDisplayEnabled(false);
-        setVisibleScrollbarEnabled(true);
-
+        setSectionHeaderDisplayEnabled(true);
         setHasOptionsMenu(true);
     }
 
@@ -196,6 +194,9 @@
     @Override
     public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
         if (data != null) {
+            // Wait until contacts are loaded before showing the scrollbar
+            setVisibleScrollbarEnabled(true);
+
             super.onLoadFinished(loader, new FilterCursorWrapper(data));
         }
     }