1e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov/*
2e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project
3e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov *
4e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
5e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * you may not use this file except in compliance with the License.
6e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * You may obtain a copy of the License at
7e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov *
8e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
9e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov *
10e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
11e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
12e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * See the License for the specific language governing permissions and
14e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * limitations under the License.
15e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov */
16e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
1718ffaa2561cc7dd2e3ef81737e6537931c0a9a11Dmitri Plotnikovpackage com.android.contacts.editor;
18e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
191ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.app.Activity;
20e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.content.Context;
21fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuanimport android.content.res.Resources;
22e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.database.Cursor;
23e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.GroupMembership;
2493a0025b87079e0d36431a2c096f96e145053a28Makoto Onukiimport android.text.TextUtils;
25e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.util.AttributeSet;
26e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.view.View;
27e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.view.View.OnClickListener;
28b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chuimport android.view.ViewGroup;
29e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.widget.AdapterView;
30e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.widget.AdapterView.OnItemClickListener;
31e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.widget.ArrayAdapter;
32b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chuimport android.widget.CheckedTextView;
33043fba637b421dcd554c634f769f0e883fb5ff8bBrian Attwellimport android.widget.ImageView;
34e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.widget.LinearLayout;
35e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.widget.ListPopupWindow;
36e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.widget.ListView;
37e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.widget.TextView;
38e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
39e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.GroupMetaDataLoader;
40e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R;
41ba09d4cc21d55181c1760e7994f0225939f4999dChiao Chengimport com.android.contacts.common.model.dataitem.DataKind;
42e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.interactions.GroupCreationDialogFragment;
43e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.interactions.GroupCreationDialogFragment.OnGroupCreatedListener;
44cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.model.RawContactDelta;
45738ff8623dc77dd91a1b9023861e924ba5e4c27eChiao Chengimport com.android.contacts.common.model.ValuesDelta;
46cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.model.RawContactModifier;
47619ac169e45bf547a2cbcd8a9775bb234f45c00fChiao Chengimport com.android.contacts.util.UiClosables;
48ba09d4cc21d55181c1760e7994f0225939f4999dChiao Chengimport com.google.common.base.Objects;
49e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng
50e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport java.util.ArrayList;
51e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
52e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov/**
53e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * An editor for group membership.  Displays the current group membership list and
54e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * brings up a dialog to change it.
55e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov */
56e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovpublic class GroupMembershipView extends LinearLayout
57e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        implements OnClickListener, OnItemClickListener {
58e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
591ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov    private static final int CREATE_NEW_GROUP_GROUP_ID = 133;
601ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov
61e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    public static final class GroupSelectionItem {
62e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        private final long mGroupId;
63e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        private final String mTitle;
64e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        private boolean mChecked;
65e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
66e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        public GroupSelectionItem(long groupId, String title, boolean checked) {
67e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            this.mGroupId = groupId;
68e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            this.mTitle = title;
69e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            mChecked = checked;
70e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
71e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
72e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        public long getGroupId() {
73e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            return mGroupId;
74e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
75e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
76e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        public boolean isChecked() {
77e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            return mChecked;
78e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
79e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
80e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        public void setChecked(boolean checked) {
81e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            mChecked = checked;
82e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
83e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
84e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        @Override
85e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        public String toString() {
86e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            return mTitle;
87e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
88e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
89e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
90b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu    /**
91b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu     * Extends the array adapter to show checkmarks on all but the last list item for
92b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu     * the group membership popup.  Note that this is highly specific to the fact that the
93b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu     * group_membership_list_item.xml is a CheckedTextView object.
94b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu     */
95b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu    private class GroupMembershipAdapter<T> extends ArrayAdapter<T> {
96b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu
97b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        public GroupMembershipAdapter(Context context, int textViewResourceId) {
98b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            super(context, textViewResourceId);
99b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        }
100b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu
101b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        public boolean getItemIsCheckable(int position) {
102b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            // Item is checkable if it is NOT the last one in the list
103b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            return position != getCount()-1;
104b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        }
105b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu
106b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        @Override
107b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        public int getItemViewType(int position) {
108b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            return getItemIsCheckable(position) ? 0 : 1;
109b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        }
110b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu
111b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        @Override
112b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        public int getViewTypeCount() {
113b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            return 2;
114b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        }
115b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu
116b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        @Override
117b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        public View getView(int position, View convertView, ViewGroup parent) {
118b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            final View itemView = super.getView(position, convertView, parent);
119d690dff231dd5a81b9bd7563838455f24e49c75cBrian Attwell            if (itemView == null) {
120d690dff231dd5a81b9bd7563838455f24e49c75cBrian Attwell                return null;
121d690dff231dd5a81b9bd7563838455f24e49c75cBrian Attwell            }
122b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu
123b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            // Hide the checkable drawable.  This assumes that the item views
124b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            // are CheckedTextView objects
125b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            final CheckedTextView checkedTextView = (CheckedTextView)itemView;
126b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            if (!getItemIsCheckable(position)) {
127b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                checkedTextView.setCheckMarkDrawable(null);
128b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            }
129d690dff231dd5a81b9bd7563838455f24e49c75cBrian Attwell            checkedTextView.setTextColor(mPrimaryTextColor);
130b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu
131b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            return checkedTextView;
132b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        }
133b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu    }
134b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu
135851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu    private RawContactDelta mState;
136e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    private Cursor mGroupMetaData;
137e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    private String mAccountName;
138e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    private String mAccountType;
1392b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    private String mDataSet;
140e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    private TextView mGroupList;
141b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu    private GroupMembershipAdapter<GroupSelectionItem> mAdapter;
142025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov    private long mDefaultGroupId;
143e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    private long mFavoritesGroupId;
144e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    private ListPopupWindow mPopup;
145e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    private DataKind mKind;
146ad9659e62604309b0d95b0a1f9b19fd6a33990e9Dmitri Plotnikov    private boolean mDefaultGroupVisibilityKnown;
147ad9659e62604309b0d95b0a1f9b19fd6a33990e9Dmitri Plotnikov    private boolean mDefaultGroupVisible;
148b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu    private boolean mCreatedNewGroup;
149e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
150fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan    private String mNoGroupString;
151fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan    private int mPrimaryTextColor;
152d690dff231dd5a81b9bd7563838455f24e49c75cBrian Attwell    private int mHintTextColor;
153fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan
154e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    public GroupMembershipView(Context context) {
155e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        super(context);
156e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
157e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
158e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    public GroupMembershipView(Context context, AttributeSet attrs) {
159e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        super(context, attrs);
160e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
161e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
16202bb1252aa990813fa9e86ad75c458acc15e6801Dmitri Plotnikov    @Override
163fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan    protected void onFinishInflate() {
164fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan        super.onFinishInflate();
165f140227beb6d9e78955a7676dc0dd3f793f72017Brian Attwell        Resources resources = getContext().getResources();
166fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan        mPrimaryTextColor = resources.getColor(R.color.primary_text_color);
167d690dff231dd5a81b9bd7563838455f24e49c75cBrian Attwell        mHintTextColor = resources.getColor(R.color.editor_disabled_text_color);
168f140227beb6d9e78955a7676dc0dd3f793f72017Brian Attwell        mNoGroupString = getContext().getString(R.string.group_edit_field_hint_text);
169fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan    }
170fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan
171fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan    @Override
17202bb1252aa990813fa9e86ad75c458acc15e6801Dmitri Plotnikov    public void setEnabled(boolean enabled) {
17302bb1252aa990813fa9e86ad75c458acc15e6801Dmitri Plotnikov        super.setEnabled(enabled);
17402bb1252aa990813fa9e86ad75c458acc15e6801Dmitri Plotnikov        if (mGroupList != null) {
17502bb1252aa990813fa9e86ad75c458acc15e6801Dmitri Plotnikov            mGroupList.setEnabled(enabled);
17602bb1252aa990813fa9e86ad75c458acc15e6801Dmitri Plotnikov        }
17702bb1252aa990813fa9e86ad75c458acc15e6801Dmitri Plotnikov    }
17802bb1252aa990813fa9e86ad75c458acc15e6801Dmitri Plotnikov
179e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    public void setKind(DataKind kind) {
180e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        mKind = kind;
181043fba637b421dcd554c634f769f0e883fb5ff8bBrian Attwell        final ImageView imageView = (ImageView) findViewById(R.id.kind_icon);
182043fba637b421dcd554c634f769f0e883fb5ff8bBrian Attwell        imageView.setContentDescription(getResources().getString(kind.titleRes));
183e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
184e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
185e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    public void setGroupMetaData(Cursor groupMetaData) {
186e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        this.mGroupMetaData = groupMetaData;
187e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        updateView();
188b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        // Open up the list of groups if a new group was just created.
189b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        if (mCreatedNewGroup) {
190b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            mCreatedNewGroup = false;
191b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            onClick(this); // This causes the popup to open.
192b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            if (mPopup != null) {
193b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                // Ensure that the newly created group is checked.
194b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                int position = mAdapter.getCount() - 2;
195b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                ListView listView = mPopup.getListView();
1969813b71d3a6a2e0baba96cda72ee55415e523166Jay Shrauner                if (listView != null && !listView.isItemChecked(position)) {
197b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                    // Newly created group is not checked, so check it.
198b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                    listView.setItemChecked(position, true);
199b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                    onItemClick(listView, null, position, listView.getItemIdAtPosition(position));
200b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                }
201b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu            }
202b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        }
203e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
204e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
205851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu    public void setState(RawContactDelta state) {
206e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        mState = state;
207851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu        mAccountType = mState.getAccountType();
208851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu        mAccountName = mState.getAccountName();
209851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu        mDataSet = mState.getDataSet();
210ad9659e62604309b0d95b0a1f9b19fd6a33990e9Dmitri Plotnikov        mDefaultGroupVisibilityKnown = false;
211b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        mCreatedNewGroup = false;
212e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        updateView();
213e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
214e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
215e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    private void updateView() {
21608d233405a0418073254356a772c9954998e1707Dmitri Plotnikov        if (mGroupMetaData == null || mGroupMetaData.isClosed() || mAccountType == null
21708d233405a0418073254356a772c9954998e1707Dmitri Plotnikov                || mAccountName == null) {
218e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            setVisibility(GONE);
219e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            return;
220e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
221e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
222e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        boolean accountHasGroups = false;
223025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov        mFavoritesGroupId = 0;
224025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov        mDefaultGroupId = 0;
225025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov
226e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        StringBuilder sb = new StringBuilder();
227e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        mGroupMetaData.moveToPosition(-1);
228e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        while (mGroupMetaData.moveToNext()) {
229e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            String accountName = mGroupMetaData.getString(GroupMetaDataLoader.ACCOUNT_NAME);
230e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            String accountType = mGroupMetaData.getString(GroupMetaDataLoader.ACCOUNT_TYPE);
2312b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro            String dataSet = mGroupMetaData.getString(GroupMetaDataLoader.DATA_SET);
2322b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro            if (accountName.equals(mAccountName) && accountType.equals(mAccountType)
2332b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro                    && Objects.equal(dataSet, mDataSet)) {
234e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                long groupId = mGroupMetaData.getLong(GroupMetaDataLoader.GROUP_ID);
235e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                if (!mGroupMetaData.isNull(GroupMetaDataLoader.FAVORITES)
236e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                        && mGroupMetaData.getInt(GroupMetaDataLoader.FAVORITES) != 0) {
237e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                    mFavoritesGroupId = groupId;
238025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov                } else if (!mGroupMetaData.isNull(GroupMetaDataLoader.AUTO_ADD)
239025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov                            && mGroupMetaData.getInt(GroupMetaDataLoader.AUTO_ADD) != 0) {
240025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov                    mDefaultGroupId = groupId;
241e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                } else {
242e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                    accountHasGroups = true;
243e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                }
244e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
245e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                // Exclude favorites from the list - they are handled with special UI (star)
2465d11ccd7894b8c53a6867f7aba0dbbad3fc00c90Dmitri Plotnikov                // Also exclude the default group.
2475d11ccd7894b8c53a6867f7aba0dbbad3fc00c90Dmitri Plotnikov                if (groupId != mFavoritesGroupId && groupId != mDefaultGroupId
2485d11ccd7894b8c53a6867f7aba0dbbad3fc00c90Dmitri Plotnikov                        && hasMembership(groupId)) {
249e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                    String title = mGroupMetaData.getString(GroupMetaDataLoader.TITLE);
25093a0025b87079e0d36431a2c096f96e145053a28Makoto Onuki                    if (!TextUtils.isEmpty(title)) {
25193a0025b87079e0d36431a2c096f96e145053a28Makoto Onuki                        if (sb.length() != 0) {
25293a0025b87079e0d36431a2c096f96e145053a28Makoto Onuki                            sb.append(", ");
25393a0025b87079e0d36431a2c096f96e145053a28Makoto Onuki                        }
25493a0025b87079e0d36431a2c096f96e145053a28Makoto Onuki                        sb.append(title);
255e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                    }
256e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                }
257e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            }
258e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
259e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
260e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        if (!accountHasGroups) {
261e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            setVisibility(GONE);
262e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            return;
263e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
264e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
265e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        if (mGroupList == null) {
266e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            mGroupList = (TextView) findViewById(R.id.group_list);
26782b49b8eb8a806393fc59833fab96f924e74e9d4Daniel Lehmann            mGroupList.setOnClickListener(this);
268e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
269e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
27002bb1252aa990813fa9e86ad75c458acc15e6801Dmitri Plotnikov        mGroupList.setEnabled(isEnabled());
271135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikov        if (sb.length() == 0) {
272fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan            mGroupList.setText(mNoGroupString);
273d690dff231dd5a81b9bd7563838455f24e49c75cBrian Attwell            mGroupList.setTextColor(mHintTextColor);
274135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikov        } else {
275135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikov            mGroupList.setText(sb);
276fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan            mGroupList.setTextColor(mPrimaryTextColor);
277135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikov        }
278e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        setVisibility(VISIBLE);
279ad9659e62604309b0d95b0a1f9b19fd6a33990e9Dmitri Plotnikov
280ad9659e62604309b0d95b0a1f9b19fd6a33990e9Dmitri Plotnikov        if (!mDefaultGroupVisibilityKnown) {
281ad9659e62604309b0d95b0a1f9b19fd6a33990e9Dmitri Plotnikov            // Only show the default group (My Contacts) if the contact is NOT in it
282ad9659e62604309b0d95b0a1f9b19fd6a33990e9Dmitri Plotnikov            mDefaultGroupVisible = mDefaultGroupId != 0 && !hasMembership(mDefaultGroupId);
283ad9659e62604309b0d95b0a1f9b19fd6a33990e9Dmitri Plotnikov            mDefaultGroupVisibilityKnown = true;
284ad9659e62604309b0d95b0a1f9b19fd6a33990e9Dmitri Plotnikov        }
285e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
286e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
287e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    @Override
288e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    public void onClick(View v) {
289619ac169e45bf547a2cbcd8a9775bb234f45c00fChiao Cheng        if (UiClosables.closeQuietly(mPopup)) {
2909813b71d3a6a2e0baba96cda72ee55415e523166Jay Shrauner            mPopup = null;
291e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            return;
292e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
293e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
294b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu        mAdapter = new GroupMembershipAdapter<GroupSelectionItem>(
2952b95e624bc35851987fb621091f20263d635d31aDmitri Plotnikov                getContext(), R.layout.group_membership_list_item);
296e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
297e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        mGroupMetaData.moveToPosition(-1);
298e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        while (mGroupMetaData.moveToNext()) {
299e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            String accountName = mGroupMetaData.getString(GroupMetaDataLoader.ACCOUNT_NAME);
300e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            String accountType = mGroupMetaData.getString(GroupMetaDataLoader.ACCOUNT_TYPE);
3012b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro            String dataSet = mGroupMetaData.getString(GroupMetaDataLoader.DATA_SET);
3022b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro            if (accountName.equals(mAccountName) && accountType.equals(mAccountType)
3032b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro                    && Objects.equal(dataSet, mDataSet)) {
304e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                long groupId = mGroupMetaData.getLong(GroupMetaDataLoader.GROUP_ID);
305ad9659e62604309b0d95b0a1f9b19fd6a33990e9Dmitri Plotnikov                if (groupId != mFavoritesGroupId
306ad9659e62604309b0d95b0a1f9b19fd6a33990e9Dmitri Plotnikov                        && (groupId != mDefaultGroupId || mDefaultGroupVisible)) {
307e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                    String title = mGroupMetaData.getString(GroupMetaDataLoader.TITLE);
308e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                    boolean checked = hasMembership(groupId);
309e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                    mAdapter.add(new GroupSelectionItem(groupId, title, checked));
310e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                }
311e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            }
312e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
313e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
3141ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov        mAdapter.add(new GroupSelectionItem(CREATE_NEW_GROUP_GROUP_ID,
3151ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov                getContext().getString(R.string.create_group_item_label), false));
3161ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov
317b93d626ebf95f3381184bf8a560630bcdedce9b9Dmitri Plotnikov        mPopup = new ListPopupWindow(getContext(), null);
318e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        mPopup.setAnchorView(mGroupList);
319e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        mPopup.setAdapter(mAdapter);
3205d11ccd7894b8c53a6867f7aba0dbbad3fc00c90Dmitri Plotnikov        mPopup.setModal(true);
3216d172800844a3f23a918a099c90c10701159bf77Daniel Lehmann        mPopup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
322e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        mPopup.show();
323e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
324e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        ListView listView = mPopup.getListView();
325e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
326d85b98628ad7434d51b4bbf7c92b41917fd234e7Katherine Kuan        listView.setOverScrollMode(OVER_SCROLL_ALWAYS);
327e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        int count = mAdapter.getCount();
328e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        for (int i = 0; i < count; i++) {
329e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            listView.setItemChecked(i, mAdapter.getItem(i).isChecked());
330e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
331e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
332e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        listView.setOnItemClickListener(this);
333e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
334e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
335e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    @Override
336e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    protected void onDetachedFromWindow() {
337e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        super.onDetachedFromWindow();
338619ac169e45bf547a2cbcd8a9775bb234f45c00fChiao Cheng        UiClosables.closeQuietly(mPopup);
339619ac169e45bf547a2cbcd8a9775bb234f45c00fChiao Cheng        mPopup = null;
340e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
341e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
342e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    @Override
343e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
344e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        ListView list = (ListView) parent;
345e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        int count = mAdapter.getCount();
3461ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov
3471ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov        if (list.isItemChecked(count - 1)) {
3481ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov            list.setItemChecked(count - 1, false);
3491ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov            createNewGroup();
3501ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov            return;
3511ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov        }
3521ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov
353e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        for (int i = 0; i < count; i++) {
354e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            mAdapter.getItem(i).setChecked(list.isItemChecked(i));
355e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
356e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
357e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        // First remove the memberships that have been unchecked
358e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        ArrayList<ValuesDelta> entries = mState.getMimeEntries(GroupMembership.CONTENT_ITEM_TYPE);
359e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        if (entries != null) {
360e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            for (ValuesDelta entry : entries) {
361025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov                if (!entry.isDelete()) {
362851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu                    Long groupId = entry.getGroupRowId();
363025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov                    if (groupId != null && groupId != mFavoritesGroupId
364a61e0fbb6e057f9c3b8bcf4b68ae1df41d90f3baDmitri Plotnikov                            && (groupId != mDefaultGroupId || mDefaultGroupVisible)
365025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov                            && !isGroupChecked(groupId)) {
366025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov                        entry.markDeleted();
367025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov                    }
368e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                }
369e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            }
370e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
371e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
372e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        // Now add the newly selected items
373e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        for (int i = 0; i < count; i++) {
374e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            GroupSelectionItem item = mAdapter.getItem(i);
375e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            long groupId = item.getGroupId();
376e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            if (item.isChecked() && !hasMembership(groupId)) {
377851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu                ValuesDelta entry = RawContactModifier.insertChild(mState, mKind);
378f54c9f2c84a88e046e29123fa65b19040e5a457bJay Shrauner                if (entry != null) {
379f54c9f2c84a88e046e29123fa65b19040e5a457bJay Shrauner                    entry.setGroupRowId(groupId);
380f54c9f2c84a88e046e29123fa65b19040e5a457bJay Shrauner                }
381e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            }
382e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
383e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
384e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        updateView();
385e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
386e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
387e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    private boolean isGroupChecked(long groupId) {
388e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        int count = mAdapter.getCount();
389e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        for (int i = 0; i < count; i++) {
390e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            GroupSelectionItem item = mAdapter.getItem(i);
391e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            if (groupId == item.getGroupId()) {
392e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                return item.isChecked();
393e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            }
394e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
395e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        return false;
396e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
397e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
398e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    private boolean hasMembership(long groupId) {
399025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov        if (groupId == mDefaultGroupId && mState.isContactInsert()) {
400025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov            return true;
401025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov        }
402025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov
403e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        ArrayList<ValuesDelta> entries = mState.getMimeEntries(GroupMembership.CONTENT_ITEM_TYPE);
404e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        if (entries != null) {
405e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            for (ValuesDelta values : entries) {
406025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov                if (!values.isDelete()) {
407851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu                    Long id = values.getGroupRowId();
408025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov                    if (id != null && id == groupId) {
409025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov                        return true;
410025838f0a4b7c19640035a89d42512b892c503baDmitri Plotnikov                    }
411e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov                }
412e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov            }
413e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        }
414e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        return false;
415e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
4161ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov
4171ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov    private void createNewGroup() {
418619ac169e45bf547a2cbcd8a9775bb234f45c00fChiao Cheng        UiClosables.closeQuietly(mPopup);
419619ac169e45bf547a2cbcd8a9775bb234f45c00fChiao Cheng        mPopup = null;
4201ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov
4211ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov        GroupCreationDialogFragment.show(
422b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                ((Activity) getContext()).getFragmentManager(),
423b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                mAccountType,
424b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                mAccountName,
425b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                mDataSet,
426b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                new OnGroupCreatedListener() {
427b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                    @Override
428b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                    public void onGroupCreated() {
429b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                        mCreatedNewGroup = true;
430b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                    }
431b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu                });
4321ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov    }
433b03e6a266e3a4181d22e6be4f3fa0c5dd158d7e1Maurice Chu
434e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov}
435