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()); - } }