diff --git a/res/drawable/action_bar_dropshadow.xml b/res/drawable/action_bar_dropshadow.xml
new file mode 100644
index 0000000..dd85877
--- /dev/null
+++ b/res/drawable/action_bar_dropshadow.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2017 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:shape="rectangle">
+    <gradient
+        android:angle="270"
+        android:startColor="#4D000000"
+        android:endColor="@android:color/transparent"
+        android:type="linear" />
+    <size android:height="8dp" />
+</shape>
\ No newline at end of file
diff --git a/res/layout/app_details.xml b/res/layout/app_details.xml
index 5ffeec5..8cfa8b9 100644
--- a/res/layout/app_details.xml
+++ b/res/layout/app_details.xml
@@ -17,30 +17,24 @@
 
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/app_snippet"
-    style="@style/EntityHeader"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:layout_gravity="center_horizontal|top"
-    android:orientation="vertical"
-    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-    android:paddingTop="24dp"
-    android:paddingBottom="24dp"
-    android:clipChildren="false"
-    android:clipToPadding="false">
+    android:orientation="vertical">
 
     <!-- App snippet with buttons -->
     <RelativeLayout
+        android:id="@+id/app_snippet"
+        style="@style/EntityHeader"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:paddingStart="8dp"
-        android:clipChildren="false"
-        android:clipToPadding="false">
+        android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+        android:paddingEnd="0dp"
+        android:paddingTop="24dp"
+        android:paddingBottom="24dp">
 
         <FrameLayout android:id="@+id/app_icon_frame"
-                     android:layout_width="80dp"
-                     android:layout_height="80dp"
+                     android:layout_width="56dp"
+                     android:layout_height="56dp"
                      android:clipChildren="false"
                      android:clipToPadding="false">
             <ImageView
@@ -54,8 +48,7 @@
                 android:layout_width="22dp"
                 android:layout_height="22dp"
                 android:layout_gravity="end|bottom"
-                android:layout_margin="8dp"
-                android:visibility="gone"
+                android:layout_margin="4dp"
                 android:elevation="20dp"
                 android:background="@drawable/ic_instant_apps_badge_bg"
                 android:src="@drawable/ic_instant_apps_badge" />
@@ -70,19 +63,22 @@
 
             <ImageButton
                 android:id="@+id/right_button"
-                style="@android:style/Widget.Material.Button.Borderless"
+                style="?android:attr/actionOverflowButtonStyle"
                 android:layout_width="wrap_content"
                 android:layout_weight="1"
                 android:layout_height="0dp"
+                android:minWidth="@dimen/min_tap_target_size"
                 android:src="@drawable/ic_settings_24dp"
                 android:tint="?android:attr/colorAccent"/>
 
             <ImageButton
                 android:id="@+id/left_button"
-                style="@android:style/Widget.Material.Button.Borderless"
+                style="?android:attr/actionOverflowButtonStyle"
                 android:layout_width="wrap_content"
                 android:layout_weight="1"
                 android:layout_height="0dp"
+                android:minWidth="@dimen/min_tap_target_size"
+                android:src="@null"
                 android:tint="?android:attr/colorAccent"/>
 
         </LinearLayout>
@@ -131,4 +127,9 @@
 
     </RelativeLayout>
 
+    <!-- Drop shadow -->
+    <View android:layout_width="match_parent"
+          android:layout_height="5dp"
+          android:background="@drawable/action_bar_dropshadow"/>
+
 </LinearLayout>
\ No newline at end of file
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 09f7cda..8173d8a 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -22,6 +22,7 @@
     <dimen name="action_bar_switch_padding">16dip</dimen>
 
     <dimen name="app_icon_size">40dip</dimen>
