Refine the UI of the text reading page across SuW.

Actions:
1) Customize pages and use the components from SuW lib to align SuW consistent style.
2) Add the done button in the Anything Else page.

Bug: 232771631
Bug: 222419452
Test: make RunSettingsRoboTests ROBOTEST_FILTER=TextReadingResetControllerTest
Test: make RunSettingsRoboTests ROBOTEST_FILTER=TextReadingPreferenceFragmentForSetupWizardTest
Change-Id: Ie3f3513ceee7c40d6286335dce91979df0d27f02
This commit is contained in:
Peter Liang
2022-12-11 12:04:58 +08:00
parent 2c2a826c3f
commit 5e931b2c23
7 changed files with 92 additions and 82 deletions

View File

@@ -1,37 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2022 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingStart="?android:attr/listPreferredItemPaddingStart">
<Button
android:id="@+id/reset_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|start"
android:paddingVertical="14dp"
android:background="?android:attr/selectableItemBackground"
android:textColor="?android:attr/colorAccent"
android:textSize="16sp"
android:text="@string/accessibility_text_reading_reset_button_title"
android:fontFamily="@*android:string/config_bodyFontFamilyMedium" />
</FrameLayout>

View File

@@ -18,11 +18,11 @@ package com.android.settings.accessibility;
import static com.android.settings.accessibility.TextReadingResetController.ResetStateListener;
import android.app.Activity;
import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
@@ -44,7 +44,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -55,8 +54,7 @@ import java.util.stream.Collectors;
public class TextReadingPreferenceFragment extends DashboardFragment {
public static final String EXTRA_LAUNCHED_FROM = "launched_from";
private static final String TAG = "TextReadingPreferenceFragment";
private static final String CATEGORY_FOR_ANYTHING_ELSE =
"com.android.settings.suggested.category.DISPLAY_SETTINGS";
private static final String SETUP_WIZARD_PACKAGE = "setupwizard";
static final String FONT_SIZE_KEY = "font_size";
static final String DISPLAY_SIZE_KEY = "display_size";
static final String BOLD_TEXT_KEY = "toggle_force_bold_text";
@@ -179,10 +177,8 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
new TextReadingResetController(context, RESET_KEY,
v -> showDialog(DialogEnums.DIALOG_RESET_SETTINGS));
resetController.setEntryPoint(mEntryPoint);
resetController.setVisible(!WizardManagerHelper.isAnySetupWizard(getIntent()));
controllers.add(resetController);
if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
resetController.setSetupWizardStyle();
}
return controllers;
}
@@ -230,6 +226,13 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
}
}
protected boolean isCallingFromAnythingElseEntryPoint() {
final Activity activity = getActivity();
final String callingPackage = activity != null ? activity.getCallingPackage() : null;
return callingPackage != null && callingPackage.contains(SETUP_WIZARD_PACKAGE);
}
@VisibleForTesting
DisplaySizeData createDisplaySizeData(Context context) {
return new DisplaySizeData(context);
@@ -242,14 +245,7 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
return;
}
final Intent intent = getIntent();
if (intent == null) {
mEntryPoint = EntryPoint.UNKNOWN_ENTRY;
return;
}
final Set<String> categories = intent.getCategories();
mEntryPoint = categories != null && categories.contains(CATEGORY_FOR_ANYTHING_ELSE)
mEntryPoint = isCallingFromAnythingElseEntryPoint()
? EntryPoint.SUW_ANYTHING_ELSE : EntryPoint.UNKNOWN_ENTRY;
}

View File

@@ -16,6 +16,10 @@
package com.android.settings.accessibility;
import static android.app.Activity.RESULT_CANCELED;
import static com.android.settings.accessibility.AccessibilityDialogUtils.DialogEnums.DIALOG_RESET_SETTINGS;
import android.app.settings.SettingsEnums;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
@@ -28,9 +32,10 @@ import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R;
import com.android.settingslib.Utils;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupdesign.GlifPreferenceLayout;
/**
* A {@link androidx.preference.PreferenceFragmentCompat} that displays the settings page related
* to the text and reading option in the SetupWizard.
@@ -48,6 +53,28 @@ public class TextReadingPreferenceFragmentForSetupWizard extends TextReadingPref
icon.setTintList(Utils.getColorAttr(getContext(), android.R.attr.colorPrimary));
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
/* description= */ null, icon);
final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
mixin.setSecondaryButton(
new FooterButton.Builder(getContext())
.setText(R.string.accessibility_text_reading_reset_button_title)
.setListener(l -> showDialog(DIALOG_RESET_SETTINGS))
.setButtonType(FooterButton.ButtonType.CLEAR)
.setTheme(R.style.SudGlifButton_Secondary)
.build());
if (isCallingFromAnythingElseEntryPoint()) {
mixin.setPrimaryButton(
new FooterButton.Builder(getContext())
.setText(R.string.done)
.setListener(l -> {
setResult(RESULT_CANCELED);
finish();
})
.setButtonType(FooterButton.ButtonType.DONE)
.setTheme(R.style.SudGlifButton_Primary)
.build());
}
}
@Override

View File

