diff --git a/core/java/android/os/IVibratorManagerService.aidl b/core/java/android/os/IVibratorManagerService.aidl
index f30dd20d708747129be09cfc4bec487b92d20d3e..0f2756914fa6b5e5ee68b2d1f31b335ba23fd309 100644
--- a/core/java/android/os/IVibratorManagerService.aidl
+++ b/core/java/android/os/IVibratorManagerService.aidl
@@ -33,13 +33,13 @@ interface IVibratorManagerService {
     boolean unregisterVibratorStateListener(int vibratorId, in IVibratorStateListener listener);
     boolean setAlwaysOnEffect(int uid, String opPkg, int alwaysOnId,
             in CombinedVibration vibration, in VibrationAttributes attributes);
-    void vibrate(int uid, int displayId, String opPkg, in CombinedVibration vibration,
+    void vibrate(int uid, int deviceId, String opPkg, in CombinedVibration vibration,
             in VibrationAttributes attributes, String reason, IBinder token);
     void cancelVibrate(int usageFilter, IBinder token);
 
     // Async oneway APIs.
     // There is no order guarantee with respect to the two-way APIs above like
     // vibrate/isVibrating/cancel.
-    oneway void performHapticFeedback(int uid, int displayId, String opPkg, int constant,
+    oneway void performHapticFeedback(int uid, int deviceId, String opPkg, int constant,
             boolean always, String reason, IBinder token);
 }
diff --git a/core/java/android/os/SystemVibratorManager.java b/core/java/android/os/SystemVibratorManager.java
index ee90834c15ef664e5bc3aebeb3c2c41fa74cde40..bc85412e851b83b93e73a033ebde8e77838762e8 100644
--- a/core/java/android/os/SystemVibratorManager.java
+++ b/core/java/android/os/SystemVibratorManager.java
@@ -137,8 +137,8 @@ public class SystemVibratorManager extends VibratorManager {
             return;
         }
         try {
-            mService.vibrate(uid, mContext.getAssociatedDisplayId(), opPkg, effect, attributes,
-                    reason, mToken);
+            mService.vibrate(uid, mContext.getDeviceId(), opPkg, effect, attributes, reason,
+                    mToken);
         } catch (RemoteException e) {
             Log.w(TAG, "Failed to vibrate.", e);
         }
@@ -152,8 +152,8 @@ public class SystemVibratorManager extends VibratorManager {
         }
         try {
             mService.performHapticFeedback(
-                    Process.myUid(), mContext.getAssociatedDisplayId(), mPackageName, constant,
-                    always, reason, mToken);
+                    Process.myUid(), mContext.getDeviceId(), mPackageName, constant, always, reason,
+                    mToken);
         } catch (RemoteException e) {
             Log.w(TAG, "Failed to perform haptic feedback.", e);
         }
diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
index 92af68bc40a3ef1fb1333d12fa675e18b6e0b19c..85b3c9a2b33c30f3e07be78df2165f9b8b98a8d9 100644
--- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
@@ -441,10 +441,8 @@ public class VirtualDeviceManagerService extends SystemService {
                                 + " is not the owner of the supplied VirtualDevice");
             }
 
-            int displayId = virtualDeviceImpl.createVirtualDisplay(virtualDisplayConfig, callback,
-                    packageName);
-            mLocalService.onVirtualDisplayCreated(displayId);
-            return displayId;
+            return virtualDeviceImpl.createVirtualDisplay(
+                    virtualDisplayConfig, callback, packageName);
         }
 
         @Override // Binder call
