diff --git a/tests/framework/base/activitymanager/app/AndroidManifest.xml b/tests/framework/base/activitymanager/app/AndroidManifest.xml
index 58a30a0..b787a31 100755
--- a/tests/framework/base/activitymanager/app/AndroidManifest.xml
+++ b/tests/framework/base/activitymanager/app/AndroidManifest.xml
@@ -419,9 +419,6 @@
         <receiver
             android:name=".ToastReceiver"
             android:exported="true" />
-        <activity
-            android:name=".PresentationActivity"
-            android:exported="true" />
     </application>
 </manifest>
 
diff --git a/tests/framework/base/activitymanager/app/src/android/server/am/Components.java b/tests/framework/base/activitymanager/app/src/android/server/am/Components.java
index 7377031..a02fe85 100644
--- a/tests/framework/base/activitymanager/app/src/android/server/am/Components.java
+++ b/tests/framework/base/activitymanager/app/src/android/server/am/Components.java
@@ -68,7 +68,6 @@
     public static final ComponentName NO_HISTORY_ACTIVITY = component("NoHistoryActivity");
     public static final ComponentName NO_RELAUNCH_ACTIVITY = component("NoRelaunchActivity");
     public static final ComponentName NON_RESIZEABLE_ACTIVITY = component("NonResizeableActivity");
-    public static final ComponentName PRESENTATION_ACTIVITY = component("PresentationActivity");
     public static final ComponentName PIP_ACTIVITY = component("PipActivity");
     public static final ComponentName PIP_ACTIVITY2 = component("PipActivity2");
     public static final ComponentName PIP_ACTIVITY_WITH_SAME_AFFINITY =
@@ -329,17 +328,12 @@
         public static final String KEY_LAUNCH_TARGET_COMPONENT = "launch_target_component";
         public static final String KEY_PUBLIC_DISPLAY = "public_display";
         public static final String KEY_RESIZE_DISPLAY = "resize_display";
-        public static final String KEY_PRESENTATION_DISPLAY = "presentation_display";
         // Value constants of {@link #KEY_COMMAND}.
         public static final String COMMAND_CREATE_DISPLAY = "create_display";
         public static final String COMMAND_DESTROY_DISPLAY = "destroy_display";
         public static final String COMMAND_RESIZE_DISPLAY = "resize_display";
     }
 
-    public static class PresentationActivity {
-        public static final String KEY_DISPLAY_ID = "display_id";
-    }
-
     private static ComponentName component(String className) {
         return component(Components.class, className);
     }
diff --git a/tests/framework/base/activitymanager/app/src/android/server/am/PresentationActivity.java b/tests/framework/base/activitymanager/app/src/android/server/am/PresentationActivity.java
deleted file mode 100644
index 0036aaf..0000000
--- a/tests/framework/base/activitymanager/app/src/android/server/am/PresentationActivity.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package android.server.am;
-
-import android.app.Activity;
-import android.app.Presentation;
-import android.graphics.Color;
-import android.hardware.display.DisplayManager;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Display;
-import android.view.Gravity;
-import android.view.WindowManager;
-import android.widget.TextView;
-
-public class PresentationActivity extends Activity {
-
-    private static final String TAG = PresentationActivity.class.getSimpleName();
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        int displayId = getIntent().getExtras().getInt(
-                Components.PresentationActivity.KEY_DISPLAY_ID);
-
-        Display presentationDisplay =
-                getSystemService(DisplayManager.class).getDisplay(displayId);
-
-        createPresentationWindow(presentationDisplay);
-    }
-
-    private void createPresentationWindow(Display display) {
-        final TextView view = new TextView(this);
-        view.setText("I'm a presentation");
-        view.setGravity(Gravity.CENTER);
-        view.setBackgroundColor(Color.RED);
-
-        final Presentation presentation = new Presentation(this, display);
-        presentation.setContentView(view);
-        presentation.setTitle(getPackageName());
-        try {
-            presentation.show();
-        } catch (WindowManager.InvalidDisplayException e) {
-            Log.w(TAG, "Presentation blocked", e);
-        }
-    }
-}
diff --git a/tests/framework/base/activitymanager/app/src/android/server/am/VirtualDisplayActivity.java b/tests/framework/base/activitymanager/app/src/android/server/am/VirtualDisplayActivity.java
index 2d02733..8b1cdb1 100644
--- a/tests/framework/base/activitymanager/app/src/android/server/am/VirtualDisplayActivity.java
+++ b/tests/framework/base/activitymanager/app/src/android/server/am/VirtualDisplayActivity.java
@@ -17,7 +17,6 @@
 package android.server.am;
 
 import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY;
-import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_PRESENTATION;
 import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC;
 import static android.server.am.ActivityLauncher.KEY_DISPLAY_ID;
 import static android.server.am.ActivityLauncher.KEY_LAUNCH_ACTIVITY;
