diff --git a/src/com/android/settings/accessibility/DisplaySizeData.java b/src/com/android/settings/accessibility/DisplaySizeData.java
index 42a8c46..77ae897 100644
--- a/src/com/android/settings/accessibility/DisplaySizeData.java
+++ b/src/com/android/settings/accessibility/DisplaySizeData.java
@@ -18,9 +18,7 @@
 
 import android.content.Context;
 import android.content.res.Resources;
-import android.view.Display;
 
-import com.android.settingslib.display.DisplayDensityConfiguration;
 import com.android.settingslib.display.DisplayDensityUtils;
 
 import java.util.Arrays;
@@ -31,11 +29,13 @@
  * Data class for storing the configurations related to the display size.
  */
 class DisplaySizeData extends PreviewSizeData<Integer> {
+    private final DisplayDensityUtils mDensity;
+
     DisplaySizeData(Context context) {
         super(context);
 
-        final DisplayDensityUtils density = new DisplayDensityUtils(getContext());
-        final int initialIndex = density.getCurrentIndex();
+        mDensity = new DisplayDensityUtils(getContext());
+        final int initialIndex = mDensity.getCurrentIndexForDefaultDisplay();
         if (initialIndex < 0) {
             // Failed to obtain default density, which means we failed to
             // connect to the window manager service. Just use the current
@@ -46,9 +46,10 @@
             setInitialIndex(0);
             setValues(Collections.singletonList(densityDpi));
         } else {
-            setDefaultValue(density.getDefaultDensity());
+            setDefaultValue(mDensity.getDefaultDensityForDefaultDisplay());
             setInitialIndex(initialIndex);
-            setValues(Arrays.stream(density.getValues()).boxed().collect(Collectors.toList()));
+            setValues(Arrays.stream(mDensity.getDefaultDisplayDensityValues()).boxed()
+                    .collect(Collectors.toList()));
         }
     }
 
@@ -56,10 +57,9 @@
     void commit(int currentProgress) {
         final int densityDpi = getValues().get(currentProgress);
         if (densityDpi == getDefaultValue()) {
-            DisplayDensityConfiguration.clearForcedDisplayDensity(Display.DEFAULT_DISPLAY);
+            mDensity.clearForcedDisplayDensity();
         } else {
-            DisplayDensityConfiguration.setForcedDisplayDensity(Display.DEFAULT_DISPLAY,
-                    densityDpi);
+            mDensity.setForcedDisplayDensity(currentProgress);
         }
     }
 }
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index e044ab0..0b30f87 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -192,9 +192,10 @@
     @VisibleForTesting
     protected boolean shouldShowLottie() {
         DisplayDensityUtils displayDensity = new DisplayDensityUtils(getApplicationContext());
-        int currentDensityIndex = displayDensity.getCurrentIndex();
-        final int currentDensity = displayDensity.getValues()[currentDensityIndex];
-        final int defaultDensity = displayDensity.getDefaultDensity();
+        int currentDensityIndex = displayDensity.getCurrentIndexForDefaultDisplay();
+        final int currentDensity = displayDensity.getDefaultDisplayDensityValues()
+                [currentDensityIndex];
+        final int defaultDensity = displayDensity.getDefaultDensityForDefaultDisplay();
         return defaultDensity == currentDensity;
     }
 
diff --git a/src/com/android/settings/display/ScreenResolutionFragment.java b/src/com/android/settings/display/ScreenResolutionFragment.java
index 7c4b3ae..9a61595 100644
--- a/src/com/android/settings/display/ScreenResolutionFragment.java
+++ b/src/com/android/settings/display/ScreenResolutionFragment.java
@@ -307,10 +307,11 @@
             }
 
             final DisplayDensityUtils density = new DisplayDensityUtils(mContext);
-            final int currentIndex = density.getCurrentIndex();
-            final int defaultDensity = density.getDefaultDensity();
+            final int currentIndex = density.getCurrentIndexForDefaultDisplay();
+            final int defaultDensity = density.getDefaultDensityForDefaultDisplay();
 
