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);
+ }
}