Feedback UI DeviceConfig
Use ENABLE_NAS_FEEDBACK flag to decide if showing feedback UI setting
Bug: 175363481
Test: make RunSettingsRoboTests7
Change-Id: I969f9ca0b5d681345c022816e104926953f855dc
diff --git a/src/com/android/settings/notification/AssistantFeedbackPreferenceController.java b/src/com/android/settings/notification/AssistantFeedbackPreferenceController.java
index 1566ae9..491fd8b 100644
--- a/src/com/android/settings/notification/AssistantFeedbackPreferenceController.java
+++ b/src/com/android/settings/notification/AssistantFeedbackPreferenceController.java
@@ -23,11 +23,13 @@
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
+import android.provider.DeviceConfig;
import android.provider.Settings;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
+import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.TogglePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -77,13 +79,15 @@
@Override
public int getAvailabilityStatus() {
- return AVAILABLE;
+ return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.ENABLE_NAS_FEEDBACK, false)
+ ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
public boolean isChecked() {
return Settings.Global.getInt(mContext.getContentResolver(),
- NOTIFICATION_FEEDBACK_ENABLED, OFF) == ON;
+ NOTIFICATION_FEEDBACK_ENABLED, ON) == ON;
}
@Override
diff --git a/tests/robotests/src/com/android/settings/notification/AssistantFeedbackPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/AssistantFeedbackPreferenceControllerTest.java
index 8cfb0e0..9f172a6 100644
--- a/tests/robotests/src/com/android/settings/notification/AssistantFeedbackPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/AssistantFeedbackPreferenceControllerTest.java
@@ -28,12 +28,18 @@
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.provider.DeviceConfig;
import android.provider.Settings;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import androidx.preference.TwoStatePreference;
+import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.shadow.ShadowDeviceConfig;
+
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -42,8 +48,10 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowDeviceConfig.class})
public class AssistantFeedbackPreferenceControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -65,14 +73,48 @@
when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);
}
+ @After
+ public void tearDown() {
+ ShadowDeviceConfig.reset();
+ }
+
@Test
- public void testIsVisible() {
+ public void testIsVisible_DeviceConfigOn() {
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.ENABLE_NAS_FEEDBACK, "true", true);
mController.displayPreference(mScreen);
assertThat(mPreference.isVisible()).isTrue();
}
@Test
+ public void testIsVisible_DeviceConfigOff() {
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.ENABLE_NAS_FEEDBACK, "false", true);
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.isVisible()).isFalse();
+ }
+
+ @Test
+ public void getAvailabilityStatus_DeviceConfigOn_returnAvailable() {
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.ENABLE_NAS_FEEDBACK, "true", true);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(
+ BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_DeviceConfigOff_returnUnavailable() {
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.ENABLE_NAS_FEEDBACK, "false", true);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(
+ BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
public void updateState_preferenceSetCheckedWhenSettingIsOn() {
final TwoStatePreference preference = mock(TwoStatePreference.class);
final Context context = RuntimeEnvironment.application;