am b6e57c1f: Merge "Do not set minimum value for mobile data limit dialog higher than the actual set value"

* commit 'b6e57c1f598fd9bf0f15c1e9eed238910e9fca1f':
  Do not set minimum value for mobile data limit dialog higher than the actual set value
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9a29122..90b1446 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2226,6 +2226,8 @@
     <string name="lockpattern_settings_enable_visible_pattern_title">Make pattern visible</string>
     <!-- Security & location settings screen, setting check box title. This setting controls whether tactile feedback will be produced when the user draws the pattern.-->
     <string name="lockpattern_settings_enable_tactile_feedback_title">Vibrate on touch</string>
+    <!-- Security & location settings screen, setting check box title. This controls whether the device locks immediately when the power button is pressed. [CHAR LIMIT=28]-->
+    <string name="lockpattern_settings_enable_power_button_instantly_locks">Power button instantly locks</string>
     <!-- Security & location settings screen, setting option name when user has never set an unlock pattern -->
     <string name="lockpattern_settings_choose_lock_pattern">Set unlock pattern</string>
     <!-- Security & location settings screen, setting option name when user has previously set an unlock pattern and wants to change to a new pattern -->
diff --git a/res/xml/security_settings_biometric_weak.xml b/res/xml/security_settings_biometric_weak.xml
index 7d832e4..080fbc9 100644
--- a/res/xml/security_settings_biometric_weak.xml
+++ b/res/xml/security_settings_biometric_weak.xml
@@ -43,6 +43,10 @@
             android:persistent="false"/>
 
         <CheckBoxPreference
+            android:key="power_button_instantly_locks"
+            android:title="@string/lockpattern_settings_enable_power_button_instantly_locks"/>
+
+        <CheckBoxPreference
             android:key="unlock_tactile_feedback"
             android:title="@string/lockpattern_settings_enable_tactile_feedback_title"/>
 
diff --git a/res/xml/security_settings_password.xml b/res/xml/security_settings_password.xml
index 9ddc18e..0e9c71d 100644
--- a/res/xml/security_settings_password.xml
+++ b/res/xml/security_settings_password.xml
@@ -34,6 +34,10 @@
             android:entryValues="@array/lock_after_timeout_values"
             android:persistent="false"/>
 
+        <CheckBoxPreference
+            android:key="power_button_instantly_locks"
+            android:title="@string/lockpattern_settings_enable_power_button_instantly_locks"/>
+
         <PreferenceScreen
             android:fragment="com.android.settings.OwnerInfoSettings"
             android:key="owner_info_settings"
diff --git a/res/xml/security_settings_pattern.xml b/res/xml/security_settings_pattern.xml
index 4cfc360..b91b2b6 100644
--- a/res/xml/security_settings_pattern.xml
+++ b/res/xml/security_settings_pattern.xml
@@ -39,6 +39,10 @@
             android:persistent="false"/>
 
         <CheckBoxPreference
+            android:key="power_button_instantly_locks"
+            android:title="@string/lockpattern_settings_enable_power_button_instantly_locks"/>
+
+        <CheckBoxPreference
             android:key="unlock_tactile_feedback"
             android:title="@string/lockpattern_settings_enable_tactile_feedback_title"/>
 
diff --git a/res/xml/security_settings_pin.xml b/res/xml/security_settings_pin.xml
index 0c8ff97..4562a9a 100644
--- a/res/xml/security_settings_pin.xml
+++ b/res/xml/security_settings_pin.xml
@@ -35,6 +35,10 @@
             android:persistent="false"/>
 
         <CheckBoxPreference
+            android:key="power_button_instantly_locks"
+            android:title="@string/lockpattern_settings_enable_power_button_instantly_locks"/>
+
+        <CheckBoxPreference
             android:key="unlock_tactile_feedback"
             android:title="@string/lockpattern_settings_enable_tactile_feedback_title"/>
 
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index ab58dd5..adf8c37 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -66,6 +66,7 @@
     private static final String KEY_SHOW_PASSWORD = "show_password";
     private static final String KEY_RESET_CREDENTIALS = "reset_credentials";
     private static final String KEY_TOGGLE_INSTALL_APPLICATIONS = "toggle_install_applications";
+    private static final String KEY_POWER_INSTANTLY_LOCKS = "power_button_instantly_locks";
 
     DevicePolicyManager mDPM;
 
@@ -82,6 +83,7 @@
 
     private CheckBoxPreference mToggleAppInstallation;
     private DialogInterface mWarnInstallApps;
+    private CheckBoxPreference mPowerButtonInstantlyLocks;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -156,6 +158,10 @@
         // visible pattern
         mVisiblePattern = (CheckBoxPreference) root.findPreference(KEY_VISIBLE_PATTERN);
 