@@ -625,9 +623,6 @@ public class VirtualDeviceManagerService extends SystemService {
 
     private final class LocalService extends VirtualDeviceManagerInternal {
         @GuardedBy("mVirtualDeviceManagerLock")
-        private final ArrayList<VirtualDisplayListener>
-                mVirtualDisplayListeners = new ArrayList<>();
-        @GuardedBy("mVirtualDeviceManagerLock")
         private final ArrayList<AppsOnVirtualDeviceListener>
                 mAppsOnVirtualDeviceListeners = new ArrayList<>();
         @GuardedBy("mVirtualDeviceManagerLock")
@@ -664,36 +659,16 @@ public class VirtualDeviceManagerService extends SystemService {
             return result;
         }
 
-        @Override
-        public void onVirtualDisplayCreated(int displayId) {
-            final VirtualDisplayListener[] listeners;
-            synchronized (mVirtualDeviceManagerLock) {
-                listeners = mVirtualDisplayListeners.toArray(new VirtualDisplayListener[0]);
-            }
-            mHandler.post(() -> {
-                for (VirtualDisplayListener listener : listeners) {
-                    listener.onVirtualDisplayCreated(displayId);
-                }
-            });
-        }
-
         @Override
         public void onVirtualDisplayRemoved(IVirtualDevice virtualDevice, int displayId) {
-            final VirtualDisplayListener[] listeners;
             VirtualDeviceImpl virtualDeviceImpl;
             synchronized (mVirtualDeviceManagerLock) {
-                listeners = mVirtualDisplayListeners.toArray(new VirtualDisplayListener[0]);
                 virtualDeviceImpl = mVirtualDevices.get(
                         ((VirtualDeviceImpl) virtualDevice).getDeviceId());
             }
             if (virtualDeviceImpl != null) {
                 virtualDeviceImpl.onVirtualDisplayRemoved(displayId);
             }
-            mHandler.post(() -> {
-                for (VirtualDisplayListener listener : listeners) {
-                    listener.onVirtualDisplayRemoved(displayId);
-                }
-            });
         }
 
         @Override
@@ -798,22 +773,6 @@ public class VirtualDeviceManagerService extends SystemService {
             return virtualDevice == null ? null : virtualDevice.getPersistentDeviceId();
         }
 
-        @Override
-        public void registerVirtualDisplayListener(
-                @NonNull VirtualDisplayListener listener) {
-            synchronized (mVirtualDeviceManagerLock) {
-                mVirtualDisplayListeners.add(listener);
-            }
-        }
-
-        @Override
-        public void unregisterVirtualDisplayListener(
-                @NonNull VirtualDisplayListener listener) {
-            synchronized (mVirtualDeviceManagerLock) {
-                mVirtualDisplayListeners.remove(listener);
-            }
-        }
-
         @Override
         public void registerAppsOnVirtualDeviceListener(
                 @NonNull AppsOnVirtualDeviceListener listener) {
diff --git a/services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java b/services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java
index 283353ddc25d9a6c82875a5dae78514aaaf489c7..0d7f778bb3264f2466d8559052efde8f5afcda82 100644
--- a/services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java
+++ b/services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java
@@ -32,29 +32,12 @@ import java.util.Set;
  */
 public abstract class VirtualDeviceManagerInternal {
 
-    /** Interface to listen to the creation and destruction of virtual displays. */
-    public interface VirtualDisplayListener {
-        /** Notifies that a virtual display was created. */
-        void onVirtualDisplayCreated(int displayId);
-
-        /** Notifies that a virtual display was removed. */
-        void onVirtualDisplayRemoved(int displayId);
-    }
-
     /** Interface to listen to the changes on the list of app UIDs running on any virtual device. */
     public interface AppsOnVirtualDeviceListener {
         /** Notifies that running apps on any virtual device has changed */
         void onAppsOnAnyVirtualDeviceChanged(Set<Integer> allRunningUids);
     }
 
-    /** Register a listener for the creation and destruction of virtual displays. */
-    public abstract void registerVirtualDisplayListener(
-            @NonNull VirtualDisplayListener listener);
-
-    /** Unregister a listener for the creation and destruction of virtual displays. */
-    public abstract void unregisterVirtualDisplayListener(
-            @NonNull VirtualDisplayListener listener);
-
     /** Register a listener for changes of running app UIDs on any virtual device. */
     public abstract void registerAppsOnVirtualDeviceListener(
             @NonNull AppsOnVirtualDeviceListener listener);
@@ -103,13 +86,6 @@ public abstract class VirtualDeviceManagerInternal {
      */
     public abstract @NonNull ArraySet<Integer> getDeviceIdsForUid(int uid);
 
-    /**
-     * Notifies that a virtual display is created.
-     *
-     * @param displayId The display id of the created virtual display.
-     */
-    public abstract void onVirtualDisplayCreated(int displayId);
-
     /**
      * Notifies that a virtual display is removed.
      *
diff --git a/services/core/java/com/android/server/vibrator/Vibration.java b/services/core/java/com/android/server/vibrator/Vibration.java
index fed6e7ee4686dbb17cda031eca18bb5fbe35f115..b2e808ac8e95c7a21efe414414e4c7a9eb789dbe 100644
--- a/services/core/java/com/android/server/vibrator/Vibration.java
+++ b/services/core/java/com/android/server/vibrator/Vibration.java
@@ -117,16 +117,16 @@ abstract class Vibration {
     static final class CallerInfo {
         public final VibrationAttributes attrs;
         public final int uid;
-        public final int displayId;
+        public final int deviceId;
         public final String opPkg;
         public final String reason;
 
-        CallerInfo(@NonNull VibrationAttributes attrs, int uid, int displayId,
-                String opPkg, String reason) {
+        CallerInfo(@NonNull VibrationAttributes attrs, int uid, int deviceId, String opPkg,
+                String reason) {
             Objects.requireNonNull(attrs);
             this.attrs = attrs;
             this.uid = uid;
-            this.displayId = displayId;
+            this.deviceId = deviceId;
             this.opPkg = opPkg;
             this.reason = reason;
         }
@@ -138,14 +138,14 @@ abstract class Vibration {
             CallerInfo that = (CallerInfo) o;
             return Objects.equals(attrs, that.attrs)
                     && uid == that.uid
-                    && displayId == that.displayId
+                    && deviceId == that.deviceId
                     && Objects.equals(opPkg, that.opPkg)
                     && Objects.equals(reason, that.reason);
         }
 
         @Override
         public int hashCode() {
-            return Objects.hash(attrs, uid, displayId, opPkg, reason);
+            return Objects.hash(attrs, uid, deviceId, opPkg, reason);
         }
 
         @Override
@@ -153,7 +153,7 @@ abstract class Vibration {
             return "CallerInfo{"
                     + " uid=" + uid
                     + ", opPkg=" + opPkg
-                    + ", displayId=" + displayId
+                    + ", deviceId=" + deviceId
                     + ", attrs=" + attrs
                     + ", reason=" + reason
                     + '}';
@@ -267,8 +267,8 @@ abstract class Vibration {
                     mStartTime == 0 ? "" : DEBUG_TIME_FORMAT.format(new Date(mStartTime)),
                     mEndTime == 0 ? "" : DEBUG_TIME_FORMAT.format(new Date(mEndTime)));
             String callerInfoStr = String.format(Locale.ROOT,
-                    " | %s (uid=%d, displayId=%d) | usage: %s (audio=%s) | flags: %s | reason: %s",
-                    mCallerInfo.opPkg, mCallerInfo.uid, mCallerInfo.displayId,
+                    " | %s (uid=%d, deviceId=%d) | usage: %s (audio=%s) | flags: %s | reason: %s",
+                    mCallerInfo.opPkg, mCallerInfo.uid, mCallerInfo.deviceId,
                     mCallerInfo.attrs.usageToString(),
                     AudioAttributes.usageToString(mCallerInfo.attrs.getAudioUsage()),
                     Long.toBinaryString(mCallerInfo.attrs.getFlags()),
diff --git a/services/core/java/com/android/server/vibrator/VibrationSettings.java b/services/core/java/com/android/server/vibrator/VibrationSettings.java
index 7f55836598b5feec677f78740189ff85e59e75cf..839c2075fa8c06ac0cb92f3d24f8827338244e5e 100644
--- a/services/core/java/com/android/server/vibrator/VibrationSettings.java
+++ b/services/core/java/com/android/server/vibrator/VibrationSettings.java
@@ -61,7 +61,6 @@ import android.util.Slog;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
 import android.util.proto.ProtoOutputStream;
-import android.view.Display;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
@@ -166,7 +165,6 @@ final class VibrationSettings {
     final MyUidObserver mUidObserver;
     @VisibleForTesting
     final SettingsBroadcastReceiver mSettingChangeReceiver;
-    final VirtualDeviceListener mVirtualDeviceListener;
 
     @GuardedBy("mLock")
     private final List<OnVibratorSettingsChanged> mListeners = new ArrayList<>();
@@ -180,6 +178,8 @@ final class VibrationSettings {
     @GuardedBy("mLock")
     @Nullable
     private PowerManagerInternal mPowerManagerInternal;
+    @Nullable
+    private VirtualDeviceManagerInternal mVirtualDeviceManagerInternal;
 
     @GuardedBy("mLock")
     private boolean mVibrateInputDevices;
@@ -207,8 +207,6 @@ final class VibrationSettings {
         mSettingObserver = new SettingsContentObserver(handler);
         mUidObserver = new MyUidObserver();
         mSettingChangeReceiver = new SettingsBroadcastReceiver();
-        mVirtualDeviceListener = new VirtualDeviceListener();
-
         mSystemUiPackage = LocalServices.getService(PackageManagerInternal.class)
                 .getSystemUiServiceComponent().getPackageName();
 
@@ -272,13 +270,6 @@ final class VibrationSettings {
                     }
                 });
 
-        VirtualDeviceManagerInternal vdm = LocalServices.getService(
-                VirtualDeviceManagerInternal.class);
-        if (vdm != null) {
-            vdm.registerVirtualDisplayListener(mVirtualDeviceListener);
-            vdm.registerAppsOnVirtualDeviceListener(mVirtualDeviceListener);
-        }
-
         registerSettingsChangeReceiver(USER_SWITCHED_INTENT_FILTER);
         registerSettingsChangeReceiver(INTERNAL_RINGER_MODE_CHANGED_INTENT_FILTER);
 
@@ -414,8 +405,14 @@ final class VibrationSettings {
                     && !BACKGROUND_PROCESS_USAGE_ALLOWLIST.contains(usage)) {
                 return Vibration.Status.IGNORED_BACKGROUND;
             }
-            if (mVirtualDeviceListener.isAppOrDisplayOnAnyVirtualDevice(callerInfo.uid,
-                    callerInfo.displayId)) {
+
+            if (callerInfo.deviceId != Context.DEVICE_ID_DEFAULT
+                    && callerInfo.deviceId != Context.DEVICE_ID_INVALID) {
+                return Vibration.Status.IGNORED_FROM_VIRTUAL_DEVICE;
+            }
+
+            if (callerInfo.deviceId == Context.DEVICE_ID_INVALID
+                    && isAppRunningOnAnyVirtualDevice(callerInfo.uid)) {
                 return Vibration.Status.IGNORED_FROM_VIRTUAL_DEVICE;
             }
 
@@ -794,6 +791,15 @@ final class VibrationSettings {
         return out;
     }
 
+    private boolean isAppRunningOnAnyVirtualDevice(int uid) {
+        if (mVirtualDeviceManagerInternal == null) {
+            mVirtualDeviceManagerInternal =
+                    LocalServices.getService(VirtualDeviceManagerInternal.class);
+        }
+        return mVirtualDeviceManagerInternal != null
+                && mVirtualDeviceManagerInternal.isAppRunningOnAnyVirtualDevice(uid);
+    }
+
     /** Implementation of {@link ContentObserver} to be registered to a setting {@link Uri}. */
     @VisibleForTesting
     final class SettingsContentObserver extends ContentObserver {
@@ -853,73 +859,4 @@ final class VibrationSettings {
             }
         }
     }
-
-    /**
-     * Implementation of Virtual Device listeners for the changes of virtual displays and of apps
-     * running on any virtual device.
-     */
-    final class VirtualDeviceListener implements
-            VirtualDeviceManagerInternal.VirtualDisplayListener,
-            VirtualDeviceManagerInternal.AppsOnVirtualDeviceListener {
-        @GuardedBy("mLock")
-        private final Set<Integer> mVirtualDisplays = new HashSet<>();
-        @GuardedBy("mLock")
-        private final Set<Integer> mAppsOnVirtualDevice = new HashSet<>();
-
-
-        @Override
-        public void onVirtualDisplayCreated(int displayId) {
-            synchronized (mLock) {
-                mVirtualDisplays.add(displayId);
-            }
-        }
-
-        @Override
-        public void onVirtualDisplayRemoved(int displayId) {
-            synchronized (mLock) {
-                mVirtualDisplays.remove(displayId);
-            }
-        }
-
-
-        @Override
-        public void onAppsOnAnyVirtualDeviceChanged(Set<Integer> allRunningUids) {
-            synchronized (mLock) {
-                mAppsOnVirtualDevice.clear();
-                mAppsOnVirtualDevice.addAll(allRunningUids);
-            }
-        }
-
-        /**
-         * @param uid:       uid of the calling app.
-         * @param displayId: the id of a Display.
-         * @return Returns true if:
-         * <ul>
-         *   <li> the displayId is valid, and it's owned by a virtual device.</li>
-         *   <li> the displayId is invalid, and the calling app (uid) is running on a virtual
-         *        device.</li>
-         * </ul>
-         */
-        public boolean isAppOrDisplayOnAnyVirtualDevice(int uid, int displayId) {
-            if (displayId == Display.DEFAULT_DISPLAY) {
-                // The default display is the primary physical display on the phone.
-                return false;
-            }
-
-            synchronized (mLock) {
-                if (displayId == Display.INVALID_DISPLAY) {
-                    // There is no Display object associated with the Context of calling
-                    // {@link SystemVibratorManager}, checking the calling UID instead.
-                    return mAppsOnVirtualDevice.contains(uid);
-                } else {
-                    // Other valid display IDs representing valid logical displays will be
-                    // checked
-                    // against the active virtual displays set built with the registered
-                    // {@link VirtualDisplayListener}.
-                    return mVirtualDisplays.contains(displayId);
-                }
-            }
-        }
-
-    }
 }
diff --git a/services/core/java/com/android/server/vibrator/VibratorManagerService.java b/services/core/java/com/android/server/vibrator/VibratorManagerService.java
index ace7777c9b58aacd0af70279c14a410ca34ac122..cf33cc5f43bdc8243df85f9a6fd3a249264dee3f 100644
--- a/services/core/java/com/android/server/vibrator/VibratorManagerService.java
+++ b/services/core/java/com/android/server/vibrator/VibratorManagerService.java
@@ -63,7 +63,6 @@ import android.util.IndentingPrintWriter;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.proto.ProtoOutputStream;
-import android.view.Display;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
@@ -385,7 +384,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
                     return false;
                 }
                 AlwaysOnVibration alwaysOnVibration = new AlwaysOnVibration(alwaysOnId,
-                        new Vibration.CallerInfo(attrs, uid, Display.DEFAULT_DISPLAY, opPkg,
+                        new Vibration.CallerInfo(attrs, uid, Context.DEVICE_ID_DEFAULT, opPkg,
                                 null), effects);
                 mAlwaysOnEffects.put(alwaysOnId, alwaysOnVibration);
                 updateAlwaysOnLocked(alwaysOnVibration);
@@ -397,16 +396,16 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
     }
 
     @Override // Binder call
-    public void vibrate(int uid, int displayId, String opPkg, @NonNull CombinedVibration effect,
+    public void vibrate(int uid, int deviceId, String opPkg, @NonNull CombinedVibration effect,
             @Nullable VibrationAttributes attrs, String reason, IBinder token) {
-        vibrateWithPermissionCheck(uid, displayId, opPkg, effect, attrs, reason, token);
+        vibrateWithPermissionCheck(uid, deviceId, opPkg, effect, attrs, reason, token);
     }
 
     @Override // Binder call
     public void performHapticFeedback(
-            int uid, int displayId, String opPkg, int constant, boolean always, String reason,
+            int uid, int deviceId, String opPkg, int constant, boolean always, String reason,
             IBinder token) {
-        performHapticFeedbackInternal(uid, displayId, opPkg, constant, always, reason, token);
+        performHapticFeedbackInternal(uid, deviceId, opPkg, constant, always, reason, token);
     }
 
     /**
@@ -417,7 +416,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
     @VisibleForTesting
     @Nullable
     HalVibration performHapticFeedbackInternal(
-            int uid, int displayId, String opPkg, int constant, boolean always, String reason,
+            int uid, int deviceId, String opPkg, int constant, boolean always, String reason,
             IBinder token) {
         HapticFeedbackVibrationProvider hapticVibrationProvider = getHapticVibrationProvider();
         if (hapticVibrationProvider == null) {
@@ -433,7 +432,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
         VibrationAttributes attrs =
                 hapticVibrationProvider.getVibrationAttributesForHapticFeedback(
                         constant, /* bypassVibrationIntensitySetting= */ always);
-        return vibrateWithoutPermissionCheck(uid, displayId, opPkg, combinedVibration, attrs,
+        return vibrateWithoutPermissionCheck(uid, deviceId, opPkg, combinedVibration, attrs,
                 "performHapticFeedback: " + reason, token);
     }
 
@@ -444,7 +443,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
      */
     @VisibleForTesting
     @Nullable
-    HalVibration vibrateWithPermissionCheck(int uid, int displayId, String opPkg,
+    HalVibration vibrateWithPermissionCheck(int uid, int deviceId, String opPkg,
             @NonNull CombinedVibration effect, @Nullable VibrationAttributes attrs,
             String reason, IBinder token) {
         Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "vibrate, reason = " + reason);
@@ -452,24 +451,24 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
             attrs = fixupVibrationAttributes(attrs, effect);
             mContext.enforceCallingOrSelfPermission(
                     android.Manifest.permission.VIBRATE, "vibrate");
-            return vibrateInternal(uid, displayId, opPkg, effect, attrs, reason, token);
+            return vibrateInternal(uid, deviceId, opPkg, effect, attrs, reason, token);
         } finally {
             Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
         }
     }
 
-    HalVibration vibrateWithoutPermissionCheck(int uid, int displayId, String opPkg,
+    HalVibration vibrateWithoutPermissionCheck(int uid, int deviceId, String opPkg,
             @NonNull CombinedVibration effect, @NonNull VibrationAttributes attrs,
             String reason, IBinder token) {
         Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "vibrate no perm check, reason = " + reason);
         try {
-            return vibrateInternal(uid, displayId, opPkg, effect, attrs, reason, token);
+            return vibrateInternal(uid, deviceId, opPkg, effect, attrs, reason, token);
         } finally {
             Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
         }
     }
 
-    private HalVibration vibrateInternal(int uid, int displayId, String opPkg,
+    private HalVibration vibrateInternal(int uid, int deviceId, String opPkg,
             @NonNull CombinedVibration effect, @NonNull VibrationAttributes attrs,
             String reason, IBinder token) {
         if (token == null) {
@@ -482,7 +481,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
         }
         // Create Vibration.Stats as close to the received request as possible, for tracking.
         HalVibration vib = new HalVibration(token, effect,
-                new Vibration.CallerInfo(attrs, uid, displayId, opPkg, reason));
+                new Vibration.CallerInfo(attrs, uid, deviceId, opPkg, reason));
         fillVibrationFallbacks(vib, effect);
 
         if (attrs.isFlagSet(VibrationAttributes.FLAG_INVALIDATE_SETTINGS_CACHE)) {
@@ -1558,10 +1557,9 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
         private ExternalVibrationHolder(ExternalVibration externalVibration) {
             super(externalVibration.getToken(), new Vibration.CallerInfo(
                     externalVibration.getVibrationAttributes(), externalVibration.getUid(),
-                    // TODO(b/243604888): propagating displayID from IExternalVibration instead of
-                    //  using INVALID_DISPLAY for all external vibrations.
-                    Display.INVALID_DISPLAY,
-                    externalVibration.getPackage(), null));
+                    // TODO(b/249785241): Find a way to link ExternalVibration to a VirtualDevice
+                    // instead of using DEVICE_ID_INVALID here and relying on the UID checks.
+                    Context.DEVICE_ID_INVALID, externalVibration.getPackage(), null));
             this.externalVibration = externalVibration;
             this.scale = IExternalVibratorService.SCALE_NONE;
             mStatus = Vibration.Status.RUNNING;
@@ -1974,8 +1972,6 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
             boolean alreadyUnderExternalControl = false;
             boolean waitForCompletion = false;
             synchronized (mLock) {
-                // TODO(b/243604888): propagating displayID from IExternalVibration instead of
-                // using INVALID_DISPLAY for all external vibrations.
                 Vibration.EndInfo vibrationEndInfo = shouldIgnoreVibrationLocked(
                         vibHolder.callerInfo);
 
@@ -2184,7 +2180,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
             IBinder deathBinder = commonOptions.background ? VibratorManagerService.this
                     : mShellCallbacksToken;
             HalVibration vib = vibrateWithPermissionCheck(Binder.getCallingUid(),
-                    Display.DEFAULT_DISPLAY, SHELL_PACKAGE_NAME, combined, attrs,
+                    Context.DEVICE_ID_DEFAULT, SHELL_PACKAGE_NAME, combined, attrs,
                     commonOptions.description, deathBinder);
             maybeWaitOnVibration(vib, commonOptions);
         }
@@ -2241,7 +2237,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
             IBinder deathBinder = commonOptions.background ? VibratorManagerService.this
                     : mShellCallbacksToken;
             HalVibration vib = performHapticFeedbackInternal(Binder.getCallingUid(),
-                    Display.DEFAULT_DISPLAY, SHELL_PACKAGE_NAME, constant,
+                    Context.DEVICE_ID_DEFAULT, SHELL_PACKAGE_NAME, constant,
                     /* always= */ commonOptions.force, /* reason= */ commonOptions.description,
                     deathBinder);
             maybeWaitOnVibration(vib, commonOptions);
diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java
index 2598a6bea1c0b28ccdb8357f678ae44874aa3633..cdff623209189e3866060094035f9f5c69e4fe3e 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java
@@ -259,8 +259,6 @@ public class VirtualDeviceManagerServiceTest {
     @Mock
     private Consumer<ArraySet<Integer>> mRunningAppsChangedCallback;
     @Mock
-    private VirtualDeviceManagerInternal.VirtualDisplayListener mDisplayListener;
-    @Mock
     private VirtualDeviceManagerInternal.AppsOnVirtualDeviceListener mAppsOnVirtualDeviceListener;
     @Mock
     IPowerManager mIPowerManagerMock;
@@ -723,28 +721,6 @@ public class VirtualDeviceManagerServiceTest {
         mDeviceImpl.onVirtualDisplayRemoved(DISPLAY_ID_1);
     }
 
-    @Test
-    public void onVirtualDisplayCreatedLocked_listenersNotified() {
-        mLocalService.registerVirtualDisplayListener(mDisplayListener);
-
-        mLocalService.onVirtualDisplayCreated(DISPLAY_ID_1);
-        TestableLooper.get(this).processAllMessages();
-
-        verify(mDisplayListener).onVirtualDisplayCreated(DISPLAY_ID_1);
-    }
-
-    @Test
-    public void onVirtualDisplayRemovedLocked_listenersNotified() {
-        mLocalService.registerVirtualDisplayListener(mDisplayListener);
-
-        addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1);
-
-        mLocalService.onVirtualDisplayRemoved(mDeviceImpl, DISPLAY_ID_1);
-        TestableLooper.get(this).processAllMessages();
-
-        verify(mDisplayListener).onVirtualDisplayRemoved(DISPLAY_ID_1);
-    }
-
     @Test
     public void onAppsOnVirtualDeviceChanged_singleVirtualDevice_listenersNotified() {
         ArraySet<Integer> uids = new ArraySet<>(Arrays.asList(UID_1, UID_2));
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java b/services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java
index 7a2bb5a90846e503627b09a0cfd9f39e5c5c7b11..f0803418376f06a1380971cc9f36356abab6a4c7 100644
--- a/services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java
+++ b/services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java
@@ -75,8 +75,6 @@ import android.platform.test.annotations.RequiresFlagsEnabled;
 import android.platform.test.flag.junit.CheckFlagsRule;
 import android.platform.test.flag.junit.DeviceFlagsValueProvider;
 import android.provider.Settings;
-import android.util.ArraySet;
-import android.view.Display;
 
 import androidx.test.InstrumentationRegistry;
 
@@ -103,7 +101,7 @@ public class VibrationSettingsTest {
     public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
 
     private static final int UID = 1;
-    private static final int VIRTUAL_DISPLAY_ID = 1;
+    private static final int VIRTUAL_DEVICE_ID = 1;
     private static final String SYSUI_PACKAGE_NAME = "sysui";
     private static final PowerSaveState NORMAL_POWER_STATE = new PowerSaveState.Builder().build();
     private static final PowerSaveState LOW_POWER_STATE = new PowerSaveState.Builder()
@@ -137,9 +135,6 @@ public class VibrationSettingsTest {
     private VibrationSettings mVibrationSettings;
     private PowerManagerInternal.LowPowerModeListener mRegisteredPowerModeListener;
     private BroadcastReceiver mRegisteredBatteryBroadcastReceiver;
-    private VirtualDeviceManagerInternal.VirtualDisplayListener mRegisteredVirtualDisplayListener;
-    private VirtualDeviceManagerInternal.AppsOnVirtualDeviceListener
-            mRegisteredAppsOnVirtualDeviceListener;
 
     @Before
     public void setUp() throws Exception {
@@ -155,14 +150,6 @@ public class VibrationSettingsTest {
         }).when(mPowerManagerInternalMock).registerLowPowerModeObserver(any());
         when(mPackageManagerInternalMock.getSystemUiServiceComponent())
                 .thenReturn(new ComponentName(SYSUI_PACKAGE_NAME, ""));
-        doAnswer(invocation -> {
-            mRegisteredVirtualDisplayListener = invocation.getArgument(0);
-            return null;
-        }).when(mVirtualDeviceManagerInternalMock).registerVirtualDisplayListener(any());
-        doAnswer(invocation -> {
-            mRegisteredAppsOnVirtualDeviceListener = invocation.getArgument(0);
-            return null;
-        }).when(mVirtualDeviceManagerInternalMock).registerAppsOnVirtualDeviceListener(any());
 
         removeServicesForTest();
         addServicesForTest();
@@ -654,62 +641,20 @@ public class VibrationSettingsTest {
     }
 
     @Test
-    public void shouldIgnoreVibrationFromVirtualDisplays_displayNonVirtual_neverIgnored() {
-        // Vibrations from the primary display is never ignored regardless of the creation and
-        // removal of virtual displays and of the changes of apps running on virtual displays.
-        mRegisteredVirtualDisplayListener.onVirtualDisplayCreated(VIRTUAL_DISPLAY_ID);
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(
-                new ArraySet<>(Arrays.asList(UID)));
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsageAndDisplay(usage, Display.DEFAULT_DISPLAY);
-        }
-
-        mRegisteredVirtualDisplayListener.onVirtualDisplayRemoved(VIRTUAL_DISPLAY_ID);
+    public void shouldIgnoreVibrationFromVirtualDevices_defaultDevice_neverIgnored() {
+        // Vibrations from the primary device is never ignored.
         for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsageAndDisplay(usage, Display.DEFAULT_DISPLAY);
-        }
-
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(new ArraySet<>());
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsageAndDisplay(usage, Display.DEFAULT_DISPLAY);
+            assertVibrationNotIgnoredForUsageAndDevice(usage, Context.DEVICE_ID_DEFAULT);
         }
     }
 
     @Test
-    public void shouldIgnoreVibrationFromVirtualDisplays_displayVirtual() {
-        // Ignore the vibration when the coming display id represents a virtual display.
-        mRegisteredVirtualDisplayListener.onVirtualDisplayCreated(VIRTUAL_DISPLAY_ID);
-
+    public void shouldIgnoreVibrationFromVirtualDevices_virtualDevice_alwaysIgnored() {
+        // Ignore the vibration when the coming device id represents a virtual device.
         for (int usage : ALL_USAGES) {
-            assertVibrationIgnoredForUsageAndDisplay(usage, VIRTUAL_DISPLAY_ID,
+            assertVibrationIgnoredForUsageAndDevice(usage, VIRTUAL_DEVICE_ID,
                     Vibration.Status.IGNORED_FROM_VIRTUAL_DEVICE);
         }
-
-        // Stop ignoring when the virtual display is removed.
-        mRegisteredVirtualDisplayListener.onVirtualDisplayRemoved(VIRTUAL_DISPLAY_ID);
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsageAndDisplay(usage, VIRTUAL_DISPLAY_ID);
-        }
-    }
-
-
-    @Test
-    public void shouldIgnoreVibrationFromVirtualDisplays_appsOnVirtualDisplay() {
-        // Ignore when the passed-in display id is invalid and the calling uid is on a virtual
-        // display.
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(
-                new ArraySet<>(Arrays.asList(UID)));
-        for (int usage : ALL_USAGES) {
-            assertVibrationIgnoredForUsageAndDisplay(usage, Display.INVALID_DISPLAY,
-                    Vibration.Status.IGNORED_FROM_VIRTUAL_DEVICE);
-        }
-
-        // Stop ignoring when the app is no longer on virtual display.
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(new ArraySet<>());
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsageAndDisplay(usage, Display.INVALID_DISPLAY);
-        }
-
     }
 
     @Test
@@ -932,13 +877,13 @@ public class VibrationSettingsTest {
 
     private void assertVibrationIgnoredForUsage(@VibrationAttributes.Usage int usage,
             Vibration.Status expectedStatus) {
-        assertVibrationIgnoredForUsageAndDisplay(usage, Display.DEFAULT_DISPLAY, expectedStatus);
+        assertVibrationIgnoredForUsageAndDevice(usage, Context.DEVICE_ID_DEFAULT, expectedStatus);
     }
 
-    private void assertVibrationIgnoredForUsageAndDisplay(@VibrationAttributes.Usage int usage,
-            int displayId, Vibration.Status expectedStatus) {
+    private void assertVibrationIgnoredForUsageAndDevice(@VibrationAttributes.Usage int usage,
+            int deviceId, Vibration.Status expectedStatus) {
         Vibration.CallerInfo callerInfo = new Vibration.CallerInfo(
-                VibrationAttributes.createForUsage(usage), UID, displayId, null, null);
+                VibrationAttributes.createForUsage(usage), UID, deviceId, null, null);
         assertEquals(errorMessageForUsage(usage), expectedStatus,
                 mVibrationSettings.shouldIgnoreVibration(callerInfo));
     }
@@ -946,7 +891,7 @@ public class VibrationSettingsTest {
     private void assertVibrationIgnoredForAttributes(VibrationAttributes attrs,
             Vibration.Status expectedStatus) {
         Vibration.CallerInfo callerInfo = new Vibration.CallerInfo(attrs, UID,
-                Display.DEFAULT_DISPLAY, null, null);
+                Context.DEVICE_ID_DEFAULT, null, null);
         assertEquals(errorMessageForAttributes(attrs), expectedStatus,
                 mVibrationSettings.shouldIgnoreVibration(callerInfo));
     }
@@ -957,27 +902,27 @@ public class VibrationSettingsTest {
 
     private void assertVibrationNotIgnoredForUsageAndFlags(@VibrationAttributes.Usage int usage,
             @VibrationAttributes.Flag int flags) {
-        assertVibrationNotIgnoredForUsageAndFlagsAndDisplay(usage, Display.DEFAULT_DISPLAY, flags);
+        assertVibrationNotIgnoredForUsageAndFlagsAndDevice(usage, Context.DEVICE_ID_DEFAULT, flags);
     }
 
-    private void assertVibrationNotIgnoredForUsageAndDisplay(@VibrationAttributes.Usage int usage,
-            int displayId) {
-        assertVibrationNotIgnoredForUsageAndFlagsAndDisplay(usage, displayId, /* flags= */ 0);
+    private void assertVibrationNotIgnoredForUsageAndDevice(@VibrationAttributes.Usage int usage,
+            int deviceId) {
+        assertVibrationNotIgnoredForUsageAndFlagsAndDevice(usage, deviceId, /* flags= */ 0);
     }
 
-    private void assertVibrationNotIgnoredForUsageAndFlagsAndDisplay(
-            @VibrationAttributes.Usage int usage, int displayId,
+    private void assertVibrationNotIgnoredForUsageAndFlagsAndDevice(
+            @VibrationAttributes.Usage int usage, int deviceId,
             @VibrationAttributes.Flag int flags) {
         Vibration.CallerInfo callerInfo = new Vibration.CallerInfo(
                 new VibrationAttributes.Builder().setUsage(usage).setFlags(flags).build(), UID,
-                displayId, null, null);
+                deviceId, null, null);
         assertNull(errorMessageForUsage(usage),
                 mVibrationSettings.shouldIgnoreVibration(callerInfo));
     }
 
     private void assertVibrationNotIgnoredForAttributes(VibrationAttributes attrs) {
         Vibration.CallerInfo callerInfo = new Vibration.CallerInfo(attrs, UID,
-                Display.DEFAULT_DISPLAY, null, null);
+                Context.DEVICE_ID_DEFAULT, null, null);
         assertNull(errorMessageForAttributes(attrs),
                 mVibrationSettings.shouldIgnoreVibration(callerInfo));
     }
@@ -1032,7 +977,7 @@ public class VibrationSettingsTest {
     private Vibration.CallerInfo createCallerInfo(int uid, String opPkg,
             @VibrationAttributes.Usage int usage) {
         VibrationAttributes attrs = VibrationAttributes.createForUsage(usage);
-        return new Vibration.CallerInfo(attrs, uid, VIRTUAL_DISPLAY_ID, opPkg, null);
+        return new Vibration.CallerInfo(attrs, uid, VIRTUAL_DEVICE_ID, opPkg, null);
     }
 
     private void setBatteryReceiverRegistrationResult(Intent result) {
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/VibrationThreadTest.java b/services/tests/vibrator/src/com/android/server/vibrator/VibrationThreadTest.java
index 085241ff971a52a6323cf8bbc164002d422c64b3..b0aef47d0900f7e2cb3d7be56c57e3c8cf680a66 100644
--- a/services/tests/vibrator/src/com/android/server/vibrator/VibrationThreadTest.java
+++ b/services/tests/vibrator/src/com/android/server/vibrator/VibrationThreadTest.java
@@ -88,7 +88,7 @@ public class VibrationThreadTest {
 
     private static final int TEST_TIMEOUT_MILLIS = 900;
     private static final int UID = Process.ROOT_UID;
-    private static final int DISPLAY_ID = 10;
+    private static final int DEVICE_ID = 10;
     private static final int VIBRATOR_ID = 1;
     private static final String PACKAGE_NAME = "package";
     private static final VibrationAttributes ATTRS = new VibrationAttributes.Builder().build();
@@ -250,7 +250,7 @@ public class VibrationThreadTest {
         Vibration.EndInfo cancelVibrationInfo = new Vibration.EndInfo(
                 Vibration.Status.CANCELLED_SUPERSEDED, new Vibration.CallerInfo(
                 VibrationAttributes.createForUsage(VibrationAttributes.USAGE_ALARM), /* uid= */
-                1, /* displayId= */ -1, /* opPkg= */ null, /* reason= */ null));
+                1, /* deviceId= */ -1, /* opPkg= */ null, /* reason= */ null));
         mVibrationConductor.notifyCancelled(
                 cancelVibrationInfo,
                 /* immediate= */ false);
@@ -1641,7 +1641,7 @@ public class VibrationThreadTest {
 
     private HalVibration createVibration(CombinedVibration effect) {
         return new HalVibration(mVibrationToken, effect,
-                new Vibration.CallerInfo(ATTRS, UID, DISPLAY_ID, PACKAGE_NAME, "reason"));
+                new Vibration.CallerInfo(ATTRS, UID, DEVICE_ID, PACKAGE_NAME, "reason"));
     }
 
     private SparseArray<VibratorController> createVibratorControllers() {
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/VibratorManagerServiceTest.java b/services/tests/vibrator/src/com/android/server/vibrator/VibratorManagerServiceTest.java
index 3dfaed69dea6e84e7935aab493489f30c7a91c54..3fce9e7a83efa6de035d3278159f801a666c1dc2 100644
--- a/services/tests/vibrator/src/com/android/server/vibrator/VibratorManagerServiceTest.java
+++ b/services/tests/vibrator/src/com/android/server/vibrator/VibratorManagerServiceTest.java
@@ -84,10 +84,8 @@ import android.os.vibrator.VibrationConfig;
 import android.os.vibrator.VibrationEffectSegment;
 import android.platform.test.flag.junit.SetFlagsRule;
 import android.provider.Settings;
-import android.util.ArraySet;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
-import android.view.Display;
 import android.view.HapticFeedbackConstants;
 import android.view.InputDevice;
 import android.view.flags.Flags;
@@ -129,7 +127,7 @@ public class VibratorManagerServiceTest {
     // be cancelled in the body of the individual test.
     private static final int CLEANUP_TIMEOUT_MILLIS = 100;
     private static final int UID = Process.ROOT_UID;
-    private static final int VIRTUAL_DISPLAY_ID = 1;
+    private static final int VIRTUAL_DEVICE_ID = 1;
     private static final String PACKAGE_NAME = "package";
     private static final PowerSaveState NORMAL_POWER_STATE = new PowerSaveState.Builder().build();
     private static final PowerSaveState LOW_POWER_STATE = new PowerSaveState.Builder()
@@ -190,9 +188,6 @@ public class VibratorManagerServiceTest {
     private PowerManagerInternal.LowPowerModeListener mRegisteredPowerModeListener;
     private VibratorManagerService.ExternalVibratorService mExternalVibratorService;
     private VibrationConfig mVibrationConfig;
-    private VirtualDeviceManagerInternal.VirtualDisplayListener mRegisteredVirtualDisplayListener;
-    private VirtualDeviceManagerInternal.AppsOnVirtualDeviceListener
-            mRegisteredAppsOnVirtualDeviceListener;
     private InputManagerGlobal.TestSession mInputManagerGlobalSession;
     private InputManager mInputManager;
 
@@ -223,14 +218,6 @@ public class VibratorManagerServiceTest {
             mRegisteredPowerModeListener = invocation.getArgument(0);
             return null;
         }).when(mPowerManagerInternalMock).registerLowPowerModeObserver(any());
-        doAnswer(invocation -> {
-            mRegisteredVirtualDisplayListener = invocation.getArgument(0);
-            return null;
-        }).when(mVirtualDeviceManagerInternalMock).registerVirtualDisplayListener(any());
-        doAnswer(invocation -> {
-            mRegisteredAppsOnVirtualDeviceListener = invocation.getArgument(0);
-            return null;
-        }).when(mVirtualDeviceManagerInternalMock).registerAppsOnVirtualDeviceListener(any());
 
         setUserSetting(Settings.System.VIBRATE_WHEN_RINGING, 1);
         setUserSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
@@ -273,6 +260,7 @@ public class VibratorManagerServiceTest {
 
         LocalServices.removeServiceForTest(PackageManagerInternal.class);
         LocalServices.removeServiceForTest(PowerManagerInternal.class);
+        LocalServices.removeServiceForTest(VirtualDeviceManagerInternal.class);
         // Ignore potential exceptions about the looper having never dispatched any messages.
         mTestLooper.stopAutoDispatchAndIgnoreExceptions();
         if (mInputManagerGlobalSession != null) {
@@ -1510,64 +1498,32 @@ public class VibratorManagerServiceTest {
     }
 
     @Test
-    public void vibrate_withVirtualDisplayChange_ignoreVibrationFromVirtualDisplay()
-            throws Exception {
+    public void vibrate_ignoreVibrationFromVirtualDevice() throws Exception {
         mockVibrators(1);
         VibratorManagerService service = createSystemReadyService();
-        mRegisteredVirtualDisplayListener.onVirtualDisplayCreated(VIRTUAL_DISPLAY_ID);
 
-        vibrateWithDisplay(service,
-                VIRTUAL_DISPLAY_ID,
+        vibrateWithDevice(service,
+                VIRTUAL_DEVICE_ID,
                 CombinedVibration.startParallel()
                         .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
                         .combine(),
                 HAPTIC_FEEDBACK_ATTRS);
 
-        // Haptic feedback ignored when it's from a virtual display.
+        // Haptic feedback ignored when it's from a virtual device.
         assertFalse(waitUntil(s -> s.isVibrating(1), service, /* timeout= */ 50));
 
-        mRegisteredVirtualDisplayListener.onVirtualDisplayRemoved(VIRTUAL_DISPLAY_ID);
-        vibrateWithDisplay(service,
-                VIRTUAL_DISPLAY_ID,
+        vibrateWithDevice(service,
+                Context.DEVICE_ID_DEFAULT,
                 CombinedVibration.startParallel()
                         .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
                         .combine(),
                 HAPTIC_FEEDBACK_ATTRS);
-        // Haptic feedback played normally when the virtual display is removed.
+        // Haptic feedback played normally when it's from the default device.
         assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
 
         cancelVibrate(service);  // Clean up long-ish effect.
     }
 
-    @Test
-    public void vibrate_withAppsOnVirtualDisplayChange_ignoreVibrationFromVirtualDisplay()
-            throws Exception {
-        mockVibrators(1);
-        VibratorManagerService service = createSystemReadyService();
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(
-                new ArraySet<>(Arrays.asList(UID)));
-        vibrateWithDisplay(service,
-                Display.INVALID_DISPLAY,
-                CombinedVibration.startParallel()
-                        .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
-                        .combine(),
-                HAPTIC_FEEDBACK_ATTRS);
-
-        // Haptic feedback ignored when it's from an app running virtual display.
-        assertFalse(waitUntil(s -> s.isVibrating(1), service, /* timeout= */ 50));
-
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(new ArraySet<>());
-        vibrateWithDisplay(service,
-                Display.INVALID_DISPLAY,
-                CombinedVibration.startParallel()
-                        .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
-                        .combine(),
-                HAPTIC_FEEDBACK_ATTRS);
-        // Haptic feedback played normally when the same app no long runs on a virtual display.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-        cancelVibrate(service);  // Clean up long-ish effect.
-    }
-
     @Test
     public void vibrate_prebakedAndComposedVibrationsWithFallbacks_playsFallbackOnlyForPredefined()
             throws Exception {
@@ -1685,7 +1641,7 @@ public class VibratorManagerServiceTest {
     }
 
     @Test
-    public void onExternalVibration_ignoreVibrationFromVirtualDevices() throws Exception {
+    public void onExternalVibration_ignoreVibrationFromVirtualDevices() {
         mockVibrators(1);
         mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
         createSystemReadyService();
@@ -1697,8 +1653,8 @@ public class VibratorManagerServiceTest {
         int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
         assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
 
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(
-                new ArraySet<>(Arrays.asList(UID)));
+        when(mVirtualDeviceManagerInternalMock.isAppRunningOnAnyVirtualDevice(UID))
+                .thenReturn(true);
         scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
         assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
     }
@@ -2396,7 +2352,7 @@ public class VibratorManagerServiceTest {
     private HalVibration performHapticFeedbackAndWaitUntilFinished(VibratorManagerService service,
                 int constant, boolean always) throws InterruptedException {
         HalVibration vib =
-                service.performHapticFeedbackInternal(UID, Display.DEFAULT_DISPLAY, PACKAGE_NAME,
+                service.performHapticFeedbackInternal(UID, Context.DEVICE_ID_DEFAULT, PACKAGE_NAME,
                         constant, always, "some reason", service);
         if (vib != null) {
             vib.waitForEnd();
@@ -2414,7 +2370,7 @@ public class VibratorManagerServiceTest {
     private HalVibration vibrateAndWaitUntilFinished(VibratorManagerService service,
             CombinedVibration effect, VibrationAttributes attrs) throws InterruptedException {
         HalVibration vib =
-                service.vibrateWithPermissionCheck(UID, Display.DEFAULT_DISPLAY, PACKAGE_NAME,
+                service.vibrateWithPermissionCheck(UID, Context.DEVICE_ID_DEFAULT, PACKAGE_NAME,
                         effect, attrs, "some reason", service);
         if (vib != null) {
             vib.waitForEnd();
@@ -2430,12 +2386,12 @@ public class VibratorManagerServiceTest {
 
     private void vibrate(VibratorManagerService service, CombinedVibration effect,
             VibrationAttributes attrs) {
-        vibrateWithDisplay(service, Display.DEFAULT_DISPLAY, effect, attrs);
+        vibrateWithDevice(service, Context.DEVICE_ID_DEFAULT, effect, attrs);
     }
 
-    private void vibrateWithDisplay(VibratorManagerService service, int displayId,
+    private void vibrateWithDevice(VibratorManagerService service, int deviceId,
             CombinedVibration effect, VibrationAttributes attrs) {
-        service.vibrate(UID, displayId, PACKAGE_NAME, effect, attrs, "some reason", service);
+        service.vibrate(UID, deviceId, PACKAGE_NAME, effect, attrs, "some reason", service);
     }
 
     private boolean waitUntil(Predicate<VibratorManagerService> predicate,
diff --git a/tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java b/tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java
index 421ceb797c156a2227f9429bae0741f40c638758..07b733830bd3b82f4b93f8cc7aa3d3658a642d11 100644
--- a/tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java
+++ b/tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java
@@ -50,7 +50,7 @@ import org.junit.runners.JUnit4;
 public class VibratorManagerServicePermissionTest {
 
     private static final String PACKAGE_NAME = "com.android.framework.permission.tests";
-    private static final int DISPLAY_ID = 1;
+    private static final int DEVICE_ID = 1;
     private static final CombinedVibration EFFECT =
             CombinedVibration.createParallel(
                     VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE));
@@ -107,7 +107,7 @@ public class VibratorManagerServicePermissionTest {
     @Test
     public void testVibrateWithoutPermissionFails() throws RemoteException {
         expectSecurityException("VIBRATE");
-        mVibratorService.vibrate(Process.myUid(), DISPLAY_ID, PACKAGE_NAME, EFFECT, ATTRS,
+        mVibratorService.vibrate(Process.myUid(), DEVICE_ID, PACKAGE_NAME, EFFECT, ATTRS,
                 "testVibrate",
                 new Binder());
     }
@@ -117,7 +117,7 @@ public class VibratorManagerServicePermissionTest {
             throws RemoteException {
         getInstrumentation().getUiAutomation().adoptShellPermissionIdentity(
                 Manifest.permission.VIBRATE);
-        mVibratorService.vibrate(Process.myUid(), DISPLAY_ID, PACKAGE_NAME, EFFECT, ATTRS,
+        mVibratorService.vibrate(Process.myUid(), DEVICE_ID, PACKAGE_NAME, EFFECT, ATTRS,
                 "testVibrate",
                 new Binder());
     }
@@ -127,7 +127,7 @@ public class VibratorManagerServicePermissionTest {
         expectSecurityException("UPDATE_APP_OPS_STATS");
         getInstrumentation().getUiAutomation().adoptShellPermissionIdentity(
                 Manifest.permission.VIBRATE);
-        mVibratorService.vibrate(Process.SYSTEM_UID, DISPLAY_ID, "android", EFFECT, ATTRS,
+        mVibratorService.vibrate(Process.SYSTEM_UID, DEVICE_ID, "android", EFFECT, ATTRS,
                 "testVibrate",
                 new Binder());
     }
@@ -137,7 +137,7 @@ public class VibratorManagerServicePermissionTest {
         getInstrumentation().getUiAutomation().adoptShellPermissionIdentity(
                 Manifest.permission.VIBRATE,
                 Manifest.permission.UPDATE_APP_OPS_STATS);
-        mVibratorService.vibrate(Process.SYSTEM_UID, DISPLAY_ID, "android", EFFECT, ATTRS,
+        mVibratorService.vibrate(Process.SYSTEM_UID, DEVICE_ID, "android", EFFECT, ATTRS,
                 "testVibrate",
                 new Binder());
     }