From 617458b07c91d59c24e73c7c413c58467e437c7e Mon Sep 17 00:00:00 2001 From: Yi-Ling Chuang Date: Wed, 27 Nov 2019 16:09:34 +0800 Subject: [PATCH 1/2] Make all TogglePreferenceController slice-able. All the descendants of TogglePreferenceController are now slice-able by default, where every controller can still disable it by overriding this value. Though all of them are now slice-able, doesn't necessarily means they are exposed publicly as we set the default value of isPublicSlice() to false. For those that want to be public ones will have to override this value. Bug: 141088937 Test: robotests Change-Id: I2ea529c11f0177cd6c55754b632cd1fea1dcc48f --- .../settings/core/TogglePreferenceController.java | 9 +++++++++ .../settings/core/TogglePreferenceControllerTest.java | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/com/android/settings/core/TogglePreferenceController.java b/src/com/android/settings/core/TogglePreferenceController.java index 165d7eb1305..7abe6e09fca 100644 --- a/src/com/android/settings/core/TogglePreferenceController.java +++ b/src/com/android/settings/core/TogglePreferenceController.java @@ -70,4 +70,13 @@ public abstract class TogglePreferenceController extends BasePreferenceControlle return SliceData.SliceType.SWITCH; } + @Override + public boolean isSliceable() { + return true; + } + + @Override + public boolean isPublicSlice() { + return false; + } } \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/core/TogglePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/core/TogglePreferenceControllerTest.java index 7cda34a16ad..541f0c412ba 100644 --- a/tests/robotests/src/com/android/settings/core/TogglePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/core/TogglePreferenceControllerTest.java @@ -90,6 +90,16 @@ public class TogglePreferenceControllerTest { SliceData.SliceType.SWITCH); } + @Test + public void isSliceable_returnTrue() { + assertThat(mToggleController.isSliceable()).isTrue(); + } + + @Test + public void isPublicSlice_returnFalse() { + assertThat(mToggleController.isPublicSlice()).isFalse(); + } + private static class FakeToggle extends TogglePreferenceController { private boolean checkedFlag; From 31719321af00d0d75ddc5c346741f442b8c2cd47 Mon Sep 17 00:00:00 2001 From: Yi-Ling Chuang Date: Wed, 27 Nov 2019 14:25:56 +0800 Subject: [PATCH 2/2] Make some display related slices public. Only PreferenceControllers with isPublicSlice() set to true are exposed to other apps. Others will be Settings only. Bug: 141088937 Test: robotests Change-Id: I2a36da4ac4bb14a4d2ac7b89ab2bb3ebf8e655f7 --- ...aptiveSleepDetailPreferenceController.java | 2 +- ...ntDisplayAlwaysOnPreferenceController.java | 5 + ...playNotificationsPreferenceController.java | 5 + ...oBrightnessDetailPreferenceController.java | 2 +- .../AutoRotatePreferenceController.java | 5 + ...DisplayActivationPreferenceController.java | 5 + ...tDisplayIntensityPreferenceController.java | 5 + ...veSleepDetailPreferenceControllerTest.java | 5 + ...AdaptiveSleepPreferenceControllerTest.java | 4 +- ...splayAlwaysOnPreferenceControllerTest.java | 5 + ...NotificationsPreferenceControllerTest.java | 5 + ...ghtnessDetailPreferenceControllerTest.java | 5 + .../AutoRotatePreferenceControllerTest.java | 6 +- ...layActivationPreferenceControllerTest.java | 10 +- ...playIntensityPreferenceControllerTest.java | 142 +++++++++--------- 15 files changed, 137 insertions(+), 74 deletions(-) diff --git a/src/com/android/settings/display/AdaptiveSleepDetailPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepDetailPreferenceController.java index 0e2358c806b..d6eabec5a5d 100644 --- a/src/com/android/settings/display/AdaptiveSleepDetailPreferenceController.java +++ b/src/com/android/settings/display/AdaptiveSleepDetailPreferenceController.java @@ -36,7 +36,7 @@ public class AdaptiveSleepDetailPreferenceController extends AdaptiveSleepPrefer } @Override - public boolean isSliceable() { + public boolean isPublicSlice() { return true; } diff --git a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java index a0b1f444bef..6dee5d2675c 100644 --- a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java +++ b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java @@ -55,6 +55,11 @@ public class AmbientDisplayAlwaysOnPreferenceController extends TogglePreference return TextUtils.equals(getPreferenceKey(), "ambient_display_always_on"); } + @Override + public boolean isPublicSlice() { + return true; + } + @Override public boolean isChecked() { return getConfig().alwaysOnEnabled(MY_USER); diff --git a/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java b/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java index daaf7b15f14..e143d73c17a 100644 --- a/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java +++ b/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java @@ -88,6 +88,11 @@ public class AmbientDisplayNotificationsPreferenceController extends return TextUtils.equals(getPreferenceKey(), "ambient_display_notification"); } + @Override + public boolean isPublicSlice() { + return true; + } + private AmbientDisplayConfiguration getAmbientConfig() { if (mConfig == null) { mConfig = new AmbientDisplayConfiguration(mContext); diff --git a/src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java b/src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java index a04ddbf5530..030c5b92f09 100644 --- a/src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java +++ b/src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java @@ -33,7 +33,7 @@ public class AutoBrightnessDetailPreferenceController extends AutoBrightnessPref } @Override - public boolean isSliceable() { + public boolean isPublicSlice() { return true; } } diff --git a/src/com/android/settings/display/AutoRotatePreferenceController.java b/src/com/android/settings/display/AutoRotatePreferenceController.java index f444d8ad61d..202a085e890 100644 --- a/src/com/android/settings/display/AutoRotatePreferenceController.java +++ b/src/com/android/settings/display/AutoRotatePreferenceController.java @@ -81,6 +81,11 @@ public class AutoRotatePreferenceController extends TogglePreferenceController i return TextUtils.equals(getPreferenceKey(), "auto_rotate"); } + @Override + public boolean isPublicSlice() { + return true; + } + @Override public boolean isChecked() { return !RotationPolicy.isRotationLocked(mContext); diff --git a/src/com/android/settings/display/NightDisplayActivationPreferenceController.java b/src/com/android/settings/display/NightDisplayActivationPreferenceController.java index df81ee72f23..c1c477ebbee 100644 --- a/src/com/android/settings/display/NightDisplayActivationPreferenceController.java +++ b/src/com/android/settings/display/NightDisplayActivationPreferenceController.java @@ -63,6 +63,11 @@ public class NightDisplayActivationPreferenceController extends TogglePreference return TextUtils.equals(getPreferenceKey(), "night_display_activated"); } + @Override + public boolean isPublicSlice() { + return true; + } + @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); diff --git a/src/com/android/settings/display/NightDisplayIntensityPreferenceController.java b/src/com/android/settings/display/NightDisplayIntensityPreferenceController.java index c8447cb17c5..02dde406eec 100644 --- a/src/com/android/settings/display/NightDisplayIntensityPreferenceController.java +++ b/src/com/android/settings/display/NightDisplayIntensityPreferenceController.java @@ -50,6 +50,11 @@ public class NightDisplayIntensityPreferenceController extends SliderPreferenceC return TextUtils.equals(getPreferenceKey(), "night_display_temperature"); } + @Override + public boolean isPublicSlice() { + return true; + } + @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); diff --git a/tests/robotests/src/com/android/settings/display/AdaptiveSleepDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AdaptiveSleepDetailPreferenceControllerTest.java index 91a4ed6379b..981942d4681 100644 --- a/tests/robotests/src/com/android/settings/display/AdaptiveSleepDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/AdaptiveSleepDetailPreferenceControllerTest.java @@ -61,6 +61,11 @@ public class AdaptiveSleepDetailPreferenceControllerTest { assertThat(mController.isSliceable()).isTrue(); } + @Test + public void isPublicSlice_returnTrue() { + assertThat(mController.isPublicSlice()).isTrue(); + } + @Test public void getAvailabilityStatus_configTrueSet_shouldReturnAvailable() { SettingsShadowResources.overrideResource(R.bool.config_adaptive_sleep_available, true); diff --git a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java index 9928e6c30d8..295eac5b71f 100644 --- a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java @@ -133,10 +133,10 @@ public class AdaptiveSleepPreferenceControllerTest { } @Test - public void isSliceable_returnsFalse() { + public void isSliceable_returnsTrue() { final AdaptiveSleepPreferenceController controller = new AdaptiveSleepPreferenceController(mContext, "any_key"); - assertThat(controller.isSliceable()).isFalse(); + assertThat(controller.isSliceable()).isTrue(); } @Test diff --git a/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java index 7cd5a232713..1548b422cd8 100644 --- a/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java @@ -128,4 +128,9 @@ public class AmbientDisplayAlwaysOnPreferenceControllerTest { new AmbientDisplayAlwaysOnPreferenceController(mContext, "bad_key"); assertThat(controller.isSliceable()).isFalse(); } + + @Test + public void isPublicSlice_returnTrue() { + assertThat(mController.isPublicSlice()).isTrue(); + } } diff --git a/tests/robotests/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceControllerTest.java index fbfb8a493fb..6caa8bd46d9 100644 --- a/tests/robotests/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceControllerTest.java @@ -171,4 +171,9 @@ public class AmbientDisplayNotificationsPreferenceControllerTest { new AmbientDisplayNotificationsPreferenceController(mContext, "bad_key"); assertThat(controller.isSliceable()).isFalse(); } + + @Test + public void isPublicSlice_returnTrue() { + assertThat(mController.isPublicSlice()).isTrue(); + } } diff --git a/tests/robotests/src/com/android/settings/display/AutoBrightnessDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AutoBrightnessDetailPreferenceControllerTest.java index e76cff6cf68..cdb08f315f0 100644 --- a/tests/robotests/src/com/android/settings/display/AutoBrightnessDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/AutoBrightnessDetailPreferenceControllerTest.java @@ -51,6 +51,11 @@ public class AutoBrightnessDetailPreferenceControllerTest { assertThat(mController.isSliceable()).isTrue(); } + @Test + public void isPublicSlice_returnTrue() { + assertThat(mController.isPublicSlice()).isTrue(); + } + @Test public void getAvailabilityStatus_configTrueSet_shouldReturnAvailable() { SettingsShadowResources.overrideResource( diff --git a/tests/robotests/src/com/android/settings/display/AutoRotatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AutoRotatePreferenceControllerTest.java index a26e0b70ddd..1d175def202 100644 --- a/tests/robotests/src/com/android/settings/display/AutoRotatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/AutoRotatePreferenceControllerTest.java @@ -35,7 +35,6 @@ import com.android.settings.core.BasePreferenceController; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowRotationPolicy; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -153,6 +152,11 @@ public class AutoRotatePreferenceControllerTest { assertThat(controller.isSliceable()).isFalse(); } + @Test + public void isPublicSlice_returnTrue() { + assertThat(mController.isPublicSlice()).isTrue(); + } + private void enableAutoRotationPreference() { when(mPackageManager.hasSystemFeature(anyString())).thenReturn(true); when(mContext.getResources().getBoolean(anyInt())).thenReturn(true); diff --git a/tests/robotests/src/com/android/settings/display/NightDisplayActivationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/NightDisplayActivationPreferenceControllerTest.java index e666d61aeac..bad112a4388 100644 --- a/tests/robotests/src/com/android/settings/display/NightDisplayActivationPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/NightDisplayActivationPreferenceControllerTest.java @@ -15,6 +15,7 @@ package com.android.settings.display; import static com.google.common.truth.Truth.assertThat; + import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.when; @@ -57,7 +58,7 @@ public class NightDisplayActivationPreferenceControllerTest { mPreference = new LayoutPreference(mContext, R.layout.night_display_activation_button); when(mScreen.findPreference(anyString())).thenReturn(mPreference); mPreferenceController = new NightDisplayActivationPreferenceController(mContext, - "night_display_activation"); + "night_display_activation"); mPreferenceController.displayPreference(mScreen); } @@ -83,7 +84,7 @@ public class NightDisplayActivationPreferenceControllerTest { @Test public void isSliceableCorrectKey_returnsTrue() { final NightDisplayActivationPreferenceController controller = - new NightDisplayActivationPreferenceController(mContext,"night_display_activated"); + new NightDisplayActivationPreferenceController(mContext, "night_display_activated"); assertThat(controller.isSliceable()).isTrue(); } @@ -94,6 +95,11 @@ public class NightDisplayActivationPreferenceControllerTest { assertThat(controller.isSliceable()).isFalse(); } + @Test + public void isPublicSlice_returnTrue() { + assertThat(mPreferenceController.isPublicSlice()).isTrue(); + } + @Test public void onClick_activates() { mColorDisplayManager.setNightDisplayActivated(false); diff --git a/tests/robotests/src/com/android/settings/display/NightDisplayIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/NightDisplayIntensityPreferenceControllerTest.java index b9c2abd0193..be9ceaf95bd 100644 --- a/tests/robotests/src/com/android/settings/display/NightDisplayIntensityPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/NightDisplayIntensityPreferenceControllerTest.java @@ -19,7 +19,9 @@ import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.hardware.display.ColorDisplayManager; import android.provider.Settings.Secure; + import com.android.settings.testutils.shadow.SettingsShadowResources; + import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -32,83 +34,89 @@ import org.robolectric.annotation.Config; @Config(shadows = SettingsShadowResources.class) public class NightDisplayIntensityPreferenceControllerTest { - private Context mContext; - private NightDisplayIntensityPreferenceController mPreferenceController; + private Context mContext; + private NightDisplayIntensityPreferenceController mPreferenceController; - @Before - public void setUp() { - mContext = RuntimeEnvironment.application; - mPreferenceController = new NightDisplayIntensityPreferenceController(mContext, - "night_display_temperature"); - } + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mPreferenceController = new NightDisplayIntensityPreferenceController(mContext, + "night_display_temperature"); + } - @After - public void tearDown() { - SettingsShadowResources.reset(); - } + @After + public void tearDown() { + SettingsShadowResources.reset(); + } - @Test - public void isAvailable_configuredAvailable_isActivated_available() { - SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_nightDisplayAvailable, true); - Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_ACTIVATED, 1); - assertThat(mPreferenceController.isAvailable()).isTrue(); - } + @Test + public void isAvailable_configuredAvailable_isActivated_available() { + SettingsShadowResources.overrideResource( + com.android.internal.R.bool.config_nightDisplayAvailable, true); + Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_ACTIVATED, 1); + assertThat(mPreferenceController.isAvailable()).isTrue(); + } - @Test - public void isAvailable_configuredAvailable_isNotActivated_available() { - SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_nightDisplayAvailable, true); - Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_ACTIVATED, 0); - assertThat(mPreferenceController.isAvailable()).isTrue(); - } + @Test + public void isAvailable_configuredAvailable_isNotActivated_available() { + SettingsShadowResources.overrideResource( + com.android.internal.R.bool.config_nightDisplayAvailable, true); + Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_ACTIVATED, 0); + assertThat(mPreferenceController.isAvailable()).isTrue(); + } - @Test - public void isAvailable_configuredUnavailable_unavailable() { - SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_nightDisplayAvailable, false); - assertThat(mPreferenceController.isAvailable()).isFalse(); - } + @Test + public void isAvailable_configuredUnavailable_unavailable() { + SettingsShadowResources.overrideResource( + com.android.internal.R.bool.config_nightDisplayAvailable, false); + assertThat(mPreferenceController.isAvailable()).isFalse(); + } - @Test - public void onPreferenceChange_changesTemperature() { - SettingsShadowResources.overrideResource( - com.android.internal.R.integer.config_nightDisplayColorTemperatureMin, 2950); - SettingsShadowResources.overrideResource( - com.android.internal.R.integer.config_nightDisplayColorTemperatureMax, 3050); - // A slider-adjusted "20" here would be 1/5 from the left / least-intense, i.e. 3030. - mPreferenceController.onPreferenceChange(null, 20); + @Test + public void onPreferenceChange_changesTemperature() { + SettingsShadowResources.overrideResource( + com.android.internal.R.integer.config_nightDisplayColorTemperatureMin, 2950); + SettingsShadowResources.overrideResource( + com.android.internal.R.integer.config_nightDisplayColorTemperatureMax, 3050); + // A slider-adjusted "20" here would be 1/5 from the left / least-intense, i.e. 3030. + mPreferenceController.onPreferenceChange(null, 20); - assertThat( - mContext.getSystemService(ColorDisplayManager.class).getNightDisplayColorTemperature()) - .isEqualTo(3030); - } + assertThat( + mContext.getSystemService( + ColorDisplayManager.class).getNightDisplayColorTemperature()) + .isEqualTo(3030); + } - @Test - public void rangeOfSlider_staysWithinValidRange() { - SettingsShadowResources.overrideResource( - com.android.internal.R.integer.config_nightDisplayColorTemperatureMin, 2950); - SettingsShadowResources.overrideResource( - com.android.internal.R.integer.config_nightDisplayColorTemperatureMax, 3050); + @Test + public void rangeOfSlider_staysWithinValidRange() { + SettingsShadowResources.overrideResource( + com.android.internal.R.integer.config_nightDisplayColorTemperatureMin, 2950); + SettingsShadowResources.overrideResource( + com.android.internal.R.integer.config_nightDisplayColorTemperatureMax, 3050); - assertThat(mPreferenceController.getMax() - mPreferenceController.getMin()) - .isGreaterThan(0); - } + assertThat(mPreferenceController.getMax() - mPreferenceController.getMin()) + .isGreaterThan(0); + } - @Test - public void getMin_alwaysReturnsZero() { - assertThat(mPreferenceController.getMin()).isEqualTo(0); - } + @Test + public void getMin_alwaysReturnsZero() { + assertThat(mPreferenceController.getMin()).isEqualTo(0); + } - @Test - public void isSliceableCorrectKey_returnsTrue() { - assertThat(mPreferenceController.isSliceable()).isTrue(); - } + @Test + public void isSliceableCorrectKey_returnsTrue() { + assertThat(mPreferenceController.isSliceable()).isTrue(); + } - @Test - public void isSliceableIncorrectKey_returnsFalse() { - final NightDisplayIntensityPreferenceController controller = - new NightDisplayIntensityPreferenceController(mContext, "bad_key"); - assertThat(controller.isSliceable()).isFalse(); - } + @Test + public void isSliceableIncorrectKey_returnsFalse() { + final NightDisplayIntensityPreferenceController controller = + new NightDisplayIntensityPreferenceController(mContext, "bad_key"); + assertThat(controller.isSliceable()).isFalse(); + } + + @Test + public void isPublicSlice_returnTrue() { + assertThat(mPreferenceController.isPublicSlice()).isTrue(); + } }