+    <dimen name="min_tap_target_size">48dp</dimen>
     <dimen name="screen_margin_sides">64dip</dimen>
     <dimen name="screen_margin_top">72dip</dimen>
     <dimen name="screen_margin_bottom">48dip</dimen>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index e9d25ff..bae36b3 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -416,7 +416,7 @@
     <style name="TextAppearance.EntityHeaderTitle"
            parent="@android:style/TextAppearance.Material.Subhead">
         <item name="android:textColor">?android:attr/textColorPrimary</item>
-        <item name="android:textSize">24sp</item>
+        <item name="android:textSize">16sp</item>
     </style>
 
     <style name="AppActionPrimaryButton" parent="android:Widget.Material.Button.Colored"/>
diff --git a/src/com/android/settings/applications/AppHeaderController.java b/src/com/android/settings/applications/AppHeaderController.java
index f3a086b..29acaa4 100644
--- a/src/com/android/settings/applications/AppHeaderController.java
+++ b/src/com/android/settings/applications/AppHeaderController.java
@@ -18,25 +18,25 @@
 
 import android.annotation.IdRes;
 import android.annotation.UserIdInt;
+import android.app.ActionBar;
+import android.app.Activity;
 import android.app.Fragment;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageInfo;
 import android.content.pm.ResolveInfo;
-import android.content.res.Resources;
-import android.graphics.Outline;
-import android.graphics.drawable.AdaptiveIconDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.UserHandle;
 import android.support.annotation.IntDef;
+import android.support.annotation.VisibleForTesting;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.ViewOutlineProvider;
 import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.TextView;
+
 import com.android.settings.AppHeader;
 import com.android.settings.R;
 import com.android.settings.Utils;
@@ -69,7 +69,6 @@
     private final Fragment mFragment;
     private final int mMetricsCategory;
     private final View mAppHeader;
-    private final int mIconElevation;
 
     private Drawable mIcon;
     private CharSequence mLabel;
@@ -96,8 +95,6 @@
             mAppHeader = LayoutInflater.from(fragment.getContext())
                     .inflate(R.layout.app_details, null /* root */);
         }
-        mIconElevation = mContext.getResources()
-            .getDimensionPixelSize(R.dimen.launcher_icon_elevation);
     }
 
     public AppHeaderController setIcon(Drawable icon) {
@@ -164,39 +161,10 @@
     }
 
     /**
-     * Binds app header view and data from {@code PackageInfo} and {@code AppEntry}.
-     */
-    public void bindAppHeader(PackageInfo packageInfo, ApplicationsState.AppEntry appEntry) {
-        final String versionName = packageInfo == null ? null : packageInfo.versionName;
-        final Resources res = mAppHeader.getResources();
-
-        // Set Icon
-        final ImageView iconView = (ImageView) mAppHeader.findViewById(R.id.app_detail_icon);
-        if (appEntry.icon != null) {
-            iconView.setImageDrawable(appEntry.icon.getConstantState().newDrawable(res));
-        }
-
-        // Set application name.
-        final TextView labelView = (TextView) mAppHeader.findViewById(R.id.app_detail_title);
-        labelView.setText(appEntry.label);
-
-        // Version number of application
-        final TextView appVersion = (TextView) mAppHeader.findViewById(R.id.app_detail_summary);
-
-        if (!TextUtils.isEmpty(versionName)) {
-            appVersion.setSelected(true);
-            appVersion.setVisibility(View.VISIBLE);
-            appVersion.setText(res.getString(R.string.version_text, String.valueOf(versionName)));
-        } else {
-            appVersion.setVisibility(View.INVISIBLE);
-        }
-    }
-
-    /**
      * Done mutating appheader, rebinds everything and return a new {@link LayoutPreference}.
      */
