diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 36c9001..ba2f807 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -2251,7 +2251,7 @@
     method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createRestrictedProfile(@Nullable String);
     method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createUser(@Nullable String, @NonNull String, int);
     method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.os.UserHandle getBootUser();
-    method public int getDisplayIdAssignedToUser();
+    method public int getMainDisplayIdAssignedToUser();
     method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.Set<java.lang.String> getPreInstallableSystemPackages(@NonNull String);
     method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS}) public String getUserType();
     method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.List<android.content.pm.UserInfo> getUsers(boolean, boolean, boolean);
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index ac92811..4dc7253 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -1151,7 +1151,7 @@
         }
 
         UserManager userManager = mInstrContext.getSystemService(UserManager.class);
-        int userDisplayId = userManager.getDisplayIdAssignedToUser();
+        int userDisplayId = userManager.getMainDisplayIdAssignedToUser();
         if (VERBOSE) {
             Log.v(TAG, "setDisplayIfNeeded(" + event + "): eventDisplayId=" + eventDisplayId
                     + ", user=" + mInstrContext.getUser() + ", userDisplayId=" + userDisplayId);
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index fcebb45..8e1d2d6 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -134,7 +134,7 @@
     boolean isUserForeground(int userId);
     boolean isUserVisible(int userId);
     int[] getVisibleUsers();
-    int getDisplayIdAssignedToUser();
+    int getMainDisplayIdAssignedToUser();
     boolean isUserNameSet(int userId);
     boolean hasRestrictedProfiles(int userId);
     boolean requestQuietModeEnabled(String callingPackage, boolean enableQuietMode, int userId, in IntentSender target, int flags);
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 8824835..7337b37 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -3067,14 +3067,14 @@
     }
 
     /**
-     * See {@link com.android.server.pm.UserManagerInternal#getDisplayAssignedToUser(int)}.
+     * See {@link com.android.server.pm.UserManagerInternal#getMainDisplayAssignedToUser(int)}.
      *
      * @hide
      */
     @TestApi
