DO NOT MERGE Make labels view have grey app bar

Bug: 31268067

Test: manual
  - navigate b/w fragments + rotate screen
  - create a new label and delete a label
  - enter/exit edit mode of group fragment and contacts fragment

Change-Id: Ie4bc38456dae8840df3ae511c2fbbd0d336038bc
(cherry picked from commit 3dd13761f1c2c615004af129afa5ebc56efe8ada)
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index b810eec..3fc3c9d 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -54,6 +54,7 @@
 import com.android.contacts.common.util.AccountFilterUtil;
 import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
 import com.android.contacts.common.util.ImplicitIntentsUtil;
+import com.android.contacts.common.util.MaterialColorMapUtils;
 import com.android.contacts.common.util.ViewUtil;
 import com.android.contacts.editor.ContactEditorFragment;
 import com.android.contacts.editor.SelectAccountDialogFragment;
@@ -134,6 +135,7 @@
             // another fragment in navigation drawer, the current search/selection mode will be
             // overlaid by the action bar of the newly-created fragment.
             stopSearchAndSelection();
+            updateStatusBarBackground();
         }
 
         private void stopSearchAndSelection() {
@@ -170,7 +172,7 @@
             super.onDrawerStateChanged(newState);
             // Set transparent status bar when drawer starts to move.
             if (newState != DrawerLayout.STATE_IDLE) {
-                makeStatusBarTransparent();
+                updateStatusBarBackground();
             }
             if (mRunnable != null && newState == DrawerLayout.STATE_IDLE) {
                 mRunnable.run();
@@ -285,17 +287,23 @@
     protected void onResume() {
         super.onResume();
         if (mDrawer.isDrawerOpen(GravityCompat.START)) {
-            makeStatusBarTransparent();
+            updateStatusBarBackground();
         }
     }
 
-    private void makeStatusBarTransparent() {
-        // Avoid making status bar transparent when action bar's selection mode is on.
-        if (getWindow().getStatusBarColor() !=
-                ContextCompat.getColor(this, R.color.contextual_selection_bar_status_bar_color)
-                        && CompatUtils.isLollipopCompatible()) {
-            getWindow().setStatusBarColor(Color.TRANSPARENT);
+    public void updateStatusBarBackground() {
+        updateStatusBarBackground(/* color */ -1);
+    }
+
+    public void updateStatusBarBackground(int color) {
+        if (!CompatUtils.isLollipopCompatible()) return;
+        if (color == -1) {
+            mDrawer.setStatusBarBackgroundColor(MaterialColorMapUtils.getStatusBarColor(this));
+        } else {
+            mDrawer.setStatusBarBackgroundColor(color);
         }
+        mDrawer.invalidate();
+        getWindow().setStatusBarColor(Color.TRANSPARENT);
     }
 
     // Set up fragment manager to load groups and filters.
@@ -417,7 +425,7 @@
         return null;
     }
 
-    protected boolean isGroupView() {
+    public boolean isGroupView() {
         return mCurrentView == ContactsView.GROUP_VIEW;
     }
 
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 824d4ea..880aa63 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -43,9 +43,11 @@
 import android.widget.EditText;
 import android.widget.TextView;
 
+import com.android.contacts.ContactsDrawerActivity;
 import com.android.contacts.R;
 import com.android.contacts.activities.ActionBarAdapter.Listener.Action;
 import com.android.contacts.common.compat.CompatUtils;
+import com.android.contacts.common.util.MaterialColorMapUtils;
 import com.android.contacts.list.ContactsRequest;
 
 import java.util.ArrayList;
@@ -365,6 +367,8 @@
                 = (mSearchContainer.getParent() == null) == mSearchMode;
         final boolean isTabHeightChanging = isSearchModeChanging || isSelectionModeChanging;
 
+        // Update toolbar and status bar color.
+        mToolBarFrame.setBackgroundColor(MaterialColorMapUtils.getToolBarColor(mActivity));
         updateStatusBarColor(isSelectionModeChanging && !isSearchModeChanging);
 
         // When skipAnimation=true, it is possible that we will switch from search mode
@@ -494,12 +498,11 @@
                     mActivity, R.color.contextual_selection_bar_status_bar_color);
             runStatusBarAnimation(/* colorTo */ cabStatusBarColor);
         } else {
-            final int normalStatusBarColor = ContextCompat.getColor(
-                    mActivity, R.color.primary_color_dark);
             if (shouldAnimate) {
-                runStatusBarAnimation(/* colorTo */ normalStatusBarColor);
-            } else {
-                mActivity.getWindow().setStatusBarColor(normalStatusBarColor);
+                runStatusBarAnimation(/* colorTo */
+                        MaterialColorMapUtils.getStatusBarColor(mActivity));
+            } else if (mActivity instanceof ContactsDrawerActivity) {
+                ((ContactsDrawerActivity) mActivity).updateStatusBarBackground();
             }
         }
     }
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index e4dc56d..d5add16 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -27,6 +27,8 @@
 import android.content.Intent;
 import android.content.SyncStatusObserver;
 import android.content.IntentFilter;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -34,6 +36,7 @@
 import android.provider.ContactsContract.ProviderStatus;
 import android.support.design.widget.CoordinatorLayout;
 import android.support.design.widget.Snackbar;
+import android.support.v4.content.ContextCompat;
 import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.view.GravityCompat;
 import android.support.v4.widget.SwipeRefreshLayout;
@@ -692,11 +695,13 @@
     }
 
     private boolean isAllFragmentInSelectionMode() {
-        return mAllFragment.getActionBarAdapter().isSelectionMode();
+        return mAllFragment.getActionBarAdapter() != null
+                && mAllFragment.getActionBarAdapter().isSelectionMode();
     }
 
     private boolean isAllFragmentInSearchMode() {
-        return mAllFragment.getActionBarAdapter().isSearchMode();
+        return mAllFragment.getActionBarAdapter() != null
+                && mAllFragment.getActionBarAdapter().isSearchMode();
     }
 
     @Override
