Move 5 overflow menu items to hamburger menu

- basically get rid of the overflow menu in PeopleActivity
  when not in selection mode (and when exporting database)
- put "settings" and "help & feedback" below groups
- hide group count per UX

We will then work on displaying account list in hamburger menu
and moving import/export to settings.

Bug 27687799

Change-Id: I2d65f78abaadc300263fdb6b4e7a72b24f36975b
diff --git a/res/drawable/ic_menu_blocked_numbers.xml b/res/drawable/ic_menu_blocked_numbers.xml
new file mode 100644
index 0000000..9e03397
--- /dev/null
+++ b/res/drawable/ic_menu_blocked_numbers.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z"/>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_menu_duplicates.xml b/res/drawable/ic_menu_duplicates.xml
new file mode 100644
index 0000000..a604d47
--- /dev/null
+++ b/res/drawable/ic_menu_duplicates.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/>
+</vector>
diff --git a/res/drawable/ic_menu_filter.xml b/res/drawable/ic_menu_filter.xml
new file mode 100644
index 0000000..5a38952
--- /dev/null
+++ b/res/drawable/ic_menu_filter.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z"/>
+</vector>
diff --git a/res/drawable/ic_menu_group_add.xml b/res/drawable/ic_menu_group_add.xml
new file mode 100644
index 0000000..786d3e5
--- /dev/null
+++ b/res/drawable/ic_menu_group_add.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
+</vector>
diff --git a/res/drawable/ic_menu_import_export.xml b/res/drawable/ic_menu_import_export.xml
new file mode 100644
index 0000000..9a143c0
--- /dev/null
+++ b/res/drawable/ic_menu_import_export.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>
+</vector>
diff --git a/res/drawable/ic_menu_label.xml b/res/drawable/ic_menu_label.xml
new file mode 100644
index 0000000..05e665f
--- /dev/null
+++ b/res/drawable/ic_menu_label.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5.01 3 5.9 3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12l-4.37-6.16z"/>
+</vector>
diff --git a/res/menu/activity_main_drawer.xml b/res/menu/activity_main_drawer.xml
index 0a0eef2..469a7b8 100644
--- a/res/menu/activity_main_drawer.xml
+++ b/res/menu/activity_main_drawer.xml
@@ -18,11 +18,38 @@
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <group android:id="@+id/misc">
+    <group android:id="@+id/nav_utilities">
+        <item
+            android:id="@+id/nav_contacts_filter"
+            android:icon="@drawable/ic_menu_filter"
+            android:title="@string/menu_contacts_filter" />
+        <item
+            android:id="@+id/nav_import_export"
+            android:icon="@drawable/ic_menu_import_export"
+            android:title="@string/menu_import_export"/>
+        <item
+            android:id="@+id/nav_accounts"
+            android:icon="@drawable/ic_account_circle_black_24dp"
+            android:title="@string/menu_accounts"/>
+        <item
+            android:id="@+id/nav_blocked_numbers"
+            android:icon="@drawable/ic_menu_blocked_numbers"
+            android:title="@string/menu_blocked_numbers"/>
+        <item
+            android:id="@+id/nav_find_duplicates"
+            android:icon="@drawable/ic_menu_duplicates"
+            android:title="@string/menu_duplicates"/>
+    </group>
+
+    <group android:id="@+id/nav_misc">
         <item
             android:id="@+id/nav_settings"
             android:icon="@drawable/ic_menu_settings"
             android:title="@string/menu_settings"/>
+        <item
+            android:id="@+id/nav_help"
+            android:icon="@drawable/ic_menu_help"
+            android:title="@string/menu_help"/>
     </group>
 
 </menu>
diff --git a/res/menu/people_options.xml b/res/menu/people_options.xml
index 7bcd750..46d6856 100644
--- a/res/menu/people_options.xml
+++ b/res/menu/people_options.xml
@@ -22,22 +22,6 @@
         contacts:showAsAction="ifRoom" />
 
     <item
-        android:id="@+id/menu_contacts_filter"
-        android:title="@string/menu_contacts_filter" />
-
-    <item
-        android:id="@+id/menu_import_export"
-        android:title="@string/menu_import_export" />
-
-    <item
-        android:id="@+id/menu_blocked_numbers"
-        android:title="@string/menu_blocked_numbers"/>
-
-    <item
-        android:id="@+id/menu_accounts"
-        android:title="@string/menu_accounts" />
-
-    <item
         android:id="@+id/export_database"
         android:title="@string/menu_export_database"
         android:visible="false"
@@ -55,8 +39,4 @@
         android:id="@+id/menu_share"
         android:title="@string/menu_share" />
 
-    <item
-        android:id="@+id/menu_duplicates"
-        android:title="@string/menu_duplicates" />
-
 </menu>