-    public int getDisplayIdAssignedToUser() {
+    public int getMainDisplayIdAssignedToUser() {
         try {
-            return mService.getDisplayIdAssignedToUser();
+            return mService.getMainDisplayIdAssignedToUser();
         } catch (RemoteException re) {
             throw re.rethrowFromSystemServer();
         }
diff --git a/services/core/java/com/android/server/pm/UserManagerInternal.java b/services/core/java/com/android/server/pm/UserManagerInternal.java
index 721ad88..194f237 100644
--- a/services/core/java/com/android/server/pm/UserManagerInternal.java
+++ b/services/core/java/com/android/server/pm/UserManagerInternal.java
@@ -506,15 +506,14 @@
      *
      * <p>If the user is a profile and is running, it's assigned to its parent display.
      */
-    // TODO(b/272366483) rename this method to avoid confusion with getDisplaysAssignedTOUser().
-    public abstract int getDisplayAssignedToUser(@UserIdInt int userId);
+    public abstract int getMainDisplayAssignedToUser(@UserIdInt int userId);
 
     /**
      * Returns all display ids assigned to the user including {@link
      * #assignUserToExtraDisplay(int, int) extra displays}, or {@code null} if there is no display
      * assigned to the specified user.
      *
-     * <p>Note that this method is different from {@link #getDisplayAssignedToUser(int)}, which
+     * <p>Note that this method is different from {@link #getMainDisplayAssignedToUser(int)}, which
      * returns a main display only.
      */
     public abstract @Nullable int[] getDisplaysAssignedToUser(@UserIdInt int userId);
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index c5e2351..c10820a 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -1996,10 +1996,10 @@
     }
 
     @Override
-    public int getDisplayIdAssignedToUser() {
+    public int getMainDisplayIdAssignedToUser() {
         // Not checking for any permission as it returns info about calling user
         int userId = UserHandle.getUserId(Binder.getCallingUid());
-        int displayId = mUserVisibilityMediator.getDisplayAssignedToUser(userId);
+        int displayId = mUserVisibilityMediator.getMainDisplayAssignedToUser(userId);
         return displayId;
     }
 
@@ -7174,8 +7174,8 @@
         }
 
         @Override
-        public int getDisplayAssignedToUser(@UserIdInt int userId) {
-            return mUserVisibilityMediator.getDisplayAssignedToUser(userId);
+        public int getMainDisplayAssignedToUser(@UserIdInt int userId) {
+            return mUserVisibilityMediator.getMainDisplayAssignedToUser(userId);
         }
 
         @Override
diff --git a/services/core/java/com/android/server/pm/UserVisibilityMediator.java b/services/core/java/com/android/server/pm/UserVisibilityMediator.java
index 3710af6..cf82536 100644
--- a/services/core/java/com/android/server/pm/UserVisibilityMediator.java
+++ b/services/core/java/com/android/server/pm/UserVisibilityMediator.java
@@ -774,9 +774,9 @@
     }
 
     /**
-     * See {@link UserManagerInternal#getDisplayAssignedToUser(int)}.
+     * See {@link UserManagerInternal#getMainDisplayAssignedToUser(int)}.
      */
-    public int getDisplayAssignedToUser(@UserIdInt int userId) {
+    public int getMainDisplayAssignedToUser(@UserIdInt int userId) {
         if (isCurrentUserOrRunningProfileOfCurrentUser(userId)) {
             if (mVisibleBackgroundUserOnDefaultDisplayEnabled) {
                 // When device supports visible bg users on default display, the default display is
@@ -787,8 +787,8 @@
                 }
                 if (userStartedOnDefaultDisplay != USER_NULL) {
                     if (DBG) {
-                        Slogf.d(TAG, "getDisplayAssignedToUser(%d): returning INVALID_DISPLAY for "
-                                + "current user user %d was started on DEFAULT_DISPLAY",
+                        Slogf.d(TAG, "getMainDisplayAssignedToUser(%d): returning INVALID_DISPLAY "
+                                        + "for current user user %d was started on DEFAULT_DISPLAY",
                                 userId, userStartedOnDefaultDisplay);
                     }
                     return INVALID_DISPLAY;
@@ -809,7 +809,7 @@
     /** See {@link UserManagerInternal#getDisplaysAssignedToUser(int)}. */
     @Nullable
     public int[] getDisplaysAssignedToUser(@UserIdInt int userId) {
-        int mainDisplayId = getDisplayAssignedToUser(userId);
+        int mainDisplayId = getMainDisplayAssignedToUser(userId);
         if (mainDisplayId == INVALID_DISPLAY) {
             // The user will not have any extra displays if they have no main display.
             // Return null if no display is assigned to the user.
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorTestCase.java b/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorTestCase.java
index 70b5ac0..386fd3e 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorTestCase.java
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorTestCase.java
@@ -674,13 +674,13 @@
     }
 
     protected void expectDisplayAssignedToUser(@UserIdInt int userId, int displayId) {
-        expectWithMessage("getDisplayAssignedToUser(%s)", userId)
-                .that(mMediator.getDisplayAssignedToUser(userId)).isEqualTo(displayId);
+        expectWithMessage("getMainDisplayAssignedToUser(%s)", userId)
+                .that(mMediator.getMainDisplayAssignedToUser(userId)).isEqualTo(displayId);
     }
 
     protected void expectNoDisplayAssignedToUser(@UserIdInt int userId) {
-        expectWithMessage("getDisplayAssignedToUser(%s)", userId)
-                .that(mMediator.getDisplayAssignedToUser(userId)).isEqualTo(INVALID_DISPLAY);
+        expectWithMessage("getMainDisplayAssignedToUser(%s)", userId)
+                .that(mMediator.getMainDisplayAssignedToUser(userId)).isEqualTo(INVALID_DISPLAY);
     }
 
     protected void expectDisplaysAssignedToUserContainsDisplayId(
