Merge "Delete WPS settings."
diff --git a/res/layout/preference_widget_gear_no_bg.xml b/res/layout/preference_widget_gear_no_bg.xml
new file mode 100644
index 0000000..89d34d4
--- /dev/null
+++ b/res/layout/preference_widget_gear_no_bg.xml
@@ -0,0 +1,27 @@
+<?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.
+-->
+
+<!-- Settings button -->
+<ImageView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/settings_button"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_gravity="center"
+    android:scaleType="center"
+    android:src="@drawable/ic_settings"
+    android:contentDescription="@string/settings_button" />
+
diff --git a/res/layout/styled_switch_bar.xml b/res/layout/styled_switch_bar.xml
index 1777c0f..3baaac3 100644
--- a/res/layout/styled_switch_bar.xml
+++ b/res/layout/styled_switch_bar.xml
@@ -16,13 +16,13 @@
 
 <!-- For use in a LayoutPreference -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_height="0px"
-              android:layout_width="match_parent"
-              android:layout_weight="1" >
+              android:layout_height="wrap_content"
+              android:layout_width="match_parent" >
 
     <com.android.settings.widget.SwitchBar
         android:id="@+id/switch_bar"
-        android:layout_height="?android:attr/actionBarSize"
+        android:minHeight="?android:attr/actionBarSize"
+        android:layout_height="wrap_content"
         android:layout_width="match_parent"
         android:paddingStart="0dp"
         android:theme="?attr/switchBarTheme" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e75bb24..d561023 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5103,6 +5103,9 @@
     <!-- Title for the battery management group [CHAR LIMIT=40] -->
     <string name ="battery_detail_manage_title">Manage battery usage</string>
 
+    <!-- Graph subtext displayed to user when enhanced battery estimate is being used [CHAR LIMIT=120] -->
+    <string name="advanced_battery_graph_subtext">Battery left estimate is based on your device usage</string>
+
     <!-- Description for battery time left, i.e. 50min Estimated time left. [CHAR LIMIT=80]-->
     <string name="estimated_time_left">Estimated time left</string>
 
@@ -7053,7 +7056,7 @@
     <string name="notification_pulse_title">Blink light</string>
 
     <!-- Configure Notifications: Title for the option controlling notifications on the lockscreen. [CHAR LIMIT=30] -->
-    <string name="lock_screen_notifications_title">On the lock screen</string>
+    <string name="lock_screen_notifications_title">On lock screen</string>
 
     <!-- Configure Notifications: Value for lockscreen notifications:  all information will be
          shown in notifications shown on a secure lock screen
@@ -7063,7 +7066,7 @@
     <!-- Configure Notifications: Value for lockscreen notifications: sensitive information will be
          hidden or redacted from notifications shown on a secure lock screen
          [CHAR LIMIT=50] -->
-    <string name="lock_screen_notifications_summary_hide">Hide sensitive notification content</string>
+    <string name="lock_screen_notifications_summary_hide">Hide sensitive content</string>
 
     <!-- Configure Notifications: Value for lockscreen notifications: notifications will not appear on a secure lock screen
          [CHAR LIMIT=50] -->
@@ -7083,7 +7086,7 @@
     <!-- Configure Notifications: Value for lockscreen notifications: sensitive information will be
          hidden or redacted from work notifications shown on a secure lock screen
          [CHAR LIMIT=50] -->
-    <string name="lock_screen_notifications_summary_hide_profile">Hide sensitive work notification content</string>
+    <string name="lock_screen_notifications_summary_hide_profile">Hide sensitive work content</string>
 
     <!-- Configure Notifications: Value for lockscreen notifications: work notifications will not appear on a secure lock screen
          [CHAR LIMIT=50] -->
@@ -7343,7 +7346,7 @@
     <string name="app_notification_override_dnd_summary">Let these notifications continue to interrupt when Do Not Disturb is set to Priority Only</string>
 
     <!-- [CHAR LIMIT=NONE] App notification settings: Visibility override option title -->
-    <string name="app_notification_visibility_override_title">On the lock screen</string>
+    <string name="app_notification_visibility_override_title">On lock screen</string>
 
     <!-- [CHAR LIMIT=20] Notification settings: App notifications row summary when allowed -->
     <string name="app_notification_row_banned">Blocked</string>
@@ -8480,7 +8483,7 @@
     <!-- Summary of condition that airplane mode is on [CHAR LIMIT=NONE] -->
     <string name="condition_airplane_summary">Wi-Fi, Bluetooth, and mobile network are turned off. You can\'t make phone calls or connect to the internet.</string>
 
-    <!-- Title of condition that do not disturb is on [CHAR LIMIT=30] -->
+    <!-- Title of condition that do not disturb is on [CHAR LIMIT=36] -->
     <string name="condition_zen_title">Do Not Disturb is on</string>
 
     <!-- Title of condition that battery saver is on [CHAR LIMIT=30] -->
diff --git a/res/xml/power_usage_summary.xml b/res/xml/power_usage_summary.xml
index 50a1870..fbe4e0d 100644
--- a/res/xml/power_usage_summary.xml
+++ b/res/xml/power_usage_summary.xml
@@ -23,7 +23,7 @@
 
     <com.android.settings.applications.LayoutPreference
         android:key="battery_header"
-        android:selectable="true"
+        android:selectable="false"
         android:layout="@layout/battery_header"/>
 
     <PreferenceCategory
diff --git a/src/com/android/settings/ResetNetworkConfirm.java b/src/com/android/settings/ResetNetworkConfirm.java
index 78e8339..8d6700c 100644
--- a/src/com/android/settings/ResetNetworkConfirm.java
+++ b/src/com/android/settings/ResetNetworkConfirm.java
@@ -225,6 +225,7 @@
             mEraseEsimTask.cancel(true /* mayInterruptIfRunning */);
             mEraseEsimTask = null;
         }
+        super.onDestroy();
     }
 
     @Override
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 01818e9..7328c76 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -82,8 +82,6 @@
 
     // Constants for state save/restore
     private static final String SAVE_KEY_CATEGORIES = ":settings:categories";
-    @VisibleForTesting
-    static final String SAVE_KEY_SHOW_HOME_AS_UP = ":settings:show_home_as_up";
 
     /**
      * When starting this activity, the invoking Intent can contain this extra
@@ -146,12 +144,10 @@
     public static final String EXTRA_HIDE_DRAWER = ":settings:hide_drawer";
 
     public static final String META_DATA_KEY_FRAGMENT_CLASS =
-        "com.android.settings.FRAGMENT_CLASS";
+            "com.android.settings.FRAGMENT_CLASS";
 
     private static final String EXTRA_UI_OPTIONS = "settings:ui_options";
 
-    private static final int REQUEST_SUGGESTION = 42;
-
     private String mFragmentClass;
 
     private CharSequence mInitialTitle;
@@ -183,9 +179,6 @@
 
     private Button mNextButton;
 
-    @VisibleForTesting
-    boolean mDisplayHomeAsUpEnabled;
-
     private boolean mIsShowingDashboard;
     private boolean mIsShortcut;
 
@@ -197,7 +190,6 @@
     private ArrayList<DashboardCategory> mCategories = new ArrayList<>();
 
     private DashboardFeatureProvider mDashboardFeatureProvider;
-    private ComponentName mCurrentSuggestion;
 
     public SwitchBar getSwitchBar() {
         return mSwitchBar;
@@ -310,9 +302,6 @@
                 mCategories.addAll(categories);
                 setTitleFromBackStack();
             }
-
-            mDisplayHomeAsUpEnabled = savedState.getBoolean(SAVE_KEY_SHOW_HOME_AS_UP);
-
         } else {
             launchSettingFragment(initialFragmentName, isSubSettings, intent);
         }
@@ -337,8 +326,8 @@
 
         ActionBar actionBar = getActionBar();
         if (actionBar != null) {
-            actionBar.setDisplayHomeAsUpEnabled(mDisplayHomeAsUpEnabled);
-            actionBar.setHomeButtonEnabled(mDisplayHomeAsUpEnabled);
+            actionBar.setDisplayHomeAsUpEnabled(true);
+            actionBar.setHomeButtonEnabled(true);
             actionBar.setDisplayShowTitleEnabled(!mIsShowingDashboard);
         }
         mSwitchBar = findViewById(R.id.switch_bar);
@@ -353,21 +342,21 @@
             if (buttonBar != null) {
                 buttonBar.setVisibility(View.VISIBLE);
 
-                Button backButton = (Button)findViewById(R.id.back_button);
+                Button backButton = (Button) findViewById(R.id.back_button);
                 backButton.setOnClickListener(new OnClickListener() {
                     public void onClick(View v) {
                         setResult(RESULT_CANCELED, null);
                         finish();
                     }
                 });
-                Button skipButton = (Button)findViewById(R.id.skip_button);
+                Button skipButton = (Button) findViewById(R.id.skip_button);
                 skipButton.setOnClickListener(new OnClickListener() {
                     public void onClick(View v) {
                         setResult(RESULT_OK, null);
                         finish();
                     }
                 });
-                mNextButton = (Button)findViewById(R.id.next_button);
+                mNextButton = (Button) findViewById(R.id.next_button);
                 mNextButton.setOnClickListener(new OnClickListener() {
                     public void onClick(View v) {
                         setResult(RESULT_OK, null);
@@ -380,8 +369,7 @@
                     String buttonText = intent.getStringExtra(EXTRA_PREFS_SET_NEXT_TEXT);
                     if (TextUtils.isEmpty(buttonText)) {
                         mNextButton.setVisibility(View.GONE);
-                    }
-                    else {
+                    } else {
                         mNextButton.setText(buttonText);
                     }
                 }
@@ -389,8 +377,7 @@
                     String buttonText = intent.getStringExtra(EXTRA_PREFS_SET_BACK_TEXT);
                     if (TextUtils.isEmpty(buttonText)) {
                         backButton.setVisibility(View.GONE);
-                    }
-                    else {
+                    } else {
                         backButton.setText(buttonText);
                     }
                 }
@@ -408,26 +395,17 @@
     @VisibleForTesting
     void launchSettingFragment(String initialFragmentName, boolean isSubSettings, Intent intent) {
         if (!mIsShowingDashboard && initialFragmentName != null) {
-            // UP will be shown only if it is a sub settings
-            if (mIsShortcut) {
-                mDisplayHomeAsUpEnabled = isSubSettings;
-            } else if (isSubSettings) {
-                mDisplayHomeAsUpEnabled = true;
-            } else {
-                mDisplayHomeAsUpEnabled = false;
-            }
             setTitleFromIntent(intent);
 
             Bundle initialArguments = intent.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
             switchToFragment(initialFragmentName, initialArguments, true, false,
-                mInitialTitleResId, mInitialTitle, false);
+                    mInitialTitleResId, mInitialTitle, false);
         } else {
             // Show search icon as up affordance if we are displaying the main Dashboard
-            mDisplayHomeAsUpEnabled = true;
             mInitialTitleResId = R.string.dashboard_title;
 
             switchToFragment(DashboardSummary.class.getName(), null /* args */, false, false,
