diff --git a/res/values/strings.xml b/res/values/strings.xml
index 291a7d5..9e22f9d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4950,6 +4950,8 @@
     <string name="display_category_title">Display</string>
     <!-- Title for the accessibility text options page. [CHAR LIMIT=50] -->
     <string name="accessibility_text_and_display_title">Text and display</string>
+    <!-- Title for the accessibility text options page. [CHAR LIMIT=50] -->
+    <string name="accessibility_turn_screen_darker_title">Turn screen darker</string>
     <!-- Title for the accessibility preference category of interaction control services and settings. [CHAR LIMIT=50] -->
     <string name="interaction_control_category_title">Interaction controls</string>
     <!-- Title for the accessibility tap assistance page. [CHAR LIMIT=50] -->
diff --git a/res/xml/accessibility_text_and_display.xml b/res/xml/accessibility_text_and_display.xml
index 7dce826..bd30e61 100644
--- a/res/xml/accessibility_text_and_display.xml
+++ b/res/xml/accessibility_text_and_display.xml
@@ -21,18 +21,33 @@
     android:persistent="false"
     android:title="@string/accessibility_text_and_display_title">
 
-    <SwitchPreference
-        android:key="toggle_high_text_contrast_preference"
+    <Preference
+        android:fragment="com.android.settings.display.ToggleFontSizePreferenceFragment"
+        android:key="font_size_preference_screen"
         android:persistent="false"
-        android:title="@string/accessibility_toggle_high_text_contrast_preference_title"
-        settings:controller="com.android.settings.accessibility.HighTextContrastPreferenceController"/>
+        android:title="@string/title_font_size"
+        settings:controller="com.android.settings.display.FontSizePreferenceController"
+        settings:searchable="false"/>
+
+    <com.android.settings.display.ScreenZoomPreference
+        android:fragment="com.android.settings.display.ScreenZoomSettings"
+        android:key="accessibility_settings_screen_zoom"
+        android:persistent="false"
+        android:title="@string/screen_zoom_title"
+        settings:searchable="false"/>
 
     <SwitchPreference
-        android:key="dark_ui_mode_accessibility"
+        android:key="toggle_force_bold_text"
         android:persistent="false"
-        android:title="@string/dark_ui_mode"
-        settings:controller="com.android.settings.display.DarkUIPreferenceController"
-        settings:searchable="false"/>
+        android:title="@string/force_bold_text"
+        settings:controller="com.android.settings.accessibility.FontWeightAdjustmentPreferenceController"/>
+
+    <Preference
+        android:fragment="com.android.settings.accessibility.TurnScreenDarkerFragment"
+        android:key="turn_screen_darker_preference_screen"
+        android:persistent="false"
+        android:title="@string/accessibility_turn_screen_darker_title"
+        settings:searchable="true"/>
 
     <Preference
         android:fragment="com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment"
@@ -42,21 +57,11 @@
         android:title="@string/accessibility_display_daltonizer_preference_title"
         settings:controller="com.android.settings.accessibility.DaltonizerPreferenceController"/>
 
-    <Preference
-        android:fragment="com.android.settings.accessibility.ToggleColorInversionPreferenceFragment"
-        android:icon="@drawable/ic_color_inversion"
-        android:key="toggle_inversion_preference"
+    <SwitchPreference
+        android:key="toggle_high_text_contrast_preference"
         android:persistent="false"
-        android:title="@string/accessibility_display_inversion_preference_title"
-        settings:controller="com.android.settings.accessibility.ColorInversionPreferenceController"/>
-
-    <!--TODO(b/170973645): Get icon-->
-    <Preference
-        android:fragment="com.android.settings.accessibility.ToggleReduceBrightColorsPreferenceFragment"
-        android:key="reduce_bright_colors_preference"
-        android:persistent="false"
-        android:title="@string/reduce_bright_colors_preference_title"
-        settings:controller="com.android.settings.accessibility.ReduceBrightColorsPreferenceController"/>
+        android:title="@string/accessibility_toggle_high_text_contrast_preference_title"
+        settings:controller="com.android.settings.accessibility.HighTextContrastPreferenceController"/>
 
     <SwitchPreference
         android:key="toggle_disable_animations"
