Merge "Remove the padding for VideoPreference" into pi-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5c33e9c..22cb3c8 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -388,6 +388,8 @@
 
     <!-- Description for bluetooth device name summary [CHAR LIMIT=none] -->
     <string name="bluetooth_device_name_summary">Visible as \u201C<xliff:g id="device_name">^1</xliff:g>\u201D to other devices</string>
+    <!-- Footer description for discoverable mode in bluetooth off state [CHAR LIMIT=none] -->
+    <string name="bluetooth_off_footer">Turn on Bluetooth to connect to other devices.</string>
 
     <!-- Title for paired device group [CHAR LIMIT=none] -->
     <string name="bluetooth_paired_device_title">Your devices</string>
@@ -413,8 +415,8 @@
     <string name="connected_device_connected_title">Currently connected</string>
     <!-- Title for connected device group [CHAR LIMIT=none]-->
     <string name="connected_device_saved_title">Saved devices</string>
-    <!-- Title for preference to add a device [CHAR LIMIT=none]-->
-    <string name="connected_device_add_device_title">Pair new device</string>
+    <!-- Title for preference to add a device [CHAR LIMIT=none] [BACKUP_MESSAGE_ID=7803521577708810621] -->
+    <string name="connected_device_add_device_title">Add device</string>
     <!-- Summary for preference to add a device [CHAR LIMIT=none]-->
     <string name="connected_device_add_device_summary">Bluetooth will turn on to pair</string>
     <!-- Title for other connection preferences [CHAR LIMIT=none]-->
@@ -3386,6 +3388,8 @@
     <!-- Master Clear -->
     <!-- Button title to factory data reset the entire device -->
     <string name="master_clear_title">Erase all data (factory reset)</string>
+    <!-- Button title to factory data reset the entire device. The "(factory reset)" part is optional for translation. [CHAR LIMIT=30 BACKUP_MESSAGE_ID=3531267871084279512]-->
+    <string name="master_clear_short_title">Erase all data (factory reset)</string>
     <!-- SD card & phone storage settings screen, message on screen after user selects Factory data reset [CHAR LIMIT=NONE] -->
     <string name="master_clear_desc" product="tablet">"This will erase all data from your tablet\u2019s <b>internal storage</b>, including:\n\n<li>Your Google account</li>\n<li>System and app data and settings</li>\n<li>Downloaded apps</li>"</string>
     <!-- SD card & phone storage settings screen, message on screen after user selects Factory data reset [CHAR LIMIT=NONE] -->
@@ -4633,6 +4637,9 @@
         <item quantity="other">Very long delay (<xliff:g id="click_delay_label" example="200">%1$d</xliff:g> ms)</item>
     </plurals>
 
+    <!-- Summary for vibration settings preference when notification vibration and haptic feedback intensity are set. [CHAR LIMIT=32] -->
+    <string name="accessibility_vibration_summary">Ring <xliff:g id="summary_ring" example="Medium">%1$s</xliff:g>, touch <xliff:g id="summary_touch" example="High">%2$s</xliff:g></string>
+
     <!-- Summary for vibration settings preference when ring & notification are set to off-->
     <string name="accessibility_vibration_summary_off">Ring &amp; notification set to off</string>
 
@@ -4924,9 +4931,7 @@
     <string name="device_cellular_network">Mobile network scanning</string>
 
     <!-- Label for list of apps using battery in power use UI. Note: ^1 should be used in all translations[CHAR_LIMIT=120] -->
-    <string name="power_usage_list_summary">App usage since full charge (<xliff:g id="relative_time">^1</xliff:g>)</string>
-    <!-- Label for device components using battery in power use UI. Note: ^1 should be used in all translations[CHAR_LIMIT=120] -->
-    <string name="power_usage_list_summary_device">Device usage since full charge (<xliff:g id="relative_time">^1</xliff:g>)</string>
+    <string name="power_usage_list_summary">Battery usage since full charge</string>
     <!-- Temp string used to debug new battery estimates [DO NOT TRANSLATE] -->
     <string name="power_usage_enhanced_debug" translatable="false"><xliff:g id="time">%1$s</xliff:g> left (New ML est)</string>
     <!-- Temp string used to debug old battery estimates [DO NOT TRANSLATE] -->
@@ -5031,11 +5036,11 @@
     <!-- Summary for the battery high usage tip, which presents battery may run out soon [CHAR LIMIT=NONE] -->
     <string name="battery_tip_high_usage_summary">Battery may run out soon</string>
     <!-- Message for battery tip dialog to show the status about the battery [CHAR LIMIT=NONE] -->
-    <string name="battery_tip_dialog_message" product="default">Your phone has been used more than usual. Your battery may run out sooner than expected.\n\nTop <xliff:g id="number">%1$d</xliff:g> apps since last full charge(<xliff:g id="time_period_ago" example="1 hr ago">%2$s</xliff:g>):</string>
+    <string name="battery_tip_dialog_message" product="default">Your phone has been used more than usual. Your battery may run out sooner than expected.\n\nTop <xliff:g id="number">%1$d</xliff:g> apps you used since full charge:</string>
     <!-- Message for battery tip dialog to show the status about the battery [CHAR LIMIT=NONE] -->
-    <string name="battery_tip_dialog_message" product="tablet">Your tablet has been used more than usual. Your battery may run out sooner than expected.\n\nTop <xliff:g id="number">%1$d</xliff:g> apps since last full charge(<xliff:g id="time_period_ago" example="1 hr ago">%2$s</xliff:g>):</string>
+    <string name="battery_tip_dialog_message" product="tablet">Your tablet has been used more than usual. Your battery may run out sooner than expected.\n\nTop <xliff:g id="number">%1$d</xliff:g> apps you used since full charge:</string>
     <!-- Message for battery tip dialog to show the status about the battery [CHAR LIMIT=NONE] -->