-    public LayoutPreference done(Context context) {
-        final LayoutPreference pref = new LayoutPreference(context, done());
+    public LayoutPreference done(Activity activity, Context uiContext) {
+        final LayoutPreference pref = new LayoutPreference(uiContext, done(activity));
         // Makes sure it's the first preference onscreen.
         pref.setOrder(-1000);
         pref.setKey(PREF_KEY_APP_HEADER);
@@ -204,17 +172,11 @@
     }
 
     /**
-     * Done mutating appheader, rebinds everything.
-     */
-    public View done() {
-        return done(true);
-    }
-
-    /**
      * Done mutating appheader, rebinds everything (optionally skip rebinding buttons).
      */
-    public View done(boolean rebindActions) {
-        ImageView iconView = (ImageView) mAppHeader.findViewById(R.id.app_detail_icon);
+    public View done(Activity activity, boolean rebindActions) {
+        styleActionBar(activity);
+        ImageView iconView = mAppHeader.findViewById(R.id.app_detail_icon);
         if (iconView != null) {
             iconView.setImageDrawable(mIcon);
             ImageView badgeView = mAppHeader.findViewById(R.id.app_icon_instant_apps_badge);
@@ -239,12 +201,39 @@
     /**
      * Only binds app header with button actions.
      */
-    public void bindAppHeaderButtons() {
-        ImageButton leftButton = (ImageButton) mAppHeader.findViewById(R.id.left_button);
-        ImageButton rightButton = (ImageButton) mAppHeader.findViewById(R.id.right_button);
+    public AppHeaderController bindAppHeaderButtons() {
+        ImageButton leftButton = mAppHeader.findViewById(R.id.left_button);
+        ImageButton rightButton = mAppHeader.findViewById(R.id.right_button);
 
         bindButton(leftButton, mLeftAction);
         bindButton(rightButton, mRightAction);
+        return this;
+    }
+
+    public AppHeaderController styleActionBar(Activity activity) {
+        if (activity == null) {
+            Log.w(TAG, "No activity, cannot style actionbar.");
+            return this;
+        }
+        final ActionBar actionBar = activity.getActionBar();
+        if (actionBar == null) {
+            Log.w(TAG, "No actionbar, cannot style actionbar.");
+            return this;
+        }
+        final Drawable appHeaderBackground =
+                mAppHeader.findViewById(R.id.app_snippet).getBackground();
+        actionBar.setBackgroundDrawable(appHeaderBackground);
+        actionBar.setElevation(0);
+
+        return this;
+    }
+
+    /**
+     * Done mutating appheader, rebinds everything.
+     */
+    @VisibleForTesting
+    View done(Activity activity) {
+        return done(activity, true /* rebindActions */);
     }
 
     private void bindButton(ImageButton button, @ActionType int action) {
@@ -328,7 +317,7 @@
     }
 
     private void setText(@IdRes int id, CharSequence text) {
-        TextView textView = (TextView) mAppHeader.findViewById(id);
+        TextView textView = mAppHeader.findViewById(id);
         if (textView != null) {
             textView.setText(text);
             textView.setVisibility(TextUtils.isEmpty(text) ? View.GONE : View.VISIBLE);
diff --git a/src/com/android/settings/applications/AppInfoWithHeader.java b/src/com/android/settings/applications/AppInfoWithHeader.java
index 768a726..2c9599b 100644
--- a/src/com/android/settings/applications/AppInfoWithHeader.java
+++ b/src/com/android/settings/applications/AppInfoWithHeader.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.applications;
 
+import static com.android.settings.applications.AppHeaderController.ActionType;
+
 import android.app.Activity;
 import android.os.Bundle;
 import android.support.v7.preference.Preference;
@@ -24,8 +26,6 @@
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.applications.AppUtils;
 
-import static com.android.settings.applications.AppHeaderController.ActionType;
-
 public abstract class AppInfoWithHeader extends AppInfoBase {
 
     private boolean mCreated;
@@ -41,16 +41,16 @@
         if (mPackageInfo == null) return;
         final Activity activity = getActivity();
         final Preference pref = FeatureFactory.getFactory(activity)
-            .getApplicationFeatureProvider(activity)
-            .newAppHeaderController(this, null /* appHeader */)
-            .setIcon(mPackageInfo.applicationInfo.loadIcon(mPm))
-            .setLabel(mPackageInfo.applicationInfo.loadLabel(mPm))
-            .setSummary(mPackageInfo)
-            .setIsInstantApp(AppUtils.isInstant(mPackageInfo.applicationInfo))
-            .setPackageName(mPackageName)
-            .setUid(mPackageInfo.applicationInfo.uid)
-            .setButtonActions(ActionType.ACTION_APP_INFO, ActionType.ACTION_NONE)
-            .done(getPrefContext());
+                .getApplicationFeatureProvider(activity)
+                .newAppHeaderController(this, null /* appHeader */)
+                .setIcon(mPackageInfo.applicationInfo.loadIcon(mPm))
+                .setLabel(mPackageInfo.applicationInfo.loadLabel(mPm))
+                .setSummary(mPackageInfo)
+                .setIsInstantApp(AppUtils.isInstant(mPackageInfo.applicationInfo))
+                .setPackageName(mPackageName)
+                .setUid(mPackageInfo.applicationInfo.uid)
+                .setButtonActions(ActionType.ACTION_APP_INFO, ActionType.ACTION_NONE)
+                .done(activity, getPrefContext());
         getPreferenceScreen().addPreference(pref);
     }
 }
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 7510146..09771f2 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -16,8 +16,9 @@
 
 package com.android.settings.applications;
 
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
 import android.Manifest.permission;
-import android.annotation.IdRes;
 import android.app.Activity;
 import android.app.ActivityManager;
 import android.app.AlertDialog;
@@ -115,8 +116,6 @@
 import java.util.List;
 import java.util.Set;
 
-import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-
 /**
  * Activity to display application information from Settings. This activity presents
  * extended information associated with a package like code, data, total size, permissions
@@ -413,12 +412,13 @@
         mHeader = (LayoutPreference) findPreference(KEY_HEADER);
         mActionButtons = (LayoutPreference) findPreference(KEY_ACTION_BUTTONS);
         FeatureFactory.getFactory(activity)
-            .getApplicationFeatureProvider(activity)
-            .newAppHeaderController(this, mHeader.findViewById(R.id.app_snippet))
-            .setPackageName(mPackageName)
-            .setButtonActions(AppHeaderController.ActionType.ACTION_STORE_DEEP_LINK,
-                AppHeaderController.ActionType.ACTION_APP_PREFERENCE)
-            .bindAppHeaderButtons();
+                .getApplicationFeatureProvider(activity)
+                .newAppHeaderController(this, mHeader.findViewById(R.id.app_snippet))
+                .setPackageName(mPackageName)
+                .setButtonActions(AppHeaderController.ActionType.ACTION_STORE_DEEP_LINK,
+                        AppHeaderController.ActionType.ACTION_APP_PREFERENCE)
+                .styleActionBar(activity)
+                .bindAppHeaderButtons();
         prepareUninstallAndStop();
 
         mNotificationPreference = findPreference(KEY_NOTIFICATION);
@@ -590,7 +590,7 @@
             .setIcon(mAppEntry)
             .setSummary(summary)
             .setIsInstantApp(isInstantApp)
-            .done(false /* rebindActions */);
+            .done(activity, false /* rebindActions */);
         mVersionPreference.setSummary(getString(R.string.version_text, pkgInfo.versionName));
     }
 
diff --git a/src/com/android/settings/applications/ProcessStatsDetail.java b/src/com/android/settings/applications/ProcessStatsDetail.java
index 9b6f41e..c23da04 100644
--- a/src/com/android/settings/applications/ProcessStatsDetail.java
+++ b/src/com/android/settings/applications/ProcessStatsDetail.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.applications;
 
+import static com.android.settings.applications.AppHeaderController.ActionType;
+
 import android.app.Activity;
 import android.app.ActivityManager;
 import android.app.ActivityManager.RunningServiceInfo;
@@ -58,8 +60,6 @@
 import java.util.HashMap;
 import java.util.List;
 
-import static com.android.settings.applications.AppHeaderController.ActionType;
-
 public class ProcessStatsDetail extends SettingsPreferenceFragment {
 
     private static final String TAG = "ProcessStatsDetail";
@@ -137,7 +137,7 @@
                 ? mApp.mUiTargetApp.uid
                 : UserHandle.USER_NULL)
             .setButtonActions(ActionType.ACTION_APP_INFO, ActionType.ACTION_NONE)
-            .done(getPrefContext());
+            .done(activity, getPrefContext());
         getPreferenceScreen().addPreference(pref);
     }
 
diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java
index 0431ce5..e98ca20 100644
--- a/src/com/android/settings/datausage/AppDataUsage.java
+++ b/src/com/android/settings/datausage/AppDataUsage.java
@@ -14,6 +14,8 @@
 
 package com.android.settings.datausage;
 
+import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
+
 import android.app.Activity;
 import android.app.LoaderManager;
 import android.content.Context;
@@ -57,8 +59,6 @@
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
-import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
-
 public class AppDataUsage extends DataUsageBase implements Preference.OnPreferenceChangeListener,
         DataSaverBackend.Listener {
 
@@ -362,7 +362,7 @@
             .setUid(uid)
             .setButtonActions(AppHeaderController.ActionType.ACTION_APP_INFO,
                 AppHeaderController.ActionType.ACTION_NONE)
-            .done(getPrefContext());
+            .done(activity, getPrefContext());
         getPreferenceScreen().addPreference(pref);
     }
 
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 2f8e28e..0c798a6 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -17,16 +17,12 @@
 package com.android.settings.fuelgauge;
 
 import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
 import android.app.admin.DevicePolicyManager;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.BatteryStats;
 import android.os.Bundle;
-import android.os.SystemClock;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.support.annotation.VisibleForTesting;
@@ -179,7 +175,7 @@
     @VisibleForTesting
     void initHeader() {
         final View appSnippet = mHeaderPreference.findViewById(R.id.app_snippet);
-        final Context context = getContext();
+        final Activity context = getActivity();
         final Bundle bundle = getArguments();
         AppHeaderController controller = FeatureFactory.getFactory(context)
                 .getApplicationFeatureProvider(context)
@@ -203,7 +199,7 @@
             controller.setSummary(getString(Utils.getInstallationStatus(mAppEntry.info)));
         }
 
-        controller.done(true /* rebindActions */);
+        controller.done(context, true /* rebindActions */);
     }
 
     @Override
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index e359da6..8f7f2c5 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -49,7 +49,6 @@
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
-import java.util.Objects;
 
 /** These settings are per app, so should not be returned in global search results. */
 public class AppNotificationSettings extends NotificationSettingsBase {
@@ -109,8 +108,9 @@
             }
         }.execute();
 
-        final Preference pref = FeatureFactory.getFactory(getActivity())
-                .getApplicationFeatureProvider(getActivity())
+        final Activity activity = getActivity();
+        final Preference pref = FeatureFactory.getFactory(activity)
+                .getApplicationFeatureProvider(activity)
                 .newAppHeaderController(this /* fragment */, null /* appHeader */)
                 .setIcon(mAppRow.icon)
                 .setLabel(mAppRow.label)
@@ -118,7 +118,7 @@
                 .setUid(mAppRow.uid)
                 .setButtonActions(AppHeaderController.ActionType.ACTION_APP_INFO,
                         AppHeaderController.ActionType.ACTION_NOTIF_PREFERENCE)
-                .done(getPrefContext());
+                .done(activity, getPrefContext());
         getPreferenceScreen().addPreference(pref);
 
         if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) {
diff --git a/src/com/android/settings/notification/ChannelNotificationSettings.java b/src/com/android/settings/notification/ChannelNotificationSettings.java
index bec4845..c115672 100644
--- a/src/com/android/settings/notification/ChannelNotificationSettings.java
+++ b/src/com/android/settings/notification/ChannelNotificationSettings.java
@@ -21,6 +21,7 @@
 import static android.app.NotificationManager.IMPORTANCE_MIN;
 import static android.app.NotificationManager.IMPORTANCE_NONE;
 
+import android.app.Activity;
 import android.app.Notification;
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
@@ -111,8 +112,9 @@
             setupBlockAndImportance();
             updateDependents();
         }