-                mInitialTitleResId, mInitialTitle, false);
+                    mInitialTitleResId, mInitialTitle, false);
         }
     }
 
@@ -509,15 +487,6 @@
         if (mCategories.size() > 0) {
             outState.putParcelableArrayList(SAVE_KEY_CATEGORIES, mCategories);
         }
-
-        outState.putBoolean(SAVE_KEY_SHOW_HOME_AS_UP, mDisplayHomeAsUpEnabled);
-    }
-
-    @Override
-    protected void onRestoreInstanceState(Bundle savedInstanceState) {
-        super.onRestoreInstanceState(savedInstanceState);
-
-        mDisplayHomeAsUpEnabled = savedInstanceState.getBoolean(SAVE_KEY_SHOW_HOME_AS_UP);
     }
 
     @Override
@@ -610,17 +579,17 @@
      * single-pane mode, a new activity will be launched in which to show the
      * fragment.
      *
-     * @param fragmentClass Full name of the class implementing the fragment.
-     * @param args Any desired arguments to supply to the fragment.
-     * @param titleRes Optional resource identifier of the title of this
-     * fragment.
-     * @param titleText Optional text of the title of this fragment.
-     * @param resultTo Optional fragment that result data should be sent to.
-     * If non-null, resultTo.onActivityResult() will be called when this
-     * preference panel is done.  The launched panel must use
-     * {@link #finishPreferencePanel(Fragment, int, Intent)} when done.
+     * @param fragmentClass     Full name of the class implementing the fragment.
+     * @param args              Any desired arguments to supply to the fragment.
+     * @param titleRes          Optional resource identifier of the title of this
+     *                          fragment.
+     * @param titleText         Optional text of the title of this fragment.
+     * @param resultTo          Optional fragment that result data should be sent to.
+     *                          If non-null, resultTo.onActivityResult() will be called when this
+     *                          preference panel is done.  The launched panel must use
+     *                          {@link #finishPreferencePanel(Fragment, int, Intent)} when done.
      * @param resultRequestCode If resultTo is non-null, this is the caller's
-     * request code to be received with the result.
+     *                          request code to be received with the result.
      */
     public void startPreferencePanel(Fragment caller, String fragmentClass, Bundle args,
             int titleRes, CharSequence titleText, Fragment resultTo, int resultRequestCode) {
@@ -639,10 +608,10 @@
      * activity will be launched in which to show the fragment.
      *
      * @param fragmentClass Full name of the class implementing the fragment.
-     * @param args Any desired arguments to supply to the fragment.
-     * @param titleRes Optional resource identifier of the title of this fragment.
-     * @param titleText Optional text of the title of this fragment.
-     * @param userHandle The user for which the panel has to be started.
+     * @param args          Any desired arguments to supply to the fragment.
+     * @param titleRes      Optional resource identifier of the title of this fragment.
+     * @param titleText     Optional text of the title of this fragment.
+     * @param userHandle    The user for which the panel has to be started.
      */
     public void startPreferencePanelAsUser(Fragment caller, String fragmentClass,
             Bundle args, int titleRes, CharSequence titleText, UserHandle userHandle) {
@@ -676,11 +645,11 @@
     /**
      * Called by a preference panel fragment to finish itself.
      *
-     * @param caller The fragment that is asking to be finished.
+     * @param caller     The fragment that is asking to be finished.
      * @param resultCode Optional result code to send back to the original
-     * launching fragment.
+     *                   launching fragment.
      * @param resultData Optional result data to send back to the original
-     * launching fragment.
+     *                   launching fragment.
      */
     public void finishPreferencePanel(Fragment caller, int resultCode, Intent resultData) {
         setResult(resultCode, resultData);
@@ -691,8 +660,8 @@
      * Start a new fragment.
      *
      * @param fragment The fragment to start
-     * @param push If true, the current fragment will be pushed onto the back stack.  If false,
-     * the current fragment will be replaced.
+     * @param push     If true, the current fragment will be pushed onto the back stack.  If false,
+     *                 the current fragment will be replaced.
      */
     public void startPreferenceFragment(Fragment fragment, boolean push) {
         FragmentTransaction transaction = getFragmentManager().beginTransaction();
@@ -940,29 +909,6 @@
         return mNextButton;
     }
 
-    @Override
-    public boolean shouldUpRecreateTask(Intent targetIntent) {
-        return super.shouldUpRecreateTask(new Intent(this, SettingsActivity.class));
-    }
-
-    public void startSuggestion(Intent intent) {
-        if (intent == null || ActivityManager.isUserAMonkey()) {
-            return;
-        }
-        mCurrentSuggestion = intent.getComponent();
-        startActivityForResult(intent, REQUEST_SUGGESTION);
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == REQUEST_SUGGESTION && mCurrentSuggestion != null
-                && resultCode != RESULT_CANCELED) {
-            getPackageManager().setComponentEnabledSetting(mCurrentSuggestion,
-                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
-        }
-        super.onActivityResult(requestCode, resultCode, data);
-    }
-
     @VisibleForTesting
     Bitmap getBitmapFromXmlResource(int drawableRes) {
         Drawable drawable = getResources().getDrawable(drawableRes, getTheme());
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index f45ac5e..1a32127 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -52,11 +52,8 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.hardware.fingerprint.FingerprintManager;
-import android.icu.text.MeasureFormat;
 import android.icu.text.RelativeDateTimeFormatter;
 import android.icu.text.RelativeDateTimeFormatter.RelativeUnit;
-import android.icu.util.Measure;
-import android.icu.util.MeasureUnit;
 import android.icu.util.ULocale;
 import android.net.ConnectivityManager;
 import android.net.LinkProperties;
@@ -88,8 +85,6 @@
 import android.telephony.TelephonyManager;
 import android.text.Spannable;
 import android.text.SpannableString;
-import android.text.SpannableStringBuilder;
-import android.text.Spanned;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
 import android.text.style.TtsSpan;
@@ -112,6 +107,7 @@
 import com.android.settings.wrapper.FingerprintManagerWrapper;
 import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin;
 
+import com.android.settingslib.utils.StringUtil;
 import java.net.InetAddress;
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -138,10 +134,6 @@
 
     private static final String SETTINGS_PACKAGE_NAME = "com.android.settings";
 
-    private static final int SECONDS_PER_MINUTE = 60;
-    private static final int SECONDS_PER_HOUR = 60 * 60;
-    private static final int SECONDS_PER_DAY = 24 * 60 * 60;
-
     public static final String OS_PKG = "os";
 
     /**
@@ -772,113 +764,6 @@
     }
 
     /**
-     * Returns elapsed time for the given millis, in the following format:
-     * 2d 5h 40m 29s
-     * @param context the application context
-     * @param millis the elapsed time in milli seconds
-     * @param withSeconds include seconds?
-     * @return the formatted elapsed time
-     */
-    public static CharSequence formatElapsedTime(Context context, double millis,
-            boolean withSeconds) {
-        SpannableStringBuilder sb = new SpannableStringBuilder();
-        int seconds = (int) Math.floor(millis / 1000);
-        if (!withSeconds) {
-            // Round up.
-            seconds += 30;
-        }
-
-        int days = 0, hours = 0, minutes = 0;
-        if (seconds >= SECONDS_PER_DAY) {
-            days = seconds / SECONDS_PER_DAY;
-            seconds -= days * SECONDS_PER_DAY;
-        }
-        if (seconds >= SECONDS_PER_HOUR) {
-            hours = seconds / SECONDS_PER_HOUR;
-            seconds -= hours * SECONDS_PER_HOUR;
-        }
-        if (seconds >= SECONDS_PER_MINUTE) {
-            minutes = seconds / SECONDS_PER_MINUTE;
-            seconds -= minutes * SECONDS_PER_MINUTE;
-        }
-
-        final ArrayList<Measure> measureList = new ArrayList(4);
-        if (days > 0) {
-            measureList.add(new Measure(days, MeasureUnit.DAY));
-        }
-        if (hours > 0) {
-            measureList.add(new Measure(hours, MeasureUnit.HOUR));
-        }
-        if (minutes > 0) {
-            measureList.add(new Measure(minutes, MeasureUnit.MINUTE));
-        }
-        if (withSeconds && seconds > 0) {
-            measureList.add(new Measure(seconds, MeasureUnit.SECOND));
-        }
-        if (measureList.size() == 0) {
-            // Everything addable was zero, so nothing was added. We add a zero.
-            measureList.add(new Measure(0, withSeconds ? MeasureUnit.SECOND : MeasureUnit.MINUTE));
-        }
-        final Measure[] measureArray = measureList.toArray(new Measure[measureList.size()]);
-
-        final Locale locale = context.getResources().getConfiguration().locale;
-        final MeasureFormat measureFormat = MeasureFormat.getInstance(
-                locale, MeasureFormat.FormatWidth.NARROW);
-        sb.append(measureFormat.formatMeasures(measureArray));
-
-        if (measureArray.length == 1 && MeasureUnit.MINUTE.equals(measureArray[0].getUnit())) {
-            // Add ttsSpan if it only have minute value, because it will be read as "meters"
-            final TtsSpan ttsSpan = new TtsSpan.MeasureBuilder().setNumber(minutes)
-                    .setUnit("minute").build();
-            sb.setSpan(ttsSpan, 0, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-        }
-
-        return sb;
-    }
-
-    /**
-     * Returns relative time for the given millis in the past, in a short format such as "2 days
-     * ago", "5 hr. ago", "40 min. ago", or "29 sec. ago".
-     *
-     * <p>The unit is chosen to have good information value while only using one unit. So 27 hours
-     * and 50 minutes would be formatted as "28 hr. ago", while 50 hours would be formatted as
-     * "2 days ago".
-     *
-     * @param context the application context
-     * @param millis the elapsed time in milli seconds
-     * @param withSeconds include seconds?
-     * @return the formatted elapsed time
-     */
-    public static CharSequence formatRelativeTime(Context context, double millis,
-            boolean withSeconds) {
-        final int seconds = (int) Math.floor(millis / 1000);
-        final RelativeUnit unit;
-        final int value;
-        if (withSeconds && seconds < 2 * SECONDS_PER_MINUTE) {
-            unit = RelativeUnit.SECONDS;
-            value = seconds;
-        } else if (seconds < 2 * SECONDS_PER_HOUR) {
-            unit = RelativeUnit.MINUTES;
-            value = (seconds + SECONDS_PER_MINUTE / 2) / SECONDS_PER_MINUTE;
-        } else if (seconds < 2 * SECONDS_PER_DAY) {
-            unit = RelativeUnit.HOURS;
-            value = (seconds + SECONDS_PER_HOUR / 2) / SECONDS_PER_HOUR;
-        } else {
-            unit = RelativeUnit.DAYS;
-            value = (seconds + SECONDS_PER_DAY / 2) / SECONDS_PER_DAY;
-        }
-
-        final Locale locale = context.getResources().getConfiguration().locale;
-        final RelativeDateTimeFormatter formatter = RelativeDateTimeFormatter.getInstance(
-                ULocale.forLocale(locale),
-                null /* default NumberFormat */,
-                RelativeDateTimeFormatter.Style.SHORT,
-                android.icu.text.DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE);
-
-        return formatter.format(value, RelativeDateTimeFormatter.Direction.LAST, unit);
-    }
-
-    /**
      * Queries for the UserInfo of a user. Returns null if the user doesn't exist (was removed).
      * @param userManager Instance of UserManager
      * @param checkUser The user to check the existence of.
diff --git a/src/com/android/settings/applications/RecentAppsPreferenceController.java b/src/com/android/settings/applications/RecentAppsPreferenceController.java
index e15671b..b177225 100644
--- a/src/com/android/settings/applications/RecentAppsPreferenceController.java
+++ b/src/com/android/settings/applications/RecentAppsPreferenceController.java
@@ -38,13 +38,13 @@
 import android.util.Log;
 
 import com.android.settings.R;
-import com.android.settings.Utils;
 import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.widget.AppPreference;
 import com.android.settingslib.applications.AppUtils;
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.utils.StringUtil;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
@@ -239,7 +239,7 @@
             pref.setKey(pkgName);
             pref.setTitle(appEntry.label);
             pref.setIcon(mIconDrawableFactory.getBadgedIcon(appEntry.info));
-            pref.setSummary(Utils.formatRelativeTime(mContext,
+            pref.setSummary(StringUtil.formatRelativeTime(mContext,
                     System.currentTimeMillis() - stat.getLastTimeUsed(), false));
             pref.setOrder(i);
             pref.setOnPreferenceClickListener(preference -> {
diff --git a/src/com/android/settings/backup/BackupSettingsHelper.java b/src/com/android/settings/backup/BackupSettingsHelper.java
index b0d6cf8..d0a029c 100644
--- a/src/com/android/settings/backup/BackupSettingsHelper.java
+++ b/src/com/android/settings/backup/BackupSettingsHelper.java
@@ -24,13 +24,12 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
-import android.util.Log;
-
 import android.support.annotation.VisibleForTesting;
+import android.util.Log;
 
 import com.android.settings.R;
 import com.android.settings.Settings.PrivacySettingsActivity;
-import com.android.settingslib.drawer.SettingsDrawerActivity;
+
 import java.net.URISyntaxException;
 
 /**
@@ -153,8 +152,7 @@
 
     private Intent getIntentForDefaultBackupSettings() {
         // Extra needed by {@link SettingsDrawerActivity} to show the back button navigation.
-        return new Intent(mContext, PrivacySettingsActivity.class)
-                .putExtra(SettingsDrawerActivity.EXTRA_SHOW_MENU, true);
+        return new Intent(mContext, PrivacySettingsActivity.class);
     }
 
     /**
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 086a131..3ed76d8 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -33,21 +33,18 @@
 import android.support.v7.preference.Preference;
 import android.text.TextUtils;
 import android.util.ArrayMap;
-import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.util.Pair;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
-import com.android.settings.core.FeatureFlags;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin;
 import com.android.settingslib.drawer.CategoryManager;
 import com.android.settingslib.drawer.DashboardCategory;
 import com.android.settingslib.drawer.ProfileSelectDialog;
-import com.android.settingslib.drawer.SettingsDrawerActivity;
 import com.android.settingslib.drawer.Tile;
 import com.android.settingslib.drawer.TileUtils;
 import com.android.settingslib.utils.ThreadUtils;
@@ -212,7 +209,6 @@
         final Intent intent = new Intent(tile.intent)
                 .putExtra(VisibilityLoggerMixin.EXTRA_SOURCE_METRICS_CATEGORY,
                         MetricsEvent.DASHBOARD_SUMMARY)
-                .putExtra(SettingsDrawerActivity.EXTRA_SHOW_MENU, true)
                 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
         launchIntentOrSelectProfile(activity, tile, intent, MetricsEvent.DASHBOARD_SUMMARY);
     }
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index efcf03d..2093469 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -236,7 +236,6 @@
                 Intent intent = Utils.onBuildStartFragmentIntent(getActivity(),
                         StorageDashboardFragment.class.getName(), args, null,
                         R.string.storage_settings, null, false, getMetricsCategory());
-                intent.putExtra(SettingsDrawerActivity.EXTRA_SHOW_MENU, true);
                 getActivity().startActivity(intent);
                 finish();
             }
diff --git a/src/com/android/settings/deviceinfo/storage/UserProfileController.java b/src/com/android/settings/deviceinfo/storage/UserProfileController.java
index 4870e7e..c9fe54e 100644
--- a/src/com/android/settings/deviceinfo/storage/UserProfileController.java
+++ b/src/com/android/settings/deviceinfo/storage/UserProfileController.java
@@ -85,7 +85,6 @@
             Intent intent = Utils.onBuildStartFragmentIntent(mContext,
                     StorageProfileFragment.class.getName(), args, null, 0,
                     mUser.name, false, MetricsProto.MetricsEvent.DEVICEINFO_STORAGE);
-            intent.putExtra(SettingsDrawerActivity.EXTRA_SHOW_MENU, true);
             mContext.startActivity(intent);
             return true;
         }
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index e073456..981b0dc 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -58,6 +58,7 @@
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.core.AbstractPreferenceController;
 
+import com.android.settingslib.utils.StringUtil;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -284,10 +285,10 @@
         final int powerMah = bundle.getInt(EXTRA_POWER_USAGE_AMOUNT);
         mForegroundPreference.setSummary(
                 TextUtils.expandTemplate(getText(R.string.battery_used_for),
-                        Utils.formatElapsedTime(context, foregroundTimeMs, false)));
+                        StringUtil.formatElapsedTime(context, foregroundTimeMs, false)));
         mBackgroundPreference.setSummary(
                 TextUtils.expandTemplate(getText(R.string.battery_active_for),
-                        Utils.formatElapsedTime(context, backgroundTimeMs, false)));
+                        StringUtil.formatElapsedTime(context, backgroundTimeMs, false)));
         mPowerUsagePreference.setSummary(
                 getString(R.string.battery_detail_power_percentage, usagePercent, powerMah));
     }
diff --git a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
index 91f35e2..2095f25 100644
--- a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
@@ -18,7 +18,6 @@
 package com.android.settings.fuelgauge;
 
 import android.app.Activity;
-import android.app.Fragment;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.os.BatteryStats;
@@ -31,7 +30,6 @@
 import android.support.v14.preference.PreferenceFragment;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceGroup;
-import android.support.v7.preference.PreferenceManager;
 import android.support.v7.preference.PreferenceScreen;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
@@ -48,16 +46,14 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.Utils;
 import com.android.settings.fuelgauge.anomaly.Anomaly;
-import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnDestroy;
 import com.android.settingslib.core.lifecycle.events.OnPause;
 
+import com.android.settingslib.utils.StringUtil;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -362,8 +358,8 @@
         // Only show summary when usage time is longer than one minute
         final long usageTimeMs = sipper.usageTimeMs;
         if (usageTimeMs >= DateUtils.MINUTE_IN_MILLIS) {
-            final CharSequence timeSequence = Utils.formatElapsedTime(mContext, usageTimeMs,
-                    false);
+            final CharSequence timeSequence =
+                StringUtil.formatElapsedTime(mContext, usageTimeMs, false);
             preference.setSummary(
                     (sipper.drainType != DrainType.APP || mBatteryUtils.shouldHideSipper(sipper))
                             ? timeSequence
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index 6384130..43465ab 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -25,7 +25,6 @@
 import android.os.Bundle;
 import android.os.SystemClock;
 import android.support.annotation.WorkerThread;
-import android.text.TextUtils;
 import android.text.format.Formatter;
 import android.util.SparseIntArray;
 
@@ -34,8 +33,14 @@
 import com.android.settings.graph.UsageView;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.R;
+import com.android.settingslib.utils.PowerUtil;
+import com.android.settingslib.utils.StringUtil;
+import java.util.concurrent.TimeUnit;
 
 public class BatteryInfo {
+    private static final long SEVEN_MINUTES_MICROS = TimeUnit.MINUTES.toMicros(7);
+    private static final long FIFTEEN_MINUTES_MICROS = TimeUnit.MINUTES.toMicros(15);
+    private static final long ONE_DAY_MICROS = TimeUnit.DAYS.toMicros(1);
 
     public CharSequence chargeLabel;
     public CharSequence remainingLabel;
@@ -100,7 +105,7 @@
                         if (lastTime >= 0) {
                             points.put(lastTime, lastLevel);
                             points.put((int) (timePeriod +
-                                            BatteryUtils.convertUsToMs(remainingTimeUs)),
+                                            PowerUtil.convertUsToMs(remainingTimeUs)),
                                     mCharging ? 100 : 0);
                         }
                     }
@@ -160,7 +165,7 @@
                 PowerUsageFeatureProvider provider =
                         FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
                 final long elapsedRealtimeUs =
-                        BatteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
+                        PowerUtil.convertMsToUs(SystemClock.elapsedRealtime());
 
                 Intent batteryBroadcast = context.registerReceiver(null,
                         new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
@@ -176,7 +181,7 @@
                                 .logRuntime(LOG_TAG, "time for enhanced BatteryInfo", startTime);
                         return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
                                 elapsedRealtimeUs, shortString,
-                                BatteryUtils.convertMsToUs(estimate.estimateMillis),
+                                PowerUtil.convertMsToUs(estimate.estimateMillis),
                                 estimate.isBasedOnUsage);
                     }
                 }
@@ -217,53 +222,61 @@
 
         info.statusLabel = Utils.getBatteryStatus(resources, batteryBroadcast);
         if (!info.mCharging) {
-            if (drainTimeUs > 0) {
-                info.remainingTimeUs = drainTimeUs;
-                CharSequence timeString = Utils.formatElapsedTime(context,
-                        BatteryUtils.convertUsToMs(drainTimeUs), false /* withSeconds */);
-                info.remainingLabel = TextUtils.expandTemplate(context.getText(shortString ?
-                                R.string.power_remaining_duration_only_short :
-                         (basedOnUsage ?
-                                R.string.power_remaining_duration_only_enhanced :
-                                R.string.power_remaining_duration_only)), timeString);
-                info.chargeLabel = TextUtils.expandTemplate(context.getText(
-                        shortString ?
-                                R.string.power_discharging_duration_short :
-                                basedOnUsage ?
-                                        R.string.power_discharging_duration_enhanced :
-                                        R.string.power_discharging_duration),
-                        info.batteryPercentString, timeString);
-            } else {
-                info.remainingLabel = null;
-                info.chargeLabel = info.batteryPercentString;
-            }
+            updateBatteryInfoDischarging(context, shortString, drainTimeUs, basedOnUsage, info);
         } else {
-            final long chargeTime = stats.computeChargeTimeRemaining(elapsedRealtimeUs);
-            final int status = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_STATUS,
-                    BatteryManager.BATTERY_STATUS_UNKNOWN);
-            info.discharging = false;
-            if (chargeTime > 0 && status != BatteryManager.BATTERY_STATUS_FULL) {
-                info.remainingTimeUs = chargeTime;
-                CharSequence timeString = Utils.formatElapsedTime(context,
-                        BatteryUtils.convertUsToMs(chargeTime), false /* withSeconds */);
-                int resId = R.string.power_charging_duration;
-                info.remainingLabel = TextUtils.expandTemplate(context.getText(
-                        R.string.power_remaining_charging_duration_only), timeString);
-                info.chargeLabel = TextUtils.expandTemplate(context.getText(resId),
-                        info.batteryPercentString, timeString);
-            } else {
-                final String chargeStatusLabel = resources.getString(
-                        R.string.battery_info_status_charging_lower);
-                info.remainingLabel = null;
-                info.chargeLabel = info.batteryLevel == 100 ? info.batteryPercentString :
-                        resources.getString(R.string.power_charging, info.batteryPercentString,
-                                chargeStatusLabel);
-            }
+            updateBatteryInfoCharging(context, batteryBroadcast, stats, elapsedRealtimeUs, info);
         }
         BatteryUtils.logRuntime(LOG_TAG, "time for getBatteryInfo", startTime);
         return info;
     }
 
+    private static void updateBatteryInfoCharging(Context context, Intent batteryBroadcast,
+            BatteryStats stats, long elapsedRealtimeUs, BatteryInfo info) {
+        final Resources resources = context.getResources();
+        final long chargeTime = stats.computeChargeTimeRemaining(elapsedRealtimeUs);
+        final int status = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_STATUS,
+                BatteryManager.BATTERY_STATUS_UNKNOWN);
+        info.discharging = false;
+        if (chargeTime > 0 && status != BatteryManager.BATTERY_STATUS_FULL) {
+            info.remainingTimeUs = chargeTime;
+            CharSequence timeString = StringUtil.formatElapsedTime(context,
+                    PowerUtil.convertUsToMs(info.remainingTimeUs), false /* withSeconds */);
+            int resId = R.string.power_charging_duration;
+            info.remainingLabel = context.getString(
+                    R.string.power_remaining_charging_duration_only, timeString);
+            info.chargeLabel = context.getString(resId, info.batteryPercentString, timeString);
+        } else {
+            final String chargeStatusLabel = resources.getString(
+                    R.string.battery_info_status_charging_lower);
+            info.remainingLabel = null;
+            info.chargeLabel = info.batteryLevel == 100 ? info.batteryPercentString :
+                    resources.getString(R.string.power_charging, info.batteryPercentString,
+                            chargeStatusLabel);
+        }
+    }
+
+    private static void updateBatteryInfoDischarging(Context context, boolean shortString,
+            long drainTimeUs, boolean basedOnUsage, BatteryInfo info) {
+        if (drainTimeUs > 0) {
+            info.remainingTimeUs = drainTimeUs;
+            info.remainingLabel = PowerUtil.getBatteryRemainingStringFormatted(
+                    context,
+                    PowerUtil.convertUsToMs(drainTimeUs),
+                    null /* percentageString */,
+                    basedOnUsage && !shortString
+            );
+            info.chargeLabel = PowerUtil.getBatteryRemainingStringFormatted(
+                    context,
+                    PowerUtil.convertUsToMs(drainTimeUs),
+                    info.batteryPercentString,
+                    basedOnUsage && !shortString
+            );
+        } else {
+            info.remainingLabel = null;
+            info.chargeLabel = info.batteryPercentString;
+        }
+    }
+
     public interface BatteryDataParser {
         void onParsingStarted(long startTime, long endTime);
 
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index 5738c29..da9b705 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -43,6 +43,7 @@
 import com.android.settings.fuelgauge.anomaly.Anomaly;
 import com.android.settings.overlay.FeatureFactory;
 
+import com.android.settingslib.utils.PowerUtil;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.Collections;
@@ -68,19 +69,18 @@
         int BACKGROUND = 2;
         int ALL = 3;
     }
-
     private static final String TAG = "BatteryUtils";
 
     private static final int MIN_POWER_THRESHOLD_MILLI_AMP = 5;
+
     private static final int SECONDS_IN_HOUR = 60 * 60;
     private static BatteryUtils sInstance;
-
     private PackageManager mPackageManager;
+
     private AppOpsManager mAppOpsManager;
     private Context mContext;
     @VisibleForTesting
     PowerUsageFeatureProvider mPowerUsageFeatureProvider;
-
     public static BatteryUtils getInstance(Context context) {
         if (sInstance == null || sInstance.isDataCorrupted()) {
             sInstance = new BatteryUtils(context);
@@ -131,29 +131,30 @@
 
         // Return the min value of STATE_TOP time and foreground activity time, since both of these
         // time have some errors
-        return convertUsToMs(
+        return PowerUtil.convertUsToMs(
                 Math.min(timeUs, getForegroundActivityTotalTimeUs(uid, rawRealTimeUs)));
     }
 
     private long getScreenUsageTimeMs(BatteryStats.Uid uid, int which) {
-        final long rawRealTimeUs = convertMsToUs(SystemClock.elapsedRealtime());
+        final long rawRealTimeUs = PowerUtil.convertMsToUs(SystemClock.elapsedRealtime());
         return getScreenUsageTimeMs(uid, which, rawRealTimeUs);
     }
 
     private long getProcessBackgroundTimeMs(BatteryStats.Uid uid, int which) {
-        final long rawRealTimeUs = convertMsToUs(SystemClock.elapsedRealtime());
+        final long rawRealTimeUs = PowerUtil.convertMsToUs(SystemClock.elapsedRealtime());
         final long timeUs = uid.getProcessStateTime(
                 BatteryStats.Uid.PROCESS_STATE_BACKGROUND, rawRealTimeUs, which);
 
         Log.v(TAG, "package: " + mPackageManager.getNameForUid(uid.getUid()));
         Log.v(TAG, "background time(us): " + timeUs);
-        return convertUsToMs(timeUs);
+        return PowerUtil.convertUsToMs(timeUs);
     }
 
     private long getProcessForegroundTimeMs(BatteryStats.Uid uid, int which) {
-        final long rawRealTimeUs = convertMsToUs(SystemClock.elapsedRealtime());
+        final long rawRealTimeUs = PowerUtil.convertMsToUs(SystemClock.elapsedRealtime());
         return getScreenUsageTimeMs(uid, which, rawRealTimeUs)
-                + convertUsToMs(getForegroundServiceTotalTimeUs(uid, rawRealTimeUs));
+                + PowerUtil.convertUsToMs(
+                        getForegroundServiceTotalTimeUs(uid, rawRealTimeUs));
     }
 
     /**
@@ -267,9 +268,10 @@
      */
     public long calculateRunningTimeBasedOnStatsType(BatteryStatsHelper batteryStatsHelper,
             int statsType) {
-        final long elapsedRealtimeUs = convertMsToUs(SystemClock.elapsedRealtime());
+        final long elapsedRealtimeUs = PowerUtil.convertMsToUs(
+                SystemClock.elapsedRealtime());
         // Return the battery time (millisecond) on status mStatsType
-        return convertUsToMs(
+        return PowerUtil.convertUsToMs(
                 batteryStatsHelper.getStats().computeBatteryRealtime(elapsedRealtimeUs, statsType));
 
     }
@@ -390,25 +392,15 @@
         }
     }
 
-    public static long convertUsToMs(long timeUs) {
-        return timeUs / 1000;
-    }
-
-    public static long convertMsToUs(long timeMs) {
-        return timeMs * 1000;
-    }
-
     public void setForceAppStandby(int uid, String packageName,
             int mode) {
         final boolean isPreOApp = isLegacyApp(packageName);
         if (isPreOApp) {
             // Control whether app could run in the background if it is pre O app
-            mAppOpsManager.setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, uid, packageName,
-                    mode);
+            mAppOpsManager.setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, uid, packageName, mode);
         }
         // Control whether app could run jobs in the background
-        mAppOpsManager.setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, uid, packageName,
-                mode);
+        mAppOpsManager.setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, uid, packageName, mode);
     }
 
     public void initBatteryStatsHelper(BatteryStatsHelper statsHelper, Bundle bundle,
@@ -425,7 +417,8 @@
         // Stuff we always need to get BatteryInfo
         final Intent batteryBroadcast = mContext.registerReceiver(null,
                 new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
-        final long elapsedRealtimeUs = BatteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
+        final long elapsedRealtimeUs = PowerUtil.convertMsToUs(
+                SystemClock.elapsedRealtime());
         BatteryInfo batteryInfo;
 
         // 0 means we are discharging, anything else means charging
@@ -443,7 +436,7 @@
         if (estimate != null) {
             batteryInfo = BatteryInfo.getBatteryInfo(mContext, batteryBroadcast, stats,
                     elapsedRealtimeUs, false /* shortString */,
-                    BatteryUtils.convertMsToUs(estimate.estimateMillis),
+                    PowerUtil.convertMsToUs(estimate.estimateMillis),
                     estimate.isBasedOnUsage);
         } else {
             batteryInfo = BatteryInfo.getBatteryInfo(mContext, batteryBroadcast, stats,
diff --git a/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java b/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java
index e58ccd3..509f967 100644
--- a/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java
+++ b/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java
@@ -22,6 +22,7 @@
 import android.os.SystemClock;
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.utils.PowerUtil;
 import com.android.settingslib.utils.AsyncLoader;
 import java.util.ArrayList;
 import java.util.List;
@@ -46,7 +47,8 @@
                 FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
 
         // get stuff we'll need for both BatteryInfo
-        final long elapsedRealtimeUs = BatteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
+        final long elapsedRealtimeUs = PowerUtil.convertMsToUs(
+                SystemClock.elapsedRealtime());
         Intent batteryBroadcast = getContext().registerReceiver(null,
                 new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
         BatteryStats stats = mStatsHelper.getStats();
@@ -60,7 +62,7 @@
         }
         BatteryInfo newInfo = BatteryInfo.getBatteryInfo(getContext(), batteryBroadcast, stats,
                 elapsedRealtimeUs, false,
-                BatteryUtils.convertMsToUs(estimate.estimateMillis),
+                PowerUtil.convertMsToUs(estimate.estimateMillis),
                 estimate.isBasedOnUsage);
 
         List<BatteryInfo> infos = new ArrayList<>();
diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
index 6ed92a7..25351d3 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
@@ -47,6 +47,7 @@
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.core.AbstractPreferenceController;
 
+import com.android.settingslib.utils.StringUtil;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
@@ -318,7 +319,7 @@
             return;
         }
         if (usageData.usageList.size() <= 1) {
-            CharSequence timeSequence = Utils.formatElapsedTime(getContext(),
+            CharSequence timeSequence = StringUtil.formatElapsedTime(getContext(),
                     usageData.totalUsageTimeMs, false);
             usageData.summary = usageData.usageType == UsageType.IDLE ? timeSequence
                     : TextUtils.expandTemplate(getText(R.string.battery_used_for), timeSequence);
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 2a841f9..3583b14 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -37,10 +37,7 @@
 import android.view.View.OnLongClickListener;
 import android.widget.TextView;
 
-import com.android.internal.hardware.AmbientDisplayConfiguration;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.os.BatterySipper;
-import com.android.internal.os.BatterySipper.DrainType;
 import com.android.settings.R;
 import com.android.settings.Settings.HighPowerApplicationsActivity;
 import com.android.settings.SettingsActivity;
@@ -48,10 +45,7 @@
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.applications.manageapplications.ManageApplications;
 import com.android.settings.dashboard.SummaryLoader;
-import com.android.settings.display.AmbientDisplayPreferenceController;
-import com.android.settings.display.AutoBrightnessPreferenceController;
 import com.android.settings.display.BatteryPercentagePreferenceController;
-import com.android.settings.display.TimeoutPreferenceController;
 import com.android.settings.fuelgauge.anomaly.Anomaly;
 import com.android.settings.fuelgauge.anomaly.AnomalyDetectionPolicy;
 import com.android.settings.fuelgauge.batterytip.BatteryTipLoader;
@@ -63,6 +57,8 @@
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
+import com.android.settingslib.utils.PowerUtil;
+import com.android.settingslib.utils.StringUtil;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -72,7 +68,7 @@
  * consumed since the last time it was unplugged.
  */
 public class PowerUsageSummary extends PowerUsageBase implements OnLongClickListener,
-        OnClickListener, BatteryTipPreferenceController.BatteryTipListener {
+        BatteryTipPreferenceController.BatteryTipListener {
 
     static final String TAG = "PowerUsageSummary";
 
@@ -80,7 +76,6 @@
     private static final String KEY_APP_LIST = "app_list";
     private static final String KEY_BATTERY_HEADER = "battery_header";
     private static final String KEY_BATTERY_TIP = "battery_tip";
-    private static final String KEY_SHOW_ALL_APPS = "show_all_apps";
 
     private static final String KEY_SCREEN_USAGE = "screen_usage";
     private static final String KEY_TIME_SINCE_LAST_FULL_CHARGE = "last_full_charge";
@@ -165,12 +160,12 @@
                     // be unplugged for a period of time before being willing ot make an estimate.
                     summary1.setText(mPowerFeatureProvider.getOldEstimateDebugString(
                             Formatter.formatShortElapsedTime(getContext(),
-                                    BatteryUtils.convertUsToMs(oldInfo.remainingTimeUs))));
+                                    PowerUtil.convertUsToMs(oldInfo.remainingTimeUs))));
 
                     // for this one we can just set the string directly
                     summary2.setText(mPowerFeatureProvider.getEnhancedEstimateDebugString(
                             Formatter.formatShortElapsedTime(getContext(),
-                                    BatteryUtils.convertUsToMs(newInfo.remainingTimeUs))));
+                                    PowerUtil.convertUsToMs(newInfo.remainingTimeUs))));
 
                     batteryView.setBatteryLevel(oldInfo.batteryLevel);
                     batteryView.setCharging(!oldInfo.discharging);
@@ -225,15 +220,6 @@
     }
 
     @Override
-    public boolean onPreferenceTreeClick(Preference preference) {
-        if (KEY_BATTERY_HEADER.equals(preference.getKey())) {
-            performBatteryHeaderClick();
-            return true;
-        }
-        return super.onPreferenceTreeClick(preference);
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
@@ -311,22 +297,6 @@
         }
     }
 
-    private void performBatteryHeaderClick() {
-        if (mPowerFeatureProvider.isAdvancedUiEnabled()) {
-            Utils.startWithFragment(getContext(), PowerUsageAdvanced.class.getName(), null,
-                    null, 0, R.string.advanced_battery_title, null, getMetricsCategory());
-        } else {
-            mStatsHelper.storeStatsHistoryInFile(BatteryHistoryDetail.BATTERY_HISTORY_FILE);
-            Bundle args = new Bundle(2);
-            args.putString(BatteryHistoryDetail.EXTRA_STATS,
-                    BatteryHistoryDetail.BATTERY_HISTORY_FILE);
-            args.putParcelable(BatteryHistoryDetail.EXTRA_BROADCAST,
-                    mStatsHelper.getBatteryBroadcast());
-            Utils.startWithFragment(getContext(), BatteryHistoryDetail.class.getName(), args,
-                    null, 0, R.string.history_details_title, null, getMetricsCategory());
-        }
-    }
-
     protected void refreshUi() {
         final Context context = getContext();
         if (context == null) {
@@ -340,10 +310,10 @@
         final long lastFullChargeTime = mBatteryUtils.calculateLastFullChargeTime(mStatsHelper,
                 System.currentTimeMillis());
         updateLastFullChargePreference(lastFullChargeTime);
-        mScreenUsagePref.setSubtitle(Utils.formatElapsedTime(getContext(),
+        mScreenUsagePref.setSubtitle(StringUtil.formatElapsedTime(getContext(),
                 mBatteryUtils.calculateScreenUsageTime(mStatsHelper), false));
 
-        final CharSequence timeSequence = Utils.formatRelativeTime(context, lastFullChargeTime,
+        final CharSequence timeSequence = StringUtil.formatRelativeTime(context, lastFullChargeTime,
                 false);
         mBatteryAppListPreferenceController.refreshAppListGroup(mStatsHelper,
                 false /* showAllApps */, timeSequence);
@@ -366,7 +336,7 @@
 
     @VisibleForTesting
     void updateLastFullChargePreference(long timeMs) {
-        final CharSequence timeSequence = Utils.formatRelativeTime(getContext(), timeMs, false);
+        final CharSequence timeSequence = StringUtil.formatRelativeTime(getContext(), timeMs, false);
         mLastFullChargePref.setSubtitle(timeSequence);
     }
 
@@ -405,12 +375,9 @@
         getLoaderManager().restartLoader(BATTERY_INFO_LOADER, Bundle.EMPTY,
                 mBatteryInfoLoaderCallbacks);
         if (mPowerFeatureProvider.isEstimateDebugEnabled()) {
-            // Unfortunately setting a long click listener on a view means it will no
-            // longer pass the regular click event to the parent, so we have to register
-            // a regular click listener as well.
+            // Set long click action for summary to show debug info
             View header = mBatteryLayoutPref.findViewById(R.id.summary1);
             header.setOnLongClickListener(this);
-            header.setOnClickListener(this);
         }
     }
 
@@ -422,11 +389,6 @@
     }
 
     @Override
-    public void onClick(View view) {
-        performBatteryHeaderClick();
-    }
-
-    @Override
     protected void restartBatteryStatsLoader() {
         restartBatteryStatsLoader(true /* clearHeader */);
     }
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
index 605591d..e6c4923 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
@@ -69,6 +69,8 @@
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.core.AbstractPreferenceController;
 
+import com.android.settingslib.utils.PowerUtil;
+import com.android.settingslib.utils.StringUtil;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -210,12 +212,12 @@
                     // be unplugged for a period of time before being willing ot make an estimate.
                     summary1.setText(mPowerFeatureProvider.getOldEstimateDebugString(
                             Formatter.formatShortElapsedTime(getContext(),
-                                    BatteryUtils.convertUsToMs(oldInfo.remainingTimeUs))));
+                                    PowerUtil.convertUsToMs(oldInfo.remainingTimeUs))));
 
                     // for this one we can just set the string directly
                     summary2.setText(mPowerFeatureProvider.getEnhancedEstimateDebugString(
                             Formatter.formatShortElapsedTime(getContext(),
-                                    BatteryUtils.convertUsToMs(newInfo.remainingTimeUs))));
+                                    PowerUtil.convertUsToMs(newInfo.remainingTimeUs))));
 
                     batteryView.setBatteryLevel(oldInfo.batteryLevel);
                     batteryView.setCharging(!oldInfo.discharging);
