Customize the text reading preview layouts

Make it possible to customize the available text reading preview
layouts through overlays.

Bug: 307481249
Test: make RunSettingsRoboTests ROBOTEST_FILTER=
"com.android.settings.accessibility.TextReadingPreviewPreferenceTest"
(cherry picked from https://android-review.googlesource.com/q/commit:2a7da9c433f57db9b7b9ad5c54bddb5da81e5693)
Change-Id: I3e55eeb7545a4d5d1f689ab4160e453996b58bdb
This commit is contained in:
David Magno
2023-10-25 18:10:38 +00:00
committed by Daniel Norman
parent 27dd22302f
commit eb2276c01c
4 changed files with 53 additions and 14 deletions

View File

@@ -18,12 +18,14 @@ package com.android.settings.accessibility;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.SystemClock;
import android.util.Log;
import android.view.Choreographer;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
@@ -31,6 +33,7 @@ import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoi
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.instrumentation.SettingsStatsLog;
import com.android.settings.display.PreviewPagerAdapter;
import com.android.settings.flags.Flags;
import com.android.settings.widget.LabeledSeekBarPreference;
import java.util.Objects;
@@ -44,11 +47,10 @@ class TextReadingPreviewController extends BasePreferenceController implements
private static final String TAG = "TextReadingPreviewCtrl";
private static final int LAYER_INITIAL_INDEX = 0;
private static final int FRAME_INITIAL_INDEX = 0;
static final int[] PREVIEW_SAMPLE_RES_IDS = new int[]{
private static final int[] PREVIEW_SAMPLE_RES_IDS = new int[]{
R.layout.accessibility_text_reading_preview_app_grid,
R.layout.screen_zoom_preview_1,
R.layout.accessibility_text_reading_preview_mail_content};
private static final String PREVIEW_KEY = "preview";
private static final String FONT_SIZE_KEY = "font_size";
private static final String DISPLAY_SIZE_KEY = "display_size";
@@ -107,11 +109,12 @@ class TextReadingPreviewController extends BasePreferenceController implements
final Configuration origConfig = mContext.getResources().getConfiguration();
final boolean isLayoutRtl =
origConfig.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
final int[] previewSamples = getPreviewSampleLayouts(mContext);
final PreviewPagerAdapter pagerAdapter = new PreviewPagerAdapter(mContext, isLayoutRtl,
PREVIEW_SAMPLE_RES_IDS, createConfig(origConfig));
previewSamples, createConfig(origConfig));
mPreviewPreference.setPreviewAdapter(pagerAdapter);
mPreviewPreference.setCurrentItem(
isLayoutRtl ? PREVIEW_SAMPLE_RES_IDS.length - 1 : FRAME_INITIAL_INDEX);
isLayoutRtl ? previewSamples.length - 1 : FRAME_INITIAL_INDEX);
final int initialPagerIndex =
mLastFontProgress * mDisplaySizeData.getValues().size() + mLastDisplayProgress;
@@ -178,6 +181,22 @@ class TextReadingPreviewController extends BasePreferenceController implements
choreographer.postFrameCallbackDelayed(mCommit, commitDelayMs);
}
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
static int[] getPreviewSampleLayouts(Context context) {
if (!Flags.accessibilityCustomizeTextReadingPreview()) {
return PREVIEW_SAMPLE_RES_IDS;
}
TypedArray previews = context.getResources().obtainTypedArray(
R.array.config_text_reading_preview_samples);
int previewCount = previews.length();
int[] previewSamples = new int[previewCount];
for (int i = 0; i < previewCount; i++) {
previewSamples[i] = previews.getResourceId(i, R.layout.screen_zoom_preview_1);
}
previews.recycle();
return previewSamples;
}
private int getPagerIndex() {
final int displayDataSize = mDisplaySizeData.getValues().size();
final int fontSizeProgress = mFontSizePreference.getProgress();