Merge changes I034a9f0a,Iad5ec577 into pi-dev

* changes:
  Get rid of UserPackageWrapper util.
  Get rid of extra whitespace under divider lines
diff --git a/res/xml/power_usage_summary.xml b/res/xml/power_usage_summary.xml
index 1f3e415..d8003df 100644
--- a/res/xml/power_usage_summary.xml
+++ b/res/xml/power_usage_summary.xml
@@ -24,48 +24,41 @@
     <com.android.settings.applications.LayoutPreference
         android:key="battery_header"
         android:selectable="false"
-        android:layout="@layout/battery_header"/>
+        android:layout="@layout/battery_header" />
 
     <PreferenceCategory
         android:key="battery_tip"
-        android:layout="@layout/preference_category_no_title"/>
+        android:layout="@layout/preference_category_no_title" />
 
-    <PreferenceCategory
-        android:key="power_management">
+    <Preference
+        android:fragment="com.android.settings.fuelgauge.batterysaver.BatterySaverSettings"
+        android:key="battery_saver_summary"
+        android:title="@string/battery_saver"
+        settings:controller="com.android.settings.fuelgauge.BatterySaverController"
+        settings:platform_slice="true"
+        settings:allowDividerAbove="true" />
 
-        <Preference
-            android:fragment="com.android.settings.fuelgauge.batterysaver.BatterySaverSettings"
-            android:key="battery_saver_summary"
-            android:title="@string/battery_saver"
-            settings:controller="com.android.settings.fuelgauge.BatterySaverController"
-            settings:platform_slice="true"/>
+    <Preference
+        android:fragment="com.android.settings.fuelgauge.SmartBatterySettings"
+        android:key="smart_battery_manager"
+        android:title="@string/smart_battery_manager_title"
+        settings:controller="com.android.settings.fuelgauge.batterytip.BatteryManagerPreferenceController" />
 
-        <Preference
-            android:fragment="com.android.settings.fuelgauge.SmartBatterySettings"
-            android:key="smart_battery_manager"
-            android:title="@string/smart_battery_manager_title"
-            settings:controller="com.android.settings.fuelgauge.batterytip.BatteryManagerPreferenceController"/>
+    <SwitchPreference
+        android:key="battery_percentage"
+        android:title="@string/battery_percentage"
+        android:summary="@string/battery_percentage_description" />
 
-        <SwitchPreference
-            android:key="battery_percentage"
-            android:title="@string/battery_percentage"
-            android:summary="@string/battery_percentage_description"/>
 
-    </PreferenceCategory>
+    <com.android.settings.fuelgauge.PowerGaugePreference
+        android:key="last_full_charge"
+        android:title="@string/battery_last_full_charge"
+        android:selectable="false"
+        settings:allowDividerAbove="true" />
 