@@ -31,7 +30,6 @@
 import static android.server.am.Components.VirtualDisplayActivity.KEY_COUNT;
 import static android.server.am.Components.VirtualDisplayActivity.KEY_DENSITY_DPI;
 import static android.server.am.Components.VirtualDisplayActivity.KEY_LAUNCH_TARGET_COMPONENT;
-import static android.server.am.Components.VirtualDisplayActivity.KEY_PRESENTATION_DISPLAY;
 import static android.server.am.Components.VirtualDisplayActivity.KEY_PUBLIC_DISPLAY;
 import static android.server.am.Components.VirtualDisplayActivity.KEY_RESIZE_DISPLAY;
 import static android.server.am.Components.VirtualDisplayActivity.VIRTUAL_DISPLAY_PREFIX;
@@ -187,11 +185,6 @@
             flags |= VIRTUAL_DISPLAY_FLAG_PUBLIC | VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY;
         }
 
-        final boolean presentationDisplay = entry.extras.getBoolean(KEY_PRESENTATION_DISPLAY);
-        if (presentationDisplay) {
-            flags |= VIRTUAL_DISPLAY_FLAG_PRESENTATION;
-        }
-
         Log.d(TAG, "createVirtualDisplay: " + width + "x" + height + ", dpi: "
                 + densityDpi + ", canShowWithInsecureKeyguard=" + canShowWithInsecureKeyguard
                 + ", publicDisplay=" + publicDisplay);
diff --git a/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerDisplayTestBase.java b/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerDisplayTestBase.java
index 77ba78d..a82ae2d 100644
--- a/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerDisplayTestBase.java
+++ b/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerDisplayTestBase.java
@@ -28,7 +28,6 @@
 import static android.server.am.Components.VirtualDisplayActivity.KEY_COUNT;
 import static android.server.am.Components.VirtualDisplayActivity.KEY_DENSITY_DPI;
 import static android.server.am.Components.VirtualDisplayActivity.KEY_LAUNCH_TARGET_COMPONENT;
-import static android.server.am.Components.VirtualDisplayActivity.KEY_PRESENTATION_DISPLAY;
 import static android.server.am.Components.VirtualDisplayActivity.KEY_PUBLIC_DISPLAY;
 import static android.server.am.Components.VirtualDisplayActivity.KEY_RESIZE_DISPLAY;
 import static android.server.am.Components.VirtualDisplayActivity.VIRTUAL_DISPLAY_PREFIX;
@@ -213,7 +212,6 @@
         private boolean mCanShowWithInsecureKeyguard = false;
         private boolean mPublicDisplay = false;
         private boolean mResizeDisplay = true;
-        private boolean mPresentationDisplay = false;
         private ComponentName mLaunchActivity = null;
         private boolean mSimulateDisplay = false;
         private boolean mMustBeCreated = true;
@@ -247,11 +245,6 @@
             return this;
         }
 
