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:
@@ -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>
|
|
@@ -18,11 +18,11 @@ package com.android.settings.accessibility;
|
|||||||
|
|
||||||
import static com.android.settings.accessibility.TextReadingResetController.ResetStateListener;
|
import static com.android.settings.accessibility.TextReadingResetController.ResetStateListener;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
@@ -44,7 +44,6 @@ import java.lang.annotation.Retention;
|
|||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -55,8 +54,7 @@ import java.util.stream.Collectors;
|
|||||||
public class TextReadingPreferenceFragment extends DashboardFragment {
|
public class TextReadingPreferenceFragment extends DashboardFragment {
|
||||||
public static final String EXTRA_LAUNCHED_FROM = "launched_from";
|
public static final String EXTRA_LAUNCHED_FROM = "launched_from";
|
||||||
private static final String TAG = "TextReadingPreferenceFragment";
|
private static final String TAG = "TextReadingPreferenceFragment";
|
||||||
private static final String CATEGORY_FOR_ANYTHING_ELSE =
|
private static final String SETUP_WIZARD_PACKAGE = "setupwizard";
|
||||||
"com.android.settings.suggested.category.DISPLAY_SETTINGS";
|
|
||||||
static final String FONT_SIZE_KEY = "font_size";
|
static final String FONT_SIZE_KEY = "font_size";
|
||||||
static final String DISPLAY_SIZE_KEY = "display_size";
|
static final String DISPLAY_SIZE_KEY = "display_size";
|
||||||
static final String BOLD_TEXT_KEY = "toggle_force_bold_text";
|
static final String BOLD_TEXT_KEY = "toggle_force_bold_text";
|
||||||
@@ -179,10 +177,8 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
|
|||||||
new TextReadingResetController(context, RESET_KEY,
|
new TextReadingResetController(context, RESET_KEY,
|
||||||
v -> showDialog(DialogEnums.DIALOG_RESET_SETTINGS));
|
v -> showDialog(DialogEnums.DIALOG_RESET_SETTINGS));
|
||||||
resetController.setEntryPoint(mEntryPoint);
|
resetController.setEntryPoint(mEntryPoint);
|
||||||
|
resetController.setVisible(!WizardManagerHelper.isAnySetupWizard(getIntent()));
|
||||||
controllers.add(resetController);
|
controllers.add(resetController);
|
||||||
if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
|
|
||||||
resetController.setSetupWizardStyle();
|
|
||||||
}
|
|
||||||
|
|
||||||
return controllers;
|
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
|
@VisibleForTesting
|
||||||
DisplaySizeData createDisplaySizeData(Context context) {
|
DisplaySizeData createDisplaySizeData(Context context) {
|
||||||
return new DisplaySizeData(context);
|
return new DisplaySizeData(context);
|
||||||
@@ -242,14 +245,7 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Intent intent = getIntent();
|
mEntryPoint = isCallingFromAnythingElseEntryPoint()
|
||||||
if (intent == null) {
|
|
||||||
mEntryPoint = EntryPoint.UNKNOWN_ENTRY;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Set<String> categories = intent.getCategories();
|
|
||||||
mEntryPoint = categories != null && categories.contains(CATEGORY_FOR_ANYTHING_ELSE)
|
|
||||||
? EntryPoint.SUW_ANYTHING_ELSE : EntryPoint.UNKNOWN_ENTRY;
|
? EntryPoint.SUW_ANYTHING_ELSE : EntryPoint.UNKNOWN_ENTRY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
package com.android.settings.accessibility;
|
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.app.settings.SettingsEnums;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -28,9 +32,10 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settingslib.Utils;
|
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;
|
import com.google.android.setupdesign.GlifPreferenceLayout;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link androidx.preference.PreferenceFragmentCompat} that displays the settings page related
|
* A {@link androidx.preference.PreferenceFragmentCompat} that displays the settings page related
|
||||||
* to the text and reading option in the SetupWizard.
|
* 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));
|
icon.setTintList(Utils.getColorAttr(getContext(), android.R.attr.colorPrimary));
|
||||||
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
|
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
|
||||||
/* description= */ null, icon);
|
/* 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
|
@Override
|
||||||
|
@@ -23,7 +23,6 @@ import androidx.annotation.Nullable;
|
|||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint;
|
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.BasePreferenceController;
|
||||||
import com.android.settings.core.instrumentation.SettingsStatsLog;
|
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.
|
* The controller of the reset button in the text and reading options page.
|
||||||
*/
|
*/
|
||||||
class TextReadingResetController extends BasePreferenceController {
|
class TextReadingResetController extends BasePreferenceController {
|
||||||
@ButtonStyle
|
private boolean mIsVisible;
|
||||||
private int mButtonStyle;
|
|
||||||
private final View.OnClickListener mOnResetClickListener;
|
private final View.OnClickListener mOnResetClickListener;
|
||||||
|
|
||||||
@EntryPoint
|
@EntryPoint
|
||||||
@@ -67,11 +65,11 @@ class TextReadingResetController extends BasePreferenceController {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
resetPreference.setSetupWizardStyle(mButtonStyle);
|
setVisible(screen, getPreferenceKey(), mIsVisible);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSetupWizardStyle() {
|
void setVisible(boolean isVisible) {
|
||||||
mButtonStyle = ButtonStyle.SUW;
|
mIsVisible = isVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -20,15 +20,11 @@ import android.content.Context;
|
|||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import androidx.annotation.IntDef;
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceViewHolder;
|
import androidx.preference.PreferenceViewHolder;
|
||||||
|
|
||||||
import com.android.settings.R;
|
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
|
* The preference which is used for resetting the status of all preferences in the display size
|
||||||
* and text page.
|
* and text page.
|
||||||
@@ -36,20 +32,10 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
public class TextReadingResetPreference extends Preference {
|
public class TextReadingResetPreference extends Preference {
|
||||||
private View.OnClickListener mOnResetClickListener;
|
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) {
|
public TextReadingResetPreference(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
|
|
||||||
setSetupWizardStyle(ButtonStyle.DEFAULT);
|
setLayoutResource(R.layout.accessibility_text_reading_reset_button);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -60,13 +46,6 @@ public class TextReadingResetPreference extends Preference {
|
|||||||
view.setOnClickListener(mOnResetClickListener);
|
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) {
|
void setOnResetClickListener(View.OnClickListener resetClickListener) {
|
||||||
mOnResetClickListener = resetClickListener;
|
mOnResetClickListener = resetClickListener;
|
||||||
}
|
}
|
||||||
|
@@ -20,6 +20,7 @@ import static com.android.settings.accessibility.TextReadingPreferenceFragment.R
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
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.doReturn;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
@@ -27,11 +28,13 @@ import static org.mockito.Mockito.verify;
|
|||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
|
import androidx.fragment.app.FragmentActivity;
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settingslib.widget.LayoutPreference;
|
import com.android.settingslib.widget.LayoutPreference;
|
||||||
|
|
||||||
|
import com.google.android.setupcompat.template.FooterBarMixin;
|
||||||
import com.google.android.setupdesign.GlifPreferenceLayout;
|
import com.google.android.setupdesign.GlifPreferenceLayout;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -50,8 +53,16 @@ public class TextReadingPreferenceFragmentForSetupWizardTest {
|
|||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public final MockitoRule mMockito = MockitoJUnit.rule();
|
public final MockitoRule mMockito = MockitoJUnit.rule();
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private GlifPreferenceLayout mGlifLayoutView;
|
private GlifPreferenceLayout mGlifLayoutView;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private FooterBarMixin mFooterBarMixin;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private FragmentActivity mActivity;
|
||||||
|
|
||||||
@Spy
|
@Spy
|
||||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||||
private TextReadingPreferenceFragmentForSetupWizard mFragment;
|
private TextReadingPreferenceFragmentForSetupWizard mFragment;
|
||||||
@@ -61,13 +72,14 @@ public class TextReadingPreferenceFragmentForSetupWizardTest {
|
|||||||
mFragment = spy(new TextReadingPreferenceFragmentForSetupWizard());
|
mFragment = spy(new TextReadingPreferenceFragmentForSetupWizard());
|
||||||
final LayoutPreference resetPreference =
|
final LayoutPreference resetPreference =
|
||||||
new LayoutPreference(mContext, R.layout.accessibility_text_reading_reset_button);
|
new LayoutPreference(mContext, R.layout.accessibility_text_reading_reset_button);
|
||||||
|
doReturn(mContext).when(mFragment).getContext();
|
||||||
doReturn(resetPreference).when(mFragment).findPreference(RESET_KEY);
|
doReturn(resetPreference).when(mFragment).findPreference(RESET_KEY);
|
||||||
|
doReturn(mFooterBarMixin).when(mGlifLayoutView).getMixin(FooterBarMixin.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setHeaderText_onViewCreated_verifyAction() {
|
public void setHeaderText_onViewCreated_verifyAction() {
|
||||||
final String title = "title";
|
final String title = "title";
|
||||||
doReturn(mContext).when(mFragment).getContext();
|
|
||||||
doReturn(title).when(mContext).getString(
|
doReturn(title).when(mContext).getString(
|
||||||
R.string.accessibility_text_reading_options_title);
|
R.string.accessibility_text_reading_options_title);
|
||||||
|
|
||||||
@@ -86,4 +98,21 @@ public class TextReadingPreferenceFragmentForSetupWizardTest {
|
|||||||
public void getHelpResource_shouldNotHaveHelpResource() {
|
public void getHelpResource_shouldNotHaveHelpResource() {
|
||||||
assertThat(mFragment.getHelpResource()).isEqualTo(0);
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings.accessibility;
|
package com.android.settings.accessibility;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
@@ -70,4 +72,20 @@ public class TextReadingResetControllerTest {
|
|||||||
|
|
||||||
verify(mResetPreference).setOnResetClickListener(any(View.OnClickListener.class));
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user