Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a989bc7b authored by Wenyi Wang's avatar Wenyi Wang Committed by Android (Google) Code Review
Browse files

Merge "Sort groups across accounts and hide empty FFC groups"

parents 08fbeaa1 3fafbb29
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ public final class GroupListLoader extends CursorLoader {
        Groups._ID,
        Groups.TITLE,
        Groups.SUMMARY_COUNT,
        Groups.GROUP_IS_READ_ONLY,
        Groups.SYSTEM_ID,
    };

    public final static int ACCOUNT_NAME = 0;
@@ -48,16 +50,18 @@ public final class GroupListLoader extends CursorLoader {
    public final static int GROUP_ID = 3;
    public final static int TITLE = 4;
    public final static int MEMBER_COUNT = 5;
    public final static int IS_READ_ONLY = 6;
    public final static int SYSTEM_ID = 7;

    private static final Uri GROUP_LIST_URI = Groups.CONTENT_SUMMARY_URI;

    public GroupListLoader(Context context) {
        // Sort groups from all accounts alphabettically and in a localized way.
        super(context,
                GROUP_LIST_URI,
                COLUMNS,
                DEFAULT_SELECTION,
                null,
                Groups.ACCOUNT_TYPE + ", " + Groups.ACCOUNT_NAME + ", " + Groups.DATA_SET + ", " +
                Groups.TITLE + " COLLATE NOCASE ASC");
                Groups.TITLE + " COLLATE LOCALIZED ASC");
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -929,6 +929,9 @@ public class PeopleActivity extends AppCompatContactsActivity implements
        if (groupListItems != null) {
            // Add each group
            for (GroupListItem groupListItem : groupListItems) {
                if (GroupUtil.isEmptyFFCGroup(groupListItem)) {
                    continue;
                }
                final String title = groupListItem.getTitle();
                final MenuItem menuItem =
                        subMenu.add(R.id.nav_groups_items, Menu.NONE, Menu.NONE, title);
+14 −1
Original line number Diff line number Diff line
@@ -27,9 +27,12 @@ public final class GroupListItem {
    private final String mTitle;
    private final boolean mIsFirstGroupInAccount;
    private final int mMemberCount;
    private final boolean mIsReadOnly;
    private final String mSystemId;

    public GroupListItem(String accountName, String accountType, String dataSet, long groupId,
            String title, boolean isFirstGroupInAccount, int memberCount) {
            String title, boolean isFirstGroupInAccount, int memberCount, boolean isReadOnly,
            String systemId) {
        mAccountName = accountName;
        mAccountType = accountType;
        mDataSet = dataSet;
@@ -37,6 +40,8 @@ public final class GroupListItem {
        mTitle = title;
        mIsFirstGroupInAccount = isFirstGroupInAccount;
        mMemberCount = memberCount;
        mIsReadOnly = isReadOnly;
        mSystemId = systemId;
    }

    public String getAccountName() {
@@ -70,4 +75,12 @@ public final class GroupListItem {
    public boolean isFirstGroupInAccount() {
        return mIsFirstGroupInAccount;
    }

    public boolean isReadOnly() {
        return mIsReadOnly;
    }

    public String getSystemId() {
        return mSystemId;
    }
}
 No newline at end of file
+28 −1
Original line number Diff line number Diff line
@@ -22,14 +22,20 @@ import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract.Groups;
import android.text.TextUtils;
import android.widget.ImageView;

import com.android.contacts.GroupListLoader;
import com.android.contacts.activities.GroupMembersActivity;
import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
import com.android.contacts.common.model.account.GoogleAccountType;
import com.google.common.base.Objects;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * Group utility methods.
 */
@@ -38,6 +44,10 @@ public final class GroupUtil {
    private static final String LEGACY_CONTACTS_AUTHORITY = "contacts";
    private static final String LEGACY_CONTACTS_URI = "content://contacts/groups";

    // System IDs of FFC groups in Google accounts
    private static final Set<String> FFC_GROUPS =
            new HashSet(Arrays.asList("Friends", "Family", "Coworkers"));

    private GroupUtil() {
    }

@@ -52,6 +62,8 @@ public final class GroupUtil {
        long groupId = cursor.getLong(GroupListLoader.GROUP_ID);
        String title = cursor.getString(GroupListLoader.TITLE);
        int memberCount = cursor.getInt(GroupListLoader.MEMBER_COUNT);
        boolean isReadOnly = cursor.getInt(GroupListLoader.IS_READ_ONLY) == 1;
        String systemId = cursor.getString(GroupListLoader.SYSTEM_ID);

        // Figure out if this is the first group for this account name / account type pair by
        // checking the previous entry. This is to determine whether or not we need to display an
@@ -71,7 +83,7 @@ public final class GroupUtil {
        }

        return new GroupListItem(accountName, accountType, dataSet, groupId, title,
                isFirstGroupInAccount, memberCount);
                isFirstGroupInAccount, memberCount, isReadOnly, systemId);
    }

    /**
@@ -122,4 +134,19 @@ public final class GroupUtil {
        final Uri legacyContentUri = Uri.parse(LEGACY_CONTACTS_URI);
        return ContentUris.withAppendedId(legacyContentUri, groupId);
    }

    /**
     * Returns true if it's an empty and read-only group of a Google account and the system ID of
     * the group is one of "Friends", "Family" and "Coworkers".
     */
    public static boolean isEmptyFFCGroup(GroupListItem groupListItem) {
        return GoogleAccountType.ACCOUNT_TYPE.equals(groupListItem.getAccountType())
                && groupListItem.isReadOnly()
                && isSystemIdFFC(groupListItem.getSystemId())
                && (groupListItem.getMemberCount() <= 0);
    }

    private static boolean isSystemIdFFC(String systemId) {
        return !TextUtils.isEmpty(systemId) && FFC_GROUPS.contains(systemId);
    }
}
 No newline at end of file