Merge "Fix assist gesture keyword" into oc-dr1-dev
diff --git a/res/layout/preference_category_material_settings.xml b/res/layout/preference_category_material_settings.xml
index 5a1043d..3334bbb 100644
--- a/res/layout/preference_category_material_settings.xml
+++ b/res/layout/preference_category_material_settings.xml
@@ -51,6 +51,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:textAppearance="@android:style/TextAppearance.Material.Body2"
+            android:textAlignment="viewStart"
             android:textColor="?android:attr/colorAccent"
             android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"/>
         <TextView
diff --git a/res/layout/suggestion_condition_footer.xml b/res/layout/suggestion_condition_footer.xml
index f9d30e6..3eea6a5 100644
--- a/res/layout/suggestion_condition_footer.xml
+++ b/res/layout/suggestion_condition_footer.xml
@@ -20,8 +20,8 @@
     style="@style/SuggestionConditionStyle"
     android:layout_width="match_parent"
     android:layout_height="44dp"
-    android:paddingTop="4dp"
-    android:paddingEnd="16dp"
+    android:paddingTop="10dp"
+    android:paddingEnd="10dp"
     android:orientation="horizontal"
     android:gravity="end">
 
diff --git a/res/layout/suggestion_condition_header.xml b/res/layout/suggestion_condition_header.xml
index 4519a46..2551b65 100644
--- a/res/layout/suggestion_condition_header.xml
+++ b/res/layout/suggestion_condition_header.xml
@@ -20,16 +20,13 @@
     style="@style/SuggestionConditionStyle"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
+    android:paddingTop="10dp"
+    android:paddingBottom="10dp"
     android:orientation="vertical">
 
-    <Space
-        android:id="@+id/top_space"
-        android:layout_width="match_parent"
-        android:layout_height="9dp"/>
-
     <RelativeLayout
         android:layout_width="match_parent"
-        android:layout_height="35dp"
+        android:layout_height="36dp"
         android:layout_centerHorizontal="true">
 
         <FrameLayout
@@ -87,8 +84,4 @@
 
     </RelativeLayout>
 
-    <Space
-        android:layout_width="match_parent"
-        android:layout_height="12dp"/>
-
 </LinearLayout>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 70417e5..af20217 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -329,4 +329,8 @@
     <dimen name="battery_meter_width">66dp</dimen>
     <dimen name="battery_meter_height">100dp</dimen>
 
+    <!-- Suggestion/condition header padding -->
+    <dimen name="suggestion_condition_header_padding_collapsed">10dp</dimen>
+    <dimen name="suggestion_condition_header_padding_expanded">5dp</dimen>
+
 </resources>
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index dc4c995..fe0111b 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -247,9 +247,8 @@
     /**
      * Whether to show the checkbox to wipe the eUICC.
      *
-     * <p>We show the checkbox on any device which supports eUICC as long as either the eUICC was
-     * ever provisioned (that is, at least one profile was ever downloaded onto it), or if the user
-     * has enabled development mode.
+     * <p>We show the checkbox on any device which supports eUICC as long as the eUICC was ever
+     * provisioned (that is, at least one profile was ever downloaded onto it).
      */
     @VisibleForTesting
     boolean showWipeEuicc() {
@@ -258,8 +257,7 @@
             return false;
         }
         ContentResolver cr = context.getContentResolver();
-        return Settings.Global.getInt(cr, Settings.Global.EUICC_PROVISIONED, 0) != 0
-                || Settings.Global.getInt(cr, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
+        return Settings.Global.getInt(cr, Settings.Global.EUICC_PROVISIONED, 0) != 0;
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java b/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java
index 6f9cf40..b64da26 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java
@@ -21,6 +21,9 @@
 import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
@@ -30,11 +33,13 @@
     public static final String PREF_KEY = "bt_rename_device";
 
     private final Fragment mFragment;
+    private MetricsFeatureProvider mMetricsFeatureProvider;
 
     public BluetoothDeviceRenamePreferenceController(Context context, Fragment fragment,
             Lifecycle lifecycle) {
         super(context, lifecycle);
         mFragment = fragment;
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
     }
 
     @VisibleForTesting
@@ -42,6 +47,7 @@
             LocalBluetoothAdapter localAdapter) {
         super(context, localAdapter);
         mFragment = fragment;
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
     }
 
     @Override
