Merge "Misc UI fixes for settings (mostly cryptkeeper)"
diff --git a/res/layout/text_description_preference.xml b/res/layout/text_description_preference.xml
index c5084034..eeaa81b 100644
--- a/res/layout/text_description_preference.xml
+++ b/res/layout/text_description_preference.xml
@@ -15,6 +15,7 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/message_container"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical" >
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2079700..a120b64 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2718,38 +2718,49 @@
     <!-- Summary for the allowed state of script injection. [CHAR LIMIT=15] -->
     <string name="accessibility_script_injection_allowed">Allowed</string>
     <!-- Summary for the disallowed state of script injection. [CHAR LIMIT=15] -->
-    <string name="accessibility_script_injection_disallowed">Disallowed</string>
+    <string name="accessibility_script_injection_disallowed">Not allowed</string>
 
     <!-- Title for the dialog button to allow script injection. [CHAR LIMIT=15] -->
     <string name="accessibility_script_injection_button_allow">Allow</string>
     <!-- Title for the dialog button to disallow script injection. [CHAR LIMIT=15] -->
     <string name="accessibility_script_injection_button_disallow">Don\'t Allow</string>
 
-    <!-- Warning message about security implications of enabling an accessibility service,
+     <!-- Title for a warning message about security implications of enabling an accessibility service,
          displayed as a dialog message when the user selects to enable an accessibility service (tablet). [CHAR LIMIT=NONE] -->
-    <string name="accessibility_service_security_warning">
+    <string name="accessibility_service_security_warning_title">Use
+         <xliff:g id="service" example="TalkBack">%1$s</xliff:g>?</string>
+    <!-- Summary for a warning message about security implications of enabling an accessibility service,
+         displayed as a dialog message when the user selects to enable an accessibility service (tablet). [CHAR LIMIT=NONE] -->
+    <string name="accessibility_service_security_warning_summary">
             <xliff:g id="accessibility_service_name">%1$s</xliff:g> can
             collect all of the text you type, except passwords. This includes personal data such as credit card
             numbers. It can also collect data about your interactions with the device.</string>
-    <!-- Title for a warning about disabling accessibility displayed as a dialog message when the user
-         selects to disable accessibility. This avoids accidental disabling. [CHAR LIMIT=30] -->
-    <string name="accessibility_disable_warning_title">Turn accessibility off?</string>
-    <!-- Summary for a warning about disabling accessibility displayed as a dialog message when the user
-         selects to disable accessibility. This avoids accidental disabling. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_disable_warning_summary">Touching OK will stop spoken
-        descriptions and all other accessibility features you\'ve been using.</string>
+
+    <!-- Title for a warning about disabling an accessibility service displayed as a dialog message when the user
+         selects to disable that service. This avoids accidental disabling. [CHAR LIMIT=NONE] -->
+    <string name="accessibility_service_disable_warning_title">Stop
+         <xliff:g id="service" example="TalkBack">%1$s</xliff:g>?</string>
+    <!-- Summary for a warning about disabling accessibility service displayed as a dialog message when the user
+         selects to disable that service. This avoids accidental disabling. [CHAR LIMIT=NONE] -->
+    <string name="accessibility_service_disable_warning_summary">Touching OK will
+        stop <xliff:g id="service" example="TalkBack">%1$s</xliff:g>.</string>
+
     <!-- Title for the prompt that lets users know that they have no accessibility related apps
          installed and that they can install TalkBack from Market. [CHAR LIMIT=50] -->
-    <string name="accessibility_service_no_apps_title">No accessibility applications
-        </string>
+    <string name="accessibility_service_no_apps_title">No accessibility applications</string>
     <!-- Message for the prompt that lets users know that they have no accessibility related apps
          installed and that they can install TalkBack from Market. [CHAR LIMIT=NONE] -->
     <string name="accessibility_service_no_apps_message">You don\'t have accessibility
         applications installed. Do you want to download a screen reader from the Android Market?</string>
+
+    <!-- Title for a warning about downloading accessibility scripts displayed as a dialog message
+         when the user selects to enable script downloading. [CHAR LIMIT=40] -->
+    <string name="accessibility_script_injection_security_warning_title">Install accessibility scripts?</string>
     <!-- Warning message about security implications of downloading accessibility scripts,
          displayed as a dialog message when the user selects to enable script downloading. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_script_injection_security_warning">Do you want applications to install
+    <string name="accessibility_script_injection_security_warning_summary">Do you want applications to install
         scripts from Google that will make their content more accessible?</string>
