diff --git a/res/drawable-nodpi/auto_awesome_battery b/res/drawable-nodpi/auto_awesome_battery
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/res/drawable-nodpi/auto_awesome_battery
diff --git a/res/layout/smart_battery_header.xml b/res/layout/smart_battery_header.xml
deleted file mode 100644
index 960f04a..0000000
--- a/res/layout/smart_battery_header.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2018 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.
-  -->
-
-<!-- Entity header -->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/entity_header"
-    style="@style/EntityHeader"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:minHeight="200dp"
-    android:paddingBottom="32dp"
-    android:paddingStart="@dimen/preference_no_icon_padding_start"
-    android:paddingTop="24dp">
-
-</LinearLayout>
diff --git a/res/layout/video_preference.xml b/res/layout/video_preference.xml
index 9ab52ae..55bc7a5 100644
--- a/res/layout/video_preference.xml
+++ b/res/layout/video_preference.xml
@@ -23,11 +23,11 @@
     android:clipToPadding="false"
     android:gravity="center"
     android:minHeight="?android:attr/listPreferredItemHeightSmall"
-    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
     android:orientation="horizontal">
 
     <com.android.settings.widget.AspectRatioFrameLayout
-        android:layout_width="240dp"
+        android:id="@+id/video_container"
+        android:layout_width="wrap_content"
         android:layout_height="240dp"
         android:padding="@dimen/gesture_animation_padding">
 
diff --git a/res/raw/auto_awesome_battery.mp4 b/res/raw/auto_awesome_battery.mp4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/res/raw/auto_awesome_battery.mp4
diff --git a/res/xml/smart_battery_detail.xml b/res/xml/smart_battery_detail.xml
index e7fb9f7..e1246ed 100644
--- a/res/xml/smart_battery_detail.xml
+++ b/res/xml/smart_battery_detail.xml
@@ -21,18 +21,16 @@
     android:key="smart_battery_detail"
     android:title="@string/smart_battery_manager_title">
 
-    <!-- TODO(b/71722498): Add header back, otherwise also remove smart_battery_header
-    <com.android.settings.applications.LayoutPreference
-        android:key="header_view"
-        android:layout="@layout/smart_battery_header"
-        android:selectable="false"
-        android:order="-10000"/>
-     -->
+    <com.android.settings.widget.VideoPreference
+        android:key="auto_awesome_battery"
+        settings:animation="@raw/auto_awesome_battery"
+        settings:preview="@drawable/auto_awesome_battery"/>
 
     <SwitchPreference
         android:key="smart_battery"
         android:title="@string/smart_battery_title"
-        android:summary="@string/smart_battery_summary"/>
+        android:summary="@string/smart_battery_summary"
+        settings:allowDividerAbove="true"/>
 
     <SwitchPreference
         android:key="auto_restriction"
diff --git a/src/com/android/settings/widget/AspectRatioFrameLayout.java b/src/com/android/settings/widget/AspectRatioFrameLayout.java
index bb4c28b..52dea0f 100644
--- a/src/com/android/settings/widget/AspectRatioFrameLayout.java
+++ b/src/com/android/settings/widget/AspectRatioFrameLayout.java
@@ -16,6 +16,7 @@
 
 import android.content.Context;
 import android.content.res.TypedArray;
+import android.support.annotation.VisibleForTesting;
 import android.util.AttributeSet;
 import android.widget.FrameLayout;
 
@@ -30,7 +31,8 @@
 
     private static final float ASPECT_RATIO_CHANGE_THREASHOLD = 0.01f;
 
-    private float mAspectRatio = 1.0f;
+    @VisibleForTesting
+    float mAspectRatio = 1.0f;
 
     public AspectRatioFrameLayout(Context context) {
         this(context, null);
@@ -51,6 +53,10 @@
         }
     }
 
+    public void setAspectRatio(float aspectRadio) {
+        mAspectRatio = aspectRadio;
+    }
+
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@@ -65,11 +71,9 @@
             // Close enough, skip.
             return;
         }
-        if (aspectRatioDiff > 0) {
-            width = (int) (height * mAspectRatio);
-        } else {
-            height = (int) (width / mAspectRatio);
-        }
+
+        width = (int) (height * mAspectRatio);
+
         super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
                 MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
     }
diff --git a/src/com/android/settings/widget/VideoPreference.java b/src/com/android/settings/widget/VideoPreference.java
index a3ac6a3..03f8f0b 100644
--- a/src/com/android/settings/widget/VideoPreference.java
+++ b/src/com/android/settings/widget/VideoPreference.java
@@ -22,6 +22,7 @@
 import android.graphics.SurfaceTexture;
 import android.media.MediaPlayer;
 import android.net.Uri;
+import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceViewHolder;
 import android.util.AttributeSet;