-        final Preference pref = FeatureFactory.getFactory(getActivity())
-                .getApplicationFeatureProvider(getActivity())
+        final Activity activity = getActivity();
+        final Preference pref = FeatureFactory.getFactory(activity)
+                .getApplicationFeatureProvider(activity)
                 .newAppHeaderController(this /* fragment */, null /* appHeader */)
                 .setIcon(mAppRow.icon)
                 .setLabel(mChannel.getName())
@@ -121,7 +123,7 @@
                 .setUid(mAppRow.uid)
                 .setButtonActions(AppHeaderController.ActionType.ACTION_APP_INFO,
                         AppHeaderController.ActionType.ACTION_NOTIF_PREFERENCE)
-                .done(getPrefContext());
+                .done(activity, getPrefContext());
         getPreferenceScreen().addPreference(pref);
 
         if (mAppRow.settingsIntent != null) {
diff --git a/tests/robotests/src/com/android/settings/applications/AppHeaderControllerTest.java b/tests/robotests/src/com/android/settings/applications/AppHeaderControllerTest.java
index 0d878ed..030978f 100644
--- a/tests/robotests/src/com/android/settings/applications/AppHeaderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppHeaderControllerTest.java
@@ -17,6 +17,15 @@
 package com.android.settings.applications;
 
 
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.ActionBar;
 import android.app.Activity;
 import android.app.Fragment;
 import android.content.Context;
@@ -24,6 +33,7 @@
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.ResolveInfo;
+import android.graphics.drawable.Drawable;
 import android.os.UserHandle;
 import android.support.v7.preference.Preference;
 import android.view.LayoutInflater;
@@ -34,7 +44,6 @@
 import com.android.settings.R;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
-import com.android.settingslib.applications.ApplicationsState;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -45,14 +54,6 @@
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class AppHeaderControllerTest {
@@ -60,11 +61,9 @@
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private Context mContext;
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private ApplicationsState.AppEntry mAppEntry;
+    private Activity mActivity;
     @Mock
     private Fragment mFragment;
-    @Mock
-    private View mAppHeader;
 
     private Context mShadowContext;
     private LayoutInflater mLayoutInflater;
@@ -85,7 +84,7 @@
     @Test
     public void testBuildView_constructedWithoutView_shouldCreateNewView() {
         mController = new AppHeaderController(mShadowContext, mFragment, null);
-        View view = mController.done();
+        View view = mController.done(mActivity);
 
         assertThat(view).isNotNull();
     }
@@ -93,7 +92,7 @@
     @Test
     public void testBuildView_withContext_shouldBuildPreference() {
         mController = new AppHeaderController(mShadowContext, mFragment, null);
-        Preference preference = mController.done(mShadowContext);
+        Preference preference = mController.done(mActivity, mShadowContext);
 
         assertThat(preference instanceof LayoutPreference).isTrue();
     }
@@ -102,7 +101,7 @@
     public void testBuildView_constructedWithView_shouldReturnSameView() {
         View inputView = mLayoutInflater.inflate(R.layout.app_details, null /* root */);
         mController = new AppHeaderController(mShadowContext, mFragment, inputView);
-        View view = mController.done();
+        View view = mController.done(mActivity);
 
         assertThat(view).isSameAs(inputView);
     }
@@ -111,14 +110,14 @@
     public void bindViews_shouldBindAllData() {
         final String testString = "test";
         final View appHeader = mLayoutInflater.inflate(R.layout.app_details, null /* root */);
-        final TextView label = (TextView) appHeader.findViewById(R.id.app_detail_title);
-        final TextView version = (TextView) appHeader.findViewById(R.id.app_detail_summary);
+        final TextView label = appHeader.findViewById(R.id.app_detail_title);
+        final TextView version = appHeader.findViewById(R.id.app_detail_summary);
 
         mController = new AppHeaderController(mShadowContext, mFragment, appHeader);
         mController.setLabel(testString);
         mController.setSummary(testString);
         mController.setIcon(mShadowContext.getDrawable(R.drawable.ic_add));
-        mController.done();
+        mController.done(mActivity);
 
         assertThat(label.getText()).isEqualTo(testString);
         assertThat(version.getText()).isEqualTo(testString);
@@ -139,7 +138,7 @@
         mController.setButtonActions(
                 AppHeaderController.ActionType.ACTION_APP_PREFERENCE,
                 AppHeaderController.ActionType.ACTION_NONE);
-        mController.done();
+        mController.done(mActivity);
 
         assertThat(appLinks.findViewById(R.id.left_button).getVisibility())
                 .isEqualTo(View.VISIBLE);
@@ -164,7 +163,7 @@
         mController.setButtonActions(
                 AppHeaderController.ActionType.ACTION_APP_PREFERENCE,
                 AppHeaderController.ActionType.ACTION_NONE);
-        mController.done();
+        mController.done(mActivity);
 
         assertThat(appLinks.findViewById(R.id.left_button).getVisibility())
                 .isEqualTo(View.GONE);
@@ -183,7 +182,7 @@
         mController.setButtonActions(
                 AppHeaderController.ActionType.ACTION_STORE_DEEP_LINK,
                 AppHeaderController.ActionType.ACTION_NONE);
-        mController.done();
+        mController.done(mActivity);
 
         assertThat(appLinks.findViewById(R.id.left_button).getVisibility())
                 .isEqualTo(View.GONE);
@@ -201,7 +200,7 @@
                 .setButtonActions(
                         AppHeaderController.ActionType.ACTION_APP_INFO,
                         AppHeaderController.ActionType.ACTION_NONE);
-        mController.done();
+        mController.done(mActivity);
 
         assertThat(appLinks.findViewById(R.id.left_button).getVisibility())
                 .isEqualTo(View.GONE);
@@ -221,7 +220,7 @@
                 .setButtonActions(
                         AppHeaderController.ActionType.ACTION_APP_INFO,
                         AppHeaderController.ActionType.ACTION_NOTIF_PREFERENCE);
-        mController.done();
+        mController.done(mActivity);
 
         assertThat(appLinks.findViewById(R.id.left_button).getVisibility())
                 .isEqualTo(View.VISIBLE);
@@ -242,7 +241,7 @@
                 .setButtonActions(
                         AppHeaderController.ActionType.ACTION_APP_INFO,
                         AppHeaderController.ActionType.ACTION_NOTIF_PREFERENCE);
-        mController.done();
+        mController.done(mActivity);
 
         assertThat(appLinks.findViewById(R.id.left_button).getContentDescription())
                 .isEqualTo("App Info");
@@ -258,7 +257,7 @@
                 .setButtonActions(
                         AppHeaderController.ActionType.ACTION_NOTIF_PREFERENCE,
                         AppHeaderController.ActionType.ACTION_NONE);
-        mController.done();
+        mController.done(mActivity);
 
         assertThat(appLinks.findViewById(R.id.left_button).getVisibility())
                 .isEqualTo(View.VISIBLE);
@@ -272,7 +271,7 @@
     public void instantApps_normalAppsDontGetLabel() {
         final View appHeader = mLayoutInflater.inflate(R.layout.app_details, null /* root */);
         mController = new AppHeaderController(mContext, mFragment, appHeader);
-        mController.done();
+        mController.done(mActivity);
         assertThat(appHeader.findViewById(R.id.install_type).getVisibility())
                 .isEqualTo(View.GONE);
     }
@@ -283,7 +282,7 @@
     public void instantApps_normalAppsDontGetInstantAppsBadge() {
         final View appHeader = mLayoutInflater.inflate(R.layout.app_details, null /* root */);
         mController = new AppHeaderController(mContext, mFragment, appHeader);
-        mController.done();
+        mController.done(mActivity);
         assertThat(appHeader.findViewById(R.id.app_icon_instant_apps_badge).getVisibility())
                 .isEqualTo(View.GONE);
     }
@@ -294,8 +293,8 @@
         final View appHeader = mLayoutInflater.inflate(R.layout.app_details, null /* root */);
         mController = new AppHeaderController(mContext, mFragment, appHeader);
         mController.setIsInstantApp(true);
-        mController.done();
-        TextView label = (TextView)appHeader.findViewById(R.id.install_type);
+        mController.done(mActivity);
+        TextView label = appHeader.findViewById(R.id.install_type);
         ImageView badgeView = appHeader.findViewById(R.id.app_icon_instant_apps_badge);
         assertThat(badgeView.getVisibility()).isEqualTo(View.VISIBLE);
         assertThat(label.getVisibility()).isEqualTo(View.VISIBLE);
@@ -306,6 +305,29 @@
     }
 
     @Test
+    public void styleActionBar_invalidObjects_shouldNotCrash() {
+        mController = new AppHeaderController(mShadowContext, mFragment, null);
+        mController.styleActionBar(null);
+
+        when(mActivity.getActionBar()).thenReturn(null);
+        mController.styleActionBar(mActivity);
+
+        verify(mActivity).getActionBar();
+    }
+
+    @Test
+    public void styleActionBar_setElevationAndBackground() {
+        final ActionBar actionBar = mActivity.getActionBar();
+
+        mController = new AppHeaderController(mShadowContext, mFragment, null);
+        mController.styleActionBar(mActivity);
+
+        verify(actionBar).setElevation(0);
+        verify(actionBar).setBackgroundDrawable(any(Drawable.class));
+    }
+
+
+    @Test
     public void initAppHeaderController_appHeaderNull_useFragmentContext() {
         mController = new AppHeaderController(mContext, mFragment, null);
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 03892a3..801034c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -17,7 +17,18 @@
 package com.android.settings.fuelgauge;
 
 import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
 
+import android.app.Activity;
 import android.app.Fragment;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
@@ -25,12 +36,12 @@
 import android.graphics.drawable.Drawable;
 import android.os.BatteryStats;
 import android.os.Bundle;
-import android.os.UserHandle;
 import android.view.View;
 
 import com.android.internal.os.BatterySipper;
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.SettingsActivity;
+import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.applications.AppHeaderController;
 import com.android.settings.applications.LayoutPreference;
@@ -46,22 +57,10 @@
 import org.mockito.MockitoAnnotations;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
-import org.robolectric.RobolectricTestRunner;
 import org.robolectric.annotation.Config;
 import org.robolectric.util.ReflectionHelpers;
 
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class AdvancedPowerUsageDetailTest {
     private static final String APP_LABEL = "app label";
@@ -77,6 +76,8 @@
 
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private Context mContext;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Activity mActivity;
     @Mock
     private AppHeaderController mAppHeaderController;
     @Mock
@@ -86,8 +87,6 @@
     @Mock
     private ApplicationsState.AppEntry mAppEntry;
     @Mock
-    private Drawable mIconDrawable;
-    @Mock
     private Bundle mBundle;
     @Mock
     private BatteryEntry mBatteryEntry;
@@ -111,6 +110,7 @@
 
         mFragment = spy(new AdvancedPowerUsageDetail());
         doReturn(mContext).when(mFragment).getContext();
+        doReturn(mActivity).when(mFragment).getActivity();
         doReturn(SUMMARY).when(mFragment).getString(anyInt());
         doReturn(APP_LABEL).when(mBundle).getString(anyString());
         doReturn(mBundle).when(mFragment).getArguments();
