diff --git a/packages/PrintSpooler/Android.bp b/packages/PrintSpooler/Android.bp
index 000e20f..5c5ec69 100644
--- a/packages/PrintSpooler/Android.bp
+++ b/packages/PrintSpooler/Android.bp
@@ -47,20 +47,23 @@
     resource_dirs: ["res"],
     srcs: [
         "src/**/*.java",
-        "src/com/android/printspooler/renderer/IPdfRenderer.aidl",
         "src/com/android/printspooler/renderer/IPdfEditor.aidl",
+        "src/com/android/printspooler/renderer/IPdfRenderer.aidl",
     ],
     platform_apis: true,
     static_libs: [
-        "android-support-v7-recyclerview",
-        "android-support-compat",
-        "android-support-media-compat",
-        "android-support-core-utils",
-        "android-support-core-ui",
-        "android-support-fragment",
         "android-support-annotations",
+        "android-support-compat",
+        "android-support-core-ui",
+        "android-support-core-utils",
+        "android-support-fragment",
+        "android-support-media-compat",
+        "android-support-v7-recyclerview",
         "printspooler_aconfig_flags_java_lib",
     ],
+    flags_packages: [
+        "printspooler_aconfig_declarations",
+    ],
     manifest: "AndroidManifest.xml",
 }
 
diff --git a/packages/PrintSpooler/flags/flags.aconfig b/packages/PrintSpooler/flags/flags.aconfig
index 4a76dff..5d45b3f 100644
--- a/packages/PrintSpooler/flags/flags.aconfig
+++ b/packages/PrintSpooler/flags/flags.aconfig
@@ -7,3 +7,14 @@
   description: "Log print job creation and state transitions."
   bug: "385340868"
 }
+
+flag {
+    name: "print_edge2edge"
+    namespace: "printing"
+    description: "Enable edge to edge in print spooler"
+    bug: "378652618"
+    is_fixed_read_only: true
+    metadata {
+        purpose: PURPOSE_BUGFIX
+    }
+}
\ No newline at end of file
diff --git a/packages/PrintSpooler/res/layout/select_printer_activity.xml b/packages/PrintSpooler/res/layout/select_printer_activity.xml
index 681924b..c5f19b1 100644
--- a/packages/PrintSpooler/res/layout/select_printer_activity.xml
+++ b/packages/PrintSpooler/res/layout/select_printer_activity.xml
@@ -15,6 +15,7 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/select_printer"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">
diff --git a/packages/PrintSpooler/res/values-night/themes.xml b/packages/PrintSpooler/res/values-night/themes.xml
index 76fa7b9..495bbcac 100644
--- a/packages/PrintSpooler/res/values-night/themes.xml
+++ b/packages/PrintSpooler/res/values-night/themes.xml
@@ -15,7 +15,7 @@
   limitations under the License.
   -->
 
-<resources>
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
     <style name="Theme.AddPrinterActivity" parent="@android:style/Theme.DeviceDefault.Dialog">
         <item name="android:listSeparatorTextViewStyle">@style/ListSeparator</item>
         <item name="android:textAppearanceListItemSecondary">@style/ListItemSecondary</item>
@@ -24,14 +24,14 @@
     <style name="Theme.SelectPrinterActivity"
            parent="android:style/Theme.DeviceDefault">
         <item name="android:textAppearanceListItemSecondary">@style/ListItemSecondary</item>
-        <item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
+        <item name="android:windowOptOutEdgeToEdgeEnforcement" android:featureFlag="!com.android.printspooler.flags.print_edge2edge">true</item>
     </style>
 
     <style name="Theme.PrintActivity" parent="@android:style/Theme.DeviceDefault">
         <item name="android:windowIsTranslucent">true</item>
         <item name="android:windowActionBar">false</item>
         <item name="android:windowNoTitle">true</item>
