Make A11y SUW launchable from SUW and small UX changes based on last round of
UX studies.

Change-Id: I9c20cd3abf910a37731da2af604f3af2cd30e942
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3281ade..923beea 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1407,6 +1407,23 @@
                 android:value="true" />
         </activity>
 
+        <activity android:name=".accessibility.AccessibilitySettingsForSetupWizardActivity"
+                android:label="@string/vision_settings_title"
+                android:theme="@style/SetupWizardAccessibilityTheme"
+                android:taskAffinity="com.android.wizard"
+                android:configChanges="orientation|keyboardHidden|screenSize" >
+            <intent-filter android:priority="1">
+                <action android:name="android.settings.ACCESSIBILITY_SETTINGS_FOR_SUW" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.category"
+                android:value="com.android.settings.category.system" />
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.accessibility.AccessibilitySettingsForSetupWizard" />
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                android:value="true" />
+        </activity>
+
         <activity android:name="Settings$AccessibilityDaltonizerSettingsActivity"
                 android:label="@string/accessibility_display_daltonizer_preference_title"
                 android:taskAffinity="com.android.settings"
diff --git a/res/layout/preference_button.xml b/res/layout/preference_button.xml
deleted file mode 100644
index 35e4255..0000000
--- a/res/layout/preference_button.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- Layout for a ButtonPreference. -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    android:paddingBottom="@dimen/accessibility_button_preference_padding_top_bottom"
-    android:paddingTop="@dimen/accessibility_button_preference_padding_top_bottom"
-    android:paddingStart="@dimen/accessibility_layout_margin_start_end"
-    android:paddingEnd="@dimen/accessibility_layout_margin_start_end"
-    android:focusable="true"
-    android:selectable="false"
-    android:persistent="false" >
-
-        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
-            android:id="@+android:id/title"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceLarge"
-            android:selectable="true"
-            android:persistent="false"
-            android:gravity="left|center" />
-
-        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
-            android:id="@+android:id/summary"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:selectable="true"
-            android:persistent="false"
-            android:gravity="left|center" />
-
-</LinearLayout>
diff --git a/res/layout/preference_multiline_title.xml b/res/layout/preference_multiline_title.xml
new file mode 100644
index 0000000..f4e26fc
--- /dev/null
+++ b/res/layout/preference_multiline_title.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:gravity="center_vertical"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:background="?android:attr/selectableItemBackground">
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:paddingTop="16dip"
+        android:paddingBottom="16dip">
+
+        <TextView
+            android:id="@+android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+            android:textColor="?android:attr/textColorPrimary"
+            android:ellipsize="marquee"
+            android:fadingEdge="horizontal" />
+
+        <TextView
+            android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/title"
+            android:layout_alignStart="@android:id/title"
+            android:visibility="gone"
+            android:textAlignment="viewStart"
+            android:textAppearance="@android:style/TextAppearance.Material.Body1"
+            android:textColor="?android:attr/textColorSecondary"
+            android:maxLines="10" />
+
+    </RelativeLayout>
+
+</LinearLayout>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index a951776..de92fe4 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -103,4 +103,8 @@
     <color name="summary_default_start">#ff009587</color>
     <color name="summary_default_end">#ffced7db</color>
 
+    <!-- Accessibility SUW colors -->
+    <color name="material_blue_500">#4285F4</color>
+    <color name="material_blue_700">#3367D6</color>
+
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index dea1620..3be290f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3652,10 +3652,14 @@
     <string name="accessibility_settings">Accessibility</string>
     <!-- Settings title for accessibility settings screen -->
     <string name="accessibility_settings_title">Accessibility settings</string>
-    <!-- Settings title for a brief version of Accessibility Settings, as displayed in Setup Wizard -->
-    <string name="accessibility_settings_for_setup_wizard_title">Guide me</string>
+    <!-- Settings title for a brief version of Vision-Related Accessibility Settings. Displayed in Setup Wizard only. [CHAR LIMIT=35] -->
+    <string name="vision_settings_title">Vision Settings</string>
+    <!-- Settings description for a brief version of Vision-Related Accessibility Settings. Tells the user that they can adjust these settings now to help them through the remainder of the Setup Wizard and that they can later be changed in Settings. Displayed in Setup Wizard only. [CHAR LIMIT=none] -->
+    <string name="vision_settings_description">Adjust these settings now to assist you through the remainder of the set up process. You can adjust them any time in device settings.</string>
     <!-- Title for the accessibility preference category of accessibility services. [CHAR LIMIT=25] -->
     <string name="accessibility_services_title">Services</string>