@@ -57,6 +63,8 @@
     @Override
     public boolean handlePreferenceTreeClick(Preference preference) {
         if (PREF_KEY.equals(preference.getKey())) {
+            mMetricsFeatureProvider.action(mContext,
+                    MetricsProto.MetricsEvent.ACTION_BLUETOOTH_RENAME);
             LocalDeviceNameDialogFragment.newInstance()
                     .show(mFragment.getFragmentManager(), LocalDeviceNameDialogFragment.TAG);
             return true;
diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index 6ff33ca..da9e8a7 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -17,6 +17,7 @@
 
 import android.app.Activity;
 import android.content.Context;
+import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.Color;
 import android.graphics.drawable.Drawable;
@@ -34,7 +35,6 @@
 import android.view.ViewGroup;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
-import android.widget.Space;
 import android.widget.TextView;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -62,9 +62,10 @@
     private static final String STATE_SUGGESTION_LIST = "suggestion_list";
     private static final String STATE_CATEGORY_LIST = "category_list";
     private static final String STATE_SUGGESTIONS_SHOWN_LOGGED = "suggestions_shown_logged";
-    private static final String STATE_SUGGESTION_CONDITION_MODE = "suggestion_condition_mode";
 
     @VisibleForTesting
+    static final String STATE_SUGGESTION_CONDITION_MODE = "suggestion_condition_mode";
+    @VisibleForTesting
     static final int SUGGESTION_CONDITION_HEADER_POSITION = 0;
 
     private final IconCache mCache;
@@ -417,11 +418,12 @@
             holder.summary.setText(null);
         }
 
-        if (curMode == DashboardData.HEADER_MODE_COLLAPSED) {
-            holder.topSpace.setVisibility(View.VISIBLE);
-        } else {
-            holder.topSpace.setVisibility(View.GONE);
-        }
+        final Resources res = mContext.getResources();
+        final int padding = res.getDimensionPixelOffset(
+                curMode == DashboardData.HEADER_MODE_COLLAPSED
+                        ? R.dimen.suggestion_condition_header_padding_collapsed
+                        : R.dimen.suggestion_condition_header_padding_expanded);
+        holder.itemView.setPadding(0, padding, 0, padding);
 
         holder.itemView.setOnClickListener(v -> {
             if (moreSuggestions ) {
@@ -446,8 +448,9 @@
             int position) {
         // If there is suggestions to show, it will be at position 0 as we don't show the suggestion
         // header anymore.
-        if (position == (SUGGESTION_CONDITION_HEADER_POSITION)
-                && mDashboardData.getSuggestions() != null) {
+        final List<Tile> suggestions = mDashboardData.getSuggestions();
+        if (position == SUGGESTION_CONDITION_HEADER_POSITION
+                && suggestions != null && suggestions.size() > 0) {
             mSuggestionAdapter = new SuggestionAdapter(mContext, (List<Tile>)
                 mDashboardData.getItemEntityByPosition(position), mSuggestionsShownLogged);
             mSuggestionDismissHandler = new SuggestionDismissController(mContext,
@@ -548,13 +551,11 @@
     public static class SuggestionAndConditionHeaderHolder extends DashboardItemHolder {
         public final LinearLayout icons;
         public final ImageView expandIndicator;
-        public final Space topSpace;
 
         public SuggestionAndConditionHeaderHolder(View itemView) {
             super(itemView);
             icons = itemView.findViewById(id.additional_icons);
             expandIndicator = itemView.findViewById(id.expand_indicator);
-            topSpace = itemView.findViewById(id.top_space);
         }
     }
 
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java b/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
index 2927002..a966beb 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
+++ b/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
@@ -35,9 +35,10 @@
 
     private CharSequence mSummary;
     private TextView mSummaryView;
-    private boolean hideSummary;
 
     @VisibleForTesting
+    boolean hideSummary;
+    @VisibleForTesting
     BatteryInfo mBatteryInfo;
 
     public BatteryHistoryPreference(Context context, AttributeSet attrs) {
@@ -56,8 +57,10 @@
     public void setBottomSummary(CharSequence text) {
         mSummary = text;
         if (mSummaryView != null) {
+            mSummaryView.setVisibility(View.VISIBLE);
             mSummaryView.setText(mSummary);
         }
+        hideSummary = false;
     }
 
     public void hideBottomSummary() {
diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
index 3100e95..90344ce 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
@@ -15,7 +15,10 @@
 
 import android.app.Activity;
 import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.pm.PackageManager;
+import android.os.BatteryManager;
 import android.os.BatteryStats;
 import android.os.Bundle;
 import android.os.Handler;
@@ -171,7 +174,11 @@
         updatePreference(mHistPref);
         refreshPowerUsageDataList(mStatsHelper, mUsageListGroup);
 
-        if (mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(context)) {
+        Intent batteryIntent =
+                context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+        final boolean plugged = batteryIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) != 0;
+
+        if (mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(context) && !plugged) {
             mHistPref.setBottomSummary(
                     mPowerUsageFeatureProvider.getAdvancedUsageScreenInfoString());
         } else {
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 854857a..a23eff9 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -306,11 +306,8 @@
 
             try {
                 ApplicationInfo info = mPm.getApplicationInfo(rule.getOwner().getPackageName(), 0);
-                LoadIconTask task = new LoadIconTask(this);
-                task.execute(info);
                 setSummary(computeRuleSummary(rule, isSystemRule, info.loadLabel(mPm)));
             } catch (PackageManager.NameNotFoundException e) {
-                setIcon(R.drawable.ic_label);
                 appExists = false;
                 return;
             }
@@ -347,29 +344,6 @@
         };
     }
 
-    private class LoadIconTask extends AsyncTask<ApplicationInfo, Void, Drawable> {
-        private final WeakReference<Preference> prefReference;
-
-        public LoadIconTask(Preference pref) {
-            prefReference = new WeakReference<>(pref);
-        }
-
-        @Override
-        protected Drawable doInBackground(ApplicationInfo... params) {
-            return params[0].loadIcon(mPm);
-        }
-
-        @Override
-        protected void onPostExecute(Drawable icon) {
-            if (icon != null) {
-                final Preference pref = prefReference.get();
-                if (pref != null) {
-                    pref.setIcon(icon);
-                }
-            }
-        }
-    }
-
     public static class SummaryBuilder {
 
         private Context mContext;
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index 239b6cd..0aea810 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -51,7 +51,6 @@
 import android.view.ViewGroup;
 import android.view.inputmethod.EditorInfo;
 import android.widget.Button;
-import android.widget.EditText;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
@@ -67,6 +66,7 @@
 import com.android.settings.Utils;
 import com.android.settings.core.InstrumentedPreferenceFragment;
 import com.android.settings.notification.RedactionInterstitial;
+import com.android.settings.widget.ImeAwareEditText;
 import com.android.setupwizardlib.GlifLayout;
 
 import java.util.ArrayList;
@@ -180,7 +180,7 @@
         private String mChosenPassword;
         private boolean mHasChallenge;
         private long mChallenge;
-        private EditText mPasswordEntry;
+        private ImeAwareEditText mPasswordEntry;
         private TextViewInputDisabler mPasswordEntryInputDisabler;
         private int mPasswordMinLength = LockPatternUtils.MIN_LOCK_PASSWORD_SIZE;
         private int mPasswordMaxLength = 16;
@@ -365,7 +365,7 @@
             setupPasswordRequirementsView(view);
 
             mPasswordRestrictionView.setLayoutManager(new LinearLayoutManager(getActivity()));
-            mPasswordEntry = (EditText) view.findViewById(R.id.password_entry);
+            mPasswordEntry = view.findViewById(R.id.password_entry);
             mPasswordEntry.setOnEditorActionListener(this);
             mPasswordEntry.addTextChangedListener(this);
             mPasswordEntry.requestFocus();
@@ -488,6 +488,7 @@
                 mSaveAndFinishWorker.setListener(this);
             } else {
                 mPasswordEntry.requestFocus();
+                mPasswordEntry.scheduleShowSoftInput();
             }
         }
 
diff --git a/tests/robotests/src/com/android/settings/MasterClearTest.java b/tests/robotests/src/com/android/settings/MasterClearTest.java
index d913946..8e8578f 100644
--- a/tests/robotests/src/com/android/settings/MasterClearTest.java
+++ b/tests/robotests/src/com/android/settings/MasterClearTest.java
@@ -92,55 +92,32 @@
     @Test
     public void testShowWipeEuicc_euiccDisabled() {
         prepareEuiccState(
-                false /* isEuiccEnabled */, true /* isEuiccProvisioned */,
-                true /* isDevelopmentSettingsEnabled */);
+                false /* isEuiccEnabled */, true /* isEuiccProvisioned */);
         assertThat(mMasterClear.showWipeEuicc()).isFalse();
     }
 
     @Test
     public void testShowWipeEuicc_euiccEnabled_unprovisioned() {
         prepareEuiccState(
-                true /* isEuiccEnabled */, false /* isEuiccProvisioned */,
-                false /* isDevelopmentSettingsEnabled */);
+                true /* isEuiccEnabled */, false /* isEuiccProvisioned */);
         assertThat(mMasterClear.showWipeEuicc()).isFalse();
     }
 
     @Test
     public void testShowWipeEuicc_euiccEnabled_provisioned() {
         prepareEuiccState(
-                true /* isEuiccEnabled */, true /* isEuiccProvisioned */,
-                false /* isDevelopmentSettingsEnabled */);
-        assertThat(mMasterClear.showWipeEuicc()).isTrue();
-    }
-
-    @Test
-    public void testShowWipeEuicc_euiccEnabled_developmentSettingsEnabled() {
-        prepareEuiccState(
-                true /* isEuiccEnabled */, false /* isEuiccProvisioned */,
-                true /* isDevelopmentSettingsEnabled */);
-        assertThat(mMasterClear.showWipeEuicc()).isTrue();
-    }
-
-    @Test
-    public void testShowWipeEuicc_euiccEnabled_provisioned_developmentSettingsEnabled() {
-        prepareEuiccState(
-                true /* isEuiccEnabled */, true /* isEuiccProvisioned */,
-                true /* isDevelopmentSettingsEnabled */);
+                true /* isEuiccEnabled */, true /* isEuiccProvisioned */);
         assertThat(mMasterClear.showWipeEuicc()).isTrue();
     }
 
     private void prepareEuiccState(
             boolean isEuiccEnabled,
-            boolean isEuiccProvisioned,
-            boolean isDevelopmentSettingsEnabled) {
+            boolean isEuiccProvisioned) {
         doReturn(mActivity).when(mMasterClear).getContext();
         doReturn(isEuiccEnabled).when(mMasterClear).isEuiccEnabled(any());
         ContentResolver cr = mActivity.getContentResolver();
         Settings.Global.putInt(
                 cr, android.provider.Settings.Global.EUICC_PROVISIONED, isEuiccProvisioned ? 1 : 0);
-        Settings.Global.putInt(
-                cr, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED,
-                isDevelopmentSettingsEnabled ? 1 : 0);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
index 5c23d60..8cf8736 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
@@ -36,6 +36,7 @@
 import android.content.res.TypedArray;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Icon;
+import android.os.Bundle;
 import android.support.v7.widget.RecyclerView;
 import android.util.DisplayMetrics;
 import android.view.LayoutInflater;
@@ -48,6 +49,7 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.TestConfig;
 import com.android.settings.dashboard.conditional.Condition;
+import com.android.settings.dashboard.conditional.ConditionAdapter;
 import com.android.settings.dashboard.suggestions.SuggestionAdapter;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -97,6 +99,7 @@
     private DashboardAdapter mDashboardAdapter;
     private DashboardAdapter.SuggestionAndConditionHeaderHolder mSuggestionHolder;
     private DashboardData.SuggestionConditionHeaderData mSuggestionHeaderData;
+    private List<Condition> mConditionList;
 
     @Before
     public void setUp() {
@@ -115,10 +118,11 @@
         when(mResources.getQuantityString(any(int.class), any(int.class), any()))
                 .thenReturn("");
 
-        List<Condition> conditions = new ArrayList<>();
-        conditions.add(mCondition);
-        mDashboardAdapter = new DashboardAdapter(mContext, null, conditions, null, null);
-        mSuggestionHeaderData = new DashboardData.SuggestionConditionHeaderData(conditions, 1);
+        mConditionList = new ArrayList<>();
+        mConditionList.add(mCondition);
+        when(mCondition.shouldShow()).thenReturn(true);
+        mDashboardAdapter = new DashboardAdapter(mContext, null, mConditionList, null, null);
+        mSuggestionHeaderData = new DashboardData.SuggestionConditionHeaderData(mConditionList, 1);
         when(mView.getTag()).thenReturn(mCondition);
     }
 
@@ -392,6 +396,38 @@
         // should not crash
     }
 
+    @Test
+    public void testBindConditionAndSuggestion_emptySuggestion_shouldSetConditionAdapter() {
+        final Bundle savedInstance = new Bundle();
+        savedInstance.putInt(DashboardAdapter.STATE_SUGGESTION_CONDITION_MODE,
+                DashboardData.HEADER_MODE_FULLY_EXPANDED);
+        mDashboardAdapter = new DashboardAdapter(mContext, savedInstance, mConditionList,
+                null /* SuggestionParser */, null /* SuggestionDismissController.Callback */);
+
+        final List<Tile> suggestions = new ArrayList<>();
+        final List<DashboardCategory> categories = new ArrayList<>();
+        final DashboardCategory category = mock(DashboardCategory.class);
+        categories.add(category);
+        final List<Tile> tiles = new ArrayList<>();
+        tiles.add(mock(Tile.class));
+        category.tiles = tiles;
+        mDashboardAdapter.setCategoriesAndSuggestions(categories, suggestions);
+
+        final RecyclerView data = mock(RecyclerView.class);
+        when(data.getResources()).thenReturn(mResources);
+        when(data.getContext()).thenReturn(mContext);
+        when(mResources.getDisplayMetrics()).thenReturn(mock(DisplayMetrics.class));
+        final View itemView = mock(View.class);
+        when(itemView.findViewById(R.id.data)).thenReturn(data);
+        final DashboardAdapter.SuggestionAndConditionContainerHolder holder =
+                new DashboardAdapter.SuggestionAndConditionContainerHolder(itemView);
+
+        mDashboardAdapter.onBindConditionAndSuggestion(
+                holder, DashboardAdapter.SUGGESTION_CONDITION_HEADER_POSITION);
+
+        verify(data).setAdapter(any(ConditionAdapter.class));
+    }
+
     private List<Tile> makeSuggestions(String... pkgNames) {
         final List<Tile> suggestions = new ArrayList<>();
         for (String pkgName : pkgNames) {
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java
index 4f8f222..0d03512 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java
@@ -97,6 +97,7 @@
         TextView view = (TextView) mViewHolder.findViewById(R.id.bottom_summary);
         assertThat(view.getVisibility()).isEqualTo(View.VISIBLE);
         assertThat(view.getText()).isEqualTo(TEST_STRING);
+        assertThat(mBatteryHistoryPreference.hideSummary).isFalse();
     }
 
     @Test
@@ -107,5 +108,6 @@
         TextView view = (TextView) mViewHolder.findViewById(R.id.bottom_summary);
         assertThat(view.getVisibility()).isEqualTo(View.GONE);
         assertThat(view.getText()).isEqualTo("");
+        assertThat(mBatteryHistoryPreference.hideSummary).isTrue();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoLoaderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoLoaderTest.java
index c5e4707..796e63c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoLoaderTest.java
@@ -30,6 +30,7 @@
 import android.os.BatteryStats;
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.TestConfig;
+import com.android.settings.testutils.BatteryTestUtils;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import org.junit.Before;
@@ -64,12 +65,7 @@
                 .setupForTest(mContext)
                 .getPowerUsageFeatureProvider(mContext);
 
-        mDisChargingBatteryBroadcast = new Intent();
-        mDisChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_PLUGGED, 0);
-        mDisChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_LEVEL, 0);
-        mDisChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_SCALE, 100);
-        mDisChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_STATUS,
-                BatteryManager.BATTERY_STATUS_FULL);
+        mDisChargingBatteryBroadcast = BatteryTestUtils.getDischargingIntent();
 
         doReturn(mContext).when(mContext).getApplicationContext();
         when(mStats.computeBatteryTimeRemaining(anyLong())).thenReturn(TEST_TIME_REMAINING);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
index 24d1bf9..9bd0b6f 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
@@ -39,6 +39,7 @@
 
 import com.android.settings.TestConfig;
 import com.android.settings.graph.UsageView;
+import com.android.settings.testutils.BatteryTestUtils;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
@@ -63,6 +64,7 @@
     private static final String STATUS_FULL = "Full";
     private static final String STATUS_CHARGING_NO_TIME = "50% - charging";
     private static final String STATUS_CHARGING_TIME = "50% - 0m until fully charged";
+    private static final String STATUS_NOT_CHARGING = "Not charging";
     private static final int PLUGGED_IN = 1;
     private static final long REMAINING_TIME_NULL = -1;
     private static final long REMAINING_TIME = 2;
@@ -87,20 +89,9 @@
         mContext = spy(RuntimeEnvironment.application);
         mFeatureFactory = FakeFeatureFactory.setupForTest(mContext);
 
-        mDisChargingBatteryBroadcast = new Intent();
-        mDisChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_PLUGGED, 0);
-        mDisChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_LEVEL, 0);
-        mDisChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_SCALE, 100);
-        mDisChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_STATUS,
-                BatteryManager.BATTERY_STATUS_FULL);
+        mDisChargingBatteryBroadcast = BatteryTestUtils.getDischargingIntent();
 