@@ -789,6 +794,7 @@
                 transaction.replace(
                         R.id.contacts_list_container, duplicatesFragment, TAG_DUPLICATES);
                 transaction.add(duplicatesUtilFragment, TAG_DUPLICATES_UTIL);
+                resetToolBarStatusBarColor();
             }
         }
         transaction.addToBackStack(TAG_SECOND_LEVEL);
@@ -814,6 +820,14 @@
         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(
+                ContextCompat.getColor(this, R.color.primary_color));
+        updateStatusBarBackground(ContextCompat.getColor(this, R.color.primary_color_dark));
     }
 
     @Override
diff --git a/src/com/android/contacts/common/util/MaterialColorMapUtils.java b/src/com/android/contacts/common/util/MaterialColorMapUtils.java
index a8fbf42..50d8f0f 100644
--- a/src/com/android/contacts/common/util/MaterialColorMapUtils.java
+++ b/src/com/android/contacts/common/util/MaterialColorMapUtils.java
@@ -16,13 +16,16 @@
 
 package com.android.contacts.common.util;
 
-import com.android.contacts.common.R;
+import com.android.contacts.ContactsDrawerActivity;
+import com.android.contacts.R;
 
+import android.app.Activity;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.Trace;
+import android.support.v4.content.ContextCompat;
 
 public class MaterialColorMapUtils {
     private final TypedArray sPrimaryColors;
@@ -177,4 +180,26 @@
 
         return H;
     }
+
+    /**
+     * Returns status bar color for group view and non-group views.
+     */
+    public static int getStatusBarColor(Activity activity) {
+        final boolean isGroupView = activity instanceof ContactsDrawerActivity
+                && ((ContactsDrawerActivity) activity).isGroupView();
+        return isGroupView
+                ? ContextCompat.getColor(activity, R.color.group_primary_color_dark)
+                : ContextCompat.getColor(activity, R.color.primary_color_dark);
+    }
+
+    /**
+     * Returns toolbar color for group view and non-group views.
+     */
+    public static int getToolBarColor(Activity activity) {
+        final boolean isGroupView = activity instanceof ContactsDrawerActivity
+                && ((ContactsDrawerActivity) activity).isGroupView();
+        return isGroupView
+                ? ContextCompat.getColor(activity, R.color.group_primary_color)
+                : ContextCompat.getColor(activity, R.color.primary_color);
+    }
 }