-        <item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
+        <item name="android:windowOptOutEdgeToEdgeEnforcement" android:featureFlag="!com.android.printspooler.flags.print_edge2edge">true</item>
     </style>
 
 </resources>
diff --git a/packages/PrintSpooler/res/values/themes.xml b/packages/PrintSpooler/res/values/themes.xml
index 22842f7..5fcbbf5 100644
--- a/packages/PrintSpooler/res/values/themes.xml
+++ b/packages/PrintSpooler/res/values/themes.xml
@@ -14,7 +14,7 @@
      limitations under the License.
 -->
 
-<resources>
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
     <style name="Theme.AddPrinterActivity" parent="@android:style/Theme.DeviceDefault.Light.Dialog">
         <item name="android:listSeparatorTextViewStyle">@style/ListSeparator</item>
         <item name="android:textAppearanceListItemSecondary">@style/ListItemSecondary</item>
@@ -24,7 +24,7 @@
            parent="android:style/Theme.DeviceDefault.Light">
         <item name="android:textAppearanceListItemSecondary">@style/ListItemSecondary</item>
         <item name="android:windowLightStatusBar">true</item>
-        <item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
+        <item name="android:windowOptOutEdgeToEdgeEnforcement" android:featureFlag="!com.android.printspooler.flags.print_edge2edge">true</item>
     </style>
 
     <style name="Theme.PrintActivity" parent="@android:style/Theme.DeviceDefault.Light">
@@ -32,7 +32,7 @@
         <item name="android:windowActionBar">false</item>
         <item name="android:windowNoTitle">true</item>
         <item name="android:windowLightStatusBar">true</item>
-        <item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
+        <item name="android:windowOptOutEdgeToEdgeEnforcement" android:featureFlag="!com.android.printspooler.flags.print_edge2edge">true</item>
     </style>
 
 </resources>
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java
index 74acf67..559d3ea 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java
@@ -66,10 +66,10 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.printspooler.R;
+import com.android.printspooler.flags.Flags;
 
 import java.util.ArrayList;
 import java.util.List;
-
 /**
  * This is an activity for selecting a printer.
  */
@@ -134,6 +134,8 @@
         mPrinterRegistry = new PrinterRegistry(this, null, LOADER_ID_PRINT_REGISTRY,
                 LOADER_ID_PRINT_REGISTRY_INT);
 
+        findViewById(R.id.select_printer).setFitsSystemWindows(Flags.printEdge2edge());
+
         // Hook up the list view.
         mListView = findViewById(android.R.id.list);
         final DestinationAdapter adapter = new DestinationAdapter();
diff --git a/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java b/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java
index 6ecffa4..720d5b1 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java
@@ -25,6 +25,7 @@
 import android.view.inputmethod.InputMethodManager;
 
 import com.android.printspooler.R;