-    <string name="battery_tip_dialog_message" product="device">Your device has been used more than usual. Your battery may run out sooner than expected.\n\nTop <xliff:g id="number">%1$d</xliff:g> apps since last full charge(<xliff:g id="time_period_ago" example="1 hr ago">%2$s</xliff:g>):</string>
+    <string name="battery_tip_dialog_message" product="device">Your device has been used more than usual. Your battery may run out sooner than expected.\n\nTop <xliff:g id="number">%1$d</xliff:g> apps you used since full charge:</string>
     <!-- Title for restricted app preference, showing how many app need to be restricted [CHAR LIMIT=NONE] -->
     <plurals name="battery_tip_restrict_title">
         <item quantity="one">Restrict %1$d app</item>
@@ -9868,6 +9873,9 @@
     <!-- Help URI, battery saver page [DO NOT TRANSLATE] -->
     <string name="help_url_battery_saver_settings" translatable="false"></string>
 
+    <!-- Help URI, smart battery page [DO NOT TRANSLATE] -->
+    <string name="help_uri_smart_battery_settings" translatable="false"></string>
+
     <!-- Title label for new device suggestion, which is displayed in Settings homepage [CHAR LIMIT=100] -->
     <string name="new_device_suggestion_title">What\'s new and exciting?</string>
 
diff --git a/res/xml/bluetooth_screen.xml b/res/xml/bluetooth_screen.xml
index ec25520..407feb6 100644
--- a/res/xml/bluetooth_screen.xml
+++ b/res/xml/bluetooth_screen.xml
@@ -15,5 +15,19 @@
 -->
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:key="bluetooth_switchbar_screen"
-    android:title="@string/bluetooth_settings_title" />
\ No newline at end of file
+    android:title="@string/bluetooth_settings_title">
+
+    <com.android.settingslib.RestrictedPreference
+        android:key="bluetooth_screen_add_bt_devices"
+        android:title="@string/connected_device_add_device_title"
+        android:icon="@drawable/ic_menu_add"
+        android:summary="@string/connected_device_add_device_summary"
+        android:fragment="com.android.settings.bluetooth.BluetoothPairingDetail"
+        settings:allowDividerAbove="true"
+        settings:userRestriction="no_config_bluetooth"
+        settings:useAdminDisabledSummary="true"
+        settings:controller="com.android.settings.connecteddevice.AddDevicePreferenceController"/>
+
+</PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/connected_devices.xml b/res/xml/connected_devices.xml
index 1e9d97e..6d25c58 100644
--- a/res/xml/connected_devices.xml
+++ b/res/xml/connected_devices.xml
@@ -32,7 +32,7 @@
 
     <com.android.settingslib.RestrictedPreference
         android:key="add_bt_devices"
