diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index fcc6bcc..6781e28 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -90,7 +90,7 @@
             android:key="toggle_force_bold_text"
             android:persistent="false"
             android:title="@string/force_bold_text"
-            settings:controller="com.android.settings.accessibility.ForceBoldTextPreferenceController"/>
+            settings:controller="com.android.settings.accessibility.FontWeightAdjustmentPreferenceController"/>
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/src/com/android/settings/accessibility/ForceBoldTextPreferenceController.java b/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java
similarity index 70%
rename from src/com/android/settings/accessibility/ForceBoldTextPreferenceController.java
rename to src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java
index c8a3203..97f96a4 100644
--- a/src/com/android/settings/accessibility/ForceBoldTextPreferenceController.java
+++ b/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java
@@ -17,15 +17,17 @@
 package com.android.settings.accessibility;
 
 import android.content.Context;
-import android.content.res.Configuration;
+import android.graphics.fonts.FontStyle;
 import android.provider.Settings;
 
 import com.android.settings.core.TogglePreferenceController;
 
 /** PreferenceController for displaying all text in bold. */
-public class ForceBoldTextPreferenceController extends TogglePreferenceController {
+public class FontWeightAdjustmentPreferenceController extends TogglePreferenceController {
+    static final int BOLD_TEXT_ADJUSTMENT =
+            FontStyle.FONT_WEIGHT_BOLD - FontStyle.FONT_WEIGHT_NORMAL;
 
-    public ForceBoldTextPreferenceController(Context context, String preferenceKey) {
+    public FontWeightAdjustmentPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
     }
 
@@ -37,14 +39,12 @@
     @Override
     public boolean isChecked() {
         return Settings.Secure.getInt(mContext.getContentResolver(),
-                Settings.Secure.FORCE_BOLD_TEXT, Configuration.FORCE_BOLD_TEXT_NO)
-                == Configuration.FORCE_BOLD_TEXT_YES;
+                Settings.Secure.FONT_WEIGHT_ADJUSTMENT, 0) == BOLD_TEXT_ADJUSTMENT;
     }
 
     @Override
     public boolean setChecked(boolean isChecked) {
         return Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.FORCE_BOLD_TEXT,
-                (isChecked ? Configuration.FORCE_BOLD_TEXT_YES : Configuration.FORCE_BOLD_TEXT_NO));
+                Settings.Secure.FONT_WEIGHT_ADJUSTMENT, (isChecked ? BOLD_TEXT_ADJUSTMENT : 0));
     }
 }
diff --git a/tests/robotests/src/com/android/settings/accessibility/ForceBoldTextPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceControllerTest.java
similarity index 71%
rename from tests/robotests/src/com/android/settings/accessibility/ForceBoldTextPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceControllerTest.java
index 46e1f48..eb49edd 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ForceBoldTextPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceControllerTest.java
@@ -32,20 +32,20 @@
 import org.robolectric.RuntimeEnvironment;
 
 @RunWith(RobolectricTestRunner.class)
-public class ForceBoldTextPreferenceControllerTest {
-    private static final int ON = 2;
-    private static final int OFF = 1;
-    private static final int UNKNOWN = 0;
+public class FontWeightAdjustmentPreferenceControllerTest {
+    private static final int ON = FontWeightAdjustmentPreferenceController.BOLD_TEXT_ADJUSTMENT;
+    private static final int OFF = 0;
 
     private Context mContext;
     private SwitchPreference mPreference;
-    private ForceBoldTextPreferenceController mController;
+    private FontWeightAdjustmentPreferenceController mController;
 
     @Before
     public void setUp() {
         mContext = RuntimeEnvironment.application;
         mPreference = new SwitchPreference(mContext);
-        mController = new ForceBoldTextPreferenceController(mContext, "force_bold_text");
+        mController = new FontWeightAdjustmentPreferenceController(
+                mContext, "font_weight_adjustment");
     }
 
     @Test
@@ -55,9 +55,9 @@
     }
 
     @Test
-    public void isChecked_enabledTextContrast_shouldReturnTrue() {
+    public void isChecked_enabledBoldText_shouldReturnTrue() {
         Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.FORCE_BOLD_TEXT, ON);
+                Settings.Secure.FONT_WEIGHT_ADJUSTMENT, ON);
 
         mController.updateState(mPreference);
 
@@ -66,9 +66,9 @@
     }
 
     @Test
-    public void isChecked_disabledTextContrast_shouldReturnFalse() {
+    public void isChecked_disabledBoldText_shouldReturnFalse() {
         Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.FORCE_BOLD_TEXT, OFF);
+                Settings.Secure.FONT_WEIGHT_ADJUSTMENT, OFF);
 
         mController.updateState(mPreference);
 
@@ -77,19 +77,18 @@
     }
 
     @Test
-    public void setChecked_setTrue_shouldEnableTextContrast() {
+    public void setChecked_setTrue_shouldEnableBoldText() {
         mController.setChecked(true);
 
         assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
-                Settings.Secure.FORCE_BOLD_TEXT, UNKNOWN)).isEqualTo(ON);
-
+                Settings.Secure.FONT_WEIGHT_ADJUSTMENT, OFF)).isEqualTo(ON);
     }
 
     @Test
-    public void setChecked_setFalse_shouldDisableTextContrast() {
+    public void setChecked_setFalse_shouldDisableBoldText() {
         mController.setChecked(false);
 
         assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
-                Settings.Secure.FORCE_BOLD_TEXT, UNKNOWN)).isEqualTo(OFF);
+                Settings.Secure.FONT_WEIGHT_ADJUSTMENT, OFF)).isEqualTo(OFF);
     }
 }
