diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java index 760755c774b..c08131bb7ea 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -387,6 +387,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements // Display magnification. mDisplayMagnificationPreferenceScreen = findPreference( DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN); + configureMagnificationPreferenceIfNeeded(mDisplayMagnificationPreferenceScreen); // Font size. mFontSizePreferenceScreen = findPreference(FONT_SIZE_PREFERENCE_SCREEN); @@ -678,6 +679,19 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } } + private static void configureMagnificationPreferenceIfNeeded(Preference preference) { + // Some devices support only a single magnification mode. In these cases, we redirect to + // the magnification mode's UI directly, rather than showing a PreferenceScreen with a + // single list item. + final Context context = preference.getContext(); + if (!MagnificationPreferenceFragment.isApplicable(context.getResources())) { + preference.setFragment(ToggleScreenMagnificationPreferenceFragment.class.getName()); + final Bundle extras = preference.getExtras(); + MagnificationPreferenceFragment.populateMagnificationGesturesPreferenceExtras(extras, + context); + } + } + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java index 8c76fb741d5..55b79ba8ef8 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java +++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java @@ -18,9 +18,9 @@ package com.android.settings.accessibility; import android.accessibilityservice.AccessibilityServiceInfo; import android.content.ComponentName; +import android.content.Context; import android.content.pm.ServiceInfo; import android.os.Bundle; -import android.provider.Settings; import android.support.v7.preference.Preference; import android.text.TextUtils; import android.view.accessibility.AccessibilityManager; @@ -79,6 +79,7 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm findService(SCREEN_READER_PACKAGE_NAME, SCREEN_READER_SERVICE_NAME)); updateAccessibilityServicePreference(mSelectToSpeakPreference, findService(SELECT_TO_SPEAK_PACKAGE_NAME, SELECT_TO_SPEAK_SERVICE_NAME)); + configureMagnificationPreferenceIfNeeded(mDisplayMagnificationPreference); } @Override @@ -145,4 +146,18 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm } extras.putString(AccessibilitySettings.EXTRA_SUMMARY, description); } + + private static void configureMagnificationPreferenceIfNeeded(Preference preference) { + // Some devices support only a single magnification mode. In these cases, we redirect to + // the magnification mode's UI directly, rather than showing a PreferenceScreen with a + // single list item. + final Context context = preference.getContext(); + if (!MagnificationPreferenceFragment.isApplicable(context.getResources())) { + preference.setFragment( + ToggleScreenMagnificationPreferenceFragmentForSetupWizard.class.getName()); + final Bundle extras = preference.getExtras(); + MagnificationPreferenceFragment.populateMagnificationGesturesPreferenceExtras(extras, + context); + } + } } diff --git a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java index 22706d7d0f3..83299e83a4a 100644 --- a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java @@ -19,6 +19,7 @@ package com.android.settings.accessibility; import android.accessibilityservice.AccessibilityServiceInfo; import android.content.ComponentName; import android.content.Context; +import android.content.res.Resources; import android.os.Bundle; import android.provider.SearchIndexableResource; import android.provider.Settings; @@ -34,6 +35,7 @@ import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import java.util.Arrays; +import java.util.Collections; import java.util.List; public final class MagnificationPreferenceFragment extends SettingsPreferenceFragment implements @@ -123,18 +125,7 @@ public final class MagnificationPreferenceFragment extends SettingsPreferenceFra private void handleMagnificationGesturesPreferenceScreenClick() { Bundle extras = mMagnificationGesturesPreference.getExtras(); - extras.putString(AccessibilitySettings.EXTRA_PREFERENCE_KEY, - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED); - extras.putString(AccessibilitySettings.EXTRA_TITLE, getString( - R.string.accessibility_screen_magnification_gestures_title)); - extras.putCharSequence(AccessibilitySettings.EXTRA_SUMMARY, - getActivity().getResources().getText( - R.string.accessibility_screen_magnification_summary)); - extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED, - Settings.Secure.getInt(getContentResolver(), - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 1); - extras.putInt(AccessibilitySettings.EXTRA_VIDEO_RAW_RESOURCE_ID, - R.raw.accessibility_screen_magnification); + populateMagnificationGesturesPreferenceExtras(extras, getContext()); extras.putBoolean(AccessibilitySettings.EXTRA_LAUNCHED_FROM_SUW, mLaunchedFromSuw); } @@ -188,14 +179,40 @@ public final class MagnificationPreferenceFragment extends SettingsPreferenceFra return null; } + static void populateMagnificationGesturesPreferenceExtras(Bundle extras, Context context) { + extras.putString(AccessibilitySettings.EXTRA_PREFERENCE_KEY, + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED); + extras.putString(AccessibilitySettings.EXTRA_TITLE, context.getString( + R.string.accessibility_screen_magnification_gestures_title)); + extras.putCharSequence(AccessibilitySettings.EXTRA_SUMMARY, context.getResources().getText( + R.string.accessibility_screen_magnification_summary)); + extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED, + Settings.Secure.getInt(context.getContentResolver(), + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 1); + extras.putInt(AccessibilitySettings.EXTRA_VIDEO_RAW_RESOURCE_ID, + R.raw.accessibility_screen_magnification); + } + + /** + * @return {@code true} if this fragment should be shown, {@code false} otherwise. This + * fragment is shown in the case that more than one magnification mode is available. + */ + static boolean isApplicable(Resources res) { + return res.getBoolean(com.android.internal.R.bool.config_showNavigationBar); + } + public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override public List getXmlResourcesToIndex(Context context, boolean enabled) { - final SearchIndexableResource sir = new SearchIndexableResource(context); - sir.xmlResId = R.xml.accessibility_magnification_settings; - return Arrays.asList(sir); + if (isApplicable(context.getResources())) { + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.accessibility_magnification_settings; + return Arrays.asList(sir); + } else { + return Collections.emptyList(); + } } }; }