@@ -524,7 +526,7 @@
         updateScreenPreference();
         updateLastFullChargePreference(lastFullChargeTime);
 
-        final CharSequence timeSequence = Utils.formatRelativeTime(context, lastFullChargeTime,
+        final CharSequence timeSequence = StringUtil.formatRelativeTime(context, lastFullChargeTime,
                 false);
         final int resId = mShowAllApps ? R.string.power_usage_list_summary_device
                 : R.string.power_usage_list_summary;
@@ -653,12 +655,13 @@
                 mStatsHelper.getUsageList(), DrainType.SCREEN);
         final long usageTimeMs = sipper != null ? sipper.usageTimeMs : 0;
 
-        mScreenUsagePref.setSubtitle(Utils.formatElapsedTime(getContext(), usageTimeMs, false));
+        mScreenUsagePref.setSubtitle(
+            StringUtil.formatElapsedTime(getContext(), usageTimeMs, false));
     }
 
     @VisibleForTesting
     void updateLastFullChargePreference(long timeMs) {
-        final CharSequence timeSequence = Utils.formatRelativeTime(getContext(), timeMs, false);
+        final CharSequence timeSequence = StringUtil.formatRelativeTime(getContext(), timeMs, false);
         mLastFullChargePref.setSubtitle(timeSequence);
     }
 