-            if (density.getValues()[mCurrentIndex] == density.getDefaultDensity()) {
+            if (density.getDefaultDisplayDensityValues()[mCurrentIndex]
+                    == density.getDefaultDensityForDefaultDisplay()) {
                 return;
             }
 
@@ -351,17 +352,17 @@
 
         private void restoreDensity() {
             final DisplayDensityUtils density = new DisplayDensityUtils(mContext);
-            if (density.getValues()[mCurrentIndex] != density.getDefaultDensity()) {
-                DisplayDensityUtils.setForcedDisplayDensity(
-                        Display.DEFAULT_DISPLAY, density.getValues()[mCurrentIndex]);
+            if (density.getDefaultDisplayDensityValues()[mCurrentIndex]
+                    != density.getDefaultDensityForDefaultDisplay()) {
+                density.setForcedDisplayDensity(mCurrentIndex);
             }
 
-            mDefaultDensity = density.getDefaultDensity();
+            mDefaultDensity = density.getDefaultDensityForDefaultDisplay();
         }
 
         private boolean isDensityChanged() {
             final DisplayDensityUtils density = new DisplayDensityUtils(mContext);
-            if (density.getDefaultDensity() == mDefaultDensity) {
+            if (density.getDefaultDensityForDefaultDisplay() == mDefaultDensity) {
                 return false;
             }
 
diff --git a/src/com/android/settings/display/ScreenZoomPreference.java b/src/com/android/settings/display/ScreenZoomPreference.java
index f47d7da..af77a0e 100644
--- a/src/com/android/settings/display/ScreenZoomPreference.java
+++ b/src/com/android/settings/display/ScreenZoomPreference.java
@@ -36,13 +36,13 @@
                 android.R.attr.preferenceStyle));
 
         final DisplayDensityUtils density = new DisplayDensityUtils(context);
-        final int defaultIndex = density.getCurrentIndex();
+        final int defaultIndex = density.getCurrentIndexForDefaultDisplay();
         if (defaultIndex < 0) {
             setVisible(false);
             setEnabled(false);
         } else if (TextUtils.isEmpty(getSummary())) {
-            final String[] entries = density.getEntries();
-            final int currentIndex = density.getCurrentIndex();
+            final String[] entries = density.getDefaultDisplayDensityEntries();
+            final int currentIndex = density.getCurrentIndexForDefaultDisplay();
             setSummary(entries[currentIndex]);
         }
     }
diff --git a/src/com/android/settings/display/ScreenZoomSettings.java b/src/com/android/settings/display/ScreenZoomSettings.java
index 4c46f01..ac10664 100644
--- a/src/com/android/settings/display/ScreenZoomSettings.java
+++ b/src/com/android/settings/display/ScreenZoomSettings.java
@@ -21,11 +21,9 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.os.Bundle;
-import android.view.Display;
 
 import com.android.settings.R;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.display.DisplayDensityConfiguration;
 import com.android.settingslib.display.DisplayDensityUtils;
 import com.android.settingslib.search.SearchIndexable;
 
@@ -37,6 +35,7 @@
 
     private int mDefaultDensity;
     private int[] mValues;
+    private DisplayDensityUtils mDensity;
 
     @Override
     protected int getActivityLayoutResId() {
@@ -58,9 +57,9 @@
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        final DisplayDensityUtils density = new DisplayDensityUtils(getContext());
+        mDensity = new DisplayDensityUtils(getContext());
 
-        final int initialIndex = density.getCurrentIndex();
+        final int initialIndex = mDensity.getCurrentIndexForDefaultDisplay();
         if (initialIndex < 0) {
             // Failed to obtain default density, which means we failed to
             // connect to the window manager service. Just use the current
@@ -71,10 +70,10 @@
             mInitialIndex = 0;
             mDefaultDensity = densityDpi;
         } else {
-            mValues = density.getValues();
-            mEntries = density.getEntries();
+            mValues = mDensity.getDefaultDisplayDensityValues();
+            mEntries = mDensity.getDefaultDisplayDensityEntries();
             mInitialIndex = initialIndex;
-            mDefaultDensity = density.getDefaultDensity();
+            mDefaultDensity = mDensity.getDefaultDensityForDefaultDisplay();
         }
 
         getActivity().setTitle(R.string.screen_zoom_title);
@@ -95,9 +94,9 @@
     protected void commit() {
         final int densityDpi = mValues[mCurrentIndex];
         if (densityDpi == mDefaultDensity) {
-            DisplayDensityConfiguration.clearForcedDisplayDensity(Display.DEFAULT_DISPLAY);
+            mDensity.clearForcedDisplayDensity();
         } else {
-            DisplayDensityConfiguration.setForcedDisplayDensity(Display.DEFAULT_DISPLAY, densityDpi);
+            mDensity.setForcedDisplayDensity(densityDpi);
         }
     }
 