diff --git a/res/values/ids.xml b/res/values/ids.xml
index 88a64c8..b0470b5 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -44,6 +44,12 @@
     <!-- An ID to be used for contents of a custom dialog so that its state be preserved -->
     <item type="id" name="custom_dialog_content" />
 
-    <!-- Menu ID for the contact groups -->
+    <!-- Menu group ID for settings and help & feedback  -->
+    <item type="id" name="nav_misc" />
+
+    <!-- Menu group ID for the contact groups -->
     <item type="id" name="nav_groups" />
+
+    <!-- Menu group ID for "create new group" -->
+    <item type="id" name="nav_create_groups" />
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 711caae..2e1b857 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -145,7 +145,7 @@
     <string name="menu_new_contact_action_bar">Add Contact</string>
 
     <!-- Menu item (in the action bar) that creates a new group [CHAR LIMIT=30] -->
-    <string name="menu_new_group_action_bar">Add Group</string>
+    <string name="menu_new_group_action_bar">Create new...</string>
 
     <!-- Confirmation dialog for unlinking contacts into multiple instances [CHAR LIMIT=NONE] -->
     <string name="splitConfirmation">Unlink this contact into multiple contacts?</string>
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 4a09cd1..5b2d52a 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -343,13 +343,23 @@
         mNavigationView.setNavigationItemSelectedListener(this);
 
         final Menu menu = mNavigationView.getMenu();
-        if (HelpUtils.isHelpAndFeedbackAvailable()) {
-            final MenuItem menuItem = menu.add(/* groupId */ R.id.misc, /* itemId */ R.id.nav_help,
-                    /* order */ Menu.NONE, /* titleRes */ R.string.menu_help);
-            menuItem.setIcon(R.drawable.ic_menu_help);
+
+        final boolean showBlockedNumbers = PhoneCapabilityTester.isPhone(this)
+                && ContactsUtils.FLAG_N_FEATURE
+                && BlockedNumberContractCompat.canCurrentUserBlockNumbers(this);
+
+        if (!showBlockedNumbers) {
+            menu.removeItem(R.id.nav_blocked_numbers);
         }
 
-        final String FAVORITE_TAG = "tab-pager-favorite";
+        if (Assistants.getDuplicatesActivityIntent(this) == null) {
+            menu.removeItem(R.id.nav_find_duplicates);
+        }
+
+        if (!HelpUtils.isHelpAndFeedbackAvailable()) {
+            menu.removeItem(R.id.nav_help);
+        }
+
         final String ALL_TAG = "tab-pager-all";
         final String GROUPS_TAG = "groups";
 
@@ -896,17 +906,34 @@
 
         // Add each group
         for (GroupListItem groupListItem : groupListItems) {
-            final String title = groupListItem.getMemberCount() == 0 ? groupListItem.getTitle()
-                    : getString(R.string.group_name_menu_item, groupListItem.getTitle(),
-                            groupListItem.getMemberCount());
+            final String title = groupListItem.getTitle();
             final MenuItem menuItem = menu.add(R.id.nav_groups, Menu.NONE, Menu.NONE, title);
             menuItem.setIntent(GroupUtil.createViewGroupIntent(this, groupListItem.getGroupId()));
+            menuItem.setIcon(R.drawable.ic_menu_label);
         }
 
+        menu.removeGroup(R.id.nav_create_groups);
         // Create a menu item to add new groups
-        final MenuItem menuItem = menu.add(R.id.nav_groups, Menu.NONE, Menu.NONE,
+        final MenuItem menuItem = menu.add(R.id.nav_create_groups, Menu.NONE, Menu.NONE,
                 getString(R.string.menu_new_group_action_bar));
         menuItem.setIntent(GroupUtil.createAddGroupIntent(this));
+        menuItem.setIcon(R.drawable.ic_menu_group_add);
+
+        // Add misc menu items below the group of groups menu items
+        addMiscMenuItems();
+    }
+
+    private void addMiscMenuItems() {
+        final Menu menu = mNavigationView.getMenu();
+        menu.removeGroup(R.id.nav_misc);
+        final MenuItem settingsItem = menu.add(R.id.nav_misc, R.id.nav_settings, Menu.NONE,
+                R.string.menu_settings);
+        settingsItem.setIcon(R.drawable.ic_menu_settings);
+        if (HelpUtils.isHelpAndFeedbackAvailable()) {
+            final MenuItem helpItem = menu.add(R.id.nav_misc, R.id.nav_help, Menu.NONE,
+                    R.string.menu_help);
+            helpItem.setIcon(R.drawable.ic_menu_help);
+        }
     }
 
     @Override
@@ -1092,30 +1119,9 @@
             return false;
         }
 
-        // Get references to individual menu items in the menu
-        final MenuItem contactsFilterMenu = menu.findItem(R.id.menu_contacts_filter);
-
         final boolean isSearchOrSelectionMode = mActionBarAdapter.isSearchMode()
                 || mActionBarAdapter.isSelectionMode();
