Merge "chore(brightness suw): adjust auto brightness detail page footer content description" into main
This commit is contained in:
@@ -2786,6 +2786,9 @@
|
|||||||
<string name="brightness">Brightness level</string>
|
<string name="brightness">Brightness level</string>
|
||||||
<!-- Sound & display settings screen, setting option name to enable adaptive brightness [CHAR LIMIT=30] -->
|
<!-- Sound & display settings screen, setting option name to enable adaptive brightness [CHAR LIMIT=30] -->
|
||||||
<string name="auto_brightness_title">Adaptive brightness</string>
|
<string name="auto_brightness_title">Adaptive brightness</string>
|
||||||
|
<!-- Note: The content description title is only applied in adaptive brightness detailed page in setup wizard flow, to make the consistency with other accessibility suw pages. -->
|
||||||
|
<!-- ContentDescription title for adaptive brightness detailed page footer. [CHAR LIMIT=60] -->
|
||||||
|
<string name="auto_brightness_content_description_title">About adaptive brightness</string>
|
||||||
<!-- Description about the feature adaptive brightness -->
|
<!-- Description about the feature adaptive brightness -->
|
||||||
<string name="auto_brightness_description">Your screen brightness will automatically adjust to your environment and activities. You can move the slider manually to help adaptive brightness learn your preferences.</string>
|
<string name="auto_brightness_description">Your screen brightness will automatically adjust to your environment and activities. You can move the slider manually to help adaptive brightness learn your preferences.</string>
|
||||||
<!-- Setting option summary when adaptive brightness is on [CHAR LIMIT=NONE] -->
|
<!-- Setting option summary when adaptive brightness is on [CHAR LIMIT=NONE] -->
|
||||||
|
@@ -27,11 +27,13 @@ import android.view.ViewGroup;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.preference.PreferenceScreen;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.display.AutoBrightnessSettings;
|
import com.android.settings.display.AutoBrightnessSettings;
|
||||||
import com.android.settingslib.Utils;
|
import com.android.settingslib.Utils;
|
||||||
|
import com.android.settingslib.widget.FooterPreference;
|
||||||
|
|
||||||
import com.google.android.setupcompat.template.FooterBarMixin;
|
import com.google.android.setupcompat.template.FooterBarMixin;
|
||||||
import com.google.android.setupdesign.GlifPreferenceLayout;
|
import com.google.android.setupdesign.GlifPreferenceLayout;
|
||||||
@@ -41,10 +43,14 @@ import com.google.android.setupdesign.GlifPreferenceLayout;
|
|||||||
*/
|
*/
|
||||||
public class AutoBrightnessPreferenceFragmentForSetupWizard extends AutoBrightnessSettings {
|
public class AutoBrightnessPreferenceFragmentForSetupWizard extends AutoBrightnessSettings {
|
||||||
|
|
||||||
|
private static final String FOOTER_PREFERENCE_KEY = "auto_brightness_footer";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
|
updateFooterContentDescription();
|
||||||
|
|
||||||
if (view instanceof GlifPreferenceLayout) {
|
if (view instanceof GlifPreferenceLayout) {
|
||||||
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
|
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
|
||||||
final String title = getContext().getString(
|
final String title = getContext().getString(
|
||||||
@@ -78,4 +84,15 @@ public class AutoBrightnessPreferenceFragmentForSetupWizard extends AutoBrightne
|
|||||||
public int getMetricsCategory() {
|
public int getMetricsCategory() {
|
||||||
return SettingsEnums.SUW_ACCESSIBILITY_AUTO_BRIGHTNESS;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -18,66 +18,97 @@ package com.android.settings.accessibility;
|
|||||||
|
|
||||||
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.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.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.fragment.app.FragmentFactory;
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.fragment.app.testing.FragmentScenario;
|
||||||
|
import androidx.lifecycle.Lifecycle;
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settingslib.widget.FooterPreference;
|
||||||
|
|
||||||
import com.google.android.setupcompat.template.FooterBarMixin;
|
import com.google.android.setupcompat.template.FooterBarMixin;
|
||||||
|
import com.google.android.setupdesign.GlifLayout;
|
||||||
import com.google.android.setupdesign.GlifPreferenceLayout;
|
import com.google.android.setupdesign.GlifPreferenceLayout;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
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;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
|
||||||
/** Tests for {@link AutoBrightnessPreferenceFragmentForSetupWizard}. */
|
/** Tests for {@link AutoBrightnessPreferenceFragmentForSetupWizard}. */
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class AutoBrightnessPreferenceFragmentForSetupWizardTest {
|
public class AutoBrightnessPreferenceFragmentForSetupWizardTest {
|
||||||
|
|
||||||
@Rule
|
// Same as AutoBrightnessPreferenceFragmentForSetupWizard#FOOTER_PREFERENCE_KEY
|
||||||
public final MockitoRule mMockito = MockitoJUnit.rule();
|
private static final String FOOTER_PREFERENCE_KEY = "auto_brightness_footer";
|
||||||
|
|
||||||
|
private FragmentScenario<AutoBrightnessPreferenceFragmentForSetupWizard> mFragmentScenario;
|
||||||
|
|
||||||
@Spy
|
|
||||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
|
||||||
@Mock
|
|
||||||
private GlifPreferenceLayout mGlifLayoutView;
|
|
||||||
@Mock
|
|
||||||
private FooterBarMixin mFooterBarMixin;
|
|
||||||
private AutoBrightnessPreferenceFragmentForSetupWizard mFragment;
|
private AutoBrightnessPreferenceFragmentForSetupWizard mFragment;
|
||||||
|
private GlifLayout mGlifLayout;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
mFragment = spy(new AutoBrightnessPreferenceFragmentForSetupWizard());
|
mFragmentScenario = FragmentScenario
|
||||||
doReturn(mock(LifecycleOwner.class)).when(mFragment).getViewLifecycleOwner();
|
.launch(
|
||||||
doReturn(mContext).when(mFragment).getContext();
|
AutoBrightnessPreferenceFragmentForSetupWizard.class,
|
||||||
when(mGlifLayoutView.getMixin(eq(FooterBarMixin.class))).thenReturn(mFooterBarMixin);
|
/* 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
|
@Test
|
||||||
public void setHeaderText_onViewCreated_verifyAction() {
|
public void onViewCreated_verifyGlifHerderText() {
|
||||||
final String title = "title";
|
assertThat(mGlifLayout.getHeaderText())
|
||||||
doReturn(title).when(mContext).getString(R.string.auto_brightness_title);
|
.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
|
@Test
|
||||||
@@ -85,11 +116,4 @@ public class AutoBrightnessPreferenceFragmentForSetupWizardTest {
|
|||||||
assertThat(mFragment.getMetricsCategory()).isEqualTo(
|
assertThat(mFragment.getMetricsCategory()).isEqualTo(
|
||||||
SettingsEnums.SUW_ACCESSIBILITY_AUTO_BRIGHTNESS);
|
SettingsEnums.SUW_ACCESSIBILITY_AUTO_BRIGHTNESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void onViewCreated_verifyAction() {
|
|
||||||
mFragment.onViewCreated(mGlifLayoutView, null);
|
|
||||||
|
|
||||||
verify(mFooterBarMixin).setPrimaryButton(any());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user