Remove deleted groups from GroupBrowserList

Change-Id: Iea7435c6b1f569dd8ac5416b35470b9ae2f48761
diff --git a/src/com/android/contacts/GroupMetaDataLoader.java b/src/com/android/contacts/GroupMetaDataLoader.java
index d900825..8533bb6 100644
--- a/src/com/android/contacts/GroupMetaDataLoader.java
+++ b/src/com/android/contacts/GroupMetaDataLoader.java
@@ -34,6 +34,7 @@
         Groups.AUTO_ADD,
         Groups.FAVORITES,
         Groups.GROUP_IS_READ_ONLY,
+        Groups.DELETED,
     };
 
     public final static int ACCOUNT_NAME = 0;
@@ -43,6 +44,7 @@
     public final static int AUTO_ADD = 4;
     public final static int FAVORITES = 5;
     public final static int IS_READ_ONLY = 6;
+    public final static int DELETED = 7;
 
     public GroupMetaDataLoader(Context context, Uri groupUri) {
         super(context, ensureIsGroupUri(groupUri), COLUMNS, Groups.ACCOUNT_TYPE + " NOT NULL AND "
diff --git a/src/com/android/contacts/activities/GroupDetailActivity.java b/src/com/android/contacts/activities/GroupDetailActivity.java
index 21900c6..c8f511b 100644
--- a/src/com/android/contacts/activities/GroupDetailActivity.java
+++ b/src/com/android/contacts/activities/GroupDetailActivity.java
@@ -43,6 +43,7 @@
                 R.id.group_detail_fragment);
         fragment.setListener(mFragmentListener);
         fragment.loadGroup(getIntent().getData());
+        fragment.closeActivityAfterDelete(true);
 
         ActionBar actionBar =  getActionBar();
         if (actionBar != null) {
diff --git a/src/com/android/contacts/group/GroupBrowseListFragment.java b/src/com/android/contacts/group/GroupBrowseListFragment.java
index 59b0cec..4443a53 100644
--- a/src/com/android/contacts/group/GroupBrowseListFragment.java
+++ b/src/com/android/contacts/group/GroupBrowseListFragment.java
@@ -196,6 +196,8 @@
             String accountType = mGroupListCursor.getString(GroupMetaDataLoader.ACCOUNT_TYPE);
             long groupId = mGroupListCursor.getLong(GroupMetaDataLoader.GROUP_ID);
             String title = mGroupListCursor.getString(GroupMetaDataLoader.TITLE);
+            boolean deleted =
+                    (mGroupListCursor.getInt(GroupMetaDataLoader.DELETED) == 1);
             boolean defaultGroup = mGroupListCursor.isNull(GroupMetaDataLoader.AUTO_ADD)
                     ? false
                     : mGroupListCursor.getInt(GroupMetaDataLoader.AUTO_ADD) != 0;
@@ -204,8 +206,8 @@
                     : mGroupListCursor.getInt(GroupMetaDataLoader.FAVORITES) != 0;
 
             // Don't show the "auto-added" (i.e. My Contacts) or "favorites" groups because
-            // they show up elsewhere in the app
-            if (defaultGroup || favorites) {
+            // they show up elsewhere in the app. Also skip groups that are marked as "deleted"
+            if (defaultGroup || favorites || deleted) {
                 continue;
             }
 
diff --git a/src/com/android/contacts/group/GroupDetailFragment.java b/src/com/android/contacts/group/GroupDetailFragment.java
index c4824ae..fe2605e 100644
--- a/src/com/android/contacts/group/GroupDetailFragment.java
+++ b/src/com/android/contacts/group/GroupDetailFragment.java
@@ -90,6 +90,7 @@
     private String mGroupName;
 
     private boolean mOptionsMenuEditable;
+    private boolean mCloseActivityAfterDelete;
 
     public GroupDetailFragment() {
     }
@@ -190,11 +191,20 @@
 
         @Override
         public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
-            bindGroupMetaData(data);
+            data.moveToPosition(-1);
+            if (data.moveToNext()) {
+                boolean deleted = data.getInt(GroupMetaDataLoader.DELETED) == 1;
+                if (!deleted) {
+                    bindGroupMetaData(data);
 
-            // Retrieve the list of members
-            configureAdapter(mGroupId);
-            startGroupMembersLoader();
+                    // Retrieve the list of members
+                    configureAdapter(mGroupId);
+                    startGroupMembersLoader();
+                    return;
+                }
+            }
+            updateSize(null);
+            updateTitle(null);
         }
 
         @Override
@@ -295,10 +305,15 @@
                 break;
             }
             case R.id.menu_delete_group: {
-                GroupDeletionDialogFragment.show(getFragmentManager(), mGroupId, mGroupName);
+                GroupDeletionDialogFragment.show(getFragmentManager(), mGroupId, mGroupName,
+                        mCloseActivityAfterDelete);
                 return true;
             }
         }
         return false;
     }
+
+    public void closeActivityAfterDelete(boolean closeActivity) {
+        mCloseActivityAfterDelete = closeActivity;
+    }
 }
diff --git a/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java b/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
index 44d31be..c9c1342 100644
--- a/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
+++ b/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
@@ -33,8 +33,15 @@
     private static final String ARG_GROUP_ID = "groupId";
     private static final String ARG_LABEL = "label";
 
-    public static void show(FragmentManager fragmentManager, long groupId, String label) {
-        GroupDeletionDialogFragment dialog = new GroupDeletionDialogFragment();
+    private boolean mEndActivity;
+
+    public GroupDeletionDialogFragment(boolean endActivity) {
+        mEndActivity = endActivity;
+    }
+
+    public static void show(FragmentManager fragmentManager, long groupId, String label,
+            boolean endActivity) {
+        GroupDeletionDialogFragment dialog = new GroupDeletionDialogFragment(endActivity);
         Bundle args = new Bundle();
         args.putLong(ARG_GROUP_ID, groupId);
         args.putString(ARG_LABEL, label);
@@ -69,5 +76,8 @@
 
         getActivity().startService(ContactSaveService.createGroupDeletionIntent(
                 getActivity(), groupId));
+        if (mEndActivity) {
+            getActivity().finish();
+        }
     }
 }