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 Original line Diff line number Diff line
@@ -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,15 +100,21 @@ 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) {
            if (savedInstanceState.getBoolean(NEED_RESET_SETTINGS)) {
                mResetStateListeners.forEach(ResetStateListener::resetState);
                mResetStateListeners.forEach(ResetStateListener::resetState);
            }
            }

            if (savedInstanceState.containsKey(LAST_PREVIEW_INDEX)) {
                mLastPreviewIndex = savedInstanceState.getInt(LAST_PREVIEW_INDEX);
            }
        }
    }
    }


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