+import com.android.printspooler.flags.Flags;
 
 /**
  * This class is a layout manager for the print screen. It has a sliding
@@ -93,6 +94,7 @@
         // The options view is sliding under the static header but appears
         // after it in the layout, so we will draw in opposite order.
         setChildrenDrawingOrderEnabled(true);
+        setFitsSystemWindows(Flags.printEdge2edge());
     }
 
     public void setOptionsStateChangeListener(OptionsStateChangeListener listener) {
@@ -148,6 +150,7 @@
         mExpandCollapseHandle = findViewById(R.id.expand_collapse_handle);
         mExpandCollapseIcon = findViewById(R.id.expand_collapse_icon);
 
+        mOptionsContainer.setFitsSystemWindows(Flags.printEdge2edge());
         mExpandCollapseHandle.setOnClickListener(this);
         mSummaryContent.setOnClickListener(this);
 
@@ -262,7 +265,7 @@
         }
 
         // The content host can grow vertically as much as needed - we will be covering it.
-        final int hostHeightMeasureSpec = MeasureSpec.makeMeasureSpec(MeasureSpec.UNSPECIFIED, 0);
+        final int hostHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
         measureChild(mEmbeddedContentContainer, widthMeasureSpec, hostHeightMeasureSpec);
 
         setMeasuredDimension(resolveSize(MeasureSpec.getSize(widthMeasureSpec), widthMeasureSpec),
@@ -271,25 +274,43 @@
 
     @Override
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        mStaticContent.layout(left, top, right, mStaticContent.getMeasuredHeight());
+        final int childLeft;
+        final int childRight;
+        final int childTop;
+        if (Flags.printEdge2edge()) {
+            childLeft = left + mPaddingLeft;
+            childRight = right - mPaddingRight;
+            childTop = top + mPaddingTop;
+        } else {
+            childLeft = left;
+            childRight = right;
+            childTop = top;
+        }
+        mStaticContent.layout(childLeft, childTop, childRight,
+                mStaticContent.getMeasuredHeight() + (Flags.printEdge2edge() ? mPaddingTop : 0));
 
         if (mSummaryContent.getVisibility() != View.GONE) {
-            mSummaryContent.layout(left, mStaticContent.getMeasuredHeight(), right,
-                    mStaticContent.getMeasuredHeight() + mSummaryContent.getMeasuredHeight());
+            mSummaryContent.layout(childLeft,
+                    (Flags.printEdge2edge() ? mStaticContent.getBottom()
+                            : mStaticContent.getMeasuredHeight()), childRight,
+                    (Flags.printEdge2edge() ? mStaticContent.getBottom()
+                            : mStaticContent.getMeasuredHeight())
+                                + mSummaryContent.getMeasuredHeight());
         }
 
-        final int dynContentTop = mStaticContent.getMeasuredHeight() + mCurrentOptionsOffsetY;
+        final int dynContentTop = mStaticContent.getBottom() + mCurrentOptionsOffsetY;
         final int dynContentBottom = dynContentTop + mDynamicContent.getMeasuredHeight();
 
-        mDynamicContent.layout(left, dynContentTop, right, dynContentBottom);
+        mDynamicContent.layout(childLeft, dynContentTop, childRight, dynContentBottom);
 
         MarginLayoutParams params = (MarginLayoutParams) mPrintButton.getLayoutParams();
 
         final int printButtonLeft;
         if (getLayoutDirection() == View.LAYOUT_DIRECTION_LTR) {
-            printButtonLeft = right - mPrintButton.getMeasuredWidth() - params.getMarginStart();
+            printButtonLeft = childRight - mPrintButton.getMeasuredWidth()
+                    - params.getMarginStart();
         } else {
-            printButtonLeft = left + params.getMarginStart();
+            printButtonLeft = childLeft + params.getMarginStart();
         }
         final int printButtonTop = dynContentBottom - mPrintButton.getMeasuredHeight() / 2;
         final int printButtonRight = printButtonLeft + mPrintButton.getMeasuredWidth();
@@ -297,11 +318,13 @@
 
         mPrintButton.layout(printButtonLeft, printButtonTop, printButtonRight, printButtonBottom);
 
-        final int embContentTop = mStaticContent.getMeasuredHeight() + mClosedOptionsOffsetY
-                + mDynamicContent.getMeasuredHeight();
-        final int embContentBottom = embContentTop + mEmbeddedContentContainer.getMeasuredHeight();
+        final int embContentTop = (Flags.printEdge2edge() ? mPaddingTop : 0)
+                + mStaticContent.getMeasuredHeight()
+                + mClosedOptionsOffsetY + mDynamicContent.getMeasuredHeight();
+        final int embContentBottom = embContentTop + mEmbeddedContentContainer.getMeasuredHeight()
+                -  (Flags.printEdge2edge() ? mPaddingBottom : 0);
 
-        mEmbeddedContentContainer.layout(left, embContentTop, right, embContentBottom);
+        mEmbeddedContentContainer.layout(childLeft, embContentTop, childRight, embContentBottom);
     }
 
     @Override
