Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f5c7c52c authored by Peter Liang's avatar Peter Liang
Browse files

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

Bug: 259213786
Test: make RunSettingsRoboTests ROBOTEST_FILTER=TextReadingPreviewPreferenceTest
Change-Id: Ifc0047e47806662174712bb8628193bee906b384
parent 2af12aca
Loading
Loading
Loading
Loading
+32 −10
Original line number Diff line number Diff line
@@ -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,15 +100,21 @@ 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)) {
        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);
            }
        }
    }

    @Override
@@ -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
+8 −0
Original line number Diff line number Diff line
@@ -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.
     *
+19 −0
Original line number Diff line number Diff line
@@ -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);
+11 −0
Original line number Diff line number Diff line
@@ -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++) {