Merge commit '428824eaca7ed60c14add0a1d45edfe4535059bb' into manual_merge_428824e
Change-Id: I049ee9066aaa7ccd29cd9efddc46850f7fa3f018
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 2d7bb34..45898fb 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -59,7 +59,7 @@
import com.android.contacts.editor.SelectAccountDialogFragment;
import com.android.contacts.group.GroupListItem;
import com.android.contacts.group.GroupMembersFragment;
-import com.android.contacts.group.GroupMetadata;
+import com.android.contacts.group.GroupMetaData;
import com.android.contacts.group.GroupNameEditDialogFragment;
import com.android.contacts.group.GroupUtil;
import com.android.contacts.group.GroupsFragment;
@@ -343,7 +343,7 @@
subMenu.removeGroup(R.id.nav_groups_items);
mGroupMenuMap = new HashMap<>();
- final GroupMetadata groupMetaData = getGroupMetadata();
+ final GroupMetaData groupMetaData = getGroupMetaData();
if (groupListItems != null) {
// Add each group
@@ -406,15 +406,15 @@
}
}
- public void updateGroupMenu(GroupMetadata groupMetadata) {
+ public void updateGroupMenu(GroupMetaData groupMetaData) {
clearCheckedMenus();
- if (groupMetadata != null && mGroupMenuMap != null
- && mGroupMenuMap.get(groupMetadata.groupId) != null) {
- setMenuChecked(mGroupMenuMap.get(groupMetadata.groupId), true);
+ if (groupMetaData != null && mGroupMenuMap != null
+ && mGroupMenuMap.get(groupMetaData.groupId) != null) {
+ setMenuChecked(mGroupMenuMap.get(groupMetaData.groupId), true);
}
}
- protected GroupMetadata getGroupMetadata() {
+ protected GroupMetaData getGroupMetaData() {
return null;
}
diff --git a/src/com/android/contacts/GroupMetaDataLoader.java b/src/com/android/contacts/GroupMetaDataLoader.java
index 4c78c0c..57aa67b 100644
--- a/src/com/android/contacts/GroupMetaDataLoader.java
+++ b/src/com/android/contacts/GroupMetaDataLoader.java
@@ -28,7 +28,7 @@
*/
public final class GroupMetaDataLoader extends CursorLoader {
- private final static String[] COLUMNS = new String[] {
+ public final static String[] COLUMNS = new String[] {
Groups.ACCOUNT_NAME,
Groups.ACCOUNT_TYPE,
Groups.DATA_SET,
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 726c288..5e957e7 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -69,7 +69,7 @@
import com.android.contacts.common.widget.FloatingActionButtonController;
import com.android.contacts.editor.EditorIntents;
import com.android.contacts.group.GroupMembersFragment;
-import com.android.contacts.group.GroupMetadata;
+import com.android.contacts.group.GroupMetaData;
import com.android.contacts.group.GroupUtil;
import com.android.contacts.list.ContactsIntentResolver;
import com.android.contacts.list.ContactsRequest;
@@ -921,7 +921,7 @@
}
@Override
- protected GroupMetadata getGroupMetadata() {
- return mMembersFragment == null ? null : mMembersFragment.getGroupMetadata();
+ protected GroupMetaData getGroupMetaData() {
+ return mMembersFragment == null ? null : mMembersFragment.getGroupMetaData();
}
}
diff --git a/src/com/android/contacts/common/GroupMetaData.java b/src/com/android/contacts/common/GroupMetaData.java
deleted file mode 100644
index fa86ae2..0000000
--- a/src/com/android/contacts/common/GroupMetaData.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2010 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.common;
-
-/**
- * Meta-data for a contact group. We load all groups associated with the contact's
- * constituent accounts.
- */
-public final class GroupMetaData {
- private String mAccountName;
- private String mAccountType;
- private String mDataSet;
- private long mGroupId;
- private String mTitle;
- private boolean mDefaultGroup;
- private boolean mFavorites;
-
- public GroupMetaData(String accountName, String accountType, String dataSet, long groupId,
- String title, boolean defaultGroup, boolean favorites) {
- this.mAccountName = accountName;
- this.mAccountType = accountType;
- this.mDataSet = dataSet;
- this.mGroupId = groupId;
- this.mTitle = title;
- this.mDefaultGroup = defaultGroup;
- this.mFavorites = favorites;
- }
-
- public String getAccountName() {
- return mAccountName;
- }
-
- public String getAccountType() {
- return mAccountType;
- }
-
- public String getDataSet() {
- return mDataSet;
- }
-
- public long getGroupId() {
- return mGroupId;
- }
-
- public String getTitle() {
- return mTitle;
- }
-
- public boolean isDefaultGroup() {
- return mDefaultGroup;
- }
-
- public boolean isFavorites() {
- return mFavorites;
- }
-}
\ No newline at end of file
diff --git a/src/com/android/contacts/common/model/Contact.java b/src/com/android/contacts/common/model/Contact.java
index 27bf13e..2187b1d 100644
--- a/src/com/android/contacts/common/model/Contact.java
+++ b/src/com/android/contacts/common/model/Contact.java
@@ -24,16 +24,15 @@
import android.provider.ContactsContract.Directory;
import android.provider.ContactsContract.DisplayNameSources;
-import com.android.contacts.common.GroupMetaData;
import com.android.contacts.common.model.account.AccountType;
import com.android.contacts.common.util.DataStatus;
+import com.android.contacts.group.GroupMetaData;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.ArrayList;
-import java.util.Collections;
/**
* A Contact represents a single person or logical entity as perceived by the user. The information
diff --git a/src/com/android/contacts/common/model/ContactLoader.java b/src/com/android/contacts/common/model/ContactLoader.java
index f721379..a8deff4 100644
--- a/src/com/android/contacts/common/model/ContactLoader.java
+++ b/src/com/android/contacts/common/model/ContactLoader.java
@@ -38,8 +38,8 @@
import android.text.TextUtils;
import android.util.Log;
+import com.android.contacts.GroupMetaDataLoader;
import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.GroupMetaData;
import com.android.contacts.common.compat.CompatUtils;
import com.android.contacts.common.model.account.AccountType;
import com.android.contacts.common.model.account.AccountTypeWithDataSet;
@@ -50,6 +50,8 @@
import com.android.contacts.common.model.dataitem.DataItem;
import com.android.contacts.common.model.dataitem.PhoneDataItem;
import com.android.contacts.common.model.dataitem.PhotoDataItem;
+import com.android.contacts.group.GroupMetaData;
+
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
@@ -292,26 +294,6 @@
public static final int EXPORT_SUPPORT = 5;
}
- private static class GroupQuery {
- static final String[] COLUMNS = new String[] {
- Groups.ACCOUNT_NAME,
- Groups.ACCOUNT_TYPE,
- Groups.DATA_SET,
- Groups._ID,
- Groups.TITLE,
- Groups.AUTO_ADD,
- Groups.FAVORITES,
- };
-
- public static final int ACCOUNT_NAME = 0;
- public static final int ACCOUNT_TYPE = 1;
- public static final int DATA_SET = 2;
- public static final int ID = 3;
- public static final int TITLE = 4;
- public static final int AUTO_ADD = 5;
- public static final int FAVORITES = 6;
- }
-
public void setLookupUri(Uri lookupUri) {
mLookupUri = lookupUri;
}
@@ -859,29 +841,14 @@
selection.append(")");
}
}
- final ImmutableList.Builder<GroupMetaData> groupListBuilder =
- new ImmutableList.Builder<GroupMetaData>();
+ final ImmutableList.Builder<GroupMetaData> groupListBuilder = new ImmutableList.Builder<>();
final Cursor cursor = getContext().getContentResolver().query(Groups.CONTENT_URI,
- GroupQuery.COLUMNS, selection.toString(), selectionArgs.toArray(new String[0]),
- null);
+ GroupMetaDataLoader.COLUMNS, selection.toString(),
+ selectionArgs.toArray(new String[0]), null);
if (cursor != null) {
try {
while (cursor.moveToNext()) {
- final String accountName = cursor.getString(GroupQuery.ACCOUNT_NAME);
- final String accountType = cursor.getString(GroupQuery.ACCOUNT_TYPE);
- final String dataSet = cursor.getString(GroupQuery.DATA_SET);
- final long groupId = cursor.getLong(GroupQuery.ID);
- final String title = cursor.getString(GroupQuery.TITLE);
- final boolean defaultGroup = cursor.isNull(GroupQuery.AUTO_ADD)
- ? false
- : cursor.getInt(GroupQuery.AUTO_ADD) != 0;
- final boolean favorites = cursor.isNull(GroupQuery.FAVORITES)
- ? false
- : cursor.getInt(GroupQuery.FAVORITES) != 0;
-
- groupListBuilder.add(new GroupMetaData(
- accountName, accountType, dataSet, groupId, title, defaultGroup,
- favorites));
+ groupListBuilder.add(new GroupMetaData(getContext(), cursor));
}
} finally {
cursor.close();
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index 26560d6..66bd509 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -51,8 +51,6 @@
import com.android.contacts.common.logging.ListEvent.ListType;
import com.android.contacts.common.logging.Logger;
import com.android.contacts.common.logging.ScreenEvent;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
import com.android.contacts.common.model.account.AccountWithDataSet;
import com.android.contacts.common.util.ImplicitIntentsUtil;
import com.android.contacts.group.GroupMembersAdapter.GroupMembersQuery;
@@ -81,6 +79,7 @@
private static final String ARG_GROUP_URI = "groupUri";
private static final int LOADER_GROUP_METADATA = 0;
+
private static final int RESULT_GROUP_ADD_MEMBER = 100;
/** Filters out duplicate contacts. */
@@ -183,7 +182,7 @@
}
}
- private final LoaderCallbacks<Cursor> mGroupMetadataCallbacks = new LoaderCallbacks<Cursor>() {
+ private final LoaderCallbacks<Cursor> mGroupMetaDataCallbacks = new LoaderCallbacks<Cursor>() {
@Override
public CursorLoader onCreateLoader(int id, Bundle args) {
@@ -200,21 +199,7 @@
mActivity.finish();
return;
}
- mGroupMetadata = new GroupMetadata();
- mGroupMetadata.uri = mGroupUri;
- mGroupMetadata.accountName = cursor.getString(GroupMetaDataLoader.ACCOUNT_NAME);
- mGroupMetadata.accountType = cursor.getString(GroupMetaDataLoader.ACCOUNT_TYPE);
- mGroupMetadata.dataSet = cursor.getString(GroupMetaDataLoader.DATA_SET);
- mGroupMetadata.groupId = cursor.getLong(GroupMetaDataLoader.GROUP_ID);
- mGroupMetadata.groupName = cursor.getString(GroupMetaDataLoader.TITLE);
- mGroupMetadata.readOnly = cursor.getInt(GroupMetaDataLoader.IS_READ_ONLY) == 1;
-
- final AccountTypeManager accountTypeManager =
- AccountTypeManager.getInstance(mActivity);
- final AccountType accountType = accountTypeManager.getAccountType(
- mGroupMetadata.accountType, mGroupMetadata.dataSet);
- mGroupMetadata.editable = accountType.isGroupMembershipEditable();
-
+ mGroupMetaData = new GroupMetaData(getActivity(), cursor);
onGroupMetadataLoaded();
}
@@ -230,7 +215,7 @@
private boolean mIsEditMode;
- private GroupMetadata mGroupMetadata;
+ private GroupMetaData mGroupMetaData;
private Set<String> mGroupMemberContactIds = new HashSet();
@@ -252,7 +237,7 @@
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- if (mGroupMetadata == null) {
+ if (mGroupMetaData == null) {
// Hide menu options until metadata is fully loaded
return;
}
@@ -262,8 +247,8 @@
@Override
public void onPrepareOptionsMenu(Menu menu) {
final boolean isSelectionMode = mActionBarAdapter.isSelectionMode();
- final boolean isGroupEditable = mGroupMetadata != null && mGroupMetadata.editable;
- final boolean isGroupReadOnly = mGroupMetadata != null && mGroupMetadata.readOnly;
+ final boolean isGroupEditable = mGroupMetaData != null && mGroupMetaData.editable;
+ final boolean isGroupReadOnly = mGroupMetaData != null && mGroupMetaData.readOnly;
setVisible(menu, R.id.menu_add, isGroupEditable && !isSelectionMode);
setVisible(menu, R.id.menu_rename_group, !isGroupReadOnly && !isSelectionMode);
@@ -286,7 +271,7 @@
}
private void startGroupAddMemberActivity() {
- startActivityForResult(GroupUtil.createPickMemberIntent(getContext(), mGroupMetadata,
+ startActivityForResult(GroupUtil.createPickMemberIntent(getContext(), mGroupMetaData,
getMemberContactIds()), RESULT_GROUP_ADD_MEMBER);
}
@@ -303,10 +288,10 @@
}
case R.id.menu_rename_group: {
GroupNameEditDialogFragment.newInstanceForUpdate(
- new AccountWithDataSet(mGroupMetadata.accountName,
- mGroupMetadata.accountType, mGroupMetadata.dataSet),
- GroupUtil.ACTION_UPDATE_GROUP, mGroupMetadata.groupId,
- mGroupMetadata.groupName).show(getFragmentManager(),
+ new AccountWithDataSet(mGroupMetaData.accountName,
+ mGroupMetaData.accountType, mGroupMetaData.dataSet),
+ GroupUtil.ACTION_UPDATE_GROUP, mGroupMetaData.groupId,
+ mGroupMetaData.groupName).show(getFragmentManager(),
TAG_GROUP_NAME_EDIT_DIALOG);
return true;
}
@@ -332,8 +317,8 @@
private void removeSelectedContacts() {
final long[] contactIds = getAdapter().getSelectedContactIdsArray();
new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_REMOVE,
- getContext(), contactIds, mGroupMetadata.groupId, mGroupMetadata.accountName,
- mGroupMetadata.accountType).execute();
+ getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
+ mGroupMetaData.accountType).execute();
mActionBarAdapter.setSelectionMode(false);
}
@@ -354,8 +339,8 @@
}
new UpdateGroupMembersAsyncTask(
UpdateGroupMembersAsyncTask.TYPE_ADD,
- getContext(), contactIds, mGroupMetadata.groupId, mGroupMetadata.accountName,
- mGroupMetadata.accountType).execute();
+ getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
+ mGroupMetaData.accountType).execute();
}
}
@@ -429,12 +414,12 @@
private void deleteGroup() {
if (getMemberCount() == 0) {
final Intent intent = ContactSaveService.createGroupDeletionIntent(
- getContext(), mGroupMetadata.groupId);
+ getContext(), mGroupMetaData.groupId);
getContext().startService(intent);
mActivity.switchToAllContacts();
} else {
- GroupDeletionDialogFragment.show(getFragmentManager(), mGroupMetadata.groupId,
- mGroupMetadata.groupName);
+ GroupDeletionDialogFragment.show(getFragmentManager(), mGroupMetaData.groupId,
+ mGroupMetaData.groupName);
}
}
@@ -448,9 +433,9 @@
final ContactsRequest contactsRequest = new ContactsRequest();
contactsRequest.setActionCode(ContactsRequest.ACTION_GROUP);
mActionBarAdapter.initialize(savedInstanceState, contactsRequest);
- if (mGroupMetadata != null) {
- mActivity.setTitle(mGroupMetadata.groupName);
- if (mGroupMetadata.editable) {
+ if (mGroupMetaData != null) {
+ mActivity.setTitle(mGroupMetaData.groupName);
+ if (mGroupMetaData.editable) {
setCheckBoxListListener(mCheckBoxListener);
}
}
@@ -485,7 +470,7 @@
} else {
mIsEditMode = savedState.getBoolean(KEY_IS_EDIT_MODE);
mGroupUri = savedState.getParcelable(KEY_GROUP_URI);
- mGroupMetadata = savedState.getParcelable(KEY_GROUP_METADATA);
+ mGroupMetaData = savedState.getParcelable(KEY_GROUP_METADATA);
}
maybeAttachCheckBoxListener();
}
@@ -500,8 +485,8 @@
@Override
protected void startLoading() {
- if (mGroupMetadata == null || !mGroupMetadata.isValid()) {
- getLoaderManager().restartLoader(LOADER_GROUP_METADATA, null, mGroupMetadataCallbacks);
+ if (mGroupMetaData == null || !mGroupMetaData.isValid()) {
+ getLoaderManager().restartLoader(LOADER_GROUP_METADATA, null, mGroupMetaDataCallbacks);
} else {
onGroupMetadataLoaded();
}
@@ -527,7 +512,7 @@
final View emptyGroupView = getView().findViewById(R.id.empty_group);
if (memberCount > 0) {
final AccountWithDataSet accountWithDataSet = new AccountWithDataSet(
- mGroupMetadata.accountName, mGroupMetadata.accountType, mGroupMetadata.dataSet);
+ mGroupMetaData.accountName, mGroupMetaData.accountType, mGroupMetaData.dataSet);
bindListHeader(getContext(), getListView(), accountFilterContainer,
accountWithDataSet, memberCount);
emptyGroupView.setVisibility(View.GONE);
@@ -546,16 +531,16 @@
}
outState.putBoolean(KEY_IS_EDIT_MODE, mIsEditMode);
outState.putParcelable(KEY_GROUP_URI, mGroupUri);
- outState.putParcelable(KEY_GROUP_METADATA, mGroupMetadata);
+ outState.putParcelable(KEY_GROUP_METADATA, mGroupMetaData);
}
private void onGroupMetadataLoaded() {
- if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Loaded " + mGroupMetadata);
+ if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Loaded " + mGroupMetaData);
maybeAttachCheckBoxListener();
- mActivity.setTitle(mGroupMetadata.groupName);
- mActivity.updateGroupMenu(mGroupMetadata);
+ mActivity.setTitle(mGroupMetaData.groupName);
+ mActivity.updateGroupMenu(mGroupMetaData);
mActivity.invalidateOptionsMenu();
// Start loading the group members
@@ -564,7 +549,7 @@
private void maybeAttachCheckBoxListener() {
// Don't attach the multi select check box listener if we can't edit the group
- if (mGroupMetadata != null && mGroupMetadata.editable) {
+ if (mGroupMetaData != null && mGroupMetaData.editable) {
setCheckBoxListListener(mCheckBoxListener);
}
}
@@ -581,8 +566,8 @@
@Override
protected void configureAdapter() {
super.configureAdapter();
- if (mGroupMetadata != null) {
- getAdapter().setGroupId(mGroupMetadata.groupId);
+ if (mGroupMetaData != null) {
+ getAdapter().setGroupId(mGroupMetaData.groupId);
}
}
@@ -609,7 +594,7 @@
@Override
public void onClick(View v) {
startActivityForResult(GroupUtil.createPickMemberIntent(getContext(),
- mGroupMetadata, getMemberContactIds()), RESULT_GROUP_ADD_MEMBER);
+ mGroupMetaData, getMemberContactIds()), RESULT_GROUP_ADD_MEMBER);
}
});
return view;
@@ -650,17 +635,17 @@
final long[] contactIds = new long[1];
contactIds[0] = contactId;
new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_REMOVE,
- getContext(), contactIds, mGroupMetadata.groupId, mGroupMetadata.accountName,
- mGroupMetadata.accountType).execute();
+ getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
+ mGroupMetaData.accountType).execute();
}
}
- public GroupMetadata getGroupMetadata() {
- return mGroupMetadata;
+ public GroupMetaData getGroupMetaData() {
+ return mGroupMetaData;
}
public boolean isCurrentGroup(long groupId) {
- return mGroupMetadata != null && mGroupMetadata.groupId == groupId;
+ return mGroupMetaData != null && mGroupMetaData.groupId == groupId;
}
@Override
@@ -681,7 +666,7 @@
exitEditMode();
} else if (!GroupUtil.ACTION_REMOVE_FROM_GROUP.equals(action)) {
mGroupUri = newGroupUri;
- mGroupMetadata = null; // Clear mGroupMetadata to trigger a new load.
+ mGroupMetaData = null; // Clear mGroupMetaData to trigger a new load.
reloadData();
mActivity.invalidateOptionsMenu();
}
diff --git a/src/com/android/contacts/group/GroupMetaData.java b/src/com/android/contacts/group/GroupMetaData.java
new file mode 100644
index 0000000..3fe87d8
--- /dev/null
+++ b/src/com/android/contacts/group/GroupMetaData.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2016 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.group;
+
+import android.content.ContentUris;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.ContactsContract;
+import android.text.TextUtils;
+
+import com.android.contacts.GroupMetaDataLoader;
+import com.android.contacts.common.model.AccountTypeManager;
+import com.android.contacts.common.model.account.AccountType;
+
+import com.google.common.base.Objects;
+
+/** Meta data for a contact group. */
+public final class GroupMetaData implements Parcelable {
+
+ public static final Creator<GroupMetaData> CREATOR = new Creator<GroupMetaData>() {
+
+ public GroupMetaData createFromParcel(Parcel in) {
+ return new GroupMetaData(in);
+ }
+
+ public GroupMetaData[] newArray(int size) {
+ return new GroupMetaData[size];
+ }
+ };
+
+ public final Uri uri;
+ public final String accountName;
+ public final String accountType;
+ public final String dataSet;
+ public final long groupId;
+ public final String groupName;
+ public final boolean readOnly;
+ public final boolean defaultGroup;
+ public final boolean favorites;
+ public final boolean editable;
+
+ /**
+ * @param cursor Cursor loaded with {@link GroupMetaDataLoader#COLUMNS} as the projection.
+ */
+ public GroupMetaData(Context context, Cursor cursor) {
+ final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(context);
+ final long groupId = cursor.getLong(GroupMetaDataLoader.GROUP_ID);
+ final Uri groupUri = ContentUris.withAppendedId(
+ ContactsContract.Groups.CONTENT_URI, groupId);
+ final AccountType accountType = accountTypeManager.getAccountType(
+ cursor.getString(GroupMetaDataLoader.ACCOUNT_TYPE),
+ cursor.getString(GroupMetaDataLoader.DATA_SET));
+ final boolean editable = accountType == null
+ ? false : accountType.isGroupMembershipEditable();
+
+ this.uri = groupUri;
+ this.accountName = cursor.getString(GroupMetaDataLoader.ACCOUNT_NAME);
+ this.accountType = cursor.getString(GroupMetaDataLoader.ACCOUNT_TYPE);
+ this.dataSet = cursor.getString(GroupMetaDataLoader.DATA_SET);
+ this.groupId = groupId;
+ this.groupName = cursor.getString(GroupMetaDataLoader.TITLE);
+ this.readOnly = getBoolean(cursor, GroupMetaDataLoader.IS_READ_ONLY);
+ this.defaultGroup = getBoolean(cursor, GroupMetaDataLoader.AUTO_ADD);
+ this.favorites = getBoolean(cursor, GroupMetaDataLoader.FAVORITES);
+ this.editable = editable;
+ }
+
+ private static boolean getBoolean(Cursor cursor, int columnIndex) {
+ return cursor.isNull(columnIndex) ? false : cursor.getInt(columnIndex) != 0;
+ }
+
+ private GroupMetaData(Parcel source) {
+ uri = source.readParcelable(Uri.class.getClassLoader());
+ accountName = source.readString();
+ accountType = source.readString();
+ dataSet = source.readString();
+ groupId = source.readLong();
+ groupName = source.readString();
+ readOnly = source.readInt() == 1;
+ defaultGroup = source.readInt() == 1;
+ favorites = source.readInt() == 1;
+ editable = source.readInt() == 1;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeParcelable(uri, 0);
+ dest.writeString(accountName);
+ dest.writeString(accountType);
+ dest.writeString(dataSet);
+ dest.writeLong(groupId);
+ dest.writeString(groupName);
+ dest.writeInt(readOnly ? 1 : 0);
+ dest.writeInt(defaultGroup ? 1 : 0);
+ dest.writeInt(favorites ? 1 : 0);
+ dest.writeInt(editable ? 1 : 0);
+ }
+
+ /** Whether all metadata fields are set. */
+ public boolean isValid() {
+ return uri != null
+ && !TextUtils.isEmpty(accountName)
+ && !TextUtils.isEmpty(groupName)
+ && groupId > 0;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("accountName", accountName)
+ .add("accountType", accountType)
+ .add("dataSet", dataSet)
+ .add("groupId", groupId)
+ .add("groupName", groupName)
+ .add("readOnly", readOnly)
+ .add("defaultGroup", defaultGroup)
+ .add("favorites", favorites)
+ .add("editable", editable)
+ .add("isValid", isValid())
+ .toString();
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/contacts/group/GroupMetadata.java b/src/com/android/contacts/group/GroupMetadata.java
deleted file mode 100644
index f3dfec24..0000000
--- a/src/com/android/contacts/group/GroupMetadata.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2016 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.group;
-
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-import com.android.contacts.common.model.account.AccountWithDataSet;
-
-/** Meta data for a contact group. */
-// TODO(wjang): consolidate with com.android.contacts.common.GroupMetaData;
-public final class GroupMetadata implements Parcelable {
-
- public static final Creator<GroupMetadata> CREATOR = new Creator<GroupMetadata>() {
-
- public GroupMetadata createFromParcel(Parcel in) {
- return new GroupMetadata(in);
- }
-
- public GroupMetadata[] newArray(int size) {
- return new GroupMetadata[size];
- }
- };
-
- // TODO(wjang): make them all final and add getters
- public Uri uri;
- public String accountName;
- public String accountType;
- public String dataSet;
- public long groupId = -1;
- public String groupName;
- public boolean readOnly;
- public boolean editable;
-
- public GroupMetadata() {
- }
-
- private GroupMetadata(Parcel source) {
- readFromParcel(source);
- }
-
- private void readFromParcel(Parcel source) {
- uri = source.readParcelable(Uri.class.getClassLoader());
- accountName = source.readString();
- accountType = source.readString();
- dataSet = source.readString();
- groupId = source.readLong();
- groupName = source.readString();
- readOnly = source.readInt() == 1;
- editable = source.readInt() == 1;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeParcelable(uri, 0);
- dest.writeString(accountName);
- dest.writeString(accountType);
- dest.writeString(dataSet);
- dest.writeLong(groupId);
- dest.writeString(groupName);
- dest.writeInt(readOnly ? 1 : 0);
- dest.writeInt(editable ? 1 : 0);
- }
-
- /** Whether all metadata fields are set. */
- public boolean isValid() {
- return uri != null
- && !TextUtils.isEmpty(accountName)
- && !TextUtils.isEmpty(groupName)
- && groupId > 0;
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public String toString() {
- return "GroupMetadata[uri=" + uri +
- " accountName=" + accountName +
- " accountType=" + accountType +
- " dataSet=" + dataSet +
- " groupId=" + groupId +
- " groupName=" + groupName +
- " readOnly=" + readOnly +
- " editable=" + editable +
- " isValid=" + isValid() +
- "]";
- }
-}
\ No newline at end of file
diff --git a/src/com/android/contacts/group/GroupUtil.java b/src/com/android/contacts/group/GroupUtil.java
index e01cc30..8976270 100644
--- a/src/com/android/contacts/group/GroupUtil.java
+++ b/src/com/android/contacts/group/GroupUtil.java
@@ -93,13 +93,13 @@
/** Returns an Intent to pick contacts to add to a group. */
public static Intent createPickMemberIntent(Context context,
- GroupMetadata groupMetadata, ArrayList<String> memberContactIds) {
+ GroupMetaData groupMetaData, ArrayList<String> memberContactIds) {
final Intent intent = new Intent(context, ContactSelectionActivity.class);
intent.setAction(Intent.ACTION_PICK);
intent.setType(Groups.CONTENT_TYPE);
- intent.putExtra(UiIntentActions.GROUP_ACCOUNT_NAME, groupMetadata.accountName);
- intent.putExtra(UiIntentActions.GROUP_ACCOUNT_TYPE, groupMetadata.accountType);
- intent.putExtra(UiIntentActions.GROUP_ACCOUNT_DATA_SET, groupMetadata.dataSet);
+ intent.putExtra(UiIntentActions.GROUP_ACCOUNT_NAME, groupMetaData.accountName);
+ intent.putExtra(UiIntentActions.GROUP_ACCOUNT_TYPE, groupMetaData.accountType);
+ intent.putExtra(UiIntentActions.GROUP_ACCOUNT_DATA_SET, groupMetaData.dataSet);
intent.putExtra(UiIntentActions.GROUP_CONTACT_IDS, memberContactIds);
return intent;
}
diff --git a/src/com/android/contacts/quickcontact/InvisibleContactUtil.java b/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
index fa1132b..c8bb98d 100644
--- a/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
+++ b/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
@@ -4,7 +4,6 @@
import com.google.common.collect.Iterables;
import com.android.contacts.ContactSaveService;
-import com.android.contacts.common.GroupMetaData;
import com.android.contacts.common.model.AccountTypeManager;
import com.android.contacts.common.model.Contact;
import com.android.contacts.common.model.RawContact;
@@ -16,6 +15,7 @@
import com.android.contacts.common.model.dataitem.DataItem;
import com.android.contacts.common.model.dataitem.DataKind;
import com.android.contacts.common.model.dataitem.GroupMembershipDataItem;
+import com.android.contacts.group.GroupMetaData;
import android.content.Context;
import android.content.Intent;
@@ -103,10 +103,10 @@
private static long getDefaultGroupId(List<GroupMetaData> groups) {
long defaultGroupId = -1;
for (GroupMetaData group : groups) {
- if (group.isDefaultGroup()) {
+ if (group.defaultGroup) {
// two default groups? return neither
if (defaultGroupId != -1) return -1;
- defaultGroupId = group.getGroupId();
+ defaultGroupId = group.groupId;
}
}
return defaultGroupId;