-        if (isSearchOrSelectionMode) {
-            contactsFilterMenu.setVisible(false);
-        } else {
-            switch (getTabPositionForTextDirection(mActionBarAdapter.getCurrentTab())) {
-                case TabState.ALL:
-                    contactsFilterMenu.setVisible(true);
-                    break;
-            }
-        }
-        final boolean showMiscOptions = !isSearchOrSelectionMode;
-        final boolean showBlockedNumbers = PhoneCapabilityTester.isPhone(this)
-                && ContactsUtils.FLAG_N_FEATURE
-                && BlockedNumberContractCompat.canCurrentUserBlockNumbers(this);
-        makeMenuItemVisible(menu, R.id.menu_search, showMiscOptions);
-        makeMenuItemVisible(menu, R.id.menu_import_export, showMiscOptions);
-        makeMenuItemVisible(menu, R.id.menu_accounts, showMiscOptions);
-        makeMenuItemVisible(menu, R.id.menu_blocked_numbers, showMiscOptions && showBlockedNumbers);
-        makeMenuItemVisible(menu, R.id.menu_duplicates,
-                showMiscOptions && Assistants.getDuplicatesActivityIntent(this) != null);
+        makeMenuItemVisible(menu, R.id.menu_search, !isSearchOrSelectionMode);
 
         final boolean showSelectedContactOptions = mActionBarAdapter.isSelectionMode()
                 && mAllFragment.getSelectedContactIds().size() != 0;
@@ -1162,50 +1168,21 @@
                 }
                 return true;
             }
-            case R.id.menu_contacts_filter: {
-                AccountFilterUtil.startAccountFilterActivityForResult(
-                        this, SUBACTIVITY_ACCOUNT_FILTER,
-                        mContactListFilterController.getFilter());
-                return true;
-            }
             case R.id.menu_search: {
                 onSearchRequested();
                 return true;
             }
-            case R.id.menu_share:
+            case R.id.menu_share: {
                 shareSelectedContacts();
                 return true;
-            case R.id.menu_join:
+            }
+            case R.id.menu_join: {
                 joinSelectedContacts();
                 return true;
-            case R.id.menu_delete:
+            }
+            case R.id.menu_delete: {
                 deleteSelectedContacts();
                 return true;
-            case R.id.menu_import_export: {
-                showImportExportDialogFragment();
-                return true;
-            }
-            case R.id.menu_accounts: {
-                final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
-                intent.putExtra(Settings.EXTRA_AUTHORITIES, new String[] {
-                    ContactsContract.AUTHORITY
-                });
-                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
-                ImplicitIntentsUtil.startActivityInAppIfPossible(this, intent);
-                return true;
-            }
-            case R.id.menu_blocked_numbers: {
-                final Intent intent = TelecomManagerUtil.createManageBlockedNumbersIntent(
-                        (TelecomManager) getSystemService(Context.TELECOM_SERVICE));
-                if (intent != null) {
-                    startActivity(intent);
-                }
-                return true;
-            }
-            case R.id.menu_duplicates: {
-                ImplicitIntentsUtil.startActivityInAppIfPossible(this,
-                        Assistants.getDuplicatesActivityIntent(this));
-                return true;
             }
             case R.id.export_database: {
                 final Intent intent = new Intent("com.android.providers.contacts.DUMP_DATABASE");
@@ -1226,6 +1203,28 @@
             startActivity(new Intent(this, ContactsPreferenceActivity.class));
         } else if (id == R.id.nav_help) {
             HelpUtils.launchHelpAndFeedbackForMainScreen(this);
+        } else if (id == R.id.nav_contacts_filter) {
+            AccountFilterUtil.startAccountFilterActivityForResult(
+                    this, SUBACTIVITY_ACCOUNT_FILTER,
+                    mContactListFilterController.getFilter());
+        } else if (id == R.id.nav_import_export) {
+            showImportExportDialogFragment();
+        } else if (id == R.id.nav_accounts) {
+            final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
+            intent.putExtra(Settings.EXTRA_AUTHORITIES, new String[] {
+                    ContactsContract.AUTHORITY
+            });
+            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+            ImplicitIntentsUtil.startActivityInAppIfPossible(this, intent);
+        } else if (id == R.id.nav_blocked_numbers) {
+            final Intent intent = TelecomManagerUtil.createManageBlockedNumbersIntent(
+                    (TelecomManager) getSystemService(Context.TELECOM_SERVICE));
+            if (intent != null) {
+                startActivity(intent);
+            }
+        } else if (id == R.id.nav_find_duplicates) {
+            ImplicitIntentsUtil.startActivityInAppIfPossible(this,
+                    Assistants.getDuplicatesActivityIntent(this));
         } else if (item.getIntent() != null) {
             ImplicitIntentsUtil.startActivityInApp(this, item.getIntent());
         } else {