+
     <!-- Warning message that the interaction model changes on enabling touch exploration. [CHAR LIMIT=NONE] -->
     <string name="accessibility_touch_exploration_warning">This feature changes the
         way your device responds to touch. Turn on?</string>
@@ -2757,6 +2768,7 @@
     <string name="accessibility_service_default_description">This accessibility service has no
         description.\n\nAccessibility services provide various types of feedback when you interact
         with the device. </string>
+
     <!-- Accessibility settings: button for lauching settings for an accessibility service -->
     <string name="settings_button">Settings</string>
 
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index 4dbca6d..bd054ad 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -30,13 +30,17 @@
         <CheckBoxPreference
                 android:key="toggle_large_text_preference"
                 android:title="@string/accessibility_toggle_large_text_title"
-                android:persistent="true"/>
+                android:persistent="false"/>
 
         <CheckBoxPreference
                 android:key="toggle_power_button_ends_call_preference"
                 android:title="@string/accessibility_power_button_ends_call_title"
-                android:persistent="true">
-        </CheckBoxPreference>
+                android:persistent="false"/>
+
+        <CheckBoxPreference
+                android:key="toggle_auto_rotate_screen_preference"
+                android:title="@string/accelerometer_title"
+                android:persistent="false"/>
 
         <PreferenceScreen
                 android:key="toggle_touch_exploration_preference"
@@ -44,7 +48,8 @@
                 android:fragment="com.android.settings.AccessibilitySettings$ToggleTouchExplorationFragment" >
                 <extra android:name="title" android:value="@string/accessibility_touch_exploration_title" />
                 <extra android:name="summary" android:value="@string/accessibility_touch_exploration_summary" />
-                <extra android:name="warning_message" android:value="@string/accessibility_touch_exploration_warning" />
+                <extra android:name="enable_warning_title" android:value="@android:string/dialog_alert_title" />
+                <extra android:name="enable_warning_message" android:value="@string/accessibility_touch_exploration_warning" />
                 <extra android:name="settings_title" android:value="@string/accessibility_menu_item_tutorial" />
                 <extra android:name="settings_component_name" android:value="com.android.settings/com.android.settings.AccessibilityTutorialActivity" />
         </PreferenceScreen>
@@ -53,17 +58,17 @@
                 android:title="@string/accessibility_long_press_timeout_title"
                 android:entries="@array/long_press_timeout_selector_titles"
                 android:entryValues="@array/long_press_timeout_selector_values"
-                android:persistent="true" />
+                android:persistent="false"/>
 
         <com.android.settings.AccessibilityEnableScriptInjectionPreference
                 android:key="toggle_script_injection_preference"
                 android:title="@string/accessibility_script_injection_title"
-                android:dialogTitle="@android:string/dialog_alert_title"
+                android:dialogTitle="@string/accessibility_script_injection_security_warning_title"
                 android:dialogIcon="@android:drawable/ic_dialog_alert"
-                android:dialogMessage="@string/accessibility_script_injection_security_warning"
+                android:dialogMessage="@string/accessibility_script_injection_security_warning_summary"
                 android:positiveButtonText="@string/accessibility_script_injection_button_allow"
                 android:negativeButtonText="@string/accessibility_script_injection_button_disallow"
-                android:persistent="true" />
+                android:persistent="false"/>
 
     </PreferenceCategory>
 
diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java
index e1b44e7..e87b3e8 100644
--- a/src/com/android/settings/AccessibilitySettings.java
+++ b/src/com/android/settings/AccessibilitySettings.java
@@ -53,6 +53,7 @@
 import android.view.View;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
+import android.widget.LinearLayout;
 import android.widget.Switch;
 import android.widget.TextView;
 
@@ -99,6 +100,8 @@
     private static final String TOGGLE_LARGE_TEXT_PREFERENCE = "toggle_large_text_preference";
     private static final String TOGGLE_POWER_BUTTON_ENDS_CALL_PREFERENCE =
         "toggle_power_button_ends_call_preference";
+    private static final String TOGGLE_AUTO_ROTATE_SCREEN_PREFERENCE =
+        "toggle_auto_rotate_screen_preference";
     private static final String TOGGLE_TOUCH_EXPLORATION_PREFERENCE =
         "toggle_touch_exploration_preference";
     private static final String SELECT_LONG_PRESS_TIMEOUT_PREFERENCE =
@@ -111,13 +114,15 @@
     private static final String EXTRA_CHECKED = "checked";
     private static final String EXTRA_TITLE = "title";
     private static final String EXTRA_SUMMARY = "summary";