+    <!-- Summary for the Talkback Accessibility Service. Lets the user know that Talkback is a screenreader and that it is usually most helpful to blind and low vision users. [CHAR_LIMIT=none] -->
+    <string name="talkback_summary">Screenreader tool primarily for people with blindness and low vision</string>
     <!-- Title for the accessibility preference category of system related preferences. [CHAR LIMIT=25] -->
     <string name="accessibility_system_title">System</string>
     <!-- Title for the accessibility preference category of display related preferences. [CHAR LIMIT=25] -->
@@ -6679,7 +6683,7 @@
     <string name="camera_double_tap_power_gesture_desc">Quickly open camera without unlocking your screen</string>
 
     <!-- Title of setting that controls screen zoom (e.g. how large interface elements appear). [CHAR LIMIT=40] -->
-    <string name="screen_zoom_title">Screen zoom</string>
+    <string name="screen_zoom_title">Magnify display</string>
     <!-- Keywords for setting that controls screen zoom (e.g. how large interface elements appear). [CHAR LIMIT=NONE] -->
     <string name="screen_zoom_keywords">display density, screen zoom, scale, scaling</string>
     <!-- Summary of screen zoom setting screen. [CHAR LIMIT=NONE] -->
diff --git a/res/values/themes.xml b/res/values/themes.xml
index b15a77c..14ee160 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -103,7 +103,6 @@
         <item name="@android:preferenceStyle">@style/Preference</item>
         <item name="@dropdownPreferenceStyle">@style/Preference.DropDown.Material</item>
         <item name="@android:preferenceFragmentStyle">@style/PreferenceFragmentStyle</item>
-
         <item name="apnPreferenceStyle">@style/ApnPreference</item>
     </style>
 
@@ -115,6 +114,14 @@
         <item name="android:layout">@layout/setup_preference</item>
     </style>
 
+    <!-- Accessibility portion of Setup Wizard -->
+    <style name="SetupWizardAccessibilityTheme" parent="Theme.SettingsBase">
+        <item name="android:colorPrimary">@color/material_blue_700</item>
+        <item name="android:colorPrimaryDark">@color/material_blue_700</item>
+        <item name="preferenceTheme">@style/PreferenceTheme</item>
+        <item name="switchBarTheme">@style/ThemeOverlay.SwitchBar.Settings</item>
+    </style>
+
     <!-- Theme with no local references, used by AccountPreferenceBase where we have to inflate
          layouts against a remote context using our local theme colors. Due to the implementation
          details of Theme, we can't reference any local resources and MUST instead use the values
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index c87912d..54a5a17 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -19,11 +19,6 @@
         android:title="@string/accessibility_settings"
         android:persistent="true">
 
-    <PreferenceScreen
-        android:key="accessibility_settings_for_setup_wizard"
-        android:title="@string/accessibility_settings_for_setup_wizard_title"
-        android:fragment="com.android.settings.accessibility.AccessibilitySettingsForSetupWizard" />
-
     <PreferenceCategory
             android:key="services_category"
             android:title="@string/accessibility_services_title">
diff --git a/res/xml/accessibility_settings_for_setup_wizard.xml b/res/xml/accessibility_settings_for_setup_wizard.xml
index f35d708..2317dc5 100644
--- a/res/xml/accessibility_settings_for_setup_wizard.xml
+++ b/res/xml/accessibility_settings_for_setup_wizard.xml
@@ -15,36 +15,34 @@
 -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
-        android:title="@string/accessibility_settings_title"
+        android:title="@string/vision_settings_title"
         android:persistent="true" >
 
     <Preference
-        android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment"
-        android:key="screen_magnification_preference"
-        android:layout="@layout/preference_button"
-        android:title="@string/accessibility_screen_magnification_title" />
-
-    <Preference
-        android:key="font_size_preference"
-        android:layout="@layout/preference_button"
-        android:title="@string/title_font_size" />
+        android:key="vision_settings_summary"
+        android:title="@string/vision_settings_description"
+        android:layout="@layout/preference_multiline_title" />
 
     <com.android.settings.display.ScreenZoomPreference
         android:key="force_density_preference"
-        android:layout="@layout/preference_button"
-        settings:keywords="@string/screen_zoom_keywords"
         android:title="@string/screen_zoom_title"
         android:summary="%s" />
 
     <Preference
