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";
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

View File

@@ -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.
*

View File

@@ -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);

View File

@@ -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++) {