@@ -685,8 +688,8 @@
         // Only show summary when usage time is longer than one minute
         final long usageTimeMs = sipper.usageTimeMs;
         if (usageTimeMs >= DateUtils.MINUTE_IN_MILLIS) {
-            final CharSequence timeSequence = Utils.formatElapsedTime(getContext(), usageTimeMs,
-                    false);
+            final CharSequence timeSequence =
+                    StringUtil.formatElapsedTime(getContext(), usageTimeMs, false);
             preference.setSummary(
                     (sipper.drainType != DrainType.APP || mBatteryUtils.shouldHideSipper(sipper))
                             ? timeSequence
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java
index 66ce3ca..d93b589 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java
@@ -36,6 +36,7 @@
 import com.android.settings.fuelgauge.batterytip.tips.HighUsageTip;
 import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
 import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
+import com.android.settingslib.utils.StringUtil;
 
 import java.util.List;
 
@@ -83,7 +84,8 @@
 
                 return new AlertDialog.Builder(context)
                         .setMessage(getString(R.string.battery_tip_dialog_message,
-                                Utils.formatElapsedTime(context, highUsageTip.getScreenTimeMs(),
+                                StringUtil.formatElapsedTime(
+                                        context, highUsageTip.getScreenTimeMs(),
                                         false /* withSeconds */)))
                         .setView(view)
                         .setPositiveButton(android.R.string.ok, null)
diff --git a/src/com/android/settings/fuelgauge/batterytip/HighUsageAdapter.java b/src/com/android/settings/fuelgauge/batterytip/HighUsageAdapter.java
index 6c129d8..d982280 100644
--- a/src/com/android/settings/fuelgauge/batterytip/HighUsageAdapter.java
+++ b/src/com/android/settings/fuelgauge/batterytip/HighUsageAdapter.java
@@ -30,6 +30,7 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 
+import com.android.settingslib.utils.StringUtil;
 import java.util.List;
 
 /**
@@ -78,7 +79,7 @@
                         UserHandle.myUserId()));
         holder.appName.setText(Utils.getApplicationLabel(mContext, app.packageName));
         if (app.screenOnTimeMs != 0) {
-            holder.appTime.setText(Utils.formatElapsedTime(mContext, app.screenOnTimeMs, false));
+            holder.appTime.setText(StringUtil.formatElapsedTime(mContext, app.screenOnTimeMs, false));
         }
     }
 
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTip.java
index 2aabf98..6091131 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTip.java
@@ -22,9 +22,9 @@
 import android.support.annotation.VisibleForTesting;
 
 import com.android.settings.R;
-import com.android.settings.Utils;
 import com.android.settings.fuelgauge.batterytip.AppInfo;
 
+import com.android.settingslib.utils.StringUtil;
 import java.util.List;
 
 /**
@@ -65,7 +65,7 @@
     @Override
     public CharSequence getSummary(Context context) {
         return context.getString(R.string.battery_tip_high_usage_summary,
-                Utils.formatElapsedTime(context, mScreenTimeMs, false));
+                StringUtil.formatElapsedTime(context, mScreenTimeMs, false));
     }
 
     @Override
diff --git a/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java b/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java
index 279dcd3..ce5e1d1 100644
--- a/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java
+++ b/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java
@@ -46,6 +46,7 @@
 import com.android.settingslib.applications.AppUtils;
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.utils.StringUtil;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
@@ -229,7 +230,7 @@
             pref.setKey(pkgName);
             pref.setTitle(appEntry.label);
             pref.setIcon(mIconDrawableFactory.getBadgedIcon(appEntry.info));
-            pref.setSummary(Utils.formatRelativeTime(mContext,
+            pref.setSummary(StringUtil.formatRelativeTime(mContext,
                     System.currentTimeMillis() - app.getLastNotified(), false));
             pref.setOrder(i);
             Bundle args = new Bundle();
diff --git a/src/com/android/settings/notification/VisibilityPreferenceController.java b/src/com/android/settings/notification/VisibilityPreferenceController.java
index 62ca183..dac90ef 100644
--- a/src/com/android/settings/notification/VisibilityPreferenceController.java
+++ b/src/com/android/settings/notification/VisibilityPreferenceController.java
@@ -84,14 +84,17 @@
                                 | DevicePolicyManager.KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS);
             }
 
-            final String summaryHideEntry =
-                    mContext.getString(R.string.lock_screen_notifications_summary_hide);
-            final String summaryHideEntryValue = Integer.toString(Notification.VISIBILITY_PRIVATE);
-            entries.add(summaryHideEntry);
-            values.add(summaryHideEntryValue);
-            setRestrictedIfNotificationFeaturesDisabled(pref,
-                    summaryHideEntry, summaryHideEntryValue,
-                    DevicePolicyManager.KEYGUARD_DISABLE_SECURE_NOTIFICATIONS);
+            if (getLockscreenNotificationsEnabled()) {
+                final String summaryHideEntry =
+                        mContext.getString(R.string.lock_screen_notifications_summary_hide);
+                final String summaryHideEntryValue = Integer.toString(
+                        Notification.VISIBILITY_PRIVATE);
+                entries.add(summaryHideEntry);
+                values.add(summaryHideEntryValue);
+                setRestrictedIfNotificationFeaturesDisabled(pref,
+                        summaryHideEntry, summaryHideEntryValue,
+                        DevicePolicyManager.KEYGUARD_DISABLE_SECURE_NOTIFICATIONS);
+            }
             entries.add(mContext.getString(R.string.lock_screen_notifications_summary_disable));
             values.add(Integer.toString(Notification.VISIBILITY_SECRET));
             pref.setEntries(entries.toArray(new CharSequence[entries.size()]));
diff --git a/src/com/android/settings/users/AutoSyncWorkDataPreferenceController.java b/src/com/android/settings/users/AutoSyncWorkDataPreferenceController.java
index 1970195..5e8ad2c 100644
--- a/src/com/android/settings/users/AutoSyncWorkDataPreferenceController.java
+++ b/src/com/android/settings/users/AutoSyncWorkDataPreferenceController.java
@@ -17,6 +17,7 @@
 
 import android.app.Fragment;
 import android.content.Context;
+import android.os.UserHandle;
 
 import com.android.settings.Utils;
 
@@ -34,4 +35,10 @@
     public String getPreferenceKey() {
         return KEY_AUTO_SYNC_WORK_ACCOUNT;
     }
+
+    @Override
+    public boolean isAvailable() {
+        return mUserHandle != null && !mUserManager.isManagedProfile() && !mUserManager.isLinkedUser()
+                && mUserManager.getProfiles(UserHandle.myUserId()).size() > 1;
+    }
 }
diff --git a/src/com/android/settings/wifi/ConnectedAccessPointPreference.java b/src/com/android/settings/wifi/ConnectedAccessPointPreference.java
index 6b9c788..514525c 100644
--- a/src/com/android/settings/wifi/ConnectedAccessPointPreference.java
+++ b/src/com/android/settings/wifi/ConnectedAccessPointPreference.java
@@ -36,6 +36,7 @@
     public ConnectedAccessPointPreference(AccessPoint accessPoint, Context context,
             UserBadgeCache cache, @DrawableRes int iconResId, boolean forSavedNetworks) {
         super(accessPoint, context, cache, iconResId, forSavedNetworks);
+        setWidgetLayoutResource(R.layout.preference_widget_gear_no_bg);
     }
 
     public void setOnGearClickListener(OnGearClickListener l) {
@@ -44,26 +45,6 @@
     }
 
     @Override
-    protected int getSecondTargetResId() {
-        return R.layout.preference_widget_gear;
-    }
-
-    @Override
-    protected boolean shouldHideSecondTarget() {
-        return mOnGearClickListener == null;
-    }
-
-    @Override
-    public void onBindViewHolder(PreferenceViewHolder holder) {
-        super.onBindViewHolder(holder);
-        final View gear = holder.findViewById(R.id.settings_button);
-        if (gear != null) {
-            gear.setOnClickListener(this);
-        }
-        setDividerVisibility(holder, View.VISIBLE);
-    }
-
-    @Override
     public void onClick(View v) {
         if (v.getId() == R.id.settings_button) {
             if (mOnGearClickListener != null) {
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 8e2ea63..69dc130 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -105,6 +105,10 @@
     private static final String PREF_KEY_CONFIGURE_WIFI_SETTINGS = "configure_settings";
     private static final String PREF_KEY_SAVED_NETWORKS = "saved_networks";
 
+    private static boolean isVerboseLoggingEnabled() {
+        return WifiTracker.sVerboseLogging || Log.isLoggable(TAG, Log.VERBOSE);
+    }
+
     private final Runnable mUpdateAccessPointsRunnable = () -> {
         updateAccessPointPreferences();
     };
@@ -367,7 +371,7 @@
         }
         setProgressBarVisible(true);
         mWifiTracker.forceUpdate();
-        if (WifiTracker.sVerboseLogging) {
+        if (isVerboseLoggingEnabled()) {
             Log.i(TAG, "WifiSettings force update APs: " + mWifiTracker.getAccessPoints());
         }
         getView().removeCallbacks(mUpdateAccessPointsRunnable);
@@ -732,7 +736,7 @@
         }
         // AccessPoints are sorted by the WifiTracker
         final List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints();
-        if (WifiTracker.sVerboseLogging) {
+        if (isVerboseLoggingEnabled()) {
             Log.i(TAG, "updateAccessPoints called for: " + accessPoints);
         }
 
@@ -854,13 +858,14 @@
                 connectedAp);
 
         // Launch details page on click.
-        pref.setOnGearClickListener(l -> {
+        pref.setOnPreferenceClickListener(preference -> {
             pref.getAccessPoint().saveWifiState(pref.getExtras());
 
             SettingsActivity activity = (SettingsActivity) WifiSettings.this.getActivity();
             activity.startPreferencePanel(this,
                     WifiNetworkDetailsFragment.class.getName(), pref.getExtras(),
                     -1 /* resId */, pref.getTitle(), null, 0 /* resultRequestCode */);
+            return true;
         });
 
         pref.refresh();
