Merge "Customize the text reading preview layouts" into main

This commit is contained in:
Daniel Norman
2023-10-26 22:23:16 +00:00
committed by Android (Google) Code Review
4 changed files with 53 additions and 14 deletions

View File

@@ -5,6 +5,13 @@ package: "com.android.settings.flags"
# NOTE: All Settings flags share the same Flags class, so prefix our # NOTE: All Settings flags share the same Flags class, so prefix our
# flags with 'accessibility' to prevent naming collision. # flags with 'accessibility' to prevent naming collision.
flag {
name: "accessibility_customize_text_reading_preview"
namespace: "accessibility"
description: "Pulls the accessibility text-reading preview pages from a config."
bug: "307481249"
}
flag { flag {
name: "accessibility_show_app_info_button" name: "accessibility_show_app_info_button"
namespace: "accessibility" namespace: "accessibility"

View File

@@ -765,4 +765,11 @@
<!-- Allowed packages to show the confirmation dialog for a system locale suggestion --> <!-- Allowed packages to show the confirmation dialog for a system locale suggestion -->
<string-array name="allowed_packages_for_locale_confirmation_diallog" translatable="false"/> <string-array name="allowed_packages_for_locale_confirmation_diallog" translatable="false"/>
<!-- Array of text reading preview layouts. Must contain at least 1 layout -->
<array name="config_text_reading_preview_samples">
<item>@layout/accessibility_text_reading_preview_app_grid</item>
<item>@layout/screen_zoom_preview_1</item>
<item>@layout/accessibility_text_reading_preview_mail_content</item>
</array>
</resources> </resources>

View File

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

View File

@@ -16,8 +16,6 @@
package com.android.settings.accessibility; package com.android.settings.accessibility;
import static com.android.settings.accessibility.TextReadingPreviewController.PREVIEW_SAMPLE_RES_IDS;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -39,6 +37,7 @@ import androidx.viewpager.widget.ViewPager;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.display.PreviewPagerAdapter; import com.android.settings.display.PreviewPagerAdapter;
import org.junit.Assume;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -54,15 +53,18 @@ public class TextReadingPreviewPreferenceTest {
private PreferenceViewHolder mHolder; private PreferenceViewHolder mHolder;
private ViewPager mViewPager; private ViewPager mViewPager;
private PreviewPagerAdapter mPreviewPagerAdapter; private PreviewPagerAdapter mPreviewPagerAdapter;
private int mPreviewSampleCount;
@Before @Before
public void setUp() { public void setUp() {
final Context context = ApplicationProvider.getApplicationContext(); final Context context = ApplicationProvider.getApplicationContext();
final Configuration[] configurations = createConfigurations(PREVIEW_SAMPLE_RES_IDS.length); final int[] previewSamples = TextReadingPreviewController.getPreviewSampleLayouts(context);
mPreviewSampleCount = previewSamples.length;
final Configuration[] configurations = createConfigurations(mPreviewSampleCount);
mTextReadingPreviewPreference = new TextReadingPreviewPreference(context); mTextReadingPreviewPreference = new TextReadingPreviewPreference(context);
mPreviewPagerAdapter = mPreviewPagerAdapter =
spy(new PreviewPagerAdapter(context, /* isLayoutRtl= */ false, spy(new PreviewPagerAdapter(context, /* isLayoutRtl= */ false,
PREVIEW_SAMPLE_RES_IDS, configurations)); previewSamples, configurations));
final LayoutInflater inflater = LayoutInflater.from(context); final LayoutInflater inflater = LayoutInflater.from(context);
final View view = final View view =
inflater.inflate(mTextReadingPreviewPreference.getLayoutResource(), inflater.inflate(mTextReadingPreviewPreference.getLayoutResource(),
@@ -81,7 +83,7 @@ public class TextReadingPreviewPreferenceTest {
@Test @Test
public void setPreviewAdapterWithNull_resetCurrentItem() { public void setPreviewAdapterWithNull_resetCurrentItem() {
final int currentItem = 2; final int currentItem = mPreviewSampleCount - 1;
mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter); mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter);
mTextReadingPreviewPreference.setCurrentItem(currentItem); mTextReadingPreviewPreference.setCurrentItem(currentItem);
mTextReadingPreviewPreference.onBindViewHolder(mHolder); mTextReadingPreviewPreference.onBindViewHolder(mHolder);
@@ -94,7 +96,7 @@ public class TextReadingPreviewPreferenceTest {
@Test @Test
public void setCurrentItem_success() { public void setCurrentItem_success() {
final int currentItem = 1; final int currentItem = mPreviewSampleCount - 1;
mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter); mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter);
mTextReadingPreviewPreference.onBindViewHolder(mHolder); mTextReadingPreviewPreference.onBindViewHolder(mHolder);
@@ -106,21 +108,25 @@ public class TextReadingPreviewPreferenceTest {
@Test(expected = NullPointerException.class) @Test(expected = NullPointerException.class)
public void setCurrentItemBeforeSetPreviewAdapter_throwNPE() { public void setCurrentItemBeforeSetPreviewAdapter_throwNPE() {
final int currentItem = 5; final int currentItem = mPreviewSampleCount + 2;
mTextReadingPreviewPreference.setCurrentItem(currentItem); mTextReadingPreviewPreference.setCurrentItem(currentItem);
} }
@Test(expected = NullPointerException.class) @Test(expected = NullPointerException.class)
public void updatePagerWithoutPreviewAdapter_throwNPE() { public void updatePagerWithoutPreviewAdapter_throwNPE() {
final int index = 1; final int index = mPreviewSampleCount - 1;
mTextReadingPreviewPreference.notifyPreviewPagerChanged(index); mTextReadingPreviewPreference.notifyPreviewPagerChanged(index);
} }
@Test @Test
public void notifyPreviewPager_setPreviewLayer() { public void notifyPreviewPager_setPreviewLayer() {
final int index = 2; // The preview pager cannot switch page if there is only one preview layout, so skip the
// test if so
Assume.assumeTrue(mPreviewSampleCount > 1);
final int index = mPreviewSampleCount - 1;
mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter); mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter);
mTextReadingPreviewPreference.onBindViewHolder(mHolder); mTextReadingPreviewPreference.onBindViewHolder(mHolder);
@@ -131,7 +137,7 @@ public class TextReadingPreviewPreferenceTest {
@Test @Test
public void afterPagerChange_updateCurrentItem() { public void afterPagerChange_updateCurrentItem() {
final int currentItem = 2; final int currentItem = mPreviewSampleCount - 1;
mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter); mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter);
mTextReadingPreviewPreference.onBindViewHolder(mHolder); mTextReadingPreviewPreference.onBindViewHolder(mHolder);