-        android:fragment="com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment"
-        android:key="daltonizer_preference"
-        android:layout="@layout/preference_button"
-        android:title="@string/accessibility_display_daltonizer_preference_title" />
+        android:fragment="com.android.settings.accessibility.ToggleFontSizePreferenceFragment"
+        android:key="font_size_preference"
+        android:title="@string/title_font_size" />
+
+    <Preference
+        android:fragment=
+                "com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment"
+        android:key="screen_magnification_preference"
+        android:title="@string/accessibility_screen_magnification_title"
+        android:summary="%s" />
 
     <Preference
         android:key="talkback_preference"
-        android:layout="@layout/preference_button" />
+        android:summary="@string/talkback_summary"
+        android:persistent="true" />
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index dab2cb7..bad8af8 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -53,6 +53,7 @@
 import com.android.internal.util.ArrayUtils;
 import com.android.settings.Settings.WifiSettingsActivity;
 import com.android.settings.accessibility.AccessibilitySettings;
+import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
 import com.android.settings.accessibility.CaptionPropertiesFragment;
 import com.android.settings.accounts.AccountSettings;
 import com.android.settings.accounts.AccountSyncSettings;
@@ -264,6 +265,7 @@
             PrivacySettings.class.getName(),
             DeviceAdminSettings.class.getName(),
             AccessibilitySettings.class.getName(),
+            AccessibilitySettingsForSetupWizard.class.getName(),
             CaptionPropertiesFragment.class.getName(),
             com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment.class.getName(),
             TextToSpeechSettings.class.getName(),
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 2ba49ce..4f81a38 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -40,6 +40,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Button;
+import com.android.settings.accessibility.AccessibilitySettingsForSetupWizardActivity;
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.widget.FloatingActionButton;
 
@@ -148,7 +149,8 @@
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
-        if (!TextUtils.isEmpty(mHelpUri)) {
+        if (!TextUtils.isEmpty(mHelpUri)
+                && !(getActivity() instanceof AccessibilitySettingsForSetupWizardActivity)) {
             setHasOptionsMenu(true);
         }
     }
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
index 7636fd9..6a984ac 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
@@ -16,15 +16,24 @@
 
 package com.android.settings.accessibility;
 
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.pm.ServiceInfo;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.provider.Settings;
 import android.support.v7.preference.Preference;
+import android.view.accessibility.AccessibilityManager;
+
 import com.android.internal.logging.MetricsLogger;
 import com.android.settings.DialogCreatable;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 
+import java.util.List;
+
 /**
  * Activity with the accessibility settings specific to Setup Wizard.
  */
@@ -34,7 +43,6 @@
     // Preferences.
     private static final String DISPLAY_MAGNIFICATION_PREFERENCE =
             "screen_magnification_preference";
-    private static final String DISPLAY_DALTONIZER_PREFERENCE = "daltonizer_preference";
     private static final String TALKBACK_PREFERENCE = "talkback_preference";
     private static final String FONT_SIZE_PREFERENCE = "font_size_preference";
 
@@ -42,7 +50,6 @@
 
     // Preference controls.
     private Preference mDisplayMagnificationPreference;
-    private Preference mDisplayDaltonizerPreference;
     private Preference mFontSizePreference;
     private Preference mTalkbackPreference;
 
@@ -62,7 +69,6 @@
         addPreferencesFromResource(R.xml.accessibility_settings_for_setup_wizard);
 
         mDisplayMagnificationPreference = findPreference(DISPLAY_MAGNIFICATION_PREFERENCE);
-        mDisplayDaltonizerPreference = findPreference(DISPLAY_DALTONIZER_PREFERENCE);
         mFontSizePreference = findPreference(FONT_SIZE_PREFERENCE);
 
         mTalkbackPreference = findPreference(TALKBACK_PREFERENCE);
@@ -86,6 +92,43 @@
         return false;
     }
 