diff --git a/tests/robotests/src/com/android/settings/SettingsActivityTest.java b/tests/robotests/src/com/android/settings/SettingsActivityTest.java
index 509ecda..25abd4d 100644
--- a/tests/robotests/src/com/android/settings/SettingsActivityTest.java
+++ b/tests/robotests/src/com/android/settings/SettingsActivityTest.java
@@ -16,7 +16,6 @@
 
 package com.android.settings;
 
-import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Mockito.doReturn;
@@ -28,17 +27,14 @@
 import android.app.ActivityManager;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
-import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
-import android.os.Bundle;
 
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RuntimeEnvironment;
@@ -48,9 +44,6 @@
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class SettingsActivityTest {
 
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private Context mContext;
-
     @Mock
     private FragmentManager mFragmentManager;
     @Mock
@@ -84,13 +77,4 @@
 
         verify(mTaskDescription).setIcon(nullable(Bitmap.class));
     }
-
-    @Test
-    public void testSaveState_EnabledHomeSaved() {
-        mActivity.mDisplayHomeAsUpEnabled = true;
-        Bundle bundle = new Bundle();
-        mActivity.saveState(bundle);
-
-        assertThat((boolean) bundle.get(SettingsActivity.SAVE_KEY_SHOW_HOME_AS_UP)).isTrue();
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/UtilsTest.java b/tests/robotests/src/com/android/settings/UtilsTest.java
index fb571bb..d1c4a55 100644
--- a/tests/robotests/src/com/android/settings/UtilsTest.java
+++ b/tests/robotests/src/com/android/settings/UtilsTest.java
@@ -1,3 +1,19 @@
+/*
+ * 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;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -25,9 +41,7 @@
 import android.os.storage.DiskInfo;
 import android.os.storage.StorageManager;
 import android.os.storage.VolumeInfo;
-import android.text.SpannableStringBuilder;
 import android.text.format.DateUtils;
-import android.text.style.TtsSpan;
 import android.util.IconDrawableFactory;
 import android.widget.EditText;
 import android.widget.TextView;
@@ -35,6 +49,7 @@
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.wrapper.DevicePolicyManagerWrapper;
 
+import com.android.settingslib.utils.StringUtil;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -110,175 +125,6 @@
     }
 
     @Test
-    public void testFormatElapsedTime_WithSeconds_ShowSeconds() {
-        final double testMillis = 5 * DateUtils.MINUTE_IN_MILLIS + 30 * DateUtils.SECOND_IN_MILLIS;
-        final String expectedTime = "5m 30s";
-
-        assertThat(Utils.formatElapsedTime(mContext, testMillis, true).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatElapsedTime_NoSeconds_DoNotShowSeconds() {
-        final double testMillis = 5 * DateUtils.MINUTE_IN_MILLIS + 30 * DateUtils.SECOND_IN_MILLIS;
-        final String expectedTime = "6m";
-
-        assertThat(Utils.formatElapsedTime(mContext, testMillis, false).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatElapsedTime_TimeMoreThanOneDay_ShowCorrectly() {
-        final double testMillis = 2 * DateUtils.DAY_IN_MILLIS
-                + 4 * DateUtils.HOUR_IN_MILLIS + 15 * DateUtils.MINUTE_IN_MILLIS;
-        final String expectedTime = "2d 4h 15m";
-
-        assertThat(Utils.formatElapsedTime(mContext, testMillis, false).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatElapsedTime_ZeroFieldsInTheMiddleDontShow() {
-        final double testMillis = 2 * DateUtils.DAY_IN_MILLIS + 15 * DateUtils.MINUTE_IN_MILLIS;
-        final String expectedTime = "2d 15m";
-
-        assertThat(Utils.formatElapsedTime(mContext, testMillis, false).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatElapsedTime_FormatZero_WithSeconds() {
-        final double testMillis = 0;
-        final String expectedTime = "0s";
-
-        assertThat(Utils.formatElapsedTime(mContext, testMillis, true).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatElapsedTime_FormatZero_NoSeconds() {
-        final double testMillis = 0;
-        final String expectedTime = "0m";
-
-        assertThat(Utils.formatElapsedTime(mContext, testMillis, false).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatElapsedTime_onlyContainsMinute_hasTtsSpan() {
-        final double testMillis = 15 * DateUtils.MINUTE_IN_MILLIS;
-
-        final CharSequence charSequence = Utils.formatElapsedTime(mContext, testMillis, false);
-        assertThat(charSequence).isInstanceOf(SpannableStringBuilder.class);
-
-        final SpannableStringBuilder expectedString = (SpannableStringBuilder) charSequence;
-        final TtsSpan[] ttsSpans = expectedString.getSpans(0, expectedString.length(),
-                TtsSpan.class);
-
-        assertThat(ttsSpans).asList().hasSize(1);
-        assertThat(ttsSpans[0].getType()).isEqualTo(TtsSpan.TYPE_MEASURE);
-    }
-
-    @Test
-    public void testFormatRelativeTime_WithSeconds_ShowSeconds() {
-        final double testMillis = 40 * DateUtils.SECOND_IN_MILLIS;
-        final String expectedTime = "40 sec. ago";
-
-        assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatRelativeTime_NoSeconds_DoNotShowSeconds() {
-        final double testMillis = 40 * DateUtils.SECOND_IN_MILLIS;
-        final String expectedTime = "1 min. ago";
-
-        assertThat(Utils.formatRelativeTime(mContext, testMillis, false).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatRelativeTime_LessThanTwoMinutes_withSeconds() {
-        final double testMillis = 119 * DateUtils.SECOND_IN_MILLIS;
-        final String expectedTime = "119 sec. ago";
-
-        assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatRelativeTime_LessThanTwoMinutes_NoSeconds() {
-        final double testMillis = 119 * DateUtils.SECOND_IN_MILLIS;
-        final String expectedTime = "2 min. ago";
-
-        assertThat(Utils.formatRelativeTime(mContext, testMillis, false).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatRelativeTime_TwoMinutes_withSeconds() {
-        final double testMillis = 2 * DateUtils.MINUTE_IN_MILLIS;
-        final String expectedTime = "2 min. ago";
-
-        assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatRelativeTime_LessThanTwoHours_withSeconds() {
-        final double testMillis = 119 * DateUtils.MINUTE_IN_MILLIS;
-        final String expectedTime = "119 min. ago";
-
-        assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatRelativeTime_TwoHours_withSeconds() {
-        final double testMillis = 2 * DateUtils.HOUR_IN_MILLIS;
-        final String expectedTime = "2 hr. ago";
-
-        assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatRelativeTime_LessThanTwoDays_withSeconds() {
-        final double testMillis = 47 * DateUtils.HOUR_IN_MILLIS;
-        final String expectedTime = "47 hr. ago";
-
-        assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatRelativeTime_TwoDays_withSeconds() {
-        final double testMillis = 2 * DateUtils.DAY_IN_MILLIS;
-        final String expectedTime = "2 days ago";
-
-        assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatRelativeTime_FormatZero_WithSeconds() {
-        final double testMillis = 0;
-        final String expectedTime = "0 sec. ago";
-
-        assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
-    public void testFormatRelativeTime_FormatZero_NoSeconds() {
-        final double testMillis = 0;
-        final String expectedTime = "0 min. ago";
-
-        assertThat(Utils.formatRelativeTime(mContext, testMillis, false).toString()).isEqualTo(
-                expectedTime);
-    }
-
-    @Test
     public void testInitializeVolumeDoesntBreakOnNullVolume() {
         VolumeInfo info = new VolumeInfo("id", 0, new DiskInfo("id", 0), "");
         StorageManager storageManager = mock(StorageManager.class, RETURNS_DEEP_STUBS);
diff --git a/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java b/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java
index 9de0c6a..4e5428c 100644
--- a/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java
+++ b/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java
@@ -16,6 +16,14 @@
 
 package com.android.settings.backup;
 
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
 import android.app.backup.BackupManager;
 import android.app.backup.IBackupManager;
 import android.content.ComponentName;
@@ -26,6 +34,10 @@
 import android.os.IBinder;
 import android.os.RemoteException;
 
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -36,19 +48,6 @@
 import org.robolectric.annotation.Implementation;
 import org.robolectric.annotation.Implements;
 
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.anyInt;
-import static org.mockito.Mockito.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settingslib.drawer.SettingsDrawerActivity;
-
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
         shadows = {BackupSettingsHelperTest.ShadowBackupManagerStub.class})
@@ -263,8 +262,6 @@
 
         assertThat(backupIntent.getComponent().getClassName()).isEqualTo(
                 DEFAULT_SETTINGS_CLASSNAME);
-        assertThat(backupIntent.getExtras().getBoolean(
-                SettingsDrawerActivity.EXTRA_SHOW_MENU)).isTrue();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
index 70958a9..45edb47 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
@@ -43,6 +43,9 @@
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
+import com.android.settingslib.R;
+import com.android.settingslib.utils.PowerUtil;
+import java.time.Duration;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -72,6 +75,8 @@
     public static final long TEST_CHARGE_TIME_REMAINING = TimeUnit.MINUTES.toMicros(1);
     public static final String TEST_CHARGE_TIME_REMAINING_STRINGIFIED =
             "1m left until fully charged";
+    public static final String TEST_BATTERY_LEVEL_10 = "10%";
+    public static final String FIFTEEN_MIN_FORMATTED = "15m";
     private Intent mDisChargingBatteryBroadcast;
     private Intent mChargingBatteryBroadcast;
     private Context mContext;
@@ -134,13 +139,15 @@
     }
 
     @Test
-    public void testGetBatteryInfo_basedOnUsageTrue_usesCorrectString() {
+    public void testGetBatteryInfo_basedOnUsageTrueMoreThanFifteenMinutes_usesCorrectString() {
         BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
                 mBatteryStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */,
-                1000, true /* basedOnUsage */);
+                PowerUtil.convertMsToUs(Duration.ofHours(4).toMillis()),
+                true /* basedOnUsage */);
         BatteryInfo info2 = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
                 mBatteryStats, SystemClock.elapsedRealtime() * 1000, true /* shortString */,
