Use ADD_MIRROR_DISPLAY in VDM Demo.

Bug: 378605160
Test: manual
Flag: EXEMPT test app
Change-Id: Ib8eaf06bcf18890986508694291b52a0b01bbf3a
diff --git a/samples/VirtualDeviceManager/host/AndroidManifest.xml b/samples/VirtualDeviceManager/host/AndroidManifest.xml
index 33058a6..b88d280 100644
--- a/samples/VirtualDeviceManager/host/AndroidManifest.xml
+++ b/samples/VirtualDeviceManager/host/AndroidManifest.xml
@@ -37,6 +37,9 @@
         android:name="android.permission.ADD_TRUSTED_DISPLAY"
         tools:ignore="ProtectedPermissions" />
     <uses-permission
+        android:name="android.permission.ADD_MIRROR_DISPLAY"
+        tools:ignore="ProtectedPermissions" />
+    <uses-permission
         android:name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE"
         tools:ignore="ProtectedPermissions" />
 
diff --git a/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/MainActivity.java b/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/MainActivity.java
index 1977ad3..2953642 100644
--- a/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/MainActivity.java
+++ b/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/MainActivity.java
@@ -18,7 +18,6 @@
 
 import android.Manifest;
 import android.app.AlertDialog;
-import android.companion.AssociationRequest;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -205,16 +204,13 @@
                     }
                     if (mHomeDisplayButton != null) {
                         mHomeDisplayButton.setEnabled(
-                                mPreferenceController.getBoolean(R
-                                        .string.internal_pref_home_displays_supported));
+                                mPreferenceController.getBoolean(
+                                        R.string.internal_pref_home_displays_supported));
                         mHomeDisplayButton.setVisibility(visibility);
                     }
                     if (mMirrorDisplayButton != null) {
                         mMirrorDisplayButton.setEnabled(
-                                mPreferenceController.getString(R.string.pref_device_profile)
-                                        .equals(AssociationRequest.DEVICE_PROFILE_APP_STREAMING)
-                                        && mPreferenceController.getBoolean(
-                                                R.string.internal_pref_mirror_displays_supported));
+                                VdmCompat.isMirrorDisplaySupported(this, mPreferenceController));
                         mMirrorDisplayButton.setVisibility(visibility);
                     }
                 });
diff --git a/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/VdmCompat.java b/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/VdmCompat.java
index 6d0897d..d8a081d 100644
--- a/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/VdmCompat.java
+++ b/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/VdmCompat.java
@@ -16,11 +16,16 @@
 
 package com.example.android.vdmdemo.host;
 
+import static android.Manifest.permission.ADD_MIRROR_DISPLAY;
+
+import android.companion.AssociationRequest;
 import android.companion.virtual.VirtualDeviceManager.VirtualDevice;
-import android.companion.virtual.flags.Flags;
+import android.companion.virtualdevice.flags.Flags;
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.hardware.display.VirtualDisplayConfig;
 import android.hardware.input.InputManager;
+import android.os.Build;
 import android.view.InputDevice;
 
 import androidx.core.os.BuildCompat;
@@ -34,7 +39,7 @@
 
     static VirtualDisplayConfig.Builder setHomeSupported(
             VirtualDisplayConfig.Builder builder, int flags) {
-        if (BuildCompat.isAtLeastV() && Flags.vdmCustomHome()) {
+        if (BuildCompat.isAtLeastV() && android.companion.virtual.flags.Flags.vdmCustomHome()) {
             return builder.setHomeSupported(true);
         } else {
             return builder.setFlags(flags | VIRTUAL_DISPLAY_FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS);
@@ -61,4 +66,18 @@
         }
         return true;
     }
+
+    static boolean isMirrorDisplaySupported(Context context,
+            PreferenceController preferenceController) {
+        if (!preferenceController.getBoolean(R.string.internal_pref_mirror_displays_supported)) {
+            return false;
+        }
+        // TODO: replace with isAtLeastB once available.
+        if (Flags.enableLimitedVdmRole()) {
+            return context.checkCallingOrSelfPermission(ADD_MIRROR_DISPLAY)
+                    == PackageManager.PERMISSION_GRANTED;
+        }
+        return preferenceController.getString(R.string.pref_device_profile)
+                .equals(AssociationRequest.DEVICE_PROFILE_APP_STREAMING);
+    }
 }