-    private static final String EXTRA_WARNING_MESSAGE = "warning_message";
+    private static final String EXTRA_ENABLE_WARNING_TITLE = "enable_warning_title";
+    private static final String EXTRA_ENABLE_WARNING_MESSAGE = "enable_warning_message";
+    private static final String EXTRA_DISABLE_WARNING_TITLE = "disable_warning_title";
+    private static final String EXTRA_DISABLE_WARNING_MESSAGE = "disable_warning_message";
     private static final String EXTRA_SETTINGS_TITLE = "settings_title";
     private static final String EXTRA_SETTINGS_COMPONENT_NAME = "settings_component_name";
 
     // Dialog IDs.
-    private static final int DIALOG_ID_DISABLE_ACCESSIBILITY = 1;
-    private static final int DIALOG_ID_NO_ACCESSIBILITY_SERVICES = 2;
+    private static final int DIALOG_ID_NO_ACCESSIBILITY_SERVICES = 1;
 
     // Auxiliary members.
     private final SimpleStringSplitter mStringColonSplitter =
@@ -134,18 +139,17 @@
         @Override
         public void dispatchMessage(Message msg) {
             super.dispatchMessage(msg);
-            updateServicesPreferences(mToggleAccessibilitySwitch.isChecked());
+            updateServicesPreferences();
         }
     };
 
     // Preference controls.
-    private ToggleSwitch mToggleAccessibilitySwitch;
-
     private PreferenceCategory mServicesCategory;
     private PreferenceCategory mSystemsCategory;
 
     private CheckBoxPreference mToggleLargeTextPreference;
     private CheckBoxPreference mTogglePowerButtonEndsCallPreference;
+    private CheckBoxPreference mToggleAutoRotateScreenPreference;
     private Preference mToggleTouchExplorationPreference;
     private ListPreference mSelectLongPressTimeoutPreference;
     private AccessibilityEnableScriptInjectionPreference mToggleScriptInjectionPreference;
@@ -162,9 +166,8 @@
     @Override
     public void onResume() {
         super.onResume();
-        final boolean accessibilityEnabled = mToggleAccessibilitySwitch.isChecked();
-        updateAllPreferences(accessibilityEnabled);
-        if (accessibilityEnabled) {
+        updateAllPreferences();
+        if (mServicesCategory.getPreference(0) == mNoServicesMessagePreference) {
             offerInstallAccessibilitySerivceOnce();
         }
         mSettingsPackageMonitor.register(getActivity(), false);
@@ -176,18 +179,6 @@
         super.onPause();
     }
 
-    @Override
-    public void onViewCreated(View view, Bundle savedInstanceState) {
-        addToggleAccessibilitySwitch();
-        super.onViewCreated(view, savedInstanceState);
-    }
-
-    @Override
-    public void onDestroyView() {
-        removeToggleAccessibilitySwitch();
-        super.onDestroyView();
-    }
-
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         if (preference == mSelectLongPressTimeoutPreference) {
             String stringValue = (String) newValue;
@@ -202,13 +193,15 @@
 
     @Override
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
-        final String key = preference.getKey();
         if (mToggleLargeTextPreference == preference) {
             handleToggleLargeTextPreferenceClick();
             return true;
         } else if (mTogglePowerButtonEndsCallPreference == preference) {
             handleTogglePowerButtonEndsCallPreferenceClick();
             return true;
+        } else if (mToggleAutoRotateScreenPreference == preference) {
+            handleToggleAutoRotateScreenPreferenceClick();
+            return true;
         }
         return super.onPreferenceTreeClick(preferenceScreen, preference);
     }
@@ -230,88 +223,34 @@
                         : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF));
     }
 