-        android:title="@string/connected_device_add_device_title"
+        android:title="@string/bluetooth_pairing_pref_title"
         android:icon="@drawable/ic_menu_add"
         android:summary="@string/connected_device_add_device_summary"
         android:fragment="com.android.settings.bluetooth.BluetoothPairingDetail"
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index 766c6ae..8f573c0 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -102,7 +102,7 @@
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        getActivity().setTitle(R.string.master_clear_title);
+        getActivity().setTitle(R.string.master_clear_short_title);
     }
 
     /**
@@ -114,7 +114,7 @@
     private boolean runKeyguardConfirmation(int request) {
         Resources res = getActivity().getResources();
         return new ChooseLockSettingsHelper(getActivity(), this).launchConfirmationActivity(
-                request, res.getText(R.string.master_clear_title));
+                request, res.getText(R.string.master_clear_short_title));
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index 3f94af4..72e485e 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -33,6 +33,7 @@
 import android.os.Vibrator;
 import android.provider.SearchIndexableResource;
 import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v4.content.ContextCompat;
 import android.support.v7.preference.ListPreference;
@@ -747,12 +748,34 @@
         pref.setSummary(entries[index]);
     }
 
-    private void updateVibrationSummary(Preference pref) {
-        Vibrator vibrator = getContext().getSystemService(Vibrator.class);
-        final int intensity = Settings.System.getInt(getContext().getContentResolver(),
+    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    void updateVibrationSummary(Preference pref) {
+        final Context context = getContext();
+        final Vibrator vibrator = context.getSystemService(Vibrator.class);
+
+        final int ringIntensity = Settings.System.getInt(context.getContentResolver(),
                 Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
                 vibrator.getDefaultNotificationVibrationIntensity());
-        mVibrationPreferenceScreen.setSummary(getVibrationSummary(getContext(), intensity));
+        CharSequence ringIntensityString =
+                VibrationIntensityPreferenceController.getIntensityString(context, ringIntensity);
+
+        final int touchIntensity = Settings.System.getInt(context.getContentResolver(),
+                Settings.System.HAPTIC_FEEDBACK_INTENSITY,
+                vibrator.getDefaultHapticFeedbackIntensity());
+        CharSequence touchIntensityString =
+                VibrationIntensityPreferenceController.getIntensityString(context, touchIntensity);
+
+        if (mVibrationPreferenceScreen == null) {
+            mVibrationPreferenceScreen = findPreference(VIBRATION_PREFERENCE_SCREEN);
+        }
+
+        if (ringIntensity == touchIntensity) {
+            mVibrationPreferenceScreen.setSummary(ringIntensityString);
+        } else {
+            mVibrationPreferenceScreen.setSummary(
+                    getString(R.string.accessibility_vibration_summary,
+                            ringIntensityString, touchIntensityString));
+        }
     }
 
     private String getVibrationSummary(Context context, @VibrationIntensity int intensity) {
diff --git a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java
index 44d5b79..aa6d4f3 100644
--- a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java
@@ -32,6 +32,8 @@
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
+import com.android.settings.search.actionbar.SearchMenuController;
+import com.android.settings.support.actionbar.HelpResourceProvider;
 
 import java.util.Arrays;
 import java.util.List;
@@ -88,6 +90,10 @@
             // If invoked from SUW, redirect to fragment instrumented for Vision Settings metrics
             preference.setFragment(
                     ToggleScreenMagnificationPreferenceFragmentForSetupWizard.class.getName());
+            Bundle args = preference.getExtras();
+            // Copy from AccessibilitySettingsForSetupWizardActivity, hide search and help menu
+            args.putInt(HelpResourceProvider.HELP_URI_RESOURCE_KEY, 0);
+            args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false);
         }
         return super.onPreferenceTreeClick(preference);
     }
diff --git a/src/com/android/settings/accessibility/VibrationIntensityPreferenceController.java b/src/com/android/settings/accessibility/VibrationIntensityPreferenceController.java
index ea212cf..9c81afa 100644
--- a/src/com/android/settings/accessibility/VibrationIntensityPreferenceController.java
+++ b/src/com/android/settings/accessibility/VibrationIntensityPreferenceController.java
@@ -77,16 +77,19 @@
     public CharSequence getSummary() {
         final int intensity = Settings.System.getInt(mContext.getContentResolver(),
                 mSettingKey, getDefaultIntensity());
+        return getIntensityString(mContext, intensity);
+   }
 
+    public static CharSequence getIntensityString(Context context, int intensity) {
         switch (intensity) {
             case Vibrator.VIBRATION_INTENSITY_OFF:
-                return mContext.getText(R.string.accessibility_vibration_intensity_off);
+                return context.getText(R.string.accessibility_vibration_intensity_off);
             case Vibrator.VIBRATION_INTENSITY_LOW:
-                return mContext.getText(R.string.accessibility_vibration_intensity_low);
+                return context.getText(R.string.accessibility_vibration_intensity_low);
             case Vibrator.VIBRATION_INTENSITY_MEDIUM:
-                return mContext.getText(R.string.accessibility_vibration_intensity_medium);
+                return context.getText(R.string.accessibility_vibration_intensity_medium);
             case Vibrator.VIBRATION_INTENSITY_HIGH:
-                return mContext.getText(R.string.accessibility_vibration_intensity_high);
+                return context.getText(R.string.accessibility_vibration_intensity_high);
             default:
                 return "";
         }
diff --git a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
index 7b7fb5b..5e45c43 100644
--- a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
+++ b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
@@ -27,7 +27,9 @@
 import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
 import com.android.settings.development.DevelopmentSettingsDashboardFragment;
 import com.android.settings.deviceinfo.StorageDashboardFragment;
+import com.android.settings.display.NightDisplaySettings;
 import com.android.settings.fuelgauge.PowerUsageSummary;
+import com.android.settings.gestures.GestureSettings;
 import com.android.settings.language.LanguageAndInputSettings;
 import com.android.settings.network.NetworkDashboardFragment;
 import com.android.settings.notification.ConfigureNotificationSettings;
@@ -95,6 +97,10 @@
                 CategoryKey.CATEGORY_SECURITY_LOCKSCREEN);
         PARENT_TO_CATEGORY_KEY_MAP.put(ZenModeSettings.class.getName(),
                 CategoryKey.CATEGORY_DO_NOT_DISTURB);
+        PARENT_TO_CATEGORY_KEY_MAP.put(GestureSettings.class.getName(),
+            CategoryKey.CATEGORY_GESTURES);
+        PARENT_TO_CATEGORY_KEY_MAP.put(NightDisplaySettings.class.getName(),
+            CategoryKey.CATEGORY_NIGHT_LIGHT);
 
         CATEGORY_KEY_TO_PARENT_MAP = new ArrayMap<>(PARENT_TO_CATEGORY_KEY_MAP.size());
 
diff --git a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
index b5b98c35..01770a2 100644
--- a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
@@ -193,14 +193,7 @@
         }
 
         mBatteryStatsHelper = statsHelper;
-        final long lastFullChargeTime = mBatteryUtils.calculateLastFullChargeTime(
-                mBatteryStatsHelper, System.currentTimeMillis());
-        final CharSequence timeSequence = StringUtil.formatRelativeTime(mContext,
-                lastFullChargeTime,
-                false);
-        final int resId = showAllApps ? R.string.power_usage_list_summary_device
-                : R.string.power_usage_list_summary;
-        mAppListGroup.setTitle(TextUtils.expandTemplate(mContext.getText(resId), timeSequence));
+        mAppListGroup.setTitle(R.string.power_usage_list_summary);
 
         final PowerProfile powerProfile = statsHelper.getPowerProfile();
         final BatteryStats stats = statsHelper.getStats();
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index f78d236..a1f5df2 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -521,7 +521,7 @@
             return true;
         }
 
-        return isSystemUid(uid) || powerWhitelistBackend.isSysWhitelistedExceptIdle(packageNames)
+        return isSystemUid(uid) || powerWhitelistBackend.isWhitelisted(packageNames)
                 || (isSystemApp(mPackageManager, packageNames) && !hasLauncherEntry(packageNames));
     }
 
diff --git a/src/com/android/settings/fuelgauge/SmartBatterySettings.java b/src/com/android/settings/fuelgauge/SmartBatterySettings.java
index 5e63976..d954e83 100644
--- a/src/com/android/settings/fuelgauge/SmartBatterySettings.java
+++ b/src/com/android/settings/fuelgauge/SmartBatterySettings.java
@@ -60,6 +60,11 @@
     }
 
     @Override
+    public int getHelpResource() {
+        return R.string.help_uri_smart_battery_settings;
+    }
+
+    @Override
     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, (SettingsActivity) getActivity(), this);
     }
diff --git a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java
index 2fac9b6..b6bcd54 100644
--- a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java
+++ b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java
@@ -71,7 +71,8 @@
 
     private final Object mLock = new Object();
     @GuardedBy("mLock")
-    private boolean mIsJobCanceled = false;
+    @VisibleForTesting
+    boolean mIsJobCanceled = false;
 
     public static void scheduleAnomalyDetection(Context context, Intent intent) {
         final JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
@@ -89,6 +90,9 @@
 
     @Override
     public boolean onStartJob(JobParameters params) {
+        synchronized (mLock) {
+            mIsJobCanceled = false;
+        }
         ThreadUtils.postOnBackgroundThread(() -> {
             final Context context = AnomalyDetectionJobService.this;
             final BatteryDatabaseManager batteryDatabaseManager =
@@ -96,18 +100,15 @@
             final BatteryTipPolicy policy = new BatteryTipPolicy(this);
             final BatteryUtils batteryUtils = BatteryUtils.getInstance(this);
             final ContentResolver contentResolver = getContentResolver();
-            final BatteryStatsHelper batteryStatsHelper = new BatteryStatsHelper(this,
-                    true /* collectBatteryBroadcast */);
             final UserManager userManager = getSystemService(UserManager.class);
             final PowerWhitelistBackend powerWhitelistBackend = PowerWhitelistBackend.getInstance();
             final PowerUsageFeatureProvider powerUsageFeatureProvider = FeatureFactory
                     .getFactory(this).getPowerUsageFeatureProvider(this);
             final MetricsFeatureProvider metricsFeatureProvider = FeatureFactory
                     .getFactory(this).getMetricsFeatureProvider();