@@ -64,27 +69,6 @@
         android:title="@string/accessibility_disable_animations"
         settings:controller="com.android.settings.accessibility.DisableAnimationsPreferenceController"/>
 
-    <com.android.settings.display.ScreenZoomPreference
-        android:fragment="com.android.settings.display.ScreenZoomSettings"
-        android:key="accessibility_settings_screen_zoom"
-        android:persistent="false"
-        android:title="@string/screen_zoom_title"
-        settings:searchable="false"/>
-
-    <Preference
-        android:fragment="com.android.settings.display.ToggleFontSizePreferenceFragment"
-        android:key="font_size_preference_screen"
-        android:persistent="false"
-        android:title="@string/title_font_size"
-        settings:controller="com.android.settings.display.FontSizePreferenceController"
-        settings:searchable="false"/>
-
-    <SwitchPreference
-        android:key="toggle_force_bold_text"
-        android:persistent="false"
-        android:title="@string/force_bold_text"
-        settings:controller="com.android.settings.accessibility.FontWeightAdjustmentPreferenceController"/>
-
     <SwitchPreference
         android:key="toggle_large_pointer_icon"
         android:persistent="false"
@@ -94,7 +78,6 @@
     <PreferenceCategory
         android:key="experimental_category"
         android:persistent="false"
-        android:title="@string/experimental_category_title"
-        settings:initialExpandedChildrenCount="1">
+        android:title="@string/experimental_category_title">
     </PreferenceCategory>
 </PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/accessibility_turn_screen_darker.xml b/res/xml/accessibility_turn_screen_darker.xml
new file mode 100644
index 0000000..d87f23b
--- /dev/null
+++ b/res/xml/accessibility_turn_screen_darker.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:key="accessibility_turn_screen_darker"
+    android:persistent="false"
+    android:title="@string/accessibility_turn_screen_darker_title">
+
+    <SwitchPreference
+        android:key="dark_ui_mode_accessibility"
+        android:persistent="false"
+        android:title="@string/dark_ui_mode"
+        settings:controller="com.android.settings.display.DarkUIPreferenceController"
+        settings:searchable="false"/>
+
+    <Preference
+        android:fragment="com.android.settings.accessibility.ToggleColorInversionPreferenceFragment"
+        android:icon="@drawable/ic_color_inversion"
+        android:key="toggle_inversion_preference"
+        android:persistent="false"
+        android:title="@string/accessibility_display_inversion_preference_title"
+        settings:controller="com.android.settings.accessibility.ColorInversionPreferenceController"/>
+
+    <!--TODO(b/170973645): Get icon-->
+    <Preference
+        android:fragment="com.android.settings.accessibility.ToggleReduceBrightColorsPreferenceFragment"
+        android:key="reduce_bright_colors_preference"
+        android:persistent="false"
+        android:title="@string/reduce_bright_colors_preference_title"
+        settings:controller="com.android.settings.accessibility.ReduceBrightColorsPreferenceController"/>
+
+    <Preference
+        android:key="auto_brightness_entry"
+        android:title="@string/auto_brightness_title"
+        android:summary="@string/summary_placeholder"
+        android:fragment="com.android.settings.display.AutoBrightnessSettings"
+        settings:controller="com.android.settings.display.AutoBrightnessPreferenceController"/>
+
+    <com.android.settings.widget.PrimarySwitchPreference
+        android:key="night_display"
+        android:title="@string/night_display_title"
+        android:fragment="com.android.settings.display.NightDisplaySettings"
+        settings:controller="com.android.settings.display.NightDisplayPreferenceController"
+        settings:keywords="@string/keywords_display_night_display"/>
+
+    <PreferenceCategory
+        android:key="experimental_category"
+        android:persistent="false"
+        android:title="@string/experimental_category_title">
+    </PreferenceCategory>
+</PreferenceScreen>
\ No newline at end of file
diff --git a/src/com/android/settings/accessibility/TextAndDisplayFragment.java b/src/com/android/settings/accessibility/TextAndDisplayFragment.java
index b496e3d..e81dded 100644
--- a/src/com/android/settings/accessibility/TextAndDisplayFragment.java
+++ b/src/com/android/settings/accessibility/TextAndDisplayFragment.java
@@ -17,7 +17,6 @@
 package com.android.settings.accessibility;
 
 import android.app.settings.SettingsEnums;