+    /**
+     * Returns a semicolon-delimited string containing a list of all the
+     * installed {@link AccessibilityService}s that provide at least one
+     * required feedback type.
+     *
+     * @param context The {@link android.app.Activity} context.
+     * @param requiredFeedbackTypes An integer mask containing the required
+     *            feedback types.
+     * @return A semicolon-delimited string containing a list of accessibility services.
+     */
+    private String getAccessibilityServicesFiltered(
+            Context context, int requiredFeedbackTypes) {
+        final AccessibilityManager manager = context.getSystemService(AccessibilityManager.class);
+        final List<AccessibilityServiceInfo> accessibilityServices = manager
+                .getInstalledAccessibilityServiceList();
+        final StringBuilder servicesToEnable = new StringBuilder();
+
+        for (AccessibilityServiceInfo accessibilityService : accessibilityServices) {
+            if ((accessibilityService.feedbackType & requiredFeedbackTypes) == 0) {
+                continue;
+            }
+
+            final ServiceInfo serviceInfo = accessibilityService.getResolveInfo().serviceInfo;
+            final ComponentName componentName = new ComponentName(serviceInfo.packageName,
+                    serviceInfo.name);
+
+            servicesToEnable.append(componentName.flattenToString());
+            servicesToEnable.append(':');
+        }
+
+        if (servicesToEnable.length() > 0) {
+            servicesToEnable.deleteCharAt(servicesToEnable.length() - 1);
+        }
+
+        return servicesToEnable.toString();
+    }
+
     @Override
     public boolean onPreferenceTreeClick(Preference preference) {
         if (mDisplayMagnificationPreference == preference) {
@@ -98,6 +141,32 @@
             extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED,
                     Settings.Secure.getInt(getContentResolver(),
                     Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 1);
+        } else if (mTalkbackPreference == preference) {
+            // Toggle Talkback. The tutorial will automatically start when Talkback is first
+            //  activated.
+            final ContentResolver resolver = getContentResolver();
+
+            final boolean enable =
+                    Settings.Secure.getInt(resolver, Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 0;
+            final String servicesToEnable = getAccessibilityServicesFiltered(
+                    getActivity(), AccessibilityServiceInfo.FEEDBACK_SPOKEN);
+
+            // Enable all accessibility services with spoken feedback type.
+            Settings.Secure.putString(resolver, Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
+                    enable ? servicesToEnable : "");
+
+            // Allow the services we just enabled to toggle touch exploration.
+            Settings.Secure.putString(resolver,
+                    Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
+                    enable ? servicesToEnable : "");
+
+            // Enable touch exploration.
+            Settings.Secure.putInt(resolver, Settings.Secure.TOUCH_EXPLORATION_ENABLED,
+                    enable ? 1 : 0);
+
+            // Turn on accessibility mode last, since enabling accessibility with no
+            // services has no effect.
+            Settings.Secure.putInt(resolver, Settings.Secure.ACCESSIBILITY_ENABLED, enable ? 1 : 0);
         }
 
         return super.onPreferenceTreeClick(preference);
@@ -106,8 +175,6 @@
     private void updatePreferences() {
         updateFeatureSummary(Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
                 mDisplayMagnificationPreference);
-        updateFeatureSummary(Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
-                mDisplayDaltonizerPreference);
         updateFontSizeSummary(mFontSizePreference);
     }
 
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
new file mode 100644
index 0000000..09961b7
--- /dev/null
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.accessibility;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+
+public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivity {
+
+      @Override
+      public boolean onCreateOptionsMenu(Menu menu) {
+          // Return true, so we get notified when items in the menu are clicked.
+          return true;
+      }
+
+      @Override
+      public boolean onOptionsItemSelected(MenuItem item) {
+          onBackPressed();
+          return true;
+      }
+
+      @Override
+      public void startPreferencePanel(String fragmentClass, Bundle args, int titleRes,
+              CharSequence titleText, Fragment resultTo, int resultRequestCode) {
+          startPreferenceFragment(Fragment.instantiate(this, fragmentClass, args), true);
+      }
+
+      @Override
+      public void openDrawer() {
+          // Do nothing.
+      }
+
+      @Override
+      public void closeDrawer() {
+          // Do nothing.
+      }
+}
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index bee46c8..e1c4f7e 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -99,7 +99,6 @@
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
-        setHasOptionsMenu(true);
         installActionBarToggleSwitch();
     }
 
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 44355c6..45af2de 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.accessibility;
 
+import android.os.Bundle;
 import android.provider.Settings;
 
 import com.android.internal.logging.MetricsLogger;
@@ -24,10 +25,10 @@
 
 public class ToggleScreenMagnificationPreferenceFragment
         extends ToggleFeaturePreferenceFragment {
+
     @Override
     protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
-        Settings.Secure.putInt(getContentResolver(),
-                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, enabled ? 1 : 0);
+        // Do nothing.
     }
 
     @Override
@@ -45,6 +46,30 @@
     }
 
     @Override
+    public void onResume() {
+        super.onResume();
+
+        // Temporarily enable Magnification on this screen if it's disabled.
+        if (Settings.Secure.getInt(getContentResolver(),
+                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 0) {
+            setMagnificationEnabled(1);
+        }
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        if (!mToggleSwitch.isChecked()) {
+            setMagnificationEnabled(0);
+        }
+    }
+
+    private void setMagnificationEnabled(int enabled) {
+        Settings.Secure.putInt(getContentResolver(),
+                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, enabled);
+    }
+
+    @Override
     protected int getMetricsCategory() {
         return MetricsLogger.ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION;
     }