Merge "Fix regulatory information dialog appearance" into jb-mr1-dev
diff --git a/res/values/bools.xml b/res/values/bools.xml
index ba402e5..76dc44a 100644
--- a/res/values/bools.xml
+++ b/res/values/bools.xml
@@ -30,9 +30,6 @@
          Can be overridden for specific product builds. -->
     <bool name="auto_confirm_bluetooth_activation_dialog">false</bool>
 
-    <!-- Whether User management screen is available -->
-    <bool name="enable_user_management">false</bool>
-
     <!-- Whether to show a preference item for regulatory information in About phone -->
     <bool name="config_show_regulatory_info">false</bool>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e08cdeb..00adeba 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1218,9 +1218,9 @@
     <!-- Generic error message when the sleep policy could not be set. -->
     <string name="wifi_setting_sleep_policy_error">There was a problem changing the setting</string>
     <!-- Checkbox title for option to toggle suspend power optimizations -->
-    <string name="wifi_suspend_optimizations">Power save</string>
+    <string name="wifi_suspend_optimizations">Wi-Fi optimization</string>
     <!-- Checkbox summary for option to toggle suspend power optimizations -->
-    <string name="wifi_suspend_optimizations_summary">Save power when screen is turned off</string>
+    <string name="wifi_suspend_optimizations_summary">Minimize battery usage when Wi-Fi is on</string>
     <!-- Action bar text message to manually add a wifi network [CHAR LIMIT=20]-->
     <string name="wifi_add_network">Add network</string>
     <!-- Header for the list of wifi networks-->
@@ -1460,10 +1460,8 @@
     <string name="wifi_p2p_cancel_connect_title">Cancel invitation?</string>
     <!-- Message text for disconnection from one device-->
     <string name="wifi_p2p_cancel_connect_message">Do you want to cancel invitation to connect with <xliff:g id="peer_name">%1$s</xliff:g>?</string>
-    <!-- Title for delete group dialog -->
-    <string name="wifi_p2p_delete_group_title">Delete group?</string>
     <!-- Message text for remembered group deletion-->
-    <string name="wifi_p2p_delete_group_message">Do you want to delete the group <xliff:g id="group_name">%1$s</xliff:g>?</string>
+    <string name="wifi_p2p_delete_group_message">Forget this group?</string>
 
     <!-- Wifi AP settings-->
     <!-- Label for wifi tether checkbox. Toggles Access Point on/off -->
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
index 258ea64..eb9e918 100644
--- a/src/com/android/settings/DeviceInfoSettings.java
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -175,7 +175,10 @@
 
     private void removePreferenceIfBoolFalse(String preference, int resId) {
         if (!getResources().getBoolean(resId)) {
-            getPreferenceScreen().removePreference(findPreference(preference));
+            Preference pref = findPreference(preference);
+            if (pref != null) {
+                getPreferenceScreen().removePreference(pref);
+            }
         }
     }
 
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index bf31386..fa30f09 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -42,6 +42,7 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceActivity.Header;
@@ -415,7 +416,7 @@
                 i = insertAccountsHeaders(target, headerIndex);
             } else if (id == R.id.user_settings) {
                 if (!UserHandle.MU_ENABLED
-                        || !getResources().getBoolean(R.bool.enable_user_management)
+                        || !UserManager.supportsMultipleUsers()
                         || Utils.isMonkeyRunning()) {
                     target.remove(header);
                 }
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 2284b91..97d7b75 100644
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -564,6 +564,16 @@
             }
         }
         mAppEntry = mState.getEntry(packageName);
+        // Get application info again to refresh changed properties of application
+        try {
+            mPackageInfo = mPm.getPackageInfo(mAppEntry.info.packageName,
+                    PackageManager.GET_DISABLED_COMPONENTS |
+                    PackageManager.GET_UNINSTALLED_PACKAGES |
+                    PackageManager.GET_SIGNATURES);
+        } catch (NameNotFoundException e) {
+            Log.e(TAG, "Exception when retrieving package:" + mAppEntry.info.packageName, e);
+        }
+
         return packageName;
     }
 
@@ -576,18 +586,11 @@
         if (mAppEntry == null) {
             return false; // onCreate must have failed, make sure to exit
         }