-    <PreferenceCategory
-        android:key="device_usage_list">
-
-        <com.android.settings.fuelgauge.PowerGaugePreference
-            android:key="last_full_charge"
-            android:title="@string/battery_last_full_charge"
-            android:selectable="false"/>
-
-        <com.android.settings.fuelgauge.PowerGaugePreference
-            android:key="screen_usage"
-            android:title="@string/device_screen_usage"
-            android:selectable="false"/>
-
-    </PreferenceCategory>
+    <com.android.settings.fuelgauge.PowerGaugePreference
+        android:key="screen_usage"
+        android:title="@string/device_screen_usage"
+        android:selectable="false" />
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/SelectableEditTextPreference.java b/src/com/android/settings/SelectableEditTextPreference.java
deleted file mode 100644
index 551b5e5..0000000
--- a/src/com/android/settings/SelectableEditTextPreference.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2012 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 android.content.Context;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.EditText;
-
-import com.android.settingslib.CustomEditTextPreference;
-
-public class SelectableEditTextPreference extends CustomEditTextPreference {
-
-    private int mSelectionMode;
-
-    public static final int SELECTION_CURSOR_END   = 0;
-    public static final int SELECTION_CURSOR_START = 1;
-    public static final int SELECTION_SELECT_ALL   = 2;
-
-    public SelectableEditTextPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    /**
-     * Sets the selection mode for the text when it shows up in the dialog
-     * @hide
-     * @param selectionMode can be SELECTION_CURSOR_START, SELECTION_CURSOR_END or
-     * SELECTION_SELECT_ALL. Default is SELECTION_CURSOR_END
-     */
-    public void setInitialSelectionMode(int selectionMode) {
-        mSelectionMode = selectionMode;
-    }
-
-    @Override
-    protected void onBindDialogView(View view) {
-        super.onBindDialogView(view);
-
-        EditText editText = getEditText();
-        // Set the selection based on the mSelectionMode
-        int length = editText.getText() != null ? editText.getText().length() : 0;
-        if (!TextUtils.isEmpty(editText.getText())) {
-            switch (mSelectionMode) {
-            case SELECTION_CURSOR_END:
-                editText.setSelection(length);
-                break;
-            case SELECTION_CURSOR_START:
-                editText.setSelection(0);
-                break;
-            case SELECTION_SELECT_ALL:
-                editText.setSelection(0, length);
-                break;
-            }
-        }
-    }
-}
-
diff --git a/src/com/android/settings/webview/WebViewAppPicker.java b/src/com/android/settings/webview/WebViewAppPicker.java
index a5fef46..f68d27b 100644
--- a/src/com/android/settings/webview/WebViewAppPicker.java
+++ b/src/com/android/settings/webview/WebViewAppPicker.java
@@ -27,11 +27,11 @@
 import android.content.pm.PackageManager;
 import android.support.annotation.VisibleForTesting;
 import android.text.TextUtils;
+import android.webkit.UserPackage;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
-import com.android.settings.wrapper.UserPackageWrapper;
 import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