@@ -23,7 +23,6 @@ import androidx.annotation.Nullable;
import androidx.preference.PreferenceScreen;
import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint;
import com.android.settings.accessibility.TextReadingResetPreference.ButtonStyle;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.instrumentation.SettingsStatsLog;
@@ -31,8 +30,7 @@ import com.android.settings.core.instrumentation.SettingsStatsLog;
* The controller of the reset button in the text and reading options page.
*/
class TextReadingResetController extends BasePreferenceController {
@ButtonStyle
private int mButtonStyle;
private boolean mIsVisible;
private final View.OnClickListener mOnResetClickListener;
@EntryPoint
@@ -67,11 +65,11 @@ class TextReadingResetController extends BasePreferenceController {
}
});
resetPreference.setSetupWizardStyle(mButtonStyle);
setVisible(screen, getPreferenceKey(), mIsVisible);
}
void setSetupWizardStyle() {
mButtonStyle = ButtonStyle.SUW;
void setVisible(boolean isVisible) {
mIsVisible = isVisible;
}
/**

View File

@@ -20,15 +20,11 @@ import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.IntDef;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* The preference which is used for resetting the status of all preferences in the display size
* and text page.
@@ -36,20 +32,10 @@ import java.lang.annotation.RetentionPolicy;
public class TextReadingResetPreference extends Preference {
private View.OnClickListener mOnResetClickListener;
@Retention(RetentionPolicy.SOURCE)
@IntDef({
ButtonStyle.DEFAULT,
ButtonStyle.SUW,
})
@interface ButtonStyle {
int DEFAULT = 0;
int SUW = 1;
}
public TextReadingResetPreference(Context context, AttributeSet attrs) {
super(context, attrs);
setSetupWizardStyle(ButtonStyle.DEFAULT);
setLayoutResource(R.layout.accessibility_text_reading_reset_button);
}
@Override
@@ -60,13 +46,6 @@ public class TextReadingResetPreference extends Preference {
view.setOnClickListener(mOnResetClickListener);
}
void setSetupWizardStyle(@ButtonStyle int style) {
final int layoutResId = (style == ButtonStyle.SUW)
? R.layout.accessibility_text_reading_reset_button_suw
: R.layout.accessibility_text_reading_reset_button;
setLayoutResource(layoutResId);
}
void setOnResetClickListener(View.OnClickListener resetClickListener) {
mOnResetClickListener = resetClickListener;
}

View File

@@ -20,6 +20,7 @@ import static com.android.settings.accessibility.TextReadingPreferenceFragment.R
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -27,11 +28,13 @@ import static org.mockito.Mockito.verify;
import android.app.settings.SettingsEnums;
import android.content.Context;
import androidx.fragment.app.FragmentActivity;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import com.android.settingslib.widget.LayoutPreference;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupdesign.GlifPreferenceLayout;
import org.junit.Before;
@@ -50,8 +53,16 @@ public class TextReadingPreferenceFragmentForSetupWizardTest {
@Rule
public final MockitoRule mMockito = MockitoJUnit.rule();
@Mock
private GlifPreferenceLayout mGlifLayoutView;
@Mock
private FooterBarMixin mFooterBarMixin;
@Mock
private FragmentActivity mActivity;
@Spy
private final Context mContext = ApplicationProvider.getApplicationContext();
private TextReadingPreferenceFragmentForSetupWizard mFragment;
@@ -61,13 +72,14 @@ public class TextReadingPreferenceFragmentForSetupWizardTest {
mFragment = spy(new TextReadingPreferenceFragmentForSetupWizard());
final LayoutPreference resetPreference =
new LayoutPreference(mContext, R.layout.accessibility_text_reading_reset_button);
doReturn(mContext).when(mFragment).getContext();
doReturn(resetPreference).when(mFragment).findPreference(RESET_KEY);
doReturn(mFooterBarMixin).when(mGlifLayoutView).getMixin(FooterBarMixin.class);
}
@Test
public void setHeaderText_onViewCreated_verifyAction() {
final String title = "title";
doReturn(mContext).when(mFragment).getContext();
doReturn(title).when(mContext).getString(
R.string.accessibility_text_reading_options_title);
@@ -86,4 +98,21 @@ public class TextReadingPreferenceFragmentForSetupWizardTest {
public void getHelpResource_shouldNotHaveHelpResource() {
assertThat(mFragment.getHelpResource()).isEqualTo(0);
}
@Test
public void onViewCreated_verifySetSecondaryButton() {
mFragment.onViewCreated(mGlifLayoutView, null);
verify(mFooterBarMixin).setSecondaryButton(any());
}
@Test
public void onViewCreated_verifySetPrimaryButton() {
doReturn(mActivity).when(mFragment).getActivity();
doReturn("setupwizard").when(mActivity).getCallingPackage();
mFragment.onViewCreated(mGlifLayoutView, null);
verify(mFooterBarMixin).setPrimaryButton(any());
}
}

View File

@@ -16,6 +16,8 @@
package com.android.settings.accessibility;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -70,4 +72,20 @@ public class TextReadingResetControllerTest {
verify(mResetPreference).setOnResetClickListener(any(View.OnClickListener.class));
}
@Test
public void setVisibleAsFalse_preferenceInvisible() {
mResetController.setVisible(false);
mResetController.displayPreference(mPreferenceScreen);
assertThat(mResetPreference.isVisible()).isFalse();
}
@Test
public void setVisibleAsTrue_preferenceVisible() {
mResetController.setVisible(true);
mResetController.displayPreference(mPreferenceScreen);
assertThat(mResetPreference.isVisible()).isTrue();
}
}