-        mChargingBatteryBroadcast = new Intent();
-        mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_PLUGGED,
-                BatteryManager.BATTERY_PLUGGED_AC);
-        mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_LEVEL, 50);
-        mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_SCALE, 100);
-        mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_STATUS,
-                BatteryManager.BATTERY_STATUS_UNKNOWN);
+        mChargingBatteryBroadcast = BatteryTestUtils.getChargingIntent();
     }
 
     @Test
@@ -110,7 +101,7 @@
                 mDisChargingBatteryBroadcast, mBatteryStats, SystemClock.elapsedRealtime() * 1000,
                 true /* shortString */);
 
-        assertThat(info.statusLabel).isEqualTo(STATUS_FULL);
+        assertThat(info.statusLabel).isEqualTo(STATUS_NOT_CHARGING);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
index aa8607f..bf89cac 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
@@ -20,6 +20,7 @@
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.eq;
+import static org.mockito.Matchers.isNull;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
@@ -28,16 +29,19 @@
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.UserManager;
 import android.support.v7.preference.PreferenceCategory;
 import android.support.v7.preference.PreferenceGroup;
 import android.support.v7.preference.PreferenceManager;
 
+import android.view.View;
 import com.android.internal.os.BatterySipper;
 import com.android.internal.os.BatterySipper.DrainType;
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.R;
+import com.android.settings.testutils.BatteryTestUtils;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.Utils;
@@ -90,11 +94,12 @@
     private PowerUsageAdvanced mPowerUsageAdvanced;
     private PowerUsageData mPowerUsageData;
     private Context mShadowContext;