-    private void addToggleAccessibilitySwitch() {
-        mToggleAccessibilitySwitch = createAndAddActionBarToggleSwitch(getActivity());
-        final boolean checked = (Settings.Secure.getInt(getContentResolver(),
-                Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1);
-        mToggleAccessibilitySwitch.setChecked(checked);
-        mToggleAccessibilitySwitch.setOnBeforeCheckedChangeListener(
-                new OnBeforeCheckedChangeListener() {
-            @Override
-            public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) {
-                if (!checked) {
-                    toggleSwitch.setCheckedInternal(true);
-                    showDialog(DIALOG_ID_DISABLE_ACCESSIBILITY);
-                    return true;
-                }
-                Settings.Secure.putInt(getContentResolver(),
-                        Settings.Secure.ACCESSIBILITY_ENABLED, 1);
-                updateAllPreferences(true);
-                offerInstallAccessibilitySerivceOnce();
-                return false;
-            }
-        });
-    }
-
-    public void removeToggleAccessibilitySwitch() {
-        mToggleAccessibilitySwitch.setOnBeforeCheckedChangeListener(null);
-        getActivity().getActionBar().setCustomView(null);
+    private void handleToggleAutoRotateScreenPreferenceClick() {
+        Settings.System.putInt(getContentResolver(),
+                Settings.System.ACCELEROMETER_ROTATION,
+                (mToggleAutoRotateScreenPreference.isChecked() ? 1 : 0));
     }
 
     private void initializeAllPreferences() {
-        // The basic logic here is if accessibility is not enabled all accessibility
-        // settings will have no effect but still their selected state should be kept
-        // unchanged, so the user can see what settings will be enabled when turning
-        // on accessibility.
-
-        final boolean accessibilityEnabled = (Settings.Secure.getInt(getContentResolver(),
-                Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1);
-
         mServicesCategory = (PreferenceCategory) findPreference(SERVICES_CATEGORY);
         mSystemsCategory = (PreferenceCategory) findPreference(SYSTEM_CATEGORY);
 
         // Large text.
         mToggleLargeTextPreference =
             (CheckBoxPreference) findPreference(TOGGLE_LARGE_TEXT_PREFERENCE);
-        if (accessibilityEnabled) {
-            try {
-                mCurConfig.updateFrom(ActivityManagerNative.getDefault().getConfiguration());
-            } catch (RemoteException re) {
-                /* ignore */
-            }
-            mToggleLargeTextPreference.setChecked(mCurConfig.fontScale == LARGE_FONT_SCALE);
-        }
 
         // Power button ends calls.
         mTogglePowerButtonEndsCallPreference =
             (CheckBoxPreference) findPreference(TOGGLE_POWER_BUTTON_ENDS_CALL_PREFERENCE);
-        if (KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER)
-                && Utils.isVoiceCapable(getActivity())) {
-            if (accessibilityEnabled) {
-                final int incallPowerBehavior = Settings.Secure.getInt(getContentResolver(),
-                        Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
-                        Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT);
-                final boolean powerButtonEndsCall =
-                    (incallPowerBehavior == Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP);
-                mTogglePowerButtonEndsCallPreference.setChecked(powerButtonEndsCall);
-            }
-        } else {
+        if (!KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER)
+                || !Utils.isVoiceCapable(getActivity())) {
             mSystemsCategory.removePreference(mTogglePowerButtonEndsCallPreference);
         }
 
+        // Auto-rotate screen
+        mToggleAutoRotateScreenPreference =
+            (CheckBoxPreference) findPreference(TOGGLE_AUTO_ROTATE_SCREEN_PREFERENCE);
+
         // Touch exploration enabled.
         mToggleTouchExplorationPreference = findPreference(TOGGLE_TOUCH_EXPLORATION_PREFERENCE);
-        final boolean touchExplorationEnabled = (Settings.Secure.getInt(getContentResolver(),
-                Settings.Secure.TOUCH_EXPLORATION_ENABLED, 0) == 1);
-        if (touchExplorationEnabled) {
-            mToggleTouchExplorationPreference.setSummary(
-                    getString(R.string.accessibility_service_state_on));
-            mToggleTouchExplorationPreference.getExtras().putBoolean(EXTRA_CHECKED, true);
-        } else {
-            mToggleTouchExplorationPreference.setSummary(
-                    getString(R.string.accessibility_service_state_off));
-            mToggleTouchExplorationPreference.getExtras().putBoolean(EXTRA_CHECKED, false);
-        }
 
         // Long press timeout.
         mSelectLongPressTimeoutPreference =
@@ -328,34 +267,18 @@
                mLongPressTimeoutValuetoTitleMap.put(timeoutValues[i], timeoutTitles[i]);
             }
         }
-        if (accessibilityEnabled) {
-            final int longPressTimeout = Settings.Secure.getInt(getContentResolver(),
-                    Settings.Secure.LONG_PRESS_TIMEOUT, mLongPressTimeoutDefault);
-            String value = String.valueOf(longPressTimeout);
-            mSelectLongPressTimeoutPreference.setValue(value);
-            mSelectLongPressTimeoutPreference.setSummary(
-                    mLongPressTimeoutValuetoTitleMap.get(value));
-        } else {
-            Settings.Secure.putInt(getContentResolver(), Settings.Secure.LONG_PRESS_TIMEOUT,
-                    mLongPressTimeoutDefault);
-        }
 
         // Script injection.
         mToggleScriptInjectionPreference = (AccessibilityEnableScriptInjectionPreference)
             findPreference(TOGGLE_SCRIPT_INJECTION_PREFERENCE);
