diff --git a/res/drawable/ic_font_size_24dp.xml b/res/drawable/ic_font_size_24dp.xml
new file mode 100644
index 00000000000..c2c292577ff
--- /dev/null
+++ b/res/drawable/ic_font_size_24dp.xml
@@ -0,0 +1,25 @@
+
+
+
+
diff --git a/res/drawable/ic_font_size_36dp.xml b/res/drawable/ic_font_size_36dp.xml
new file mode 100644
index 00000000000..7a54a658cc5
--- /dev/null
+++ b/res/drawable/ic_font_size_36dp.xml
@@ -0,0 +1,25 @@
+
+
+
+
diff --git a/res/layout/font_size_activity.xml b/res/layout/font_size_activity.xml
index 9072d384366..c1ba5f4e204 100644
--- a/res/layout/font_size_activity.xml
+++ b/res/layout/font_size_activity.xml
@@ -15,8 +15,9 @@
-->
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fillViewport="true">
-
+ android:elevation="2dp" />
-
-
-
-
+
+
+
diff --git a/res/layout/preview_frame_container.xml b/res/layout/preview_frame_container.xml
new file mode 100644
index 00000000000..5ba3b7fc467
--- /dev/null
+++ b/res/layout/preview_frame_container.xml
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/res/layout/screen_zoom_activity.xml b/res/layout/screen_zoom_activity.xml
index a00e7bda44b..0be0291243a 100644
--- a/res/layout/screen_zoom_activity.xml
+++ b/res/layout/screen_zoom_activity.xml
@@ -16,7 +16,8 @@
+ android:layout_height="match_parent"
+ android:fillViewport="true">
-
-
-
+ android:elevation="2dp" />
-
-
-
-
+
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5ac083961fa..6e28a694031 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -147,6 +147,9 @@
Erase SD card
+
+ Make text on screen smaller or larger.
+
Small
@@ -6675,9 +6678,8 @@
Screen zoom
display density, screen zoom, scale, scaling
-
- Choose how zoomed you want the screen using the slider below the preview image.
-
+
+ Make all items on screen smaller or larger. Some apps on your home screen may change position after changing this setting.
Preview
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index 42537b040ad..c87912d3b08 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -44,9 +44,9 @@
android:title="@string/accessibility_screen_magnification_title"/>
+ android:fragment="com.android.settings.accessibility.ToggleFontSizePreferenceFragment"
+ android:key="font_size_preference_screen"
+ android:title="@string/title_font_size"/>
= 0) {
+ final View lastLayer = previewFrame.getChildAt(currentIndex);
+ if (animate && previewFrame == mPreviewFrames[currentItem]) {
+ lastLayer.animate()
+ .alpha(0)
+ .setInterpolator(FADE_OUT_INTERPOLATOR)
+ .setDuration(CROSS_FADE_DURATION_MS)
+ .withEndAction(new Runnable() {
+ @Override
+ public void run() {
+ lastLayer.setVisibility(View.INVISIBLE);
+ }
+ });
+ } else {
+ lastLayer.setAlpha(0);
+ lastLayer.setVisibility(View.INVISIBLE);
+ }
+ }
+
+ final View nextLayer = previewFrame.getChildAt(newIndex);
+ if (animate && previewFrame == mPreviewFrames[currentItem]) {
+ nextLayer.animate()
+ .alpha(1)
+ .setInterpolator(FADE_IN_INTERPOLATOR)
+ .setDuration(CROSS_FADE_DURATION_MS)
+ .withStartAction(new Runnable() {
+ @Override
+ public void run() {
+ nextLayer.setVisibility(View.VISIBLE);
+ }
+ });
+ } else {
+ nextLayer.setVisibility(View.VISIBLE);
+ nextLayer.setAlpha(1);
+ }
+ }
+ }
+}
diff --git a/src/com/android/settings/PreviewSeekBarPreferenceFragment.java b/src/com/android/settings/PreviewSeekBarPreferenceFragment.java
index 7a9efd39b92..3926ba627fb 100644
--- a/src/com/android/settings/PreviewSeekBarPreferenceFragment.java
+++ b/src/com/android/settings/PreviewSeekBarPreferenceFragment.java
@@ -16,20 +16,14 @@
package com.android.settings;
-import android.annotation.Nullable;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
-import android.util.AttributeSet;
+import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
-import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
-import android.view.animation.AccelerateInterpolator;
-import android.view.animation.DecelerateInterpolator;
-import android.view.animation.Interpolator;
-import android.widget.FrameLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
@@ -53,18 +47,11 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc
protected int mActivityLayoutResId;
/** Resource id of the layout that defines the contents instide preview screen. */
- protected int mPreviewSampleResId;
+ protected int[] mPreviewSampleResIds;
- /** Duration to use when cross-fading between previews. */
- private static final long CROSS_FADE_DURATION_MS = 400;
+ private ViewPager mPreviewPager;
+ private PreviewPagerAdapter mPreviewPagerAdapter;
- /** Interpolator to use when cross-fading between previews. */
- private static final Interpolator FADE_IN_INTERPOLATOR = new DecelerateInterpolator();
-
- /** Interpolator to use when cross-fading between previews. */
- private static final Interpolator FADE_OUT_INTERPOLATOR = new AccelerateInterpolator();
-
- private ViewGroup mPreviewFrame;
private TextView mLabel;
private View mLarger;
private View mSmaller;
@@ -96,10 +83,12 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc
}
@Override
- public void onStartTrackingTouch(SeekBar seekBar) {}
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ }
@Override
- public void onStopTrackingTouch(SeekBar seekBar) {}
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ }
});
mSmaller = content.findViewById(R.id.smaller);
@@ -130,29 +119,19 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc
seekBar.setEnabled(false);
}
- mPreviewFrame = (FrameLayout) content.findViewById(R.id.preview_frame);
-
- // Populate the sample layouts.
final Context context = getContext();
final Configuration origConfig = context.getResources().getConfiguration();
+ Configuration[] configurations = new Configuration[mEntries.length];
for (int i = 0; i < mEntries.length; ++i) {
- final Configuration config = createConfig(origConfig, i);
-
- // Create a new configuration for the specified value. It won't
- // have any theme set, so manually apply the current theme.
- final Context configContext = context.createConfigurationContext(config);
- configContext.setTheme(context.getThemeResId());
-
- final LayoutInflater configInflater = LayoutInflater.from(configContext);
- final View sampleView = configInflater.inflate(mPreviewSampleResId, mPreviewFrame, false);
- sampleView.setAlpha(0);
- sampleView.setVisibility(View.INVISIBLE);
-
- mPreviewFrame.addView(sampleView);
+ configurations[i] = createConfig(origConfig, i);
}
- setPreviewLayer(mInitialIndex, false);
+ mPreviewPagerAdapter = new PreviewPagerAdapter(context, mPreviewSampleResIds,
+ configurations);
+ mPreviewPager = (ViewPager) content.findViewById(R.id.preview_pager);
+ mPreviewPager.setAdapter(mPreviewPagerAdapter);
+ setPreviewLayer(mInitialIndex, false);
return root;
}
@@ -172,46 +151,11 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc
private void setPreviewLayer(int index, boolean animate) {
mLabel.setText(mEntries[index]);
-
- if (mCurrentIndex >= 0) {
- final View lastLayer = mPreviewFrame.getChildAt(mCurrentIndex);
- if (animate) {
- lastLayer.animate()
- .alpha(0)
- .setInterpolator(FADE_OUT_INTERPOLATOR)
- .setDuration(CROSS_FADE_DURATION_MS)
- .withEndAction(new Runnable() {
- @Override
- public void run() {
- lastLayer.setVisibility(View.INVISIBLE);
- }
- });
- } else {
- lastLayer.setAlpha(0);
- lastLayer.setVisibility(View.INVISIBLE);
- }
- }
-
- final View nextLayer = mPreviewFrame.getChildAt(index);
- if (animate) {
- nextLayer.animate()
- .alpha(1)
- .setInterpolator(FADE_IN_INTERPOLATOR)
- .setDuration(CROSS_FADE_DURATION_MS)
- .withStartAction(new Runnable() {
- @Override
- public void run() {
- nextLayer.setVisibility(View.VISIBLE);
- }
- });
- } else {
- nextLayer.setVisibility(View.VISIBLE);
- nextLayer.setAlpha(1);
- }
-
mSmaller.setEnabled(index > 0);
mLarger.setEnabled(index < mEntries.length - 1);
+ mPreviewPagerAdapter.setPreviewLayer(index, mCurrentIndex, mPreviewPager.getCurrentItem(),
+ animate);
mCurrentIndex = index;
}
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index fdf01e9c7bd..7aa5a76c9a7 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -24,6 +24,7 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -95,6 +96,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
"captioning_preference_screen";
private static final String DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN =
"screen_magnification_preference_screen";
+ private static final String FONT_SIZE_PREFERENCE_SCREEN =
+ "font_size_preference_screen";
private static final String AUTOCLICK_PREFERENCE_SCREEN =
"autoclick_preference_screen";
private static final String DISPLAY_DALTONIZER_PREFERENCE_SCREEN =
@@ -188,6 +191,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
private Preference mNoServicesMessagePreference;
private PreferenceScreen mCaptioningPreferenceScreen;
private PreferenceScreen mDisplayMagnificationPreferenceScreen;
+ private PreferenceScreen mFontSizePreferenceScreen;
private PreferenceScreen mAutoclickPreferenceScreen;
private PreferenceScreen mGlobalGesturePreferenceScreen;
private PreferenceScreen mDisplayDaltonizerPreferenceScreen;
@@ -419,6 +423,10 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
mDisplayMagnificationPreferenceScreen = (PreferenceScreen) findPreference(
DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN);
+ // Font size.
+ mFontSizePreferenceScreen = (PreferenceScreen) findPreference(
+ FONT_SIZE_PREFERENCE_SCREEN);
+
// Autoclick after pointer stops.
mAutoclickPreferenceScreen = (PreferenceScreen) findPreference(
AUTOCLICK_PREFERENCE_SCREEN);
@@ -600,6 +608,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
updateFeatureSummary(Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
mDisplayDaltonizerPreferenceScreen);
+ updateFontSizeSummary(mFontSizePreferenceScreen);
+
updateAutoclickSummary(mAutoclickPreferenceScreen);
// Global gesture
@@ -634,6 +644,15 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
getResources(), delay));
}
+ private void updateFontSizeSummary(Preference pref) {
+ final Resources res = getContext().getResources();
+ final String[] entries = res.getStringArray(R.array.entries_font_size);
+ final String[] strEntryValues = res.getStringArray(R.array.entryvalues_font_size);
+ final int index = ToggleFontSizePreferenceFragment.floatToIndex(
+ res.getConfiguration().fontScale, strEntryValues);
+ pref.setSummary(entries[index]);
+ }
+
private void updateLockScreenRotationCheckbox() {
Context context = getActivity();
if (context != null) {
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
index ac12005c96c..7636fd9056c 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
@@ -16,6 +16,7 @@
package com.android.settings.accessibility;
+import android.content.res.Resources;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.preference.Preference;
@@ -35,12 +36,14 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm
"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";
private static final String TALKBACK_NAME = "Talkback";
// Preference controls.
private Preference mDisplayMagnificationPreference;
private Preference mDisplayDaltonizerPreference;
+ private Preference mFontSizePreference;
private Preference mTalkbackPreference;
@Override
@@ -60,6 +63,7 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm
mDisplayMagnificationPreference = findPreference(DISPLAY_MAGNIFICATION_PREFERENCE);
mDisplayDaltonizerPreference = findPreference(DISPLAY_DALTONIZER_PREFERENCE);
+ mFontSizePreference = findPreference(FONT_SIZE_PREFERENCE);
mTalkbackPreference = findPreference(TALKBACK_PREFERENCE);
mTalkbackPreference.setTitle(TALKBACK_NAME);
@@ -104,6 +108,7 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm
mDisplayMagnificationPreference);
updateFeatureSummary(Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
mDisplayDaltonizerPreference);
+ updateFontSizeSummary(mFontSizePreference);
}
private void updateFeatureSummary(String prefKey, Preference pref) {
@@ -111,4 +116,13 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm
pref.setSummary(enabled ? R.string.accessibility_feature_state_on
: R.string.accessibility_feature_state_off);
}
+
+ private void updateFontSizeSummary(Preference pref) {
+ final Resources res = getContext().getResources();
+ final String[] entries = res.getStringArray(R.array.entries_font_size);
+ final String[] strEntryValues = res.getStringArray(R.array.entryvalues_font_size);
+ final int index = ToggleFontSizePreferenceFragment.floatToIndex(
+ res.getConfiguration().fontScale, strEntryValues);
+ pref.setSummary(entries[index]);
+ }
}
diff --git a/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java
index 8b9e27bc0df..4a8cd32826f 100644
--- a/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java
@@ -41,7 +41,7 @@ public class ToggleFontSizePreferenceFragment extends PreviewSeekBarPreferenceFr
super.onCreate(savedInstanceState);
mActivityLayoutResId = R.layout.font_size_activity;
- mPreviewSampleResId = R.layout.font_size_preview;
+ mPreviewSampleResIds = new int[]{R.layout.font_size_preview};
Resources res = getContext().getResources();
// Mark the appropriate item in the preferences list.
@@ -82,7 +82,11 @@ public class ToggleFontSizePreferenceFragment extends PreviewSeekBarPreferenceFr
return InstrumentedFragment.ACCESSIBILITY_FONT_SIZE;
}
- private int floatToIndex(float val, String[] indices) {
+ /**
+ * Utility function that returns the index in a string array with which the represented value is
+ * the closest to a given float value.
+ */
+ static int floatToIndex(float val, String[] indices) {
float lastVal = Float.parseFloat(indices[0]);
for (int i=1; i