-        
-        // Get application info again to refresh changed properties of application
-        try {
-            mPackageInfo = mPm.getPackageInfo(mAppEntry.info.packageName,
-                    PackageManager.GET_DISABLED_COMPONENTS |
-                    PackageManager.GET_UNINSTALLED_PACKAGES |
-                    PackageManager.GET_SIGNATURES);
-        } catch (NameNotFoundException e) {
-            Log.e(TAG, "Exception when retrieving package:" + mAppEntry.info.packageName, e);
+
+        if (mPackageInfo == null) {
             return false; // onCreate must have failed, make sure to exit
         }
-        
+
         // Get list of preferred activities
         List<ComponentName> prefActList = new ArrayList<ComponentName>();
         
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 9bd5538..5704163 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -767,10 +767,7 @@
             final int userId = mUserSippers.keyAt(i);
             final List<BatterySipper> sippers = mUserSippers.valueAt(i);
             UserInfo info = mUm.getUserInfo(userId);
-            Drawable icon = null;
-            if (info != null && info.iconPath != null) {
-                icon = UserUtils.getUserIcon(mUm, info);
-            }
+            Drawable icon = UserUtils.getUserIcon(mUm, info, getResources());
             String name = info != null ? info.name : null;
             if (name == null) {
                 name = Integer.toString(info.id);
diff --git a/src/com/android/settings/net/UidDetailProvider.java b/src/com/android/settings/net/UidDetailProvider.java
index 37b99dd..c631695 100644
--- a/src/com/android/settings/net/UidDetailProvider.java
+++ b/src/com/android/settings/net/UidDetailProvider.java
@@ -32,6 +32,7 @@
 
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settings.users.UserUtils;
 
 /**
  * Return details about a specific UID, handling special cases like
@@ -118,7 +119,7 @@
             final UserInfo info = um.getUserInfo(userHandle);
             if (info != null) {
                 detail.label = res.getString(R.string.running_process_item_user_label, info.name);
-                detail.icon = Drawable.createFromPath(info.iconPath);
+                detail.icon = UserUtils.getUserIcon(um, info, res);
                 return detail;
             }
         }
diff --git a/src/com/android/settings/users/UserUtils.java b/src/com/android/settings/users/UserUtils.java
index 433cbd3..1d16bcf 100644
--- a/src/com/android/settings/users/UserUtils.java
+++ b/src/com/android/settings/users/UserUtils.java
@@ -17,18 +17,17 @@
 package com.android.settings.users;
 
 import android.content.pm.UserInfo;
+import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
-import android.os.ParcelFileDescriptor;
 import android.os.UserManager;
 
 public class UserUtils {
-
-    public static Drawable getUserIcon(UserManager um, UserInfo user) {
+    public static Drawable getUserIcon(UserManager um, UserInfo user, Resources res) {
         if (user.iconPath == null) return null;
         Bitmap icon = um.getUserIcon(user.id);
         if (icon == null) return null;
-        return new BitmapDrawable(icon);
+        return new BitmapDrawable(res, icon);
     }
 }
diff --git a/src/com/android/settings/vpn2/VpnSettings.java b/src/com/android/settings/vpn2/VpnSettings.java
index 07aa04f..931f0c2 100644
--- a/src/com/android/settings/vpn2/VpnSettings.java
+++ b/src/com/android/settings/vpn2/VpnSettings.java
@@ -49,6 +49,7 @@
 import com.android.internal.net.LegacyVpnInfo;
 import com.android.internal.net.VpnConfig;
 import com.android.internal.net.VpnProfile;
+import com.android.internal.util.ArrayUtils;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.google.android.collect.Lists;
@@ -463,7 +464,7 @@
         private void initProfiles(KeyStore keyStore, Resources res) {
             final String lockdownKey = getStringOrNull(keyStore, Credentials.LOCKDOWN_VPN);
 
-            mProfiles = loadVpnProfiles(keyStore);
+            mProfiles = loadVpnProfiles(keyStore, VpnProfile.TYPE_PPTP);
             mTitles = Lists.newArrayList();
             mTitles.add(res.getText(R.string.vpn_lockdown_none));
             mCurrentIndex = 0;
@@ -523,14 +524,14 @@
         }
     }
 
-    private static List<VpnProfile> loadVpnProfiles(KeyStore keyStore) {
+    private static List<VpnProfile> loadVpnProfiles(KeyStore keyStore, int... excludeTypes) {
         final ArrayList<VpnProfile> result = Lists.newArrayList();
         final String[] keys = keyStore.saw(Credentials.VPN);
         if (keys != null) {
             for (String key : keys) {
                 final VpnProfile profile = VpnProfile.decode(
                         key, keyStore.get(Credentials.VPN + key));
-                if (profile != null) {
+                if (profile != null && !ArrayUtils.contains(excludeTypes, profile.type)) {
                     result.add(profile);
                 }
             }
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index 1bb253a..2496d8e 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -444,8 +444,7 @@
             int stringId = R.string.wifi_p2p_delete_group_message;
 
             AlertDialog dialog = new AlertDialog.Builder(getActivity())
-                .setTitle(R.string.wifi_p2p_delete_group_title)
-                .setMessage(getActivity().getString(stringId, mSelectedGroup.getGroupName()))
+                .setMessage(getActivity().getString(stringId))
                 .setPositiveButton(getActivity().getString(R.string.dlg_ok), mDeleteGroupListener)
                 .setNegativeButton(getActivity().getString(R.string.dlg_cancel), null)
                 .create();