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

Commit 3fafbb29 authored by Wenyi Wang's avatar Wenyi Wang
Browse files

Sort groups across accounts and hide empty FFC groups

Bug 28426020
Bug 28946142

Change-Id: Ic56fe75ae3e29daf0c7c3cd4875edb14de0c590b
parent 1c3b5c20
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
@@ -925,6 +925,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