diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 320031e..2f8e28e 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -230,7 +230,7 @@
 
         controllers.add(new BackgroundActivityPreferenceController(context, uid));
         controllers.add(new BatteryOptimizationPreferenceController(
-                (SettingsActivity) getActivity(), this));
+                (SettingsActivity) getActivity(), this, packageName));
         mAppButtonsPreferenceController = new AppButtonsPreferenceController(
                 (SettingsActivity) getActivity(), this, getLifecycle(), packageName, mState, mDpm,
                 mUserManager, mPackageManager, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java
index 946a9b8..7c5bda2 100644
--- a/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java
@@ -17,6 +17,7 @@
 import android.app.Fragment;
 import android.content.Context;
 import android.os.Bundle;
+import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 import android.text.TextUtils;
 
@@ -33,14 +34,29 @@
 
     private static final String KEY_BACKGROUND_ACTIVITY = "battery_optimization";
 
+
+    private PowerWhitelistBackend mBackend;
     private Fragment mFragment;
     private SettingsActivity mSettingsActivity;
+    private String mPackageName;
 
     public BatteryOptimizationPreferenceController(SettingsActivity settingsActivity,
-            Fragment fragment) {
+            Fragment fragment, String packageName) {
         super(settingsActivity);
         mFragment = fragment;
         mSettingsActivity = settingsActivity;
+        mPackageName = packageName;
+        mBackend = PowerWhitelistBackend.getInstance();
+    }
+
+    @VisibleForTesting
+    BatteryOptimizationPreferenceController(SettingsActivity settingsActivity,
+            Fragment fragment, String packageName, PowerWhitelistBackend backend) {
+        super(settingsActivity);
+        mFragment = fragment;
+        mSettingsActivity = settingsActivity;
+        mPackageName = packageName;
+        mBackend = backend;
     }
 
     @Override
@@ -49,6 +65,12 @@
     }
 
     @Override
+    public void updateState(Preference preference) {
+        final boolean isWhitelisted = mBackend.isWhitelisted(mPackageName);
+        preference.setSummary(isWhitelisted ? R.string.high_power_on : R.string.high_power_off);
+    }
+
+    @Override
     public String getPreferenceKey() {
         return KEY_BACKGROUND_ACTIVITY;
     }
@@ -66,4 +88,5 @@
                 R.string.high_power_apps, null, null, 0);
         return true;
     }
+
 }
diff --git a/src/com/android/settings/fuelgauge/PowerWhitelistBackend.java b/src/com/android/settings/fuelgauge/PowerWhitelistBackend.java
index 7199af8..5590a46 100644
--- a/src/com/android/settings/fuelgauge/PowerWhitelistBackend.java
+++ b/src/com/android/settings/fuelgauge/PowerWhitelistBackend.java
@@ -18,6 +18,8 @@
 import android.os.IDeviceIdleController;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.support.annotation.VisibleForTesting;
+
 import android.util.ArraySet;
 import android.util.Log;
 
@@ -31,7 +33,7 @@
 
     private static final String DEVICE_IDLE_SERVICE = "deviceidle";
 
-    private static final PowerWhitelistBackend INSTANCE = new PowerWhitelistBackend();
+    private static PowerWhitelistBackend sInstance;
 
     private final IDeviceIdleController mDeviceIdleService;
     private final ArraySet<String> mWhitelistedApps = new ArraySet<>();
@@ -73,7 +75,8 @@
         }
     }
 
-    private void refreshList() {
+    @VisibleForTesting
+    void refreshList() {
         mSysWhitelistedApps.clear();
         mWhitelistedApps.clear();
         try {
@@ -91,7 +94,10 @@
     }
 
     public static PowerWhitelistBackend getInstance() {
-        return INSTANCE;
+        if (sInstance == null) {
+            sInstance = new PowerWhitelistBackend();
+        }
+        return sInstance;
     }
 
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java
index 2c5296a..b3afbb4 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java
@@ -22,14 +22,18 @@
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 
 import android.app.Fragment;
+import android.content.Context;
 import android.os.Bundle;
+import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 
+import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.TestConfig;
 
@@ -39,11 +43,14 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class BatteryOptimizationPreferenceControllerTest {
+    private static final String PKG_IN_WHITELIST = "com.pkg.in.whitelist";
+    private static final String PKG_NOT_IN_WHITELIST = "com.pkg.not.in.whitelist";
     private static final String KEY_OPTIMIZATION = "battery_optimization";
     private static final String KEY_OTHER = "other";
     @Mock
@@ -51,20 +58,28 @@
     @Mock
     private Fragment mFragment;
     @Mock
-    private Preference mPreference;
+    private TestPowerWhitelistBackend mBackend;
 
     private BatteryOptimizationPreferenceController mController;
+    private Preference mPreference;
+    private Context mContext;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
-        mController = new BatteryOptimizationPreferenceController(mSettingsActivity, mFragment);
+        mContext = RuntimeEnvironment.application;
+        doReturn(false).when(mBackend).isWhitelisted(PKG_NOT_IN_WHITELIST);
+        doReturn(true).when(mBackend).isWhitelisted(PKG_IN_WHITELIST);
+
+        mPreference = new SwitchPreference(mContext);
+        mController = spy(new BatteryOptimizationPreferenceController(mSettingsActivity, mFragment,
+                PKG_NOT_IN_WHITELIST, mBackend));
     }
 
     @Test
     public void testHandlePreferenceTreeClick_OptimizationPreference_HandleClick() {
-        when(mPreference.getKey()).thenReturn(KEY_OPTIMIZATION);
+        mPreference.setKey(KEY_OPTIMIZATION);
 
         final boolean handled = mController.handlePreferenceTreeClick(mPreference);
 
@@ -76,7 +91,7 @@
 
     @Test
     public void testHandlePreferenceTreeClick_OtherPreference_NotHandleClick() {
-        when(mPreference.getKey()).thenReturn(KEY_OTHER);
+        mPreference.setKey(KEY_OTHER);
 
         final boolean handled = mController.handlePreferenceTreeClick(mPreference);
 
@@ -85,4 +100,33 @@
                 anyString(), any(Bundle.class), anyInt(), any(CharSequence.class),
                 any(Fragment.class), anyInt());
     }
+
+    @Test
+    public void testUpdateState_appInWhitelist_showSummaryNotOptimized() {
+        BatteryOptimizationPreferenceController controller =
+                new BatteryOptimizationPreferenceController(mSettingsActivity, mFragment,
+                        PKG_IN_WHITELIST, mBackend);
+
+        controller.updateState(mPreference);
+
+        assertThat(mPreference.getSummary()).isEqualTo(mContext.getString(R.string.high_power_on));
+    }
+
+    @Test
+    public void testUpdateState_appNotInWhitelist_showSummaryOptimized() {
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.getSummary()).isEqualTo(mContext.getString(R.string.high_power_off));
+    }
+
+    /**
+     * Create this test class so we could mock it
+     */
+    public static class TestPowerWhitelistBackend extends PowerWhitelistBackend {
+
+        @Override
+        void refreshList() {
+            // Do nothing so we could mock it without error
+        }
+    }
 }
