Fix issues in Settings: 16660423, 13172381, 16868094

Issue #16660423: Stability: ArrayIndexOutOfBoundsException in settings:
at com.android.settings.fuelgauge.BatteryHistoryChart$ChartData.draw(
BatteryHistoryChart.java:109)

Issue #13172381: No content description in Battery charging section

Issue #16868094: Settings crash on switching to landscape mode with
"Google Text-to-speech" settings icon selected

Change-Id: I94d0e83f72d571eb90aad6742acabce56c0298ec
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);
         }