@@ -42,10 +43,13 @@
     private final Context mContext;
 
     private Uri mVideoPath;
-    private MediaPlayer mMediaPlayer;
-    private boolean mAnimationAvailable;
+    @VisibleForTesting
+    MediaPlayer mMediaPlayer;
+    @VisibleForTesting
+    boolean mAnimationAvailable;
     private boolean mVideoReady;
     private boolean mVideoPaused;
+    private float mAspectRadio = 1.0f;
     private int mPreviewResource;
 
     public VideoPreference(Context context, AttributeSet attrs) {
@@ -73,6 +77,7 @@
 
                 mMediaPlayer.setOnPreparedListener(mediaPlayer -> mediaPlayer.setLooping(true));
                 mAnimationAvailable = true;
+                updateAspectRatio();
             } else {
                 setVisible(false);
             }
@@ -94,7 +99,11 @@
         final TextureView video = (TextureView) holder.findViewById(R.id.video_texture_view);
         final ImageView imageView = (ImageView) holder.findViewById(R.id.video_preview_image);
         final ImageView playButton = (ImageView) holder.findViewById(R.id.video_play_button);
+        final AspectRatioFrameLayout layout = (AspectRatioFrameLayout) holder.findViewById(
+                R.id.video_container);
+
         imageView.setImageResource(mPreviewResource);
+        layout.setAspectRatio(mAspectRadio);
 
         video.setOnClickListener(v -> {
             if (mMediaPlayer != null) {
@@ -178,4 +187,9 @@
         return mVideoPaused;
     }
 
+    @VisibleForTesting
+    void updateAspectRatio() {
+        mAspectRadio = mMediaPlayer.getVideoWidth() / (float)mMediaPlayer.getVideoHeight();
+    }
+
 }
diff --git a/tests/robotests/src/com/android/settings/widget/AspectRatioFrameLayoutTest.java b/tests/robotests/src/com/android/settings/widget/AspectRatioFrameLayoutTest.java
index bb55692..59a90c5 100644
--- a/tests/robotests/src/com/android/settings/widget/AspectRatioFrameLayoutTest.java
+++ b/tests/robotests/src/com/android/settings/widget/AspectRatioFrameLayoutTest.java
@@ -41,7 +41,7 @@
     }
 
     @Test
-    public void measure_squareAspectRatio_stretchHeight() {
+    public void measure_squareAspectRatio_squeezeWidth() {
         mLayout = new AspectRatioFrameLayout(mContext);
 
         int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY);
@@ -49,8 +49,8 @@
 
         mLayout.measure(widthMeasureSpec, heightMeasureSpec);
 
-        assertThat(mLayout.getMeasuredWidth()).isEqualTo(100);
-        assertThat(mLayout.getMeasuredHeight()).isEqualTo(100);
+        assertThat(mLayout.getMeasuredWidth()).isEqualTo(50);
+        assertThat(mLayout.getMeasuredHeight()).isEqualTo(50);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java
new file mode 100644
index 0000000..fee7bcc
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package com.android.settings.widget;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.media.MediaPlayer;
+import android.support.v7.preference.PreferenceViewHolder;
+import android.view.LayoutInflater;
+
+import com.android.settings.R;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public class VideoPreferenceTest {
+    private static final int VIDEO_WIDTH = 100;
+    private static final int VIDEO_HEIGHT = 150;
+    @Mock
+    private MediaPlayer mMediaPlayer;
+    private Context mContext;
+    private VideoPreference mVideoPreference;
+    private PreferenceViewHolder mPreferenceViewHolder;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mContext = RuntimeEnvironment.application;
+        mVideoPreference = new VideoPreference(mContext, null /* attrs */);
+        mVideoPreference.mMediaPlayer = mMediaPlayer;
+        when(mMediaPlayer.getVideoWidth()).thenReturn(VIDEO_WIDTH);
+        when(mMediaPlayer.getVideoHeight()).thenReturn(VIDEO_HEIGHT);
+
+        mPreferenceViewHolder = PreferenceViewHolder.createInstanceForTests(
+                LayoutInflater.from(mContext).inflate(R.layout.video_preference, null));
+    }
+
+    @Test
+    public void onBindViewHolder_hasCorrectRatio() {
+        mVideoPreference.mAnimationAvailable = true;
+
+        mVideoPreference.updateAspectRatio();
+        mVideoPreference.onBindViewHolder(mPreferenceViewHolder);
+
+        final AspectRatioFrameLayout layout =
+                (AspectRatioFrameLayout) mPreferenceViewHolder.findViewById(R.id.video_container);
+        assertThat(layout.mAspectRatio).isWithin(0.01f).of(VIDEO_WIDTH / (float) VIDEO_HEIGHT);
+    }
+}