-import android.content.Context;
 import android.hardware.display.ColorDisplayManager;
 import android.os.Bundle;
 import android.provider.Settings;
@@ -28,7 +27,6 @@
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.display.DarkUIPreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.search.SearchIndexable;
 
@@ -42,15 +40,10 @@
 
     // Preferences
     private static final String DISPLAY_DALTONIZER_PREFERENCE_SCREEN = "daltonizer_preference";
-    private static final String TOGGLE_INVERSION_PREFERENCE = "toggle_inversion_preference";
-    private static final String DISPLAY_REDUCE_BRIGHT_COLORS_PREFERENCE_SCREEN =
-            "reduce_bright_colors_preference";
     private static final String TOGGLE_DISABLE_ANIMATIONS = "toggle_disable_animations";
     private static final String TOGGLE_LARGE_POINTER_ICON = "toggle_large_pointer_icon";
 
     private Preference mDisplayDaltonizerPreferenceScreen;
-    private Preference mToggleInversionPreference;
-    private Preference mReduceBrightColorsPreference;
     private SwitchPreference mToggleDisableAnimationsPreference;
     private SwitchPreference mToggleLargePointerIconPreference;
 
@@ -68,12 +61,6 @@
     }
 
     @Override
-    public void onAttach(Context context) {
-        super.onAttach(context);
-        use(DarkUIPreferenceController.class).setParentFragment(this);
-    }
-
-    @Override
     protected int getPreferenceScreenResId() {
         return R.xml.accessibility_text_and_display;
     }
@@ -87,13 +74,6 @@
         // Display color adjustments.
         mDisplayDaltonizerPreferenceScreen = findPreference(DISPLAY_DALTONIZER_PREFERENCE_SCREEN);
 
-        // Display inversion.
-        mToggleInversionPreference = findPreference(TOGGLE_INVERSION_PREFERENCE);
-
-        // Reduce brightness.
-        mReduceBrightColorsPreference =
-                findPreference(DISPLAY_REDUCE_BRIGHT_COLORS_PREFERENCE_SCREEN);
-
         // Disable animation.
         mToggleDisableAnimationsPreference = findPreference(TOGGLE_DISABLE_ANIMATIONS);
 
@@ -110,22 +90,14 @@
         if (ColorDisplayManager.isColorTransformAccelerated(getContext())) {
             mDisplayDaltonizerPreferenceScreen.setSummary(AccessibilityUtil.getSummary(
                     getContext(), Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED));
-            mToggleInversionPreference.setSummary(AccessibilityUtil.getSummary(
-                    getContext(), Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED));
-            mReduceBrightColorsPreference.setSummary(AccessibilityUtil.getSummary(
-                    getContext(), Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED));
             getPreferenceScreen().removePreference(experimentalCategory);
         } else {
             // Move following preferences to experimental category if device don't supports HWC
             // hardware-accelerated color transform.
             getPreferenceScreen().removePreference(mDisplayDaltonizerPreferenceScreen);
-            getPreferenceScreen().removePreference(mToggleInversionPreference);
-            getPreferenceScreen().removePreference(mReduceBrightColorsPreference);
             getPreferenceScreen().removePreference(mToggleDisableAnimationsPreference);
             getPreferenceScreen().removePreference(mToggleLargePointerIconPreference);
             experimentalCategory.addPreference(mDisplayDaltonizerPreferenceScreen);
-            experimentalCategory.addPreference(mToggleInversionPreference);
-            experimentalCategory.addPreference(mReduceBrightColorsPreference);
             experimentalCategory.addPreference(mToggleDisableAnimationsPreference);
             experimentalCategory.addPreference(mToggleLargePointerIconPreference);
         }
