From 042c8c73281ac4a4a3f85b8f370fc2c4ec5d9991 Mon Sep 17 00:00:00 2001 From: Roy Chou Date: Thu, 18 Apr 2024 16:34:26 +0000 Subject: [PATCH] feat(brightness suw): add brightness preferences in suw Add brightness level and auto brightness preference in accessibility_settings_for_setup_wizard.xml. Since the flagging has not be supported yet for non-Manifest resources, for now we add the preferences by default, and update the preferece availablity status in each preference controllers based on the flag. Bug: 311093618 Flag: ACONFIG com.android.settings.accessibility.add_brightness_settings_in_suw DEVELOPMENT Test: manually atest AccessibilitySettingsForSetupWizardTest atest AutoBrightnessPreferenceFragmentForSetupWizardTest atest AutoBrightnessPreferenceControllerTest atest BrightnessLevelPreferenceControllerTest Change-Id: I350d99138bdd14bf28828a39e42f707b5b1066c1 --- .../accessibility/accessibility_flags.aconfig | 7 ++ color-check-baseline.xml | 44 +++++++++ res/drawable/ic_brightness_auto.xml | 25 +++++ res/drawable/ic_brightness_medium.xml | 25 +++++ res/drawable/ic_suw_brightness_auto.xml | 26 +++++ res/drawable/ic_suw_brightness_level.xml | 26 +++++ res/values/strings.xml | 4 + ...ccessibility_settings_for_setup_wizard.xml | 16 ++++ res/xml/display_settings.xml | 4 +- .../AccessibilitySettingsForSetupWizard.java | 20 ++++ ...tnessPreferenceFragmentForSetupWizard.java | 81 ++++++++++++++++ .../core/gateway/SettingsGateway.java | 2 + .../AutoBrightnessPreferenceController.java | 19 +++- .../BrightnessLevelPreferenceController.java | 33 ++++--- ...cessibilitySettingsForSetupWizardTest.java | 23 ++++- ...sPreferenceFragmentForSetupWizardTest.java | 95 +++++++++++++++++++ ...utoBrightnessPreferenceControllerTest.java | 32 ++++++- ...ightnessLevelPreferenceControllerTest.java | 30 +++++- .../settings/testutils/BatteryTestUtils.java | 2 + 19 files changed, 490 insertions(+), 24 deletions(-) create mode 100644 res/drawable/ic_brightness_auto.xml create mode 100644 res/drawable/ic_brightness_medium.xml create mode 100644 res/drawable/ic_suw_brightness_auto.xml create mode 100644 res/drawable/ic_suw_brightness_level.xml create mode 100644 src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizard.java create mode 100644 tests/robotests/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizardTest.java diff --git a/aconfig/accessibility/accessibility_flags.aconfig b/aconfig/accessibility/accessibility_flags.aconfig index c9e1ece1b3a..2c92547474d 100644 --- a/aconfig/accessibility/accessibility_flags.aconfig +++ b/aconfig/accessibility/accessibility_flags.aconfig @@ -3,6 +3,13 @@ container: "system_ext" # NOTE: Keep alphabetized to help limit merge conflicts from multiple simultaneous editors. +flag { + name: "add_brightness_settings_in_suw" + namespace: "accessibility" + description: "Whether to add brightness preference in SUW Vision Settings" + bug: "332974327" +} + flag { name: "edit_shortcuts_in_full_screen" namespace: "accessibility" diff --git a/color-check-baseline.xml b/color-check-baseline.xml index ecc795ee4c6..bd90b981ff5 100644 --- a/color-check-baseline.xml +++ b/color-check-baseline.xml @@ -1,6 +1,18 @@ + + + + + + + + + + + + + + + + diff --git a/res/drawable/ic_brightness_medium.xml b/res/drawable/ic_brightness_medium.xml new file mode 100644 index 00000000000..3e778857127 --- /dev/null +++ b/res/drawable/ic_brightness_medium.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/res/drawable/ic_suw_brightness_auto.xml b/res/drawable/ic_suw_brightness_auto.xml new file mode 100644 index 00000000000..a4221c540d1 --- /dev/null +++ b/res/drawable/ic_suw_brightness_auto.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/res/drawable/ic_suw_brightness_level.xml b/res/drawable/ic_suw_brightness_level.xml new file mode 100644 index 00000000000..57bd1883849 --- /dev/null +++ b/res/drawable/ic_suw_brightness_level.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index e14a1073451..382f9eb032c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2730,6 +2730,10 @@ Adaptive + + brightness + + auto_brightness_entry Brightness level diff --git a/res/xml/accessibility_settings_for_setup_wizard.xml b/res/xml/accessibility_settings_for_setup_wizard.xml index 0926d2d3008..a69dc26ce3f 100644 --- a/res/xml/accessibility_settings_for_setup_wizard.xml +++ b/res/xml/accessibility_settings_for_setup_wizard.xml @@ -29,6 +29,22 @@ settings:keywords="text_reading_options" settings:controller="com.android.settings.accessibility.TextReadingFragmentForSuwController"/> + + + + createPreferenceControllers(Context context) { + final List controllers = new ArrayList<>(); + BrightnessLevelPreferenceController brightnessLevelPreferenceController = + new BrightnessLevelPreferenceController(context, getSettingsLifecycle()); + brightnessLevelPreferenceController.setInSetupWizard(true); + controllers.add(brightnessLevelPreferenceController); + String autoBrightnessKey = context.getString(R.string.preference_key_auto_brightness); + AutoBrightnessPreferenceController autoBrightnessPreferenceController = + new AutoBrightnessPreferenceController(context, autoBrightnessKey); + autoBrightnessPreferenceController.setInSetupWizard(true); + controllers.add(autoBrightnessPreferenceController); + return controllers; + } + /** * Returns accessibility service info by given package name and service name. * diff --git a/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizard.java new file mode 100644 index 00000000000..ad1ae96b03b --- /dev/null +++ b/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizard.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2024 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. + */ + +package com.android.settings.accessibility; + +import static android.app.Activity.RESULT_CANCELED; + +import android.app.settings.SettingsEnums; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.android.settings.R; +import com.android.settings.display.AutoBrightnessSettings; +import com.android.settingslib.Utils; + +import com.google.android.setupcompat.template.FooterBarMixin; +import com.google.android.setupdesign.GlifPreferenceLayout; + +/** + * Fragment for adaptive brightness settings in the SetupWizard. + */ +public class AutoBrightnessPreferenceFragmentForSetupWizard extends AutoBrightnessSettings { + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + if (view instanceof GlifPreferenceLayout) { + final GlifPreferenceLayout layout = (GlifPreferenceLayout) view; + final String title = getContext().getString( + R.string.auto_brightness_title); + final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility); + icon.setTintList(Utils.getColorAttr(getContext(), android.R.attr.colorPrimary)); + AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title, + /* description= */ null, icon); + + final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class); + AccessibilitySetupWizardUtils.setPrimaryButton(getContext(), mixin, R.string.done, + () -> { + setResult(RESULT_CANCELED); + finish(); + }); + } + } + + @NonNull + @Override + public RecyclerView onCreateRecyclerView(@NonNull LayoutInflater inflater, + @NonNull ViewGroup parent, @Nullable Bundle savedInstanceState) { + if (parent instanceof GlifPreferenceLayout) { + final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent; + return layout.onCreateRecyclerView(inflater, parent, savedInstanceState); + } + return super.onCreateRecyclerView(inflater, parent, savedInstanceState); + } + + @Override + public int getMetricsCategory() { + return SettingsEnums.SUW_ACCESSIBILITY_AUTO_BRIGHTNESS; + } +} diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index bee1da7af80..9176b81dd9a 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -28,6 +28,7 @@ import com.android.settings.accessibility.AccessibilityDetailsSettingsFragment; import com.android.settings.accessibility.AccessibilityHearingAidsFragment; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard; +import com.android.settings.accessibility.AutoBrightnessPreferenceFragmentForSetupWizard; import com.android.settings.accessibility.CaptioningPropertiesFragment; import com.android.settings.accessibility.ColorAndMotionFragment; import com.android.settings.accessibility.ColorContrastFragment; @@ -258,6 +259,7 @@ public class SettingsGateway { EditShortcutsPreferenceFragment.class.getName(), TextReadingPreferenceFragment.class.getName(), TextReadingPreferenceFragmentForSetupWizard.class.getName(), + AutoBrightnessPreferenceFragmentForSetupWizard.class.getName(), CaptioningPropertiesFragment.class.getName(), ToggleDaltonizerPreferenceFragment.class.getName(), ToggleColorInversionPreferenceFragment.class.getName(), diff --git a/src/com/android/settings/display/AutoBrightnessPreferenceController.java b/src/com/android/settings/display/AutoBrightnessPreferenceController.java index 3f9be2fd6cf..3014f62b0a6 100644 --- a/src/com/android/settings/display/AutoBrightnessPreferenceController.java +++ b/src/com/android/settings/display/AutoBrightnessPreferenceController.java @@ -25,6 +25,7 @@ import android.provider.Settings; import androidx.preference.Preference; import com.android.settings.R; +import com.android.settings.accessibility.Flags; import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.PrimarySwitchPreference; @@ -33,10 +34,16 @@ public class AutoBrightnessPreferenceController extends TogglePreferenceControll private final String SYSTEM_KEY = SCREEN_BRIGHTNESS_MODE; private final int DEFAULT_VALUE = SCREEN_BRIGHTNESS_MODE_MANUAL; + private boolean mInSetupWizard; + public AutoBrightnessPreferenceController(Context context, String key) { super(context, key); } + public void setInSetupWizard(boolean inSetupWizard) { + mInSetupWizard = inSetupWizard; + } + @Override public boolean isChecked() { return Settings.System.getInt(mContext.getContentResolver(), @@ -53,10 +60,14 @@ public class AutoBrightnessPreferenceController extends TogglePreferenceControll @Override @AvailabilityStatus public int getAvailabilityStatus() { - return mContext.getResources().getBoolean( - com.android.internal.R.bool.config_automatic_brightness_available) - ? AVAILABLE_UNSEARCHABLE - : UNSUPPORTED_ON_DEVICE; + if (!mContext.getResources().getBoolean( + com.android.internal.R.bool.config_automatic_brightness_available)) { + return UNSUPPORTED_ON_DEVICE; + } + if (mInSetupWizard && !Flags.addBrightnessSettingsInSuw()) { + return CONDITIONALLY_UNAVAILABLE; + } + return AVAILABLE_UNSEARCHABLE; } @Override diff --git a/src/com/android/settings/display/BrightnessLevelPreferenceController.java b/src/com/android/settings/display/BrightnessLevelPreferenceController.java index 49b8da3d2e3..a32c965cb29 100644 --- a/src/com/android/settings/display/BrightnessLevelPreferenceController.java +++ b/src/com/android/settings/display/BrightnessLevelPreferenceController.java @@ -20,6 +20,7 @@ import static com.android.settingslib.display.BrightnessUtils.GAMMA_SPACE_MAX; import static com.android.settingslib.display.BrightnessUtils.GAMMA_SPACE_MIN; import static com.android.settingslib.display.BrightnessUtils.convertLinearToGammaFloat; +import android.annotation.Nullable; import android.app.ActivityOptions; import android.content.ContentResolver; import android.content.Context; @@ -39,10 +40,12 @@ import android.text.TextUtils; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; +import com.android.settings.R; import com.android.settings.Utils; +import com.android.settings.accessibility.Flags; +import com.android.settings.core.BasePreferenceController; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.SettingsBaseActivity; -import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; @@ -51,17 +54,18 @@ import com.android.settingslib.transition.SettingsTransitionHelper; import java.text.NumberFormat; -public class BrightnessLevelPreferenceController extends AbstractPreferenceController implements +public class BrightnessLevelPreferenceController extends BasePreferenceController implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop { private static final String TAG = "BrightnessPrefCtrl"; - private static final String KEY_BRIGHTNESS = "brightness"; + private static final Uri BRIGHTNESS_ADJ_URI; private final ContentResolver mContentResolver; private final Handler mHandler = new Handler(Looper.getMainLooper()); private final DisplayManager mDisplayManager; - + @Nullable private Preference mPreference; + private boolean mInSetupWizard; static { BRIGHTNESS_ADJ_URI = System.getUriFor(System.SCREEN_AUTO_BRIGHTNESS_ADJ); @@ -90,9 +94,12 @@ public class BrightnessLevelPreferenceController extends AbstractPreferenceContr } }; - public BrightnessLevelPreferenceController(Context context, Lifecycle lifecycle) { - super(context); + this(context, context.getString(R.string.preference_key_brightness_level), lifecycle); + } + + private BrightnessLevelPreferenceController(Context context, String key, Lifecycle lifecycle) { + super(context, key); mDisplayManager = context.getSystemService(DisplayManager.class); if (lifecycle != null) { @@ -101,20 +108,22 @@ public class BrightnessLevelPreferenceController extends AbstractPreferenceContr mContentResolver = mContext.getContentResolver(); } - @Override - public boolean isAvailable() { - return true; + public void setInSetupWizard(boolean inSetupWizard) { + mInSetupWizard = inSetupWizard; } @Override - public String getPreferenceKey() { - return KEY_BRIGHTNESS; + public int getAvailabilityStatus() { + if (mInSetupWizard && !Flags.addBrightnessSettingsInSuw()) { + return CONDITIONALLY_UNAVAILABLE; + } + return AVAILABLE; } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); - mPreference = screen.findPreference(KEY_BRIGHTNESS); + mPreference = screen.findPreference(getPreferenceKey()); } @Override diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardTest.java index 78c88803abc..2ae598418ce 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardTest.java @@ -23,6 +23,7 @@ import static com.android.settings.accessibility.AccessibilitySettingsForSetupWi import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; @@ -45,7 +46,10 @@ import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; import com.android.settings.R; +import com.android.settings.display.AutoBrightnessPreferenceController; +import com.android.settings.display.BrightnessLevelPreferenceController; import com.android.settingslib.RestrictedPreference; +import com.android.settingslib.core.AbstractPreferenceController; import com.google.android.setupcompat.template.FooterBarMixin; import com.google.android.setupdesign.GlifPreferenceLayout; @@ -88,7 +92,7 @@ public class AccessibilitySettingsForSetupWizardTest { private GlifPreferenceLayout mGlifLayoutView; @Mock private FooterBarMixin mFooterBarMixin; - private AccessibilitySettingsForSetupWizard mFragment; + private TestAccessibilitySettingsForSetupWizard mFragment; @Before public void setUp() { @@ -141,6 +145,19 @@ public class AccessibilitySettingsForSetupWizardTest { assertThat(mFragment.mSelectToSpeakPreference.getKey()).isNull(); } + @Test + public void createPreferenceControllers_brightnessPreferencesControllersAreCreated() { + mFragment.onAttach(mContext); + + List controllers = + mFragment.createPreferenceControllers(mContext); + + assertTrue(controllers.stream().anyMatch( + controller -> controller instanceof BrightnessLevelPreferenceController)); + assertTrue(controllers.stream().anyMatch( + controller -> controller instanceof AutoBrightnessPreferenceController)); + } + private void addEnabledServiceInfo(ComponentName componentName, boolean isAccessibilityTool) { final AccessibilityServiceInfo a11yServiceInfo = mock(AccessibilityServiceInfo.class); when(a11yServiceInfo.getComponentName()).thenReturn(componentName); @@ -170,12 +187,14 @@ public class AccessibilitySettingsForSetupWizardTest { private final Context mContext; private final PreferenceManager mPreferenceManager; + final PreferenceScreen mPreferenceScreen; TestAccessibilitySettingsForSetupWizard(Context context) { super(); mContext = context; mPreferenceManager = new PreferenceManager(context); - mPreferenceManager.setPreferences(mPreferenceManager.createPreferenceScreen(context)); + mPreferenceScreen = spy(mPreferenceManager.createPreferenceScreen(context)); + mPreferenceManager.setPreferences(mPreferenceScreen); mDisplayMagnificationPreference = new Preference(context); mScreenReaderPreference = new RestrictedPreference(context); mSelectToSpeakPreference = new RestrictedPreference(context); diff --git a/tests/robotests/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizardTest.java b/tests/robotests/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizardTest.java new file mode 100644 index 00000000000..1e6e068cae6 --- /dev/null +++ b/tests/robotests/src/com/android/settings/accessibility/AutoBrightnessPreferenceFragmentForSetupWizardTest.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2024 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. + */ + +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 androidx.lifecycle.LifecycleOwner; +import androidx.test.core.app.ApplicationProvider; + +import com.android.settings.R; + +import com.google.android.setupcompat.template.FooterBarMixin; +import com.google.android.setupdesign.GlifPreferenceLayout; + +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(); + + @Spy + private final Context mContext = ApplicationProvider.getApplicationContext(); + @Mock + private GlifPreferenceLayout mGlifLayoutView; + @Mock + private FooterBarMixin mFooterBarMixin; + private AutoBrightnessPreferenceFragmentForSetupWizard mFragment; + + @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); + } + + @Test + public void setHeaderText_onViewCreated_verifyAction() { + final String title = "title"; + doReturn(title).when(mContext).getString(R.string.auto_brightness_title); + + mFragment.onViewCreated(mGlifLayoutView, null); + + verify(mGlifLayoutView).setHeaderText(title); + } + + @Test + public void getMetricsCategory_returnsCorrectCategory() { + assertThat(mFragment.getMetricsCategory()).isEqualTo( + SettingsEnums.SUW_ACCESSIBILITY_AUTO_BRIGHTNESS); + } + + @Test + public void onViewCreated_verifyAction() { + mFragment.onViewCreated(mGlifLayoutView, null); + + verify(mFooterBarMixin).setPrimaryButton(any()); + } +} diff --git a/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java index 02291731634..13cd86d5a2a 100644 --- a/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java @@ -21,18 +21,24 @@ import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL; import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE; +import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE; import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; import static com.google.common.truth.Truth.assertThat; import android.content.ContentResolver; import android.content.Context; +import android.platform.test.annotations.DisableFlags; +import android.platform.test.annotations.EnableFlags; +import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; import com.android.settings.R; +import com.android.settings.accessibility.Flags; import com.android.settings.testutils.shadow.SettingsShadowResources; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; @@ -44,6 +50,9 @@ import org.robolectric.annotation.Config; @Config(shadows = {SettingsShadowResources.class}) public class AutoBrightnessPreferenceControllerTest { + @Rule + public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); + private static final String PREFERENCE_KEY = "auto_brightness"; private Context mContext; @@ -121,13 +130,34 @@ public class AutoBrightnessPreferenceControllerTest { } @Test - public void getAvailabilityStatus_configTrueSet_shouldReturnAvailableUnsearchable() { + public void getAvailabilityStatusNotInSUW_configTrueSet_shouldReturnAvailableUnsearchable() { SettingsShadowResources.overrideResource( com.android.internal.R.bool.config_automatic_brightness_available, true); assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE_UNSEARCHABLE); } + @Test + @EnableFlags(Flags.FLAG_ADD_BRIGHTNESS_SETTINGS_IN_SUW) + public void getAvailabilityStatusInSUW_configTrueAndFlagOn_shouldReturnAvailableUnsearchable() { + SettingsShadowResources.overrideResource( + com.android.internal.R.bool.config_automatic_brightness_available, true); + mController.setInSetupWizard(true); + + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE_UNSEARCHABLE); + } + + @Test + @DisableFlags(Flags.FLAG_ADD_BRIGHTNESS_SETTINGS_IN_SUW) + public void + getAvailabilityStatusInSUW_configTrueAndFlagOff_shouldReturnConditionallyUnavailable() { + SettingsShadowResources.overrideResource( + com.android.internal.R.bool.config_automatic_brightness_available, true); + mController.setInSetupWizard(true); + + assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE); + } + @Test public void getAvailabilityStatus_configFalseSet_shouldReturnUnsupportedOnDevice() { SettingsShadowResources.overrideResource( diff --git a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java index bbc9cf32b03..009ca95e4d3 100644 --- a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java @@ -33,16 +33,22 @@ import android.content.Context; import android.content.Intent; import android.hardware.display.BrightnessInfo; import android.os.PowerManager; +import android.platform.test.annotations.DisableFlags; +import android.platform.test.annotations.EnableFlags; +import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings.System; import android.view.Display; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; +import com.android.settings.R; +import com.android.settings.accessibility.Flags; import com.android.settings.core.SettingsBaseActivity; import com.android.settingslib.transition.SettingsTransitionHelper; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -58,6 +64,9 @@ import org.robolectric.shadows.ShadowContentResolver; @RunWith(RobolectricTestRunner.class) public class BrightnessLevelPreferenceControllerTest { + @Rule + public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); + @Mock private PowerManager mPowerManager; @Mock @@ -90,10 +99,24 @@ public class BrightnessLevelPreferenceControllerTest { } @Test - public void isAvailable_shouldAlwaysReturnTrue() { + public void isAvailable_shouldAlwaysReturnTrueWhenNotInSetupWizard() { assertThat(mController.isAvailable()).isTrue(); } + @Test + @EnableFlags(Flags.FLAG_ADD_BRIGHTNESS_SETTINGS_IN_SUW) + public void isAvailable_inSetupWizardAndFlagOn_shouldReturnTrue() { + mController.setInSetupWizard(true); + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + @DisableFlags(Flags.FLAG_ADD_BRIGHTNESS_SETTINGS_IN_SUW) + public void isAvailable_inSetupWizardAndFlagOff_shouldReturnFalse() { + mController.setInSetupWizard(true); + assertThat(mController.isAvailable()).isFalse(); + } + @Test public void onStart_shouldRegisterObserver() { BrightnessLevelPreferenceController controller = @@ -169,13 +192,14 @@ public class BrightnessLevelPreferenceControllerTest { final BrightnessLevelPreferenceController controller = new BrightnessLevelPreferenceController(activity, null); final ShadowActivity shadowActivity = shadowOf(activity); - when(mPreference.getKey()).thenReturn("brightness"); + + String preferenceKey = mContext.getString(R.string.preference_key_brightness_level); + when(mPreference.getKey()).thenReturn(preferenceKey); controller.handlePreferenceTreeClick(mPreference); final Intent intent = shadowActivity.getNextStartedActivity(); assertThat(intent.getIntExtra(SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE, 0)) .isEqualTo(SettingsTransitionHelper.TransitionType.TRANSITION_NONE); - } } diff --git a/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java b/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java index 4bddcd1b847..915231f2573 100644 --- a/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java +++ b/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java @@ -228,6 +228,8 @@ public class BatteryTestUtils { /** Create a power anomaly event proto of adaptive brightness. */ public static PowerAnomalyEvent createAdaptiveBrightnessAnomalyEvent(boolean changeSettings) { + // TODO: migrate "auto_brightness_entry" to use R.string.preference_key_auto_brightness + // if we can access the Context here. (b/338314718) WarningBannerInfo.Builder warningBannerInfoBuilder = WarningBannerInfo.newBuilder() .setMainButtonDestination(DisplaySettings.class.getName())