+        // lock instantly on power key press
+        mPowerButtonInstantlyLocks = (CheckBoxPreference) root.findPreference(
+                KEY_POWER_INSTANTLY_LOCKS);
+
         // don't display visible pattern if biometric and backup is not pattern
         if (resid == R.xml.security_settings_biometric_weak &&
                 mLockPatternUtils.getKeyguardStoredPasswordQuality() !=
@@ -185,6 +191,14 @@
         if ((TelephonyManager.PHONE_TYPE_CDMA == tm.getCurrentPhoneType()) &&
                 (tm.getLteOnCdmaMode() != Phone.LTE_ON_CDMA_TRUE)) {
             root.removePreference(root.findPreference(KEY_SIM_LOCK));
+        } else {
+            // Disable SIM lock if sim card is missing or unknown
+            if ((TelephonyManager.getDefault().getSimState() ==
+                                 TelephonyManager.SIM_STATE_ABSENT) ||
+                (TelephonyManager.getDefault().getSimState() ==
+                                 TelephonyManager.SIM_STATE_UNKNOWN)) {
+                root.findPreference(KEY_SIM_LOCK).setEnabled(false);
+            }
         }
 
         // Show password
@@ -314,6 +328,9 @@
         if (mTactileFeedback != null) {
             mTactileFeedback.setChecked(lockPatternUtils.isTactileFeedbackEnabled());
         }
+        if (mPowerButtonInstantlyLocks != null) {
+            mPowerButtonInstantlyLocks.setChecked(lockPatternUtils.getPowerButtonInstantlyLocks());
+        }
 
         mShowPassword.setChecked(Settings.System.getInt(getContentResolver(),
                 Settings.System.TEXT_SHOW_PASSWORD, 1) != 0);
@@ -343,6 +360,8 @@
             lockPatternUtils.setVisiblePatternEnabled(isToggled(preference));
         } else if (KEY_TACTILE_FEEDBACK_ENABLED.equals(key)) {
             lockPatternUtils.setTactileFeedbackEnabled(isToggled(preference));
+        } else if (KEY_POWER_INSTANTLY_LOCKS.equals(key)) {
+            lockPatternUtils.setPowerButtonInstantlyLocks(isToggled(preference));
         } else if (preference == mShowPassword) {
             Settings.System.putInt(getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD,
                     mShowPassword.isChecked() ? 1 : 0);
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index e27c96e..867f733 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -147,7 +147,7 @@
             getPreferenceScreen().removePreference(mUsbTether);
         }
 
-        if (wifiAvailable) {
+        if (wifiAvailable && !Utils.isMonkeyRunning()) {
             mWifiApEnabler = new WifiApEnabler(activity, mEnableWifiAp);
             initWifiTethering();
         } else {
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 6312682..b813ec6 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -579,11 +579,12 @@
         if (osApp != null) {
             long wakeTimeMillis = mStats.computeBatteryUptime(
                     SystemClock.uptimeMillis() * 1000, which) / 1000;
-            wakeTimeMillis -= appWakelockTime - (mStats.getScreenOnTime(
+            wakeTimeMillis -= appWakelockTime + (mStats.getScreenOnTime(
                     SystemClock.elapsedRealtime(), which) / 1000);
             if (wakeTimeMillis > 0) {
                 double power = (wakeTimeMillis
                         * mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_AWAKE)) / 1000;
+                if (DEBUG) Log.i(TAG, "OS wakeLockTime " + wakeTimeMillis + " power " + power);
                 osApp.wakeLockTime += wakeTimeMillis;
                 osApp.value += power;
                 osApp.values[0] += power;
diff --git a/src/com/android/settings/tts/TtsEnginePreference.java b/src/com/android/settings/tts/TtsEnginePreference.java
index b98a239..196882f 100644
--- a/src/com/android/settings/tts/TtsEnginePreference.java
+++ b/src/com/android/settings/tts/TtsEnginePreference.java
@@ -155,12 +155,21 @@
             }
         });
 
+        if (mVoiceCheckData != null) {
+            mSettingsIcon.setEnabled(mRadioButton.isChecked());
+        }
+
         return view;
     }
 
     public void setVoiceDataDetails(Intent data) {
         mVoiceCheckData = data;
-        mSettingsIcon.setEnabled(mRadioButton.isChecked());
+        // This might end up running before getView aboive, in which
+        // case mSettingsIcon && mRadioButton will be null. In this case
+        // getView will set the right values.
+        if (mSettingsIcon != null && mRadioButton != null) {
+            mSettingsIcon.setEnabled(mRadioButton.isChecked());
+        }
     }
 
     private void onRadioButtonClicked(CompoundButton buttonView, boolean isChecked) {
diff --git a/src/com/android/settings/tts/TtsEngineSettingsFragment.java b/src/com/android/settings/tts/TtsEngineSettingsFragment.java
index 3f740d7..18d1fdb 100644
--- a/src/com/android/settings/tts/TtsEngineSettingsFragment.java
+++ b/src/com/android/settings/tts/TtsEngineSettingsFragment.java
@@ -141,7 +141,7 @@
             if (loc != null){
                 entries[i] = loc.getDisplayName();
                 entryValues[i] = availableLangs.get(i);
-                if (entryValues[i].equals(currentLocale)) {
+                if (availableLangs.get(i).equalsIgnoreCase(currentLocale)) {
                     selectedLanguageIndex = i;
                 }
             }