diff --git a/src/com/android/settings/accessibility/TurnScreenDarkerFragment.java b/src/com/android/settings/accessibility/TurnScreenDarkerFragment.java
new file mode 100644
index 0000000..ad4bd56
--- /dev/null
+++ b/src/com/android/settings/accessibility/TurnScreenDarkerFragment.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2021 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 android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.hardware.display.ColorDisplayManager;
+import android.os.Bundle;
+import android.provider.Settings;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.display.DarkUIPreferenceController;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
+
+/** Accessibility settings for turning screen darker. */
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
+public class TurnScreenDarkerFragment extends DashboardFragment {
+
+    private static final String TAG = "TurnDarkerFragment";
+
+    private static final String CATEGORY_EXPERIMENTAL = "experimental_category";
+
+    // Preferences
+    private static final String TOGGLE_INVERSION_PREFERENCE = "toggle_inversion_preference";
+    private static final String DISPLAY_REDUCE_BRIGHT_COLORS_PREFERENCE_SCREEN =
+            "reduce_bright_colors_preference";
+
+    private Preference mToggleInversionPreference;
+    private Preference mReduceBrightColorsPreference;
+
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.ACCESSIBILITY_TURN_SCREEN_DARKER;
+    }
+
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        initializeAllPreferences();
+        updateSystemPreferences();
+    }
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        use(DarkUIPreferenceController.class).setParentFragment(this);
+    }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.accessibility_turn_screen_darker;
+    }
+
+    @Override
+    protected String getLogTag() {
+        return TAG;
+    }
+
+    private void initializeAllPreferences() {
+        // Display inversion.
+        mToggleInversionPreference = findPreference(TOGGLE_INVERSION_PREFERENCE);
+
+        // Reduce brightness.
+        mReduceBrightColorsPreference =
+                findPreference(DISPLAY_REDUCE_BRIGHT_COLORS_PREFERENCE_SCREEN);
+    }
+
+    /**
+     * Updates preferences related to system configurations.
+     */
+    private void updateSystemPreferences() {
+        final PreferenceCategory experimentalCategory = getPreferenceScreen().findPreference(
+                CATEGORY_EXPERIMENTAL);
+        if (ColorDisplayManager.isColorTransformAccelerated(getContext())) {
+            mToggleInversionPreference.setSummary(AccessibilityUtil.getSummary(
+                    getContext(), Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED));
+            mReduceBrightColorsPreference.setSummary(AccessibilityUtil.getSummary(
+                    getContext(), Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED));
+            getPreferenceScreen().removePreference(experimentalCategory);
+        } else {
+            // Move following preferences to experimental category if device don't supports HWC
+            // hardware-accelerated color transform.
+            getPreferenceScreen().removePreference(mToggleInversionPreference);
+            getPreferenceScreen().removePreference(mReduceBrightColorsPreference);
+            experimentalCategory.addPreference(mToggleInversionPreference);
+            experimentalCategory.addPreference(mReduceBrightColorsPreference);
+        }
+    }
+
+    public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider(R.xml.accessibility_turn_screen_darker);
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/TurnScreenDarkerFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/TurnScreenDarkerFragmentTest.java
new file mode 100644
index 0000000..f256201
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/TurnScreenDarkerFragmentTest.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2021 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 android.content.Context;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.testutils.XmlTestUtils;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+import java.util.List;
+
+/** Tests for {@link TurnScreenDarkerFragment}. */
+@RunWith(RobolectricTestRunner.class)
+public class TurnScreenDarkerFragmentTest {
+
+    private Context mContext = ApplicationProvider.getApplicationContext();
+
+    @Test
+    public void getNonIndexableKeys_existInXmlLayout() {
+        final List<String> niks = TurnScreenDarkerFragment.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(mContext);
+        final List<String> keys =
+                XmlTestUtils.getKeysFromPreferenceXml(mContext,
+                        R.xml.accessibility_turn_screen_darker);
+
+        assertThat(keys).containsAtLeastElementsIn(niks);
+    }
+}
