Merge "Fix the preview should keep the same layer after font or display size change."

This commit is contained in:
PETER LIANG
2022-12-06 09:47:59 +00:00
committed by Android (Google) Code Review
4 changed files with 70 additions and 10 deletions

View File

@@ -64,7 +64,12 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
static final String RESET_KEY = "reset"; static final String RESET_KEY = "reset";
private static final String PREVIEW_KEY = "preview"; private static final String PREVIEW_KEY = "preview";
private static final String NEED_RESET_SETTINGS = "need_reset_settings"; 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 FontWeightAdjustmentPreferenceController mFontWeightAdjustmentController;
private TextReadingPreviewController mPreviewController;
private int mLastPreviewIndex = UNKNOWN_INDEX;
private int mEntryPoint = EntryPoint.UNKNOWN_ENTRY; private int mEntryPoint = EntryPoint.UNKNOWN_ENTRY;
/** /**
@@ -95,14 +100,20 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
boolean mNeedResetSettings; boolean mNeedResetSettings;
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(icicle); super.onCreate(savedInstanceState);
mNeedResetSettings = false; mNeedResetSettings = false;
mResetStateListeners = getResetStateListeners(); mResetStateListeners = getResetStateListeners();
if (icicle != null && icicle.getBoolean(NEED_RESET_SETTINGS)) { if (savedInstanceState != null) {
mResetStateListeners.forEach(ResetStateListener::resetState); 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 FontSizeData fontSizeData = new FontSizeData(context);
final DisplaySizeData displaySizeData = createDisplaySizeData(context); final DisplaySizeData displaySizeData = createDisplaySizeData(context);
final TextReadingPreviewController previewController = new TextReadingPreviewController( mPreviewController = new TextReadingPreviewController(context, PREVIEW_KEY, fontSizeData,
context, PREVIEW_KEY, fontSizeData, displaySizeData); displaySizeData);
previewController.setEntryPoint(mEntryPoint); mPreviewController.setEntryPoint(mEntryPoint);
controllers.add(previewController); controllers.add(mPreviewController);
final PreviewSizeSeekBarController fontSizeController = new PreviewSizeSeekBarController( final PreviewSizeSeekBarController fontSizeController = new PreviewSizeSeekBarController(
context, FONT_SIZE_KEY, fontSizeData); context, FONT_SIZE_KEY, fontSizeData);
fontSizeController.setInteractionListener(previewController); fontSizeController.setInteractionListener(mPreviewController);
controllers.add(fontSizeController); controllers.add(fontSizeController);
final PreviewSizeSeekBarController displaySizeController = new PreviewSizeSeekBarController( final PreviewSizeSeekBarController displaySizeController = new PreviewSizeSeekBarController(
context, DISPLAY_SIZE_KEY, displaySizeData); context, DISPLAY_SIZE_KEY, displaySizeData);
displaySizeController.setInteractionListener(previewController); displaySizeController.setInteractionListener(mPreviewController);
controllers.add(displaySizeController); controllers.add(displaySizeController);
mFontWeightAdjustmentController = mFontWeightAdjustmentController =
@@ -206,6 +217,17 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
if (mNeedResetSettings) { if (mNeedResetSettings) {
outState.putBoolean(NEED_RESET_SETTINGS, true); 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 @VisibleForTesting

View File

@@ -133,6 +133,14 @@ class TextReadingPreviewController extends BasePreferenceController implements
postCommitDelayed(CHANGE_BY_SEEKBAR_DELAY_MS); 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. * The entry point is used for logging.
* *

View File

@@ -37,6 +37,24 @@ public class TextReadingPreviewPreference extends Preference {
private int mLastLayerIndex; private int mLastLayerIndex;
private PreviewPagerAdapter mPreviewAdapter; 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) { TextReadingPreviewPreference(Context context) {
super(context); super(context);
init(); init();
@@ -63,6 +81,7 @@ public class TextReadingPreviewPreference extends Preference {
super.onBindViewHolder(holder); super.onBindViewHolder(holder);
final ViewPager viewPager = (ViewPager) holder.findViewById(R.id.preview_pager); final ViewPager viewPager = (ViewPager) holder.findViewById(R.id.preview_pager);
viewPager.addOnPageChangeListener(mPageChangeListener);
final DotsPageIndicator pageIndicator = final DotsPageIndicator pageIndicator =
(DotsPageIndicator) holder.findViewById(R.id.page_indicator); (DotsPageIndicator) holder.findViewById(R.id.page_indicator);
updateAdapterIfNeeded(viewPager, pageIndicator, mPreviewAdapter); updateAdapterIfNeeded(viewPager, pageIndicator, mPreviewAdapter);

View File

@@ -129,6 +129,17 @@ public class TextReadingPreviewPreferenceTest {
verify(mPreviewPagerAdapter).setPreviewLayer(eq(index), anyInt(), anyInt(), anyBoolean()); 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) { private static Configuration[] createConfigurations(int count) {
final Configuration[] configurations = new Configuration[count]; final Configuration[] configurations = new Configuration[count];
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {