Merge "Add backstack tag for assistant helpers" into ub-contactsdialer-i-dev
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 34b4f40..52065c4 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -69,7 +69,6 @@
 import com.android.contacts.group.GroupMembersFragment;
 import com.android.contacts.group.GroupNameEditDialogFragment;
 import com.android.contacts.group.GroupUtil;
-import com.android.contacts.interactions.ContactDeletionInteraction;
 import com.android.contacts.list.AccountFilterActivity;
 import com.android.contacts.list.ContactListFilter;
 import com.android.contacts.list.ContactListFilterController;
@@ -98,6 +97,7 @@
 import com.android.contactsbind.FeatureHighlightHelper;
 import com.android.contactsbind.HelpUtils;
 import com.android.contactsbind.ObjectFactory;
+
 import com.google.common.util.concurrent.Futures;
 
 import java.util.Collections;
@@ -130,6 +130,7 @@
     public static final String TAG_ASSISTANT = "contacts-assistant";
     public static final String TAG_SECOND_LEVEL = "second-level";
     public static final String TAG_THIRD_LEVEL = "third-level";
+    public static final String TAG_ASSISTANT_HELPER = "assistant-helper";
     public static final String TAG_DUPLICATES = "DuplicatesFragment";
     public static final String TAG_DUPLICATES_UTIL = "DuplicatesUtilFragment";
 
@@ -821,10 +822,11 @@
     }
 
     private void onBackPressedAssistantView() {
-        if (!popThirdLevel()) {
+        if (!isInThirdLevel()) {
             switchToAllContacts();
         } else {
             setDrawerLockMode(/* enabled */ true);
+            super.onBackPressed();
         }
     }
 
@@ -974,6 +976,7 @@
 
         final FragmentManager fragmentManager =  getFragmentManager();
         final FragmentTransaction transaction = fragmentManager.beginTransaction();
+        popSecondLevel();
         if (isGroupView()) {
             mMembersFragment = GroupMembersFragment.newInstance(mGroupUri);
             transaction.replace(
@@ -998,9 +1001,7 @@
     }
 
     public void switchToAllContacts() {
-        if (isInSecondLevel()) {
-            popSecondLevel();
-        }
+        popSecondLevel();
         mShouldSwitchToAllContacts = false;
         mCurrentView = ContactsView.ALL_CONTACTS;
         mDrawerFragment.setNavigationItemChecked(ContactsView.ALL_CONTACTS);
@@ -1018,18 +1019,6 @@
                 mContactListFilterController, AppCompatActivity.RESULT_OK, intent);
     }
 
-    private boolean popThirdLevel() {
-        return getFragmentManager().popBackStackImmediate(
-                TAG_THIRD_LEVEL, FragmentManager.POP_BACK_STACK_INCLUSIVE);
-    }
-
-    private void popSecondLevel() {
-        getFragmentManager().popBackStackImmediate(
-                TAG_SECOND_LEVEL, FragmentManager.POP_BACK_STACK_INCLUSIVE);
-        mMembersFragment = null;
-        resetToolBarStatusBarColor();
-    }
-
     // Reset toolbar and status bar color to Contacts theme color.
     private void resetToolBarStatusBarColor() {
         findViewById(R.id.toolbar_frame).setBackgroundColor(
@@ -1223,7 +1212,33 @@
     }
 
     public boolean isInSecondLevel() {
-        return isGroupView() || isAssistantView();
+        return isLastBackStackTag(TAG_SECOND_LEVEL);
+    }
+
+    private boolean isInThirdLevel() {
+        return isLastBackStackTag(TAG_THIRD_LEVEL);
+    }
+
+    private boolean isLastBackStackTag(String tag) {
+        final int count = getFragmentManager().getBackStackEntryCount();
+        if (count > 0) {
+            final FragmentManager.BackStackEntry last =
+                    getFragmentManager().getBackStackEntryAt(count - 1);
+            if (tag == null) {
+                return last.getName() == null;
+            }
+            return tag.equals(last.getName());
+        }
+        return false;
+    }
+
+    private void popSecondLevel() {
+        getFragmentManager().popBackStackImmediate(
+                TAG_ASSISTANT_HELPER, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+        getFragmentManager().popBackStackImmediate(
+                TAG_SECOND_LEVEL, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+        mMembersFragment = null;
+        resetToolBarStatusBarColor();
     }
 
     public void closeDrawer() {