diff --git a/src/com/android/systemui/car/toast/CarToastUI.java b/src/com/android/systemui/car/toast/CarToastUI.java
index 4e1eb82..707e533 100644
--- a/src/com/android/systemui/car/toast/CarToastUI.java
+++ b/src/com/android/systemui/car/toast/CarToastUI.java
@@ -65,7 +65,8 @@
 
     @Override
     public void showToast(int uid, String packageName, IBinder token, CharSequence text,
-            IBinder windowToken, int duration, @Nullable ITransientNotificationCallback callback) {
+            IBinder windowToken, int duration, @Nullable ITransientNotificationCallback callback,
+            int displayId) {
         if (!isAllowListed(packageName) && !isSystemPrivilegedOrPlatformKey(packageName)) {
             if (DEBUG) {
                 Log.w(TAG, packageName
@@ -80,7 +81,7 @@
                             + " is a system privileged app or has been signed with platform key.");
         }
 
-        super.showToast(uid, packageName, token, text, windowToken, duration, callback);
+        super.showToast(uid, packageName, token, text, windowToken, duration, callback, displayId);
     }
 
     private boolean isAllowListed(String packageName) {
diff --git a/tests/src/com/android/systemui/car/toast/CarToastUITest.java b/tests/src/com/android/systemui/car/toast/CarToastUITest.java
index 2438f8e..5297c43 100644
--- a/tests/src/com/android/systemui/car/toast/CarToastUITest.java
+++ b/tests/src/com/android/systemui/car/toast/CarToastUITest.java
@@ -30,6 +30,7 @@
 import android.os.IBinder;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
+import android.view.Display;
 import android.view.Gravity;
 import android.view.View;
 
@@ -110,7 +111,7 @@
                 false, /* isSignedWithPlatformKey= */ false);
 
         mCarToastUI.showToast(UID, PACKAGE_NAME, mIBinder, TEXT, mIBinder, DURATION,
-                mITransientNotificationCallback);
+                mITransientNotificationCallback, Display.DEFAULT_DISPLAY);
 
         verify(mToastFactory, never()).createToast(any(), eq(TEXT), eq(PACKAGE_NAME), anyInt(),
                 anyInt());
@@ -123,7 +124,7 @@
                 false, /* isSignedWithPlatformKey= */ true);
 
         mCarToastUI.showToast(UID, PACKAGE_NAME, mIBinder, TEXT, mIBinder, DURATION,
-                mITransientNotificationCallback);
+                mITransientNotificationCallback, Display.DEFAULT_DISPLAY);
 
         verify(mToastFactory).createToast(any(), eq(TEXT), eq(PACKAGE_NAME), anyInt(), anyInt());
     }
@@ -135,7 +136,7 @@
                 true, /* isSignedWithPlatformKey= */ false);
 
         mCarToastUI.showToast(UID, PACKAGE_NAME, mIBinder, TEXT, mIBinder, DURATION,
-                mITransientNotificationCallback);
+                mITransientNotificationCallback, Display.DEFAULT_DISPLAY);
 
         verify(mToastFactory, never()).createToast(any(), eq(TEXT), eq(PACKAGE_NAME), anyInt(),
                 anyInt());
@@ -148,7 +149,7 @@
                 true, /* isSignedWithPlatformKey= */ true);
 
         mCarToastUI.showToast(UID, PACKAGE_NAME, mIBinder, TEXT, mIBinder, DURATION,
-                mITransientNotificationCallback);
+                mITransientNotificationCallback, Display.DEFAULT_DISPLAY);
 
         verify(mToastFactory).createToast(any(), eq(TEXT), eq(PACKAGE_NAME), anyInt(), anyInt());
     }
@@ -160,7 +161,7 @@
                 false, /* isSignedWithPlatformKey= */ false);
 
         mCarToastUI.showToast(UID, PACKAGE_NAME, mIBinder, TEXT, mIBinder, DURATION,
-                mITransientNotificationCallback);
+                mITransientNotificationCallback, Display.DEFAULT_DISPLAY);
 
         verify(mToastFactory, never()).createToast(any(), eq(TEXT), eq(PACKAGE_NAME), anyInt(),
                 anyInt());
@@ -179,7 +180,7 @@
                 false, /* isSignedWithPlatformKey= */ false);
 
         carToastUI.showToast(UID, PACKAGE_NAME, mIBinder, TEXT, mIBinder, DURATION,
-                mITransientNotificationCallback);
+                mITransientNotificationCallback, Display.DEFAULT_DISPLAY);
 
         verify(mToastFactory).createToast(any(), eq(TEXT), eq(PACKAGE_NAME), anyInt(), anyInt());
     }
@@ -191,7 +192,7 @@
                 false, /* isSignedWithPlatformKey= */ true);
 
         mCarToastUI.showToast(UID, PACKAGE_NAME, mIBinder, TEXT, mIBinder, DURATION,
-                mITransientNotificationCallback);
+                mITransientNotificationCallback, Display.DEFAULT_DISPLAY);
 
         verify(mToastFactory).createToast(any(), eq(TEXT), eq(PACKAGE_NAME), anyInt(), anyInt());
     }
@@ -203,7 +204,7 @@
                 true, /* isSignedWithPlatformKey= */ false);
 
         mCarToastUI.showToast(UID, PACKAGE_NAME, mIBinder, TEXT, mIBinder, DURATION,
-                mITransientNotificationCallback);
+                mITransientNotificationCallback, Display.DEFAULT_DISPLAY);
 
         verify(mToastFactory).createToast(any(), eq(TEXT), eq(PACKAGE_NAME), anyInt(), anyInt());
     }
@@ -215,7 +216,7 @@
                 true, /* isSignedWithPlatformKey= */ true);
 
         mCarToastUI.showToast(UID, PACKAGE_NAME, mIBinder, TEXT, mIBinder, DURATION,
-                mITransientNotificationCallback);
+                mITransientNotificationCallback, Display.DEFAULT_DISPLAY);
 
         verify(mToastFactory).createToast(any(), eq(TEXT), eq(PACKAGE_NAME), anyInt(), anyInt());
     }
