From e8288512ee87c410f8a972130ebf7cc307085589 Mon Sep 17 00:00:00 2001 From: Roy Chou Date: Wed, 19 Jun 2024 05:05:05 +0000 Subject: [PATCH] chore(brightness suw): adjust auto brightness detail page footer content description Ref to the bug, s2s and talkback pages' footer content descriptions are prefixed with "About XXX" for talkbalk info announcement. Therefore, for auto brightness detail page in SUW, we also prefix "About adaptive brightness" to the footer preference content description, to improve the consistency with other accessiblity feature suw pages. Bug: 347859318 Flag: com.android.settings.accessibility.add_brightness_settings_in_suw Test: manually atest AutoBrightnessPreferenceFragmentForSetupWizardTest Change-Id: Ieda4bcffb4f4e11ea68c961beee5c2fff1b29f2c --- res/values/strings.xml | 3 + ...tnessPreferenceFragmentForSetupWizard.java | 17 +++ ...sPreferenceFragmentForSetupWizardTest.java | 104 +++++++++++------- 3 files changed, 84 insertions(+), 40 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index f92fd2aca84..0711156add1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2753,6 +2753,9 @@ Brightness level Adaptive brightness + + + About adaptive brightness Your screen brightness will automatically adjust to your environment and activities. You can move the slider manually to help adaptive brightness learn your preferences. diff --git a/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizard.java index ad1ae96b03b..19db2668df9 100644 --- a/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizard.java +++ b/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizard.java @@ -27,11 +27,13 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.preference.PreferenceScreen; import androidx.recyclerview.widget.RecyclerView; import com.android.settings.R; import com.android.settings.display.AutoBrightnessSettings; import com.android.settingslib.Utils; +import com.android.settingslib.widget.FooterPreference; import com.google.android.setupcompat.template.FooterBarMixin; import com.google.android.setupdesign.GlifPreferenceLayout; @@ -41,10 +43,14 @@ import com.google.android.setupdesign.GlifPreferenceLayout; */ public class AutoBrightnessPreferenceFragmentForSetupWizard extends AutoBrightnessSettings { + private static final String FOOTER_PREFERENCE_KEY = "auto_brightness_footer"; + @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + updateFooterContentDescription(); + if (view instanceof GlifPreferenceLayout) { final GlifPreferenceLayout layout = (GlifPreferenceLayout) view; final String title = getContext().getString( @@ -78,4 +84,15 @@ public class AutoBrightnessPreferenceFragmentForSetupWizard extends AutoBrightne public int getMetricsCategory() { return SettingsEnums.SUW_ACCESSIBILITY_AUTO_BRIGHTNESS; } + + private void updateFooterContentDescription() { + final PreferenceScreen screen = getPreferenceScreen(); + final FooterPreference footerPreference = screen.findPreference(FOOTER_PREFERENCE_KEY); + if (footerPreference != null) { + String title = getString(R.string.auto_brightness_content_description_title); + final StringBuilder sb = new StringBuilder(); + sb.append(title).append("\n\n").append(footerPreference.getTitle()); + footerPreference.setContentDescription(sb); + } + } } diff --git a/tests/robotests/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizardTest.java b/tests/robotests/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizardTest.java index 1e6e068cae6..c0b9dbd2104 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizardTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizardTest.java @@ -18,66 +18,97 @@ package com.android.settings.accessibility; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - import android.app.settings.SettingsEnums; -import android.content.Context; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; -import androidx.lifecycle.LifecycleOwner; -import androidx.test.core.app.ApplicationProvider; +import androidx.fragment.app.FragmentFactory; +import androidx.fragment.app.testing.FragmentScenario; +import androidx.lifecycle.Lifecycle; +import androidx.preference.Preference; import com.android.settings.R; +import com.android.settingslib.widget.FooterPreference; import com.google.android.setupcompat.template.FooterBarMixin; +import com.google.android.setupdesign.GlifLayout; import com.google.android.setupdesign.GlifPreferenceLayout; +import org.junit.After; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.Spy; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; /** Tests for {@link AutoBrightnessPreferenceFragmentForSetupWizard}. */ @RunWith(RobolectricTestRunner.class) public class AutoBrightnessPreferenceFragmentForSetupWizardTest { - @Rule - public final MockitoRule mMockito = MockitoJUnit.rule(); + // Same as AutoBrightnessPreferenceFragmentForSetupWizard#FOOTER_PREFERENCE_KEY + private static final String FOOTER_PREFERENCE_KEY = "auto_brightness_footer"; + + private FragmentScenario mFragmentScenario; - @Spy - private final Context mContext = ApplicationProvider.getApplicationContext(); - @Mock - private GlifPreferenceLayout mGlifLayoutView; - @Mock - private FooterBarMixin mFooterBarMixin; private AutoBrightnessPreferenceFragmentForSetupWizard mFragment; + private GlifLayout mGlifLayout; @Before public void setUp() { - mFragment = spy(new AutoBrightnessPreferenceFragmentForSetupWizard()); - doReturn(mock(LifecycleOwner.class)).when(mFragment).getViewLifecycleOwner(); - doReturn(mContext).when(mFragment).getContext(); - when(mGlifLayoutView.getMixin(eq(FooterBarMixin.class))).thenReturn(mFooterBarMixin); + mFragmentScenario = FragmentScenario + .launch( + AutoBrightnessPreferenceFragmentForSetupWizard.class, + /* fragmentArgs= */ (Bundle) null, + R.style.GlifTheme, + /* factory= */ (FragmentFactory) null) + .moveToState(Lifecycle.State.RESUMED); + mFragmentScenario.onFragment(fragment -> mFragment = fragment); + + View view = mFragment.getView(); + assertThat(view).isInstanceOf(GlifPreferenceLayout.class); + mGlifLayout = (GlifLayout) view; + } + + @After + public void tearDown() { + mFragmentScenario.close(); } @Test - public void setHeaderText_onViewCreated_verifyAction() { - final String title = "title"; - doReturn(title).when(mContext).getString(R.string.auto_brightness_title); + public void onViewCreated_verifyGlifHerderText() { + assertThat(mGlifLayout.getHeaderText()) + .isEqualTo(mFragment.getString(R.string.auto_brightness_title)); + } - mFragment.onViewCreated(mGlifLayoutView, null); + @Test + public void onViewCreated_verifyGlifFooter() { + FooterBarMixin footerMixin = mGlifLayout.getMixin(FooterBarMixin.class); + assertThat(footerMixin).isNotNull(); - verify(mGlifLayoutView).setHeaderText(title); + Button footerButton = footerMixin.getPrimaryButtonView(); + assertThat(footerButton).isNotNull(); + assertThat(footerButton.getText().toString()).isEqualTo(mFragment.getString(R.string.done)); + + footerButton.performClick(); + assertThat(mFragment.getActivity().isFinishing()).isTrue(); + } + + @Test + public void onViewCreated_verifyFooterPreference() { + Preference pref = mFragment.findPreference(FOOTER_PREFERENCE_KEY); + assertThat(pref).isInstanceOf(FooterPreference.class); + + FooterPreference footerPref = (FooterPreference) pref; + String exactTitle = footerPref.getTitle().toString(); + assertThat(exactTitle).isEqualTo(mFragment.getString(R.string.auto_brightness_description)); + + // Ensure that footer content description has "About XXX" prefix for consistency with other + // accessibility suw pages + String expectedContentDescription = + mFragment.getString(R.string.auto_brightness_content_description_title) + + "\n\n" + exactTitle; + assertThat(footerPref.getContentDescription().toString()) + .isEqualTo(expectedContentDescription); } @Test @@ -85,11 +116,4 @@ public class AutoBrightnessPreferenceFragmentForSetupWizardTest { assertThat(mFragment.getMetricsCategory()).isEqualTo( SettingsEnums.SUW_ACCESSIBILITY_AUTO_BRIGHTNESS); } - - @Test - public void onViewCreated_verifyAction() { - mFragment.onViewCreated(mGlifLayoutView, null); - - verify(mFooterBarMixin).setPrimaryButton(any()); - } }