@@ -150,9 +150,9 @@
     @VisibleForTesting
     String getDisabledReason(WebViewUpdateServiceWrapper webviewUpdateServiceWrapper,
             Context context, String packageName) {
-        List<UserPackageWrapper> userPackages =
+        List<UserPackage> userPackages =
                 webviewUpdateServiceWrapper.getPackageInfosAllUsers(context, packageName);
-        for (UserPackageWrapper userPackage : userPackages) {
+        for (UserPackage userPackage : userPackages) {
             if (!userPackage.isInstalledPackage()) {
                 // Package uninstalled/hidden
                 return context.getString(
diff --git a/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java b/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java
index fa1cd3d..fd13586 100644
--- a/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java
+++ b/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java
@@ -28,8 +28,6 @@
 import android.widget.Toast;
 
 import com.android.settings.R;
-import com.android.settings.wrapper.UserPackageWrapper;
-import com.android.settings.wrapper.UserPackageWrapperImpl;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -37,7 +35,8 @@
 public class WebViewUpdateServiceWrapper {
     private static final String TAG = "WVUSWrapper";
 
-    public WebViewUpdateServiceWrapper() {}
+    public WebViewUpdateServiceWrapper() {
+    }
 
     /**
      * Fetch the package currently used as WebView implementation.
@@ -75,6 +74,7 @@
 
     /**
      * Change WebView provider to {@param packageName}.
+     *
      * @return whether the change succeeded.
      */
     public boolean setWebViewProvider(String packageName) {
@@ -90,14 +90,8 @@
     /**
      * Fetch PackageInfos for the package named {@param packageName} for all users on the device.
      */
-    public List<UserPackageWrapper> getPackageInfosAllUsers(Context context, String packageName) {
-        List<UserPackageWrapper> userPackageWrappers = new ArrayList<>();
-        List<UserPackage> userPackages =
-                UserPackage.getPackageInfosAllUsers(context, packageName, PACKAGE_FLAGS);
-        for (UserPackage userPackage : userPackages) {
-            userPackageWrappers.add(new UserPackageWrapperImpl(userPackage));
-        }
-        return userPackageWrappers;
+    public List<UserPackage> getPackageInfosAllUsers(Context context, String packageName) {
+        return UserPackage.getPackageInfosAllUsers(context, packageName, PACKAGE_FLAGS);
     }
 
     /**
diff --git a/src/com/android/settings/wrapper/UserPackageWrapper.java b/src/com/android/settings/wrapper/UserPackageWrapper.java
deleted file mode 100644
index afa1d82..0000000
--- a/src/com/android/settings/wrapper/UserPackageWrapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-package com.android.settings.wrapper;
-
-import android.content.pm.PackageInfo;
-import android.content.pm.UserInfo;
-
-/**
- * Wrapper class around android.webkit.UserPackage - to be able to use UserPackage in Robolectric
- * tests (such tests currently don't support mocking hidden classes).
- */
-public interface UserPackageWrapper {
-    UserInfo getUserInfo();
-    PackageInfo getPackageInfo();
-    boolean isEnabledPackage();
-    boolean isInstalledPackage();
-}
diff --git a/src/com/android/settings/wrapper/UserPackageWrapperImpl.java b/src/com/android/settings/wrapper/UserPackageWrapperImpl.java
deleted file mode 100644
index 0a2b9cd..0000000
--- a/src/com/android/settings/wrapper/UserPackageWrapperImpl.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-package com.android.settings.wrapper;
-
-import android.content.pm.PackageInfo;
-import android.content.pm.UserInfo;
-import android.webkit.UserPackage;
-
-/**
- * Default implementation of UserPackageWrapper.
- */
-public class UserPackageWrapperImpl implements UserPackageWrapper {
-    private final UserPackage mUserPackage;
-
-    public UserPackageWrapperImpl(UserPackage userPackage) {
-        mUserPackage = userPackage;
-    }
-
-    public UserInfo getUserInfo() {
-        return mUserPackage.getUserInfo();
-    }
-
-    public PackageInfo getPackageInfo() {
-        return mUserPackage.getPackageInfo();
-    }
-
-    public boolean isEnabledPackage() {
-        return mUserPackage.isEnabledPackage();
-    }
-
-    public boolean isInstalledPackage() {
-        return mUserPackage.isInstalledPackage();
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
index 7ed8756..2a95bc2 100644
--- a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
+++ b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
@@ -39,10 +39,10 @@
 import android.content.pm.PackageManager;
 import android.content.pm.UserInfo;
 import android.os.UserManager;
+import android.webkit.UserPackage;
 
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.widget.RadioButtonPreference;
-import com.android.settings.wrapper.UserPackageWrapper;
 import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
@@ -135,7 +135,7 @@
 
     private void testSuccessfulClickChangesProvider() {
         when(mWvusWrapper.getValidWebViewApplicationInfos(any()))
-            .thenReturn(Collections.singletonList(createApplicationInfo(DEFAULT_PACKAGE_NAME)));
+                .thenReturn(Collections.singletonList(createApplicationInfo(DEFAULT_PACKAGE_NAME)));
         when(mWvusWrapper.setWebViewProvider(eq(DEFAULT_PACKAGE_NAME))).thenReturn(true);
 
         RadioButtonPreference defaultPackagePref = mock(RadioButtonPreference.class);
@@ -149,7 +149,7 @@
 
     private void testFailingClickUpdatesSetting() {
         when(mWvusWrapper.getValidWebViewApplicationInfos(any()))
-            .thenReturn(Collections.singletonList(createApplicationInfo(DEFAULT_PACKAGE_NAME)));
+                .thenReturn(Collections.singletonList(createApplicationInfo(DEFAULT_PACKAGE_NAME)));
         when(mWvusWrapper.setWebViewProvider(eq(DEFAULT_PACKAGE_NAME))).thenReturn(false);
 
         RadioButtonPreference defaultPackagePref = mock(RadioButtonPreference.class);
@@ -229,24 +229,24 @@
 
     @Test
     public void testDisabledReasonNullIfPackagesOk() {
-        UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
+        UserPackage packageForFirstUser = mock(UserPackage.class);
         when(packageForFirstUser.isEnabledPackage()).thenReturn(true);
         when(packageForFirstUser.isInstalledPackage()).thenReturn(true);
 
-        UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class);
+        UserPackage packageForSecondUser = mock(UserPackage.class);
         when(packageForSecondUser.isEnabledPackage()).thenReturn(true);
         when(packageForSecondUser.isInstalledPackage()).thenReturn(true);
 
         WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
         when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME)))
-            .thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser));
+                .thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser));
 
         assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)).isNull();
     }
 
     @Test
     public void testDisabledReasonForSingleUserDisabledPackage() {
-        UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
+        UserPackage packageForFirstUser = mock(UserPackage.class);
         when(packageForFirstUser.isEnabledPackage()).thenReturn(false);
         when(packageForFirstUser.isInstalledPackage()).thenReturn(true);
         when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser);
@@ -257,12 +257,12 @@
 
         final String expectedReason = String.format("(disabled for user %s)", mFirstUser.name);
         assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME))
