From 49fabb9b472ffa534f48fde4bab131a38dbaa072 Mon Sep 17 00:00:00 2001 From: Noah Wang Date: Tue, 12 Jan 2016 09:00:57 -0800 Subject: [PATCH] Accomodating multiple preview screen with ViewPager for the users to swipe across, along with some UI refinements. Change-Id: I9487bcce88cdab490a4b6baa752224acddc5be52 --- res/drawable/ic_font_size_24dp.xml | 25 ++++ res/drawable/ic_font_size_36dp.xml | 25 ++++ res/layout/font_size_activity.xml | 48 ++++--- res/layout/preview_frame_container.xml | 20 +++ res/layout/screen_zoom_activity.xml | 49 +++---- res/values/strings.xml | 8 +- res/xml/accessibility_settings.xml | 6 +- .../android/settings/PreviewPagerAdapter.java | 131 ++++++++++++++++++ .../PreviewSeekBarPreferenceFragment.java | 90 +++--------- .../accessibility/AccessibilitySettings.java | 19 +++ .../AccessibilitySettingsForSetupWizard.java | 14 ++ .../ToggleFontSizePreferenceFragment.java | 8 +- .../settings/display/ScreenZoomSettings.java | 6 +- 13 files changed, 317 insertions(+), 132 deletions(-) create mode 100644 res/drawable/ic_font_size_24dp.xml create mode 100644 res/drawable/ic_font_size_36dp.xml create mode 100644 res/layout/preview_frame_container.xml create mode 100644 src/com/android/settings/PreviewPagerAdapter.java 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