-        if (accessibilityEnabled) {
-            final boolean  scriptInjectionAllowed = (Settings.Secure.getInt(getContentResolver(),
-                    Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION, 0) == 1);
-            mToggleScriptInjectionPreference.setInjectionAllowed(scriptInjectionAllowed);
-        }
     }
 
-    private void updateAllPreferences(boolean accessibilityEnabled) {
-        updateServicesPreferences(accessibilityEnabled);
-        updateSystemPreferences(accessibilityEnabled);
+    private void updateAllPreferences() {
+        updateServicesPreferences();
+        updateSystemPreferences();
     }
 
-    private void updateServicesPreferences(boolean accessibilityEnabled) {
+    private void updateServicesPreferences() {
         // Since services category is auto generated we have to do a pass
         // to generate it since services can come and go and then based on
         // the global accessibility state to decided whether it is enabled.
@@ -381,7 +304,6 @@
 
         for (int i = 0, count = installedServices.size(); i < count; ++i) {
             AccessibilityServiceInfo info = installedServices.get(i);
-            String key = info.getId();
 
             PreferenceScreen preference = getPreferenceManager().createPreferenceScreen(
                     getActivity());
@@ -416,9 +338,19 @@
             }
             extras.putString(EXTRA_SUMMARY, description);
 
-            extras.putString(EXTRA_WARNING_MESSAGE, getString(
-                    R.string.accessibility_service_security_warning,
-                    info.getResolveInfo().loadLabel(getPackageManager())));
+            CharSequence applicationLabel = info.getResolveInfo().loadLabel(getPackageManager());
+
+            extras.putString(EXTRA_ENABLE_WARNING_TITLE, getString(
+                    R.string.accessibility_service_security_warning_title, applicationLabel));
+            extras.putString(EXTRA_ENABLE_WARNING_MESSAGE, getString(
+                    R.string.accessibility_service_security_warning_summary, applicationLabel));
+
+            extras.putString(EXTRA_DISABLE_WARNING_TITLE, getString(
+                    R.string.accessibility_service_disable_warning_title,
+                    applicationLabel));
+            extras.putString(EXTRA_DISABLE_WARNING_MESSAGE, getString(
+                    R.string.accessibility_service_disable_warning_summary,
+                    applicationLabel));
 
             String settingsClassName = info.getSettingsActivityName();
             if (!TextUtils.isEmpty(settingsClassName)) {
@@ -432,48 +364,59 @@
             mServicesCategory.addPreference(preference);
         }
 
-        // Update enabled state.
-        mServicesCategory.setEnabled(accessibilityEnabled);
+        if (mServicesCategory.getPreferenceCount() == 0) {
+            if (mNoServicesMessagePreference == null) {
+                mNoServicesMessagePreference = new Preference(getActivity()) {
+                    @Override
+                    protected void onBindView(View view) {
+                        super.onBindView(view);
+
+                        LinearLayout containerView =
+                            (LinearLayout) view.findViewById(R.id.message_container);
+                        containerView.setGravity(Gravity.CENTER);
+
+                        TextView summaryView = (TextView) view.findViewById(R.id.summary);
+                        String title = getString(R.string.accessibility_service_no_apps_title);
+                        summaryView.setText(title);
+                    }
+                };
+                mNoServicesMessagePreference.setPersistent(false);
+                mNoServicesMessagePreference.setLayoutResource(
+                        R.layout.text_description_preference);
+                mNoServicesMessagePreference.setSelectable(false);
+            }
+            mServicesCategory.addPreference(mNoServicesMessagePreference);
+        }
     }
 
-    private void updateSystemPreferences(boolean accessibilityEnabled) {
-        // The basic logic here is if accessibility is not enabled all accessibility
-        // settings will have no effect but still their selected state should be kept
-        // unchanged, so the user can see what settings will be enabled when turning
-        // on accessibility.
+    private Preference mNoServicesMessagePreference;
 
+    private void updateSystemPreferences() {
         // Large text.
-        mToggleLargeTextPreference.setEnabled(accessibilityEnabled);
-        if (accessibilityEnabled) {
-            mCurConfig.fontScale =
-                mToggleLargeTextPreference.isChecked() ? LARGE_FONT_SCALE : 1;
-        } else {
-            mCurConfig.fontScale = 1;
-        }
         try {
-            ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig);
+            mCurConfig.updateFrom(ActivityManagerNative.getDefault().getConfiguration());
         } catch (RemoteException re) {
             /* ignore */
         }
+        mToggleLargeTextPreference.setChecked(mCurConfig.fontScale == LARGE_FONT_SCALE);
 
         // Power button ends calls.
-        if (mTogglePowerButtonEndsCallPreference != null) {
-            mTogglePowerButtonEndsCallPreference.setEnabled(accessibilityEnabled);
-            final int powerButtonEndsCall;
-            if (accessibilityEnabled) {
-                powerButtonEndsCall = mTogglePowerButtonEndsCallPreference.isChecked()
-                    ? Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP
-                    : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF;
-            } else {
-                powerButtonEndsCall = Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF;
-            }
-            Settings.Secure.putInt(getContentResolver(),
+        if (KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER)
+                && Utils.isVoiceCapable(getActivity())) {
+            final int incallPowerBehavior = Settings.Secure.getInt(getContentResolver(),
                     Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
-                    powerButtonEndsCall);
+                    Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT);
+            final boolean powerButtonEndsCall =
+                (incallPowerBehavior == Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP);
+            mTogglePowerButtonEndsCallPreference.setChecked(powerButtonEndsCall);
         }
 
+        // Auto-rotate screen
+        final boolean autoRotationEnabled = Settings.System.getInt(getContentResolver(),
+                Settings.System.ACCELEROMETER_ROTATION, 0) != 0;
+        mToggleAutoRotateScreenPreference.setChecked(autoRotationEnabled);
+
         // Touch exploration enabled.
-        mToggleTouchExplorationPreference.setEnabled(accessibilityEnabled);
         final boolean touchExplorationEnabled = (Settings.Secure.getInt(getContentResolver(),
                 Settings.Secure.TOUCH_EXPLORATION_ENABLED, 0) == 1);
         if (touchExplorationEnabled) {
@@ -487,29 +430,16 @@
         }
 
         // Long press timeout.
-        mSelectLongPressTimeoutPreference.setEnabled(accessibilityEnabled);
-        final int longPressTimeout;
-        if (accessibilityEnabled) {
-            String value = mSelectLongPressTimeoutPreference.getValue();
-            longPressTimeout = (value != null) ? Integer.parseInt(value) : mLongPressTimeoutDefault;
-        } else {
-            longPressTimeout = mLongPressTimeoutDefault;
-        }
-        Settings.Secure.putInt(getContentResolver(), Settings.Secure.LONG_PRESS_TIMEOUT,
-                longPressTimeout);
-        String value = mSelectLongPressTimeoutPreference.getValue();
+        final int longPressTimeout = Settings.Secure.getInt(getContentResolver(),
+                Settings.Secure.LONG_PRESS_TIMEOUT, mLongPressTimeoutDefault);
+        String value = String.valueOf(longPressTimeout);
+        mSelectLongPressTimeoutPreference.setValue(value);
         mSelectLongPressTimeoutPreference.setSummary(mLongPressTimeoutValuetoTitleMap.get(value));
 
         // Script injection.
-        mToggleScriptInjectionPreference.setEnabled(accessibilityEnabled);
-        final boolean scriptInjectionAllowed;
-        if (accessibilityEnabled) {
-            scriptInjectionAllowed = mToggleScriptInjectionPreference.isInjectionAllowed();
-        } else {
-            scriptInjectionAllowed = false;
-        }
-        Settings.Secure.putInt(getContentResolver(), Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
-                scriptInjectionAllowed ? 1 : 0);
+        final boolean  scriptInjectionAllowed = (Settings.Secure.getInt(getContentResolver(),
+                Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION, 0) == 1);
+        mToggleScriptInjectionPreference.setInjectionAllowed(scriptInjectionAllowed);
     }
 
     private void offerInstallAccessibilitySerivceOnce() {
@@ -531,31 +461,6 @@
     @Override
     public Dialog onCreateDialog(int dialogId) {
         switch (dialogId) {
-            case DIALOG_ID_DISABLE_ACCESSIBILITY:
-                return (new AlertDialog.Builder(getActivity()))
-                    .setTitle(R.string.accessibility_disable_warning_title)
-                    .setIcon(android.R.drawable.ic_dialog_alert)
-                    .setMessage(getResources().
-                            getString(R.string.accessibility_disable_warning_summary))
-                    .setCancelable(true)
-                    .setPositiveButton(android.R.string.ok,
-                        new DialogInterface.OnClickListener() {
-                            public void onClick(DialogInterface dialog, int which) {
-                                Settings.Secure.putInt(getContentResolver(),
-                                    Settings.Secure.ACCESSIBILITY_ENABLED, 0);
-                                mToggleAccessibilitySwitch.setCheckedInternal(
-                                        false);
-                                updateAllPreferences(false);
-                            }
-                    })
-                    .setNegativeButton(android.R.string.cancel,
-                        new DialogInterface.OnClickListener() {
-                            public void onClick(DialogInterface dialog, int which) {
-                                mToggleAccessibilitySwitch.setCheckedInternal(
-                                        true);
-                            }
-                        })
-                    .create();
             case DIALOG_ID_NO_ACCESSIBILITY_SERVICES:
                 return new AlertDialog.Builder(getActivity())
                     .setTitle(R.string.accessibility_service_no_apps_title)
@@ -670,6 +575,10 @@
                     enabledServices += preferenceKey;
                     Settings.Secure.putString(getContentResolver(),
                             Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, enabledServices);
+                    // Enabling the first service enables accessibility.
+                    Settings.Secure.putInt(getContentResolver(),
+                            Settings.Secure.ACCESSIBILITY_ENABLED, 1);
+
                 } else if (length > 0) {
                     enabledServices += ENABLED_ACCESSIBILITY_SERVICES_SEPARATOR + preferenceKey;
                     Settings.Secure.putString(getContentResolver(),
@@ -681,6 +590,9 @@
                     enabledServices = enabledServices.replace(preferenceKey, "");
                     Settings.Secure.putString(getContentResolver(),
                             Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, enabledServices);
+                    // Disabling the last service disables accessibility).
+                    Settings.Secure.putInt(getContentResolver(),
+                            Settings.Secure.ACCESSIBILITY_ENABLED, 0);
                 } else if (index > 0) {
                     enabledServices = enabledServices.replace(
                             ENABLED_ACCESSIBILITY_SERVICES_SEPARATOR + preferenceKey, "");
@@ -713,18 +625,24 @@
     private abstract static class TogglePreferenceFragment extends SettingsPreferenceFragment
             implements DialogInterface.OnClickListener {
 
-        private static final int DIALOG_ID_WARNING = 1;
+        private static final int DIALOG_ID_ENABLE_WARNING = 1;
+        private static final int DIALOG_ID_DISABLE_WARNING = 2;
 
         private String mPreferenceKey;
 
         private ToggleSwitch mToggleSwitch;
 
-        private CharSequence mWarningMessage;
+        private CharSequence mEnableWarningTitle;
+        private CharSequence mEnableWarningMessage;
+        private CharSequence mDisableWarningTitle;
+        private CharSequence mDisableWarningMessage;
         private Preference mSummaryPreference;
 
         private CharSequence mSettingsTitle;
         private Intent mSettingsIntent;
 
+        private int mShownDialogId;
+
         // TODO: Showing sub-sub fragment does not handle the activity title
         //       so we do it but this is wrong. Do a real fix when there is time.
         private CharSequence mOldActivityTitle;
@@ -789,37 +707,51 @@
         public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
             super.onCreateOptionsMenu(menu, inflater);
             MenuItem menuItem = menu.add(mSettingsTitle);
-            menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+            menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
             menuItem.setIntent(mSettingsIntent);
         }
 
         @Override
         public Dialog onCreateDialog(int dialogId) {
+            CharSequence title = null;
+            CharSequence message = null;
             switch (dialogId) {
-                case DIALOG_ID_WARNING:
-                    return new AlertDialog.Builder(getActivity())
-                        .setTitle(android.R.string.dialog_alert_title)
-                        .setIcon(android.R.drawable.ic_dialog_alert)
-                        .setMessage(mWarningMessage)
-                        .setCancelable(true)
-                        .setPositiveButton(android.R.string.ok, this)
-                        .setNegativeButton(android.R.string.cancel, this)
-                        .create();
+                case DIALOG_ID_ENABLE_WARNING:
+                    mShownDialogId = DIALOG_ID_ENABLE_WARNING;
+                    title = mEnableWarningTitle;
+                    message = mEnableWarningMessage;
+                    break;
+                case DIALOG_ID_DISABLE_WARNING:
+                    mShownDialogId = DIALOG_ID_DISABLE_WARNING;
+                    title = mDisableWarningTitle;
+                    message = mDisableWarningMessage;
+                    break;
                 default:
                     throw new IllegalArgumentException();
             }
+            return new AlertDialog.Builder(getActivity())
+                .setTitle(title)
+                .setIcon(android.R.drawable.ic_dialog_alert)
+                .setMessage(message)
+                .setCancelable(true)
+                .setPositiveButton(android.R.string.ok, this)
+                .setNegativeButton(android.R.string.cancel, this)
+                .create();
         }
 
         @Override
         public void onClick(DialogInterface dialog, int which) {
+            final boolean checked;
             switch (which) {
                 case DialogInterface.BUTTON_POSITIVE:
-                    // OK, we got the user consent so set checked.
-                    mToggleSwitch.setCheckedInternal(true);
-                    onPreferenceToggled(mPreferenceKey, true);
+                    checked = (mShownDialogId == DIALOG_ID_ENABLE_WARNING);
+                    mToggleSwitch.setCheckedInternal(checked);
+                    onPreferenceToggled(mPreferenceKey, checked);
                     break;
                 case DialogInterface.BUTTON_NEGATIVE:
-                    onPreferenceToggled(mPreferenceKey, false);
+                    checked = (mShownDialogId == DIALOG_ID_DISABLE_WARNING);
+                    mToggleSwitch.setCheckedInternal(checked);
+                    onPreferenceToggled(mPreferenceKey, checked);
                     break;
                 default:
                     throw new IllegalArgumentException();
@@ -832,13 +764,18 @@
                 @Override
                 public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) {
                     if (checked) {
-                        if (!TextUtils.isEmpty(mWarningMessage)) {
+                        if (!TextUtils.isEmpty(mEnableWarningMessage)) {
                             toggleSwitch.setCheckedInternal(false);
-                            showDialog(DIALOG_ID_WARNING);
+                            showDialog(DIALOG_ID_ENABLE_WARNING);
                             return true;
                         }
                         onPreferenceToggled(mPreferenceKey, true);
                     } else {
+                        if (!TextUtils.isEmpty(mDisableWarningMessage)) {
+                            toggleSwitch.setCheckedInternal(true);
+                            showDialog(DIALOG_ID_DISABLE_WARNING);
+                            return true;
+                        }
                         onPreferenceToggled(mPreferenceKey, false);
                     }
                     return false;
@@ -861,7 +798,7 @@
             if (!activity.onIsMultiPane() || activity.onIsHidingHeaders()) {
                 mOldActivityTitle = getActivity().getTitle();
                 String title = arguments.getString(EXTRA_TITLE);
-                getActivity().getActionBar().setTitle(arguments.getCharSequence(EXTRA_TITLE));
+                getActivity().getActionBar().setTitle(title);
             }
 
             // Summary.
@@ -881,9 +818,21 @@
                 }
             }
 
-            // Waring message.
-            mWarningMessage = arguments.getCharSequence(
-                    AccessibilitySettings.EXTRA_WARNING_MESSAGE);
+            // Enable warning title.
+            mEnableWarningTitle = arguments.getCharSequence(
+                    AccessibilitySettings.EXTRA_ENABLE_WARNING_TITLE);
+
+            // Enable warning message.
+            mEnableWarningMessage = arguments.getCharSequence(
+                    AccessibilitySettings.EXTRA_ENABLE_WARNING_MESSAGE);
+
+            // Disable warning title.
+            mDisableWarningTitle = arguments.getString(
+                    AccessibilitySettings.EXTRA_DISABLE_WARNING_TITLE);
+
+            // Disable warning message.
+            mDisableWarningMessage = arguments.getString(
+                    AccessibilitySettings.EXTRA_DISABLE_WARNING_MESSAGE);
         }
     }
 }
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index c2e68dd..d4abfa8 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -563,11 +563,11 @@
         if (className.equals(RunningServicesActivity.class.getName())) {
             defaultTabTag = TAB_RUNNING;
         } else if (className.equals(StorageUseActivity.class.getName())
-                || action.equals(Intent.ACTION_MANAGE_PACKAGE_STORAGE)) {
+                || Intent.ACTION_MANAGE_PACKAGE_STORAGE.equals(action)) {
             mSortOrder = SORT_ORDER_SIZE;
             mFilterApps = FILTER_APPS_ALL;
             defaultTabTag = TAB_ALL;
-        } else if (action.equals(Settings.ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS)) {
+        } else if (Settings.ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS.equals(action)) {
             // Select the all-apps tab, with the default sorting
             defaultTabTag = TAB_ALL;
         }