-                1000, true /* basedOnUsage */);
+                PowerUtil.convertMsToUs(Duration.ofHours(4).toMillis()),
+                true /* basedOnUsage */);
 
         // We only add special mention for the long string
         assertThat(info.remainingLabel.toString()).contains(ENHANCED_STRING_SUFFIX);
@@ -149,6 +156,41 @@
     }
 
     @Test
+    public void testGetBatteryInfo_basedOnUsageTrueLessThanSevenMinutes_usesCorrectString() {
+        BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
+                mBatteryStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */,
+                PowerUtil.convertMsToUs(Duration.ofMinutes(7).toMillis()),
+                true /* basedOnUsage */);
+        BatteryInfo info2 = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
+                mBatteryStats, SystemClock.elapsedRealtime() * 1000, true /* shortString */,
+                PowerUtil.convertMsToUs(Duration.ofMinutes(7).toMillis()),
+                true /* basedOnUsage */);
+
+        // These should be identical in either case
+        assertThat(info.remainingLabel.toString()).isEqualTo(
+                mContext.getString(R.string.power_remaining_duration_only_shutdown_imminent));
+        assertThat(info2.remainingLabel.toString()).isEqualTo(
+                mContext.getString(R.string.power_remaining_duration_only_shutdown_imminent));
+    }
+
+    @Test
+    public void testGetBatteryInfo_basedOnUsageTrueBetweenSevenAndFifteenMinutes_usesCorrectString() {
+        BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
+                mBatteryStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */,
+                PowerUtil.convertMsToUs(Duration.ofMinutes(10).toMillis()),
+                true /* basedOnUsage */);
+
+        // Check that strings are showing less than 15 minutes remaining regardless of exact time.
+        assertThat(info.chargeLabel.toString()).isEqualTo(
+                mContext.getString(R.string.power_remaining_less_than_duration,
+                        TEST_BATTERY_LEVEL_10, FIFTEEN_MIN_FORMATTED));
+        assertThat(info.remainingLabel.toString()).isEqualTo(
+                mContext.getString(R.string.power_remaining_less_than_duration_only,
+                        FIFTEEN_MIN_FORMATTED));
+    }
+
+
+    @Test
     public void testGetBatteryInfo_basedOnUsageFalse_usesDefaultString() {
         BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
                 mBatteryStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */,
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacyTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacyTest.java
index e707ede..a3786c2 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacyTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacyTest.java
@@ -55,7 +55,6 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.TestConfig;
-import com.android.settings.Utils;
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.fuelgauge.anomaly.Anomaly;
 import com.android.settings.fuelgauge.anomaly.AnomalyDetectionPolicy;
@@ -65,6 +64,7 @@
 import com.android.settings.testutils.shadow.SettingsShadowResources;
 import com.android.settingslib.core.AbstractPreferenceController;
 
+import com.android.settingslib.utils.StringUtil;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -367,8 +367,8 @@
     public void testUpdateScreenPreference_showCorrectSummary() {
         doReturn(mScreenBatterySipper).when(mFragment).findBatterySipperByType(any(), any());
         doReturn(mRealContext).when(mFragment).getContext();
-        final CharSequence expectedSummary = Utils.formatElapsedTime(mRealContext, USAGE_TIME_MS,
-                false);
+        final CharSequence expectedSummary =
+            StringUtil.formatElapsedTime(mRealContext, USAGE_TIME_MS, false);
 
         mFragment.updateScreenPreference();
 
diff --git a/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java
index 25dba80..d3863db 100644
--- a/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.notification;
 
+import static android.app.Notification.VISIBILITY_PRIVATE;
 import static android.app.NotificationChannel.DEFAULT_CHANNEL_ID;
 import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
 import static android.app.NotificationManager.IMPORTANCE_MIN;
@@ -114,14 +115,14 @@
     }
 
     @Test
-    public void testNoCrashIfNoOnResume() throws Exception {
+    public void testNoCrashIfNoOnResume() {
         mController.isAvailable();
         mController.updateState(mock(RestrictedListPreference.class));
         mController.onPreferenceChange(mock(RestrictedListPreference.class), true);
     }
 
     @Test
-    public void testIsAvailable_notSecure() throws Exception {
+    public void testIsAvailable_notSecure() {
         when(mLockUtils.isSecure(anyInt())).thenReturn(false);
         NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
         NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_DEFAULT);
@@ -130,7 +131,7 @@
     }
 
     @Test
-    public void testIsAvailable_notIfNotImportant() throws Exception {
+    public void testIsAvailable_notIfNotImportant() {
         NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
         NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_MIN);
         mController.onResume(appRow, channel, null, null);
@@ -138,7 +139,7 @@
     }
 
     @Test
-    public void testIsAvailable() throws Exception {
+    public void testIsAvailable() {
         NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
         NotificationChannel channel =
                 new NotificationChannel(DEFAULT_CHANNEL_ID, "", IMPORTANCE_DEFAULT);
@@ -151,7 +152,7 @@
     }
 
     @Test
-    public void testUpdateState_disabledByAdmin_disableSecure() throws Exception {
+    public void testUpdateState_disabledByAdmin_disableSecure() {
         ShadowRestrictionUtils.setRestricted(true);
         UserInfo userInfo = new UserInfo(2, "user 2", UserInfo.FLAG_MANAGED_PROFILE);
         when(mUm.getUserInfo(anyInt())).thenReturn(userInfo);
@@ -173,7 +174,7 @@
     }
 
     @Test
-    public void testUpdateState_disabledByAdmin_disableUnredacted() throws Exception {
+    public void testUpdateState_disabledByAdmin_disableUnredacted() {
         ShadowRestrictionUtils.setRestricted(true);
         UserInfo userInfo = new UserInfo(2, "user 2", UserInfo.FLAG_MANAGED_PROFILE);
         when(mUm.getUserInfo(anyInt())).thenReturn(userInfo);
@@ -195,7 +196,7 @@
     }
 
     @Test
-    public void testUpdateState_noLockScreenNotificationsGlobally() throws Exception {
+    public void testUpdateState_noLockScreenNotificationsGlobally() {
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0);
 
@@ -211,10 +212,14 @@
         verify(pref, times(1)).setEntryValues(argumentCaptor.capture());
         assertFalse(toStringList(argumentCaptor.getValue())
                 .contains(String.valueOf(VISIBILITY_NO_OVERRIDE)));
+        assertFalse(toStringList(argumentCaptor.getValue())
+                .contains(String.valueOf(VISIBILITY_PRIVATE)));
     }
 
     @Test
-    public void testUpdateState_noPrivateLockScreenNotificationsGlobally() throws Exception {
+    public void testUpdateState_noPrivateLockScreenNotificationsGlobally() {
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 1);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0);
 
@@ -228,12 +233,13 @@
         ArgumentCaptor<CharSequence[]> argumentCaptor =
             ArgumentCaptor.forClass(CharSequence[].class);
         verify(pref, times(1)).setEntryValues(argumentCaptor.capture());
+        assertEquals(2, toStringList(argumentCaptor.getValue()).size());
         assertFalse(toStringList(argumentCaptor.getValue())
                 .contains(String.valueOf(VISIBILITY_NO_OVERRIDE)));
     }
 
     @Test
-    public void testUpdateState_noGlobalRestriction() throws Exception {
+    public void testUpdateState_noGlobalRestriction() {
         NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
         NotificationChannel channel = mock(NotificationChannel.class);
         mController.onResume(appRow, channel, null, null);
@@ -247,7 +253,7 @@
         List<String> values = toStringList(argumentCaptor.getValue());
         assertEquals(3, values.size());
         assertTrue(values.contains(String.valueOf(VISIBILITY_NO_OVERRIDE)));
-        assertTrue(values.contains(String.valueOf(Notification.VISIBILITY_PRIVATE)));
+        assertTrue(values.contains(String.valueOf(VISIBILITY_PRIVATE)));
         assertTrue(values.contains(String.valueOf(Notification.VISIBILITY_SECRET)));
     }
 
@@ -260,7 +266,7 @@
     }
 
     @Test
-    public void testUpdateState_noChannelOverride() throws Exception {
+    public void testUpdateState_noChannelOverride() {
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0);
 
@@ -275,11 +281,11 @@
         ArgumentCaptor<String> argumentCaptor = ArgumentCaptor.forClass(String.class);
         verify(pref, times(1)).setValue(argumentCaptor.capture());
 
-        assertEquals(String.valueOf(Notification.VISIBILITY_PRIVATE), argumentCaptor.getValue());
+        assertEquals(String.valueOf(VISIBILITY_PRIVATE), argumentCaptor.getValue());
     }
 
     @Test
-    public void testUpdateState_channelOverride() throws Exception {
+    public void testUpdateState_channelOverride() {
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0);
 
@@ -310,7 +316,7 @@
         RestrictedListPreference pref = mock(RestrictedListPreference.class);
         mController.updateState(pref);
 
-        mController.onPreferenceChange(pref, String.valueOf(Notification.VISIBILITY_PRIVATE));
+        mController.onPreferenceChange(pref, String.valueOf(VISIBILITY_PRIVATE));
 
         assertEquals(VISIBILITY_NO_OVERRIDE, channel.getLockscreenVisibility());
         verify(mBackend, times(1)).updateChannel(any(), anyInt(), any());
diff --git a/tests/robotests/src/com/android/settings/users/AutoSyncWorkDataPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/users/AutoSyncWorkDataPreferenceControllerTest.java
index 19f3732..22dae37 100644
--- a/tests/robotests/src/com/android/settings/users/AutoSyncWorkDataPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/users/AutoSyncWorkDataPreferenceControllerTest.java
@@ -92,6 +92,21 @@
     }
 
     @Test
+    public void checkIsAvailable_null_workProfileUserHandle_shouldNotDisplay() {
+        when(mUserManager.isManagedProfile()).thenReturn(false);
+        when(mUserManager.isLinkedUser()).thenReturn(false);
+
+        final List<UserInfo> infos = new ArrayList<>();
+        infos.add(new UserInfo(UserHandle.USER_SYSTEM, "user 1", 0 /* flags */));
+        infos.add(new UserInfo(999, "xspace", 800010));
+        when(mUserManager.getProfiles(eq(UserHandle.USER_SYSTEM))).thenReturn(infos);
+        mController = new AutoSyncWorkDataPreferenceController(mContext, mFragment);
+
+        assertThat(mController.mUserHandle).isEqualTo(null);
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
     public void multipleProfile_shouldInitWithWorkProfileUserHandle() {
         when(mUserManager.isManagedProfile()).thenReturn(false);
         when(mUserManager.isLinkedUser()).thenReturn(false);
diff --git a/tests/robotests/src/com/android/settings/wifi/ConnectedAccessPointPreferenceTest.java b/tests/robotests/src/com/android/settings/wifi/ConnectedAccessPointPreferenceTest.java
index 2eaa587..c122a65 100644
--- a/tests/robotests/src/com/android/settings/wifi/ConnectedAccessPointPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/ConnectedAccessPointPreferenceTest.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.wifi;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
@@ -75,4 +77,9 @@
         verify(mOnGearClickListener, never()).onGearClick(mConnectedAccessPointPreference);
     }
 
+    @Test
+    public void testWidgetLayoutPreference() {
+        assertThat(mConnectedAccessPointPreference.getWidgetLayoutResource()).isEqualTo(
+                R.layout.preference_widget_gear_no_bg);
+    }
 }