Merge "Removed the white icon from Bluetooth rename dialog." into lmp-dev
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
index d88c516..9d3edd5 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
+++ b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
@@ -86,7 +86,7 @@
 
         void addTick(int x, int bin) {
             if (bin != mLastBin && mNumTicks < mTicks.length) {
-                mTicks[mNumTicks] = x | bin << CHART_DATA_BIN_SHIFT;
+                mTicks[mNumTicks] = (x&CHART_DATA_X_MASK) | (bin<<CHART_DATA_BIN_SHIFT);
                 mNumTicks++;
                 mLastBin = bin;
             }
@@ -540,6 +540,7 @@
         }
         mDrainString = "";
         mChargeDurationString = "";
+        setContentDescription(mChargeLabelString);
 
         int pos = 0;
         int lastInteresting = 0;
@@ -804,6 +805,9 @@
                 }
                 if (curWalltime != 0 && rec.isDeltaData()) {
                     x = mLevelLeft + (int)(((curWalltime-walltimeStart)*levelWidth)/walltimeChange);
+                    if (x < 0) {
+                        x = 0;
+                    }
                     if (false) {
                         StringBuilder sb = new StringBuilder(128);
                         sb.append("walloff=");
@@ -984,6 +988,9 @@
         } else {
             // Figure out where the actual data ends on the screen.
             x = mLevelLeft + (int)(((mEndDataWallTime-walltimeStart)*levelWidth)/walltimeChange);
+            if (x < 0) {
+                x = 0;
+            }
         }
 
         finishPaths(x, h, levelh, startX, lastY, curLevelPath, lastX,
diff --git a/src/com/android/settings/tts/TtsEngineSettingsFragment.java b/src/com/android/settings/tts/TtsEngineSettingsFragment.java
index c8531fa..2449353 100644
--- a/src/com/android/settings/tts/TtsEngineSettingsFragment.java
+++ b/src/com/android/settings/tts/TtsEngineSettingsFragment.java
@@ -140,7 +140,7 @@
 
             mLocalePreference.setEntries(entries);
             mLocalePreference.setEntryValues(entryValues);
-            mLocalePreference.setValue(value.toString());
+            mLocalePreference.setValue(value != null ? value.toString() : null);
             mLocalePreference.setEnabled(entries.length > 0);
         }
 
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index ba93931..93f9b0f 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -803,7 +803,19 @@
             mUserListCategory.addPreference(pref);
         }
 
-        if (!mIsGuest) {
+        boolean showGuestPreference = !mIsGuest;
+        // If user has DISALLOW_ADD_USER don't allow creating a guest either.
+        if (showGuestPreference && mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)) {
+            showGuestPreference = false;
+            // If guest already exists, no user creation needed.
+            for (UserInfo user : users) {
+                if (user.isGuest()) {
+                    showGuestPreference = true;
+                    break;
+                }
+            }
+        }
+        if (showGuestPreference) {
             // Add a virtual Guest user for guest defaults
             Preference pref = new UserPreference(getActivity(), null,
                     UserPreference.USERID_GUEST_DEFAULTS,
@@ -930,6 +942,10 @@
             }
         }
         // No guest user. Create one.
+        if (mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)) {
+            Log.i(TAG, "Blocking guest creation because it is restricted");
+            return;
+        }
         UserInfo guestUser = mUserManager.createGuest(getActivity(),
                     getResources().getString(R.string.user_guest));
         if (guestUser != null) {