diff --git a/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java b/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java index 893837cdb9d..d1614ca6c6b 100644 --- a/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java +++ b/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java @@ -64,7 +64,12 @@ public class TextReadingPreferenceFragment extends DashboardFragment { static final String RESET_KEY = "reset"; private static final String PREVIEW_KEY = "preview"; private static final String NEED_RESET_SETTINGS = "need_reset_settings"; + private static final String LAST_PREVIEW_INDEX = "last_preview_index"; + private static final int UNKNOWN_INDEX = -1; + private FontWeightAdjustmentPreferenceController mFontWeightAdjustmentController; + private TextReadingPreviewController mPreviewController; + private int mLastPreviewIndex = UNKNOWN_INDEX; private int mEntryPoint = EntryPoint.UNKNOWN_ENTRY; /** @@ -95,14 +100,20 @@ public class TextReadingPreferenceFragment extends DashboardFragment { boolean mNeedResetSettings; @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); mNeedResetSettings = false; mResetStateListeners = getResetStateListeners(); - if (icicle != null && icicle.getBoolean(NEED_RESET_SETTINGS)) { - mResetStateListeners.forEach(ResetStateListener::resetState); + if (savedInstanceState != null) { + if (savedInstanceState.getBoolean(NEED_RESET_SETTINGS)) { + mResetStateListeners.forEach(ResetStateListener::resetState); + } + + if (savedInstanceState.containsKey(LAST_PREVIEW_INDEX)) { + mLastPreviewIndex = savedInstanceState.getInt(LAST_PREVIEW_INDEX); + } } } @@ -139,19 +150,19 @@ public class TextReadingPreferenceFragment extends DashboardFragment { final FontSizeData fontSizeData = new FontSizeData(context); final DisplaySizeData displaySizeData = createDisplaySizeData(context); - final TextReadingPreviewController previewController = new TextReadingPreviewController( - context, PREVIEW_KEY, fontSizeData, displaySizeData); - previewController.setEntryPoint(mEntryPoint); - controllers.add(previewController); + mPreviewController = new TextReadingPreviewController(context, PREVIEW_KEY, fontSizeData, + displaySizeData); + mPreviewController.setEntryPoint(mEntryPoint); + controllers.add(mPreviewController); final PreviewSizeSeekBarController fontSizeController = new PreviewSizeSeekBarController( context, FONT_SIZE_KEY, fontSizeData); - fontSizeController.setInteractionListener(previewController); + fontSizeController.setInteractionListener(mPreviewController); controllers.add(fontSizeController); final PreviewSizeSeekBarController displaySizeController = new PreviewSizeSeekBarController( context, DISPLAY_SIZE_KEY, displaySizeData); - displaySizeController.setInteractionListener(previewController); + displaySizeController.setInteractionListener(mPreviewController); controllers.add(displaySizeController); mFontWeightAdjustmentController = @@ -206,6 +217,17 @@ public class TextReadingPreferenceFragment extends DashboardFragment { if (mNeedResetSettings) { outState.putBoolean(NEED_RESET_SETTINGS, true); } + + outState.putInt(LAST_PREVIEW_INDEX, mPreviewController.getCurrentItem()); + } + + @Override + public void onStart() { + super.onStart(); + + if (mLastPreviewIndex != UNKNOWN_INDEX) { + mPreviewController.setCurrentItem(mLastPreviewIndex); + } } @VisibleForTesting diff --git a/src/com/android/settings/accessibility/TextReadingPreviewController.java b/src/com/android/settings/accessibility/TextReadingPreviewController.java index 29faaaa9f20..8fa8dc782c2 100644 --- a/src/com/android/settings/accessibility/TextReadingPreviewController.java +++ b/src/com/android/settings/accessibility/TextReadingPreviewController.java @@ -133,6 +133,14 @@ class TextReadingPreviewController extends BasePreferenceController implements postCommitDelayed(CHANGE_BY_SEEKBAR_DELAY_MS); } + void setCurrentItem(int index) { + mPreviewPreference.setCurrentItem(index); + } + + int getCurrentItem() { + return mPreviewPreference.getCurrentItem(); + } + /** * The entry point is used for logging. * diff --git a/src/com/android/settings/accessibility/TextReadingPreviewPreference.java b/src/com/android/settings/accessibility/TextReadingPreviewPreference.java index 4b8ca39ed18..cef6f25694f 100644 --- a/src/com/android/settings/accessibility/TextReadingPreviewPreference.java +++ b/src/com/android/settings/accessibility/TextReadingPreviewPreference.java @@ -37,6 +37,24 @@ public class TextReadingPreviewPreference extends Preference { private int mLastLayerIndex; private PreviewPagerAdapter mPreviewAdapter; + private final ViewPager.OnPageChangeListener mPageChangeListener = + new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int i, float v, int i1) { + // Do nothing + } + + @Override + public void onPageSelected(int i) { + mCurrentItem = i; + } + + @Override + public void onPageScrollStateChanged(int i) { + // Do nothing + } + }; + TextReadingPreviewPreference(Context context) { super(context); init(); @@ -63,6 +81,7 @@ public class TextReadingPreviewPreference extends Preference { super.onBindViewHolder(holder); final ViewPager viewPager = (ViewPager) holder.findViewById(R.id.preview_pager); + viewPager.addOnPageChangeListener(mPageChangeListener); final DotsPageIndicator pageIndicator = (DotsPageIndicator) holder.findViewById(R.id.page_indicator); updateAdapterIfNeeded(viewPager, pageIndicator, mPreviewAdapter); diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewPreferenceTest.java b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewPreferenceTest.java index 3dc82da5add..16881428e15 100644 --- a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewPreferenceTest.java @@ -129,6 +129,17 @@ public class TextReadingPreviewPreferenceTest { verify(mPreviewPagerAdapter).setPreviewLayer(eq(index), anyInt(), anyInt(), anyBoolean()); } + @Test + public void afterPagerChange_updateCurrentItem() { + final int currentItem = 2; + mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter); + mTextReadingPreviewPreference.onBindViewHolder(mHolder); + + mViewPager.setCurrentItem(currentItem); + + assertThat(mTextReadingPreviewPreference.getCurrentItem()).isEqualTo(currentItem); + } + private static Configuration[] createConfigurations(int count) { final Configuration[] configurations = new Configuration[count]; for (int i = 0; i < count; i++) {