-            .isEqualTo(expectedReason);
+                .isEqualTo(expectedReason);
     }
 
     @Test
     public void testDisabledReasonForSingleUserUninstalledPackage() {
-        UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
+        UserPackage packageForFirstUser = mock(UserPackage.class);
         when(packageForFirstUser.isEnabledPackage()).thenReturn(true);
         when(packageForFirstUser.isInstalledPackage()).thenReturn(false);
         when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser);
@@ -273,17 +273,17 @@
 
         final String expectedReason = String.format("(uninstalled for user %s)", mFirstUser.name);
         assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME))
-            .isEqualTo(expectedReason);
+                .isEqualTo(expectedReason);
     }
 
     @Test
     public void testDisabledReasonSeveralUsers() {
-        UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
+        UserPackage packageForFirstUser = mock(UserPackage.class);
         when(packageForFirstUser.isEnabledPackage()).thenReturn(false);
         when(packageForFirstUser.isInstalledPackage()).thenReturn(true);
         when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser);
 
-        UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class);
+        UserPackage packageForSecondUser = mock(UserPackage.class);
         when(packageForSecondUser.isEnabledPackage()).thenReturn(true);
         when(packageForSecondUser.isInstalledPackage()).thenReturn(false);
         when(packageForSecondUser.getUserInfo()).thenReturn(mSecondUser);
@@ -294,7 +294,7 @@
 
         final String expectedReason = String.format("(disabled for user %s)", mFirstUser.name);
         assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME))
-            .isEqualTo(expectedReason);
+                .isEqualTo(expectedReason);
     }
 
     /**
@@ -303,12 +303,12 @@
      */
     @Test
     public void testDisabledReasonUninstalledAndDisabled() {
-        UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
+        UserPackage packageForFirstUser = mock(UserPackage.class);
         when(packageForFirstUser.isEnabledPackage()).thenReturn(false);
         when(packageForFirstUser.isInstalledPackage()).thenReturn(false);
         when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser);
 
-        UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class);
+        UserPackage packageForSecondUser = mock(UserPackage.class);
         when(packageForSecondUser.isEnabledPackage()).thenReturn(true);
         when(packageForSecondUser.isInstalledPackage()).thenReturn(true);
         when(packageForSecondUser.getUserInfo()).thenReturn(mSecondUser);
@@ -319,7 +319,7 @@
 
         final String expectedReason = String.format("(uninstalled for user %s)", mFirstUser.name);
         assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME))
-            .isEqualTo(expectedReason);
+                .isEqualTo(expectedReason);
     }
 
     /**
@@ -343,7 +343,8 @@
         RadioButtonPreference mockPreference = mock(RadioButtonPreference.class);
         mPicker.bindPreference(mockPreference, DEFAULT_PACKAGE_NAME, webviewAppInfo, null);
         mPicker
-            .bindPreferenceExtra(mockPreference, DEFAULT_PACKAGE_NAME, webviewAppInfo, null, null);
+                .bindPreferenceExtra(mockPreference, DEFAULT_PACKAGE_NAME, webviewAppInfo, null,
+                        null);
         verify(mockPreference, times(1)).setTitle(eq("myPackage myVersionName"));
         verify(mockPreference, times(1)).setTitle(any());
     }