-            batteryUtils.initBatteryStatsHelper(batteryStatsHelper, null /* bundle */, userManager);
 
             for (JobWorkItem item = dequeueWork(params); item != null; item = dequeueWork(params)) {
-                saveAnomalyToDatabase(context, batteryStatsHelper, userManager,
+                saveAnomalyToDatabase(context, userManager,
                         batteryDatabaseManager, batteryUtils, policy, powerWhitelistBackend,
                         contentResolver, powerUsageFeatureProvider, metricsFeatureProvider,
                         item.getIntent().getExtras());
@@ -128,8 +129,7 @@
     }
 
     @VisibleForTesting
-    void saveAnomalyToDatabase(Context context, BatteryStatsHelper batteryStatsHelper,
-            UserManager userManager,
+    void saveAnomalyToDatabase(Context context, UserManager userManager,
             BatteryDatabaseManager databaseManager, BatteryUtils batteryUtils,
             BatteryTipPolicy policy, PowerWhitelistBackend powerWhitelistBackend,
             ContentResolver contentResolver, PowerUsageFeatureProvider powerUsageFeatureProvider,
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java
index ac6d622..3870e72 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java
@@ -94,10 +94,7 @@
 
                 return new AlertDialog.Builder(context)
                         .setMessage(getString(R.string.battery_tip_dialog_message,
-                                highUsageTip.getHighUsageAppList().size(),
-                                StringUtil.formatRelativeTime(context,
-                                        highUsageTip.getLastFullChargeTimeMs(),
-                                        false /* withSeconds */)))
+                                highUsageTip.getHighUsageAppList().size()))
                         .setView(view)
                         .setPositiveButton(android.R.string.ok, null)
                         .create();
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
index 1c7c760..7743372 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
@@ -230,7 +230,7 @@
         appRestrictionEnabled = mParser.getBoolean(KEY_APP_RESTRICTION_ENABLED, true);
         reducedBatteryEnabled = mParser.getBoolean(KEY_REDUCED_BATTERY_ENABLED, false);
         reducedBatteryPercent = mParser.getInt(KEY_REDUCED_BATTERY_PERCENT, 50);
-        lowBatteryEnabled = mParser.getBoolean(KEY_LOW_BATTERY_ENABLED, false);
+        lowBatteryEnabled = mParser.getBoolean(KEY_LOW_BATTERY_ENABLED, true);
         lowBatteryHour = mParser.getInt(KEY_LOW_BATTERY_HOUR, 3);
         dataHistoryRetainDay = mParser.getInt(KEY_DATA_HISTORY_RETAIN_DAY, 30);
         excessiveBgDrainPercentage = mParser.getInt(KEY_EXCESSIVE_BG_DRAIN_PERCENTAGE, 10);
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
index be25518..9e64c71 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
@@ -94,6 +94,7 @@
             case BatteryTip.TipType.SMART_BATTERY_MANAGER:
                 return new SmartBatteryAction(settingsActivity, fragment);
             case BatteryTip.TipType.BATTERY_SAVER:
+            case BatteryTip.TipType.LOW_BATTERY:
                 if (batteryTip.getState() == BatteryTip.StateType.HANDLED) {
                     return new OpenBatterySaverAction(settingsActivity);
                 } else {
diff --git a/src/com/android/settings/search/DeviceIndexFeatureProvider.java b/src/com/android/settings/search/DeviceIndexFeatureProvider.java
index d529b97..a171844 100644
--- a/src/com/android/settings/search/DeviceIndexFeatureProvider.java
+++ b/src/com/android/settings/search/DeviceIndexFeatureProvider.java
@@ -47,7 +47,9 @@
             List<String> keywords);
 
     default void updateIndex(Context context, boolean force) {
-        if (!isIndexingEnabled()) return;
+        if (!isIndexingEnabled()) {
+            return;
+        }
 
         if (!force && Objects.equals(
                 Settings.Secure.getString(context.getContentResolver(), INDEX_VERSION), VERSION)) {
@@ -55,9 +57,9 @@
             return;
         }
 
-        ComponentName jobComponent = new ComponentName(context.getPackageName(),
+        final ComponentName jobComponent = new ComponentName(context.getPackageName(),
                 DeviceIndexUpdateJobService.class.getName());
-        int jobId = context.getResources().getInteger(R.integer.device_index_update);
+        final int jobId = context.getResources().getInteger(R.integer.device_index_update);
         // Schedule a job so that we know it'll be able to complete, but try to run as
         // soon as possible.
         context.getSystemService(JobScheduler.class).schedule(
diff --git a/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java b/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java
index 55448e2..22742e5 100644
--- a/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java
+++ b/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java
@@ -23,6 +23,7 @@
 import android.os.UserManager;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
+import android.util.Log;
 
 import com.android.internal.widget.LockPatternUtils;
 import com.android.settings.Utils;
@@ -32,10 +33,14 @@
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnResume;
 
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.FutureTask;
+
 public class VisiblePatternProfilePreferenceController extends TogglePreferenceController
         implements LifecycleObserver, OnResume {
 
     private static final String KEY_VISIBLE_PATTERN_PROFILE = "visiblepattern_profile";
+    private static final String TAG = "VisPtnProfPrefCtrl";
 
     private final LockPatternUtils mLockPatternUtils;
     private final UserManager mUm;
@@ -45,7 +50,7 @@
     private Preference mPreference;
 
     public VisiblePatternProfilePreferenceController(Context context) {
-         this(context, null /* lifecycle */);
+        this(context, null /* lifecycle */);
     }
 
     // TODO (b/73074893) Replace this constructor without Lifecycle using setter method instead.
@@ -63,12 +68,25 @@
 
     @Override
     public int getAvailabilityStatus() {
-        if (mLockPatternUtils.isSecure(mProfileChallengeUserId)
-                && mLockPatternUtils.getKeyguardStoredPasswordQuality(mProfileChallengeUserId)
-                == PASSWORD_QUALITY_SOMETHING) {
-            return AVAILABLE;
+        final FutureTask<Integer> futureTask = new FutureTask<>(
+                // Put the API call in a future to avoid StrictMode violation.
+                () -> {
+                    final boolean isSecure = mLockPatternUtils.isSecure(mProfileChallengeUserId);
+                    final boolean hasPassword = mLockPatternUtils
+                            .getKeyguardStoredPasswordQuality(mProfileChallengeUserId)
+                            == PASSWORD_QUALITY_SOMETHING;
+                    if (isSecure && hasPassword) {
+                        return AVAILABLE;
+                    }
+                    return DISABLED_FOR_USER;
+                });
+        try {
+            futureTask.run();
+            return futureTask.get();
+        } catch (InterruptedException | ExecutionException e) {
+            Log.w(TAG, "Error getting lock pattern state.");
+            return DISABLED_FOR_USER;
         }
-        return DISABLED_FOR_USER;
     }
 
     @Override
diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java
index 6d6c0ec..af165da 100644
--- a/src/com/android/settings/slices/SettingsSliceProvider.java
+++ b/src/com/android/settings/slices/SettingsSliceProvider.java
@@ -26,7 +26,6 @@
 import android.graphics.drawable.Icon;
 import android.net.Uri;
 import android.net.wifi.WifiManager;
-import android.os.StrictMode;
 import android.provider.Settings;
 import android.provider.SettingsSlicesContract;
 import android.support.annotation.VisibleForTesting;
@@ -155,11 +154,6 @@
 
     @Override
     public Slice onBindSlice(Uri sliceUri) {
-        // TODO: Remove this when all slices are not breaking strict mode
-        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
-                .permitAll()
-                .build());
-
         String path = sliceUri.getPath();
         // If adding a new Slice, do not directly match Slice URIs.
         // Use {@link SlicesDatabaseAccessor}.
diff --git a/src/com/android/settings/system/SystemUpdatePreferenceController.java b/src/com/android/settings/system/SystemUpdatePreferenceController.java
index 7bc76a2..88715bf 100644
--- a/src/com/android/settings/system/SystemUpdatePreferenceController.java
+++ b/src/com/android/settings/system/SystemUpdatePreferenceController.java
@@ -35,6 +35,9 @@
 import com.android.settings.Utils;
 import com.android.settings.core.BasePreferenceController;
 
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.FutureTask;
+
 public class SystemUpdatePreferenceController extends BasePreferenceController {
 
     private static final String TAG = "SysUpdatePrefContr";
@@ -84,9 +87,19 @@
 
     @Override
     public CharSequence getSummary() {
-        final Bundle updateInfo = mUpdateManager.retrieveSystemUpdateInfo();
         CharSequence summary = mContext.getString(R.string.android_version_summary,
                 Build.VERSION.RELEASE);
+        final FutureTask<Bundle> bundleFutureTask = new FutureTask<>(
+                // Put the API call in a future to avoid StrictMode violation.
+                () -> mUpdateManager.retrieveSystemUpdateInfo());
+        final Bundle updateInfo;
+        try {
+            bundleFutureTask.run();
+            updateInfo = bundleFutureTask.get();
+        } catch (InterruptedException | ExecutionException e) {
+            Log.w(TAG, "Error getting system update info.");
+            return summary;
+        }
         switch (updateInfo.getInt(SystemUpdateManager.KEY_STATUS)) {
             case SystemUpdateManager.STATUS_WAITING_DOWNLOAD:
             case SystemUpdateManager.STATUS_IN_PROGRESS:
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
index f710613..4f7b3ba 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
@@ -106,7 +106,7 @@
 
     void startTether() {
         mSwitchBar.setEnabled(false);
-        mConnectivityManager.startTethering(TETHERING_WIFI, false /* showProvisioningUi */,
+        mConnectivityManager.startTethering(TETHERING_WIFI, true /* showProvisioningUi */,
                 mOnStartTetheringCallback, new Handler(Looper.getMainLooper()));
     }
 
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
index f257f54..490a38e 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
@@ -18,7 +18,16 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
 import android.content.Context;
+import android.os.Bundle;
+import android.os.Vibrator;
+import android.provider.Settings;
+import android.support.v7.preference.Preference;
 
 import com.android.settings.R;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -26,6 +35,8 @@
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 import org.robolectric.RuntimeEnvironment;
 
 import java.util.ArrayList;
@@ -38,11 +49,38 @@
     public void testNonIndexableKeys_existInXmlLayout() {
         final Context context = RuntimeEnvironment.application;
         final List<String> niks = AccessibilitySettings.SEARCH_INDEX_DATA_PROVIDER
-            .getNonIndexableKeys(context);
+                .getNonIndexableKeys(context);
         final List<String> keys = new ArrayList<>();
 
         keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.accessibility_settings));
 
         assertThat(keys).containsAllIn(niks);
     }
-}
\ No newline at end of file
+
+    @Test
+    public void testUpdateVibrationSummary_shouldUpdateSummary() {
+        MockitoAnnotations.initMocks(this);
+        final Context mContext = RuntimeEnvironment.application;
+        final AccessibilitySettings mSettings = spy(new AccessibilitySettings());
+
+        final Preference mVibrationPreferenceScreen = new Preference(mContext);
+        doReturn(mVibrationPreferenceScreen).when(mSettings).findPreference(anyString());
+
+        doReturn(mContext).when(mSettings).getContext();
+
+        mVibrationPreferenceScreen.setKey("vibration_preference_screen");
+
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_OFF);
+
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.HAPTIC_FEEDBACK_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_OFF);
+
+        mSettings.updateVibrationSummary(mVibrationPreferenceScreen);
+        assertThat(mVibrationPreferenceScreen.getSummary()).isEqualTo(
+                VibrationIntensityPreferenceController.getIntensityString(mContext,
+                        Vibrator.VIBRATION_INTENSITY_OFF));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/display/NightDisplaySettingsTest.java b/tests/robotests/src/com/android/settings/display/NightDisplaySettingsTest.java
index 8df4a31..e3f9092 100644
--- a/tests/robotests/src/com/android/settings/display/NightDisplaySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/display/NightDisplaySettingsTest.java
@@ -22,6 +22,7 @@
 import com.android.settings.R;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
+import com.android.settingslib.drawer.CategoryKey;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RuntimeEnvironment;
@@ -45,4 +46,10 @@
 
         assertThat(indexedXml).contains(R.xml.night_display_settings);
     }
+
+    @Test
+    public void getCategoryKey_isCategoryNightLight() {
+        NightDisplaySettings settings = new NightDisplaySettings();
+        assertThat(settings.getCategoryKey()).isEqualTo(CategoryKey.CATEGORY_NIGHT_LIGHT);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
index 5c2a1c7..4fd3a82 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
@@ -612,6 +612,14 @@
     }
 
     @Test
+    public void testShouldHideAnomaly_AppInDozeList_returnTrue() {
+        doReturn(new String[]{HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
+        doReturn(true).when(mPowerWhitelistBackend).isWhitelisted(new String[]{HIGH_SDK_PACKAGE});
+
+        assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, UID)).isTrue();
+    }
+
+    @Test
     public void testShouldHideAnomaly_normalApp_returnFalse() {
         doReturn(new String[]{HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java
index f159e79..8df1f21 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java
@@ -46,8 +46,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
 import android.os.Process;
 import android.os.StatsDimensionsValue;
 import android.os.UserManager;
@@ -57,11 +55,11 @@
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.R;
 import com.android.settings.fuelgauge.BatteryUtils;
-import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.ShadowConnectivityManager;
 import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
+import com.android.settings.testutils.shadow.ShadowPowerWhitelistBackend;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -80,7 +78,7 @@
 import java.util.concurrent.TimeUnit;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(shadows = ShadowConnectivityManager.class)
+@Config(shadows = {ShadowConnectivityManager.class, ShadowPowerWhitelistBackend.class})
 public class AnomalyDetectionJobServiceTest {
     private static final int UID = 12345;
     private static final String SYSTEM_PACKAGE = "com.android.system";
@@ -91,8 +89,6 @@
     private static final int ANOMALY_TYPE = 6;
     private static final long VERSION_CODE = 15;
     @Mock
-    private BatteryStatsHelper mBatteryStatsHelper;
-    @Mock
     private UserManager mUserManager;
     @Mock
     private BatteryDatabaseManager mBatteryDatabaseManager;
@@ -148,9 +144,9 @@
     @Test
     public void saveAnomalyToDatabase_systemWhitelisted_doNotSave() {
         doReturn(UID).when(mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
-        doReturn(true).when(mPowerWhitelistBackend).isSysWhitelistedExceptIdle(any(String[].class));
+        doReturn(true).when(mPowerWhitelistBackend).isWhitelisted(any(String[].class));
 
-        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
+        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
                 mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
                 mPowerWhitelistBackend, mContext.getContentResolver(),
                 mFeatureFactory.powerUsageFeatureProvider,
@@ -171,7 +167,7 @@
                 mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
         doReturn(true).when(mBatteryUtils).shouldHideAnomaly(any(), anyInt());
 
-        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
+        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
                 mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
                 mPowerWhitelistBackend, mContext.getContentResolver(),
                 mFeatureFactory.powerUsageFeatureProvider,
@@ -191,7 +187,7 @@
         doReturn(Process.SYSTEM_UID).when(
                 mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
 
-        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
+        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
                 mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
                 mPowerWhitelistBackend, mContext.getContentResolver(),
                 mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
@@ -206,7 +202,7 @@
         doReturn(AnomalyDetectionJobService.UID_NULL).when(
                 mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
 
-        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
+        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
                 mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
                 mPowerWhitelistBackend, mContext.getContentResolver(),
                 mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
@@ -226,7 +222,7 @@
         doReturn(Process.FIRST_APPLICATION_UID).when(
                 mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
 
-        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
+        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
                 mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
                 mPowerWhitelistBackend, mContext.getContentResolver(),
                 mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
@@ -251,7 +247,7 @@
         doReturn(Process.FIRST_APPLICATION_UID).when(
                 mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
 
-        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
+        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
                 mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
                 mPowerWhitelistBackend, mContext.getContentResolver(),
                 mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
@@ -316,4 +312,12 @@
         // Should not crash even job is stopped
         mAnomalyDetectionJobService.completeWork(mJobParameters, mJobWorkItem);
     }
+
+    @Test
+    public void restartWorkAfterBeenStopped_jobStarted() {
+        mAnomalyDetectionJobService.onStopJob(mJobParameters);
+        mAnomalyDetectionJobService.onStartJob(mJobParameters);
+
+        assertThat(mAnomalyDetectionJobService.mIsJobCanceled).isFalse();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java
index 7a41921..a02bdc2 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java
@@ -113,7 +113,7 @@
         ShadowAlertDialog shadowDialog = shadowOf(dialog);
 
         assertThat(shadowDialog.getMessage()).isEqualTo(
-                mContext.getString(R.string.battery_tip_dialog_message, 1, "60 minutes ago"));
+                mContext.getString(R.string.battery_tip_dialog_message, 1));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java
index 350326a..547e0eb 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java
@@ -101,7 +101,7 @@
         assertThat(batteryTipPolicy.appRestrictionEnabled).isTrue();
         assertThat(batteryTipPolicy.reducedBatteryEnabled).isFalse();
         assertThat(batteryTipPolicy.reducedBatteryPercent).isEqualTo(50);
-        assertThat(batteryTipPolicy.lowBatteryEnabled).isFalse();
+        assertThat(batteryTipPolicy.lowBatteryEnabled).isTrue();
         assertThat(batteryTipPolicy.lowBatteryHour).isEqualTo(3);
         assertThat(batteryTipPolicy.dataHistoryRetainDay).isEqualTo(30);
         assertThat(batteryTipPolicy.excessiveBgDrainPercentage).isEqualTo(10);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java
index 7a25555..459c4e2 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java
@@ -29,6 +29,7 @@
 import com.android.settings.fuelgauge.batterytip.actions.RestrictAppAction;
 import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
 import com.android.settings.fuelgauge.batterytip.tips.EarlyWarningTip;
+import com.android.settings.fuelgauge.batterytip.tips.LowBatteryTip;
 import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -51,6 +52,7 @@
     private InstrumentedPreferenceFragment mFragment;
     private RestrictAppTip mRestrictAppTip;
     private EarlyWarningTip mEarlyWarningTip;
+    private LowBatteryTip mLowBatteryTip;
 
     @Before
     public void setUp() {
@@ -59,7 +61,11 @@
         FakeFeatureFactory.setupForTest();
         doReturn(RuntimeEnvironment.application).when(mFragment).getContext();
         mRestrictAppTip = spy(new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>()));
-        mEarlyWarningTip = spy(new EarlyWarningTip(BatteryTip.StateType.NEW, true));
+        mEarlyWarningTip = spy(
+                new EarlyWarningTip(BatteryTip.StateType.NEW, true /* powerSaveModeOn */));
+        mLowBatteryTip = spy(
+                new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */,
+                        "" /* summary */));
     }
 
     @Test
@@ -93,4 +99,20 @@
         assertThat(BatteryTipUtils.getActionForBatteryTip(mEarlyWarningTip, mSettingsActivity,
                 mFragment)).isInstanceOf(OpenBatterySaverAction.class);
     }
+
+    @Test
+    public void testGetActionForBatteryTip_typeLowBatteryStateNew_returnActionBatterySaver() {
+        when(mLowBatteryTip.getState()).thenReturn(BatteryTip.StateType.NEW);
+
+        assertThat(BatteryTipUtils.getActionForBatteryTip(mLowBatteryTip, mSettingsActivity,
+                mFragment)).isInstanceOf(BatterySaverAction.class);
+    }
+
+    @Test
+    public void testGetActionForBatteryTip_typeLowBatteryStateHandled_returnActionOpen() {
+        when(mLowBatteryTip.getState()).thenReturn(BatteryTip.StateType.HANDLED);
+
+        assertThat(BatteryTipUtils.getActionForBatteryTip(mLowBatteryTip, mSettingsActivity,
+                mFragment)).isInstanceOf(OpenBatterySaverAction.class);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/GestureSettingsTest.java b/tests/robotests/src/com/android/settings/gestures/GestureSettingsTest.java
new file mode 100644
index 0000000..29d2c19
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/gestures/GestureSettingsTest.java
@@ -0,0 +1,34 @@
+/*
+ * 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.gestures;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.drawer.CategoryKey;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public class GestureSettingsTest {
+
+    @Test
+    public void getCategoryKey_isCategoryGestures() {
+        GestureSettings settings = new GestureSettings();
+        assertThat(settings.getCategoryKey()).isEqualTo(CategoryKey.CATEGORY_GESTURES);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
index 0b9961a..a0bd33a 100644
--- a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
@@ -28,6 +28,7 @@
 import android.content.Context;
 import android.database.sqlite.SQLiteDatabase;
 import android.net.Uri;
+import android.os.StrictMode;
 import android.provider.SettingsSlicesContract;
 
 import com.android.settings.testutils.DatabaseTestUtils;
@@ -53,16 +54,17 @@
 @RunWith(SettingsRobolectricTestRunner.class)
 public class SettingsSliceProviderTest {
 
-    private final String KEY = "KEY";
-    private final String INTENT_PATH = SettingsSlicesContract.PATH_SETTING_INTENT + "/" + KEY;
-    private final String ACTION_PATH = SettingsSlicesContract.PATH_SETTING_ACTION + "/" + KEY;
-    private final String TITLE = "title";
-    private final String SUMMARY = "summary";
-    private final String SCREEN_TITLE = "screen title";
-    private final String FRAGMENT_NAME = "fragment name";
-    private final int ICON = 1234; // I declare a thumb war
-    private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
-    private final String PREF_CONTROLLER = FakeToggleController.class.getName();
+    private static final String KEY = "KEY";
+    private static final String INTENT_PATH =
+            SettingsSlicesContract.PATH_SETTING_INTENT + "/" + KEY;
+    private static final String TITLE = "title";
+    private static final String SUMMARY = "summary";
+    private static final String SCREEN_TITLE = "screen title";
+    private static final String FRAGMENT_NAME = "fragment name";
+    private static final int ICON = 1234; // I declare a thumb war
+    private static final Uri URI = Uri.parse("content://com.android.settings.slices/test");
+    private static final String PREF_CONTROLLER = FakeToggleController.class.getName();
+
     private Context mContext;
     private SettingsSliceProvider mProvider;
     private SQLiteDatabase mDb;
@@ -148,6 +150,18 @@
     }
 
     @Test
+    public void onBindSlice_shouldNotOverrideStrictMode() {
+        final StrictMode.ThreadPolicy oldThreadPolicy = StrictMode.getThreadPolicy();
+        SliceData data = getDummyData();
+        mProvider.mSliceWeakDataCache.put(data.getUri(), data);
+        mProvider.onBindSlice(data.getUri());
+
+        final StrictMode.ThreadPolicy newThreadPolicy = StrictMode.getThreadPolicy();
+
+        assertThat(newThreadPolicy.toString()).isEqualTo(oldThreadPolicy.toString());
+    }
+
+    @Test
     public void testLoadSlice_cachedEntryRemovedOnUnpin() {
         SliceData data = getDummyData();
         mProvider.mSliceDataCache.put(data.getUri(), data);
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPowerWhitelistBackend.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPowerWhitelistBackend.java
new file mode 100644
index 0000000..4500b23
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPowerWhitelistBackend.java
@@ -0,0 +1,28 @@
+/*
+ * 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.testutils.shadow;
+
+import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
+
+import org.robolectric.annotation.Implements;
+
+@Implements(PowerWhitelistBackend.class)
+public class ShadowPowerWhitelistBackend {
+    public void __constructor__() {
+        // Do nothing
+    }
+}
diff --git a/tests/unit/src/com/android/settings/display/ThemePreferenceControllerTest.java b/tests/unit/src/com/android/settings/display/ThemePreferenceControllerTest.java
index e618343..586c448 100644
--- a/tests/unit/src/com/android/settings/display/ThemePreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/display/ThemePreferenceControllerTest.java
@@ -69,9 +69,9 @@
     @Test
     public void testUpdateState() throws Exception {
         OverlayInfo info1 = new OverlayInfo("com.android.Theme1", "android",
-                "", "", OverlayInfo.STATE_ENABLED, 0);
+                "", "", OverlayInfo.STATE_ENABLED, 0, 0, true);
         OverlayInfo info2 = new OverlayInfo("com.android.Theme2", "android",
-                "", "", 0, 0);
+                "", "", 0, 0, 0, true);
         when(mMockPackageManager.getApplicationInfo(any(), anyInt())).thenAnswer(inv -> {
             ApplicationInfo info = mock(ApplicationInfo.class);
             if ("com.android.Theme1".equals(inv.getArguments()[0])) {
@@ -105,9 +105,9 @@
     @Test
     public void testUpdateState_withStaticOverlay() throws Exception {
         OverlayInfo info1 = new OverlayInfo("com.android.Theme1", "android",
-                "", "", OverlayInfo.STATE_ENABLED, 0);
+                "", "", OverlayInfo.STATE_ENABLED, 0, 0, true);
         OverlayInfo info2 = new OverlayInfo("com.android.Theme2", "android",
-                "", "", OverlayInfo.STATE_ENABLED, 0);
+                "", "", OverlayInfo.STATE_ENABLED, 0, 0, true);
         when(mMockPackageManager.getApplicationInfo(any(), anyInt())).thenAnswer(inv -> {
             ApplicationInfo info = mock(ApplicationInfo.class);
             if ("com.android.Theme1".equals(inv.getArguments()[0])) {
@@ -145,7 +145,7 @@
         when(mMockPackageManager.getPackageInfo(anyString(), anyInt())).thenReturn(
                 new PackageInfo());
         when(mMockOverlayManager.getOverlayInfosForTarget(any(), anyInt()))
-                .thenReturn(list(new OverlayInfo("", "", "", "", 0, 0)));
+                .thenReturn(list(new OverlayInfo("", "", "", "", 0, 0, 0, false)));
         assertThat(mPreferenceController.isAvailable()).isFalse();
     }
 
@@ -154,8 +154,8 @@
         when(mMockPackageManager.getPackageInfo(anyString(), anyInt())).thenReturn(
                  new PackageInfo());
         when(mMockOverlayManager.getOverlayInfosForTarget(any(), anyInt()))
-                .thenReturn(list(new OverlayInfo("", "", "", "", 0, 0),
-                        new OverlayInfo("", "", "", "", 0, 0)));
+                .thenReturn(list(new OverlayInfo("", "", "", "", 0, 0, 0, true),
+                        new OverlayInfo("", "", "", "", 0, 0, 0, true)));
         assertThat(mPreferenceController.isAvailable()).isTrue();
     }