+    private Intent mDischargingBatteryIntent;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mShadowContext = RuntimeEnvironment.application;
+        mShadowContext = spy(RuntimeEnvironment.application);
         mPowerUsageAdvanced = spy(new PowerUsageAdvanced());
 
         List<BatterySipper> batterySippers = new ArrayList<>();
@@ -107,6 +112,8 @@
         batterySippers.add(new BatterySipper(DrainType.WIFI, new FakeUid(FAKE_UID_1),
                 TYPE_WIFI_USAGE));
 
+        mDischargingBatteryIntent = BatteryTestUtils.getDischargingIntent();
+        doReturn(mDischargingBatteryIntent).when(mShadowContext).registerReceiver(any(), any());
         when(mBatteryStatsHelper.getStats().getDischargeAmount(anyInt())).thenReturn(
                 DISCHARGE_AMOUNT);
         when(mBatteryStatsHelper.getUsageList()).thenReturn(batterySippers);
diff --git a/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java b/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java
new file mode 100644
index 0000000..2bdab27
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.testutils;
+
+import android.content.Intent;
+import android.os.BatteryManager;
+
+public class BatteryTestUtils {
+
+    public static Intent getChargingIntent() {
+        return getCustomBatteryIntent(
+                BatteryManager.BATTERY_PLUGGED_AC,
+                50 /* level */,
+                100 /* scale */,
+                BatteryManager.BATTERY_STATUS_CHARGING);
+    }
+
+    public static Intent getDischargingIntent() {
+        return getCustomBatteryIntent(
+                0 /* plugged */,
+                10 /* level */,
+                100 /* scale */,
+                BatteryManager.BATTERY_STATUS_DISCHARGING);
+    }
+
+    public static Intent getCustomBatteryIntent(int plugged, int level, int scale, int status) {
+        Intent intent = new Intent();
+        intent.putExtra(BatteryManager.EXTRA_PLUGGED, plugged);
+        intent.putExtra(BatteryManager.EXTRA_LEVEL, level);
+        intent.putExtra(BatteryManager.EXTRA_SCALE, scale);
+        intent.putExtra(BatteryManager.EXTRA_STATUS, status);
+
+        return intent;
+    }
+
+}