-        VirtualDisplaySession setPresentationDisplay(boolean presentationDisplay) {
-             mPresentationDisplay = presentationDisplay;
-             return this;
-        }
-
         VirtualDisplaySession setLaunchActivity(ComponentName launchActivity) {
             mLaunchActivity = launchActivity;
             return this;
@@ -360,8 +353,7 @@
                     .append(" --ez " + KEY_CAN_SHOW_WITH_INSECURE_KEYGUARD + " ")
                     .append(mCanShowWithInsecureKeyguard)
                     .append(" --ez " + KEY_PUBLIC_DISPLAY + " ").append(mPublicDisplay)
-                    .append(" --ez " + KEY_RESIZE_DISPLAY + " ").append(mResizeDisplay)
-                    .append(" --ez " + KEY_PRESENTATION_DISPLAY + " ").append(mPresentationDisplay);
+                    .append(" --ez " + KEY_RESIZE_DISPLAY + " ").append(mResizeDisplay);
             if (mLaunchActivity != null) {
                 createVirtualDisplayCommand
                         .append(" --es " + KEY_LAUNCH_TARGET_COMPONENT + " ")
diff --git a/tests/framework/base/activitymanager/src/android/server/am/PresentationTest.java b/tests/framework/base/activitymanager/src/android/server/am/PresentationTest.java
deleted file mode 100644
index b7ead09..0000000
--- a/tests/framework/base/activitymanager/src/android/server/am/PresentationTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package android.server.am;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-import android.content.Intent;
-import android.hardware.display.DisplayManager;
-import android.platform.test.annotations.Presubmit;
-import android.server.am.Components;
-import android.server.am.ActivityManagerState.ActivityDisplay;
-import android.view.Display;
-
-import org.junit.Test;
-
-import java.util.List;
-
-@Presubmit
-public class PresentationTest extends ActivityManagerDisplayTestBase {
-
-    // WindowManager.LayoutParams.TYPE_PRESENTATION
-    private static final int TYPE_PRESENTATION = 2037;
-
-    @Test
-    public void testPresentationFollowsDisplayFlag() {
-        DisplayManager displayManager = mContext.getSystemService(DisplayManager.class);
-        for (Display display : displayManager.getDisplays()) {
-            launchPresentationActivity(display.getDisplayId());
-            if ((display.getFlags() & Display.FLAG_PRESENTATION) != Display.FLAG_PRESENTATION) {
-                assertNoPresentationDisplayed();
-            } else {
-                assertPresentationOnDisplay(display.getDisplayId());
-            }
-        }
-    }
-
-    @Test
-    public void testPresentationAllowedOnPresentationDisplay() throws Exception {
-        try (final VirtualDisplaySession virtualDisplaySession = new VirtualDisplaySession()) {
-            ActivityManagerState.ActivityDisplay display =
-                virtualDisplaySession
-                    .setPresentationDisplay(true)
-                    .setPublicDisplay(true)
-                    .createDisplay();
-
-            launchPresentationActivity(display.mId);
-            assertPresentationOnDisplay(display.mId);
-        }
-    }
-
-    @Test
-    public void testPresentationBlockedOnNonPresentationDisplay() throws Exception {
-        try(final VirtualDisplaySession virtualDisplaySession = new VirtualDisplaySession()) {
-            ActivityManagerState.ActivityDisplay display =
-                   virtualDisplaySession
-                            .setPresentationDisplay(false)
-                            .createDisplay();
-    
-            launchPresentationActivity(display.mId);
-            assertNoPresentationDisplayed();
-        }
-    }
-
-    private void assertNoPresentationDisplayed() {
-        final List<WindowManagerState.WindowState> presentationWindows =
-                mAmWmState.getWmState()
-                    .getWindowsByPackageName(
-                        Components.PRESENTATION_ACTIVITY.getPackageName(), TYPE_PRESENTATION);
-        assertTrue(presentationWindows.isEmpty());
-    }
-
-    private void assertPresentationOnDisplay(int displayId) {
-        final List<WindowManagerState.WindowState> presentationWindows =
-                mAmWmState.getWmState()
-                    .getWindowsByPackageName(
-                        Components.PRESENTATION_ACTIVITY.getPackageName(), TYPE_PRESENTATION);
-        assertEquals(presentationWindows.size(), 1);
-        WindowManagerState.WindowState presentationWindowState = presentationWindows.get(0);
-        assertEquals(presentationWindowState.getDisplayId(), displayId);
-    }
-
-    private void launchPresentationActivity(int displayId) {
-        Intent intent = new Intent();
-        intent.setComponent(Components.PRESENTATION_ACTIVITY);
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        intent.putExtra(Components.PresentationActivity.KEY_DISPLAY_ID, displayId);
-        mContext.startActivity(intent);
-        waitAndAssertTopResumedActivity(
-                Components.PRESENTATION_ACTIVITY,
-                Display.DEFAULT_DISPLAY,
-                "Launched activity must be on top");
-    }
-}
diff --git a/tests/framework/base/activitymanager/util/src/android/server/am/ActivityManagerTestBase.java b/tests/framework/base/activitymanager/util/src/android/server/am/ActivityManagerTestBase.java
index bc9eec1..192a1ac 100644
--- a/tests/framework/base/activitymanager/util/src/android/server/am/ActivityManagerTestBase.java
+++ b/tests/framework/base/activitymanager/util/src/android/server/am/ActivityManagerTestBase.java
@@ -68,7 +68,6 @@
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Display.INVALID_DISPLAY;
 
-import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -530,28 +529,6 @@
         return mContext.getResources().getConfiguration().smallestScreenWidthDp >= 600;
     }
 
-    public void waitAndAssertTopResumedActivity(ComponentName activityName, int displayId,
-            String message) {
-        mAmWmState.waitForValidState(activityName);
-        mAmWmState.waitForActivityState(activityName, STATE_RESUMED);
-        final String activityClassName = getActivityName(activityName);
-        mAmWmState.waitForWithAmState(state ->
-                        activityClassName.equals(state.getFocusedActivity()),
-                "Waiting for activity to be on top");
-
-        mAmWmState.assertSanity();
-        mAmWmState.assertFocusedActivity(message, activityName);
-        assertTrue("Activity must be resumed",
-                mAmWmState.getAmState().hasActivityState(activityName, STATE_RESUMED));
-        final int frontStackId = mAmWmState.getAmState().getFrontStackId(displayId);
-        ActivityManagerState.ActivityStack frontStackOnDisplay =
-                mAmWmState.getAmState().getStackById(frontStackId);
-        assertEquals("Resumed activity of front stack of the target display must match. " + message,
-                activityClassName, frontStackOnDisplay.mResumedActivity);
-        mAmWmState.assertFocusedStack("Top activity's stack must also be on top", frontStackId);
-        mAmWmState.assertVisibility(activityName, true /* visible */);
-    }
-
     // TODO: Switch to using a feature flag, when available.
     protected static boolean isUiModeLockedToVrHeadset() {
         final String output = runCommandAndPrintOutput("dumpsys uimode");
