Merge "Use AtomicFile in CarTelemetryService" into sc-v2-dev
diff --git a/packages/CarManagedProvisioning/Android.bp b/packages/CarManagedProvisioning/Android.bp
new file mode 100644
index 0000000..6c3aa17
--- /dev/null
+++ b/packages/CarManagedProvisioning/Android.bp
@@ -0,0 +1,55 @@
+//
+// Copyright (C) 2021 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 {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_app {
+    name: "CarManagedProvisioning",
+    platform_apis: true,
+    certificate: "platform",
+    privileged: true,
+    overrides: ["ManagedProvisioning"],
+
+    plugins: ["auto_value_plugin"],
+
+    srcs: [
+        "src/**/*.java",
+    ],
+
+    resource_dirs: [
+        "res",
+    ],
+
+    libs: [
+        "android.car",
+        "auto_value_annotations",
+    ],
+
+    static_libs: [
+        "managedprovisioning_protoslite",
+        "androidx.legacy_legacy-support-v4",
+        "car-setup-wizard-lib",
+        "car-ui-lib",
+        "setupcompat",
+        "setupdesign",
+        "devicepolicyprotosnano",
+        "ManagedProvisioningLib",
+        "Slogf",
+        "lottie"
+    ],
+}
diff --git a/packages/CarManagedProvisioning/AndroidManifest.xml b/packages/CarManagedProvisioning/AndroidManifest.xml
new file mode 100644
index 0000000..3dab876
--- /dev/null
+++ b/packages/CarManagedProvisioning/AndroidManifest.xml
@@ -0,0 +1,73 @@
+<!--
+  Copyright (C) 2021 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.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    package="com.android.managedprovisioning">
+
+    <application
+        android:allowClearUserData="false"
+        android:hardwareAccelerated="true"
+        android:supportsRtl="true"
+        android:theme="@style/Theme.CarManagedProvisioning"
+        android:name=".CarManagedProvisioningApplication"
+        tools:replace="android:name">
+        <activity
+            android:name=".preprovisioning.CarPreProvisioningActivity"
+            android:excludeFromRecents="true"
+            android:immersive="true"
+            android:launchMode="singleTop"
+            android:exported="true">
+        </activity>
+
+        <!--
+        Trusted app entry for device owner provisioning, protected by a permission so only
+        privileged app can trigger this.
+        -->
+        <activity-alias
+            android:name=".PreProvisioningActivityViaTrustedApp"
+            android:targetActivity=".preprovisioning.CarPreProvisioningActivity"
+            tools:replace="targetActivity"
+            tools:node="merge" />
+
+        <activity
+            android:name=".preprovisioning.terms.CarTermsActivity"
+            android:immersive="true"
+            android:exported="true">
+        </activity>
+
+        <activity
+            android:name=".provisioning.CarLandingActivity"
+            android:immersive="true"
+            android:exported="true">
+        </activity>
+
+        <activity
+            android:name=".provisioning.CarProvisioningActivity"
+            android:excludeFromRecents="true"
+            android:immersive="true"
+            android:launchMode="singleTop"
+            android:exported="true">
+        </activity>
+
+        <activity
+            android:name=".provisioning.CarResetAndReturnDeviceActivity"
+            android:excludeFromRecents="true"
+            android:immersive="true"
+            android:exported="true">
+        </activity>
+    </application>
+</manifest>
diff --git a/packages/CarManagedProvisioning/res/drawable/ic_car_cockpit.xml b/packages/CarManagedProvisioning/res/drawable/ic_car_cockpit.xml
new file mode 100644
index 0000000..ba95e91
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/drawable/ic_car_cockpit.xml
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+xmlns:aapt="http://schemas.android.com/aapt"
+        android:width="527dp"
+        android:height="279dp"
+        android:viewportWidth="527.0"
+        android:viewportHeight="279.0">
+    <path
+        android:pathData="M313.05,93.28C275.65,93.28 245.79,67.3 166.76,67.3C87.73,67.3 57.86,93.28 20.47,93.28H4.4V237.78H483.05V93.28H313.05Z"
+        android:fillColor="#3E4144"/>
+    <path
+        android:pathData="M483.05,237.78V114.89H313.04C275.64,114.89 245.78,75.7 166.75,75.7C87.69,75.7 57.89,114.89 20.46,114.89H7.7V237.78"
+        android:fillAlpha="0.25"
+        android:fillColor="#090909"
+        android:strokeAlpha="0.25"/>
+    <path
+        android:pathData="M279.13,237.78C290.6,218.07 296.88,195.42 296.83,172.05C296.74,137.98 283.48,105.92 259.46,81.47C241.62,76.07 220.44,70.43 191.87,68.24C210.43,72.74 227.57,82.22 241.68,96.09C259.42,113.5 270.34,135.82 273.16,159.88C272.27,159.42 271.31,159.07 270.27,158.86C261,157.03 244.77,154.17 224.14,151.99C224.09,151.6 224,151.2 223.89,150.82C223.87,150.76 223.86,150.69 223.84,150.63C223.81,150.56 223.8,150.48 223.77,150.42C223.67,150.12 223.54,149.85 223.41,149.57C223.38,149.51 223.35,149.47 223.33,149.42C223.16,149.1 222.98,148.78 222.77,148.49C222.75,148.46 222.72,148.43 222.7,148.39C222.47,148.08 222.23,147.8 221.95,147.53C221.9,147.48 221.84,147.42 221.79,147.38C221.51,147.12 221.22,146.87 220.91,146.64C220.88,146.62 220.84,146.6 220.81,146.58C220.51,146.38 220.19,146.19 219.86,146.03C219.81,145.99 219.74,145.96 219.69,145.94C219.34,145.79 218.97,145.65 218.6,145.54C218.52,145.52 218.44,145.5 218.37,145.49C217.97,145.39 217.56,145.31 217.15,145.28C215.15,145.11 213.14,144.96 211.13,144.82C196.98,143.79 182.11,143.25 166.77,143.25C151.44,143.25 136.57,143.79 122.41,144.82C120.39,144.96 118.38,145.11 116.39,145.28C115.97,145.31 115.57,145.39 115.17,145.49C115.09,145.51 115.01,145.52 114.94,145.54C114.56,145.65 114.19,145.79 113.85,145.94C113.78,145.97 113.73,146.01 113.67,146.03C113.34,146.19 113.02,146.37 112.73,146.57C112.69,146.59 112.66,146.61 112.63,146.63C112.31,146.85 112.02,147.1 111.75,147.37C111.69,147.42 111.64,147.48 111.58,147.52C111.32,147.8 111.07,148.08 110.83,148.38C110.81,148.41 110.79,148.45 110.77,148.48C110.56,148.78 110.37,149.09 110.21,149.4C110.18,149.46 110.15,149.5 110.13,149.56C109.96,149.9 109.82,150.25 109.71,150.62C109.69,150.68 109.67,150.76 109.64,150.82C109.54,151.2 109.45,151.6 109.39,151.99C88.77,154.18 72.53,157.03 63.26,158.86C62.23,159.06 61.27,159.42 60.38,159.88C63.11,136.28 73.53,114.36 90.45,97.19C104.66,82.76 122.29,72.88 141.52,68.25C112.82,70.46 91.58,76.17 73.68,81.59C49.85,106.01 36.73,138.24 36.73,172.39C36.73,195.64 43.01,218.16 54.43,237.77H81.96C71.11,223.67 63.86,207.03 61.01,189.37C61.07,189.42 61.15,189.46 61.22,189.51C61.51,189.7 61.82,189.89 62.14,190.05C62.73,190.37 63.35,190.67 64,190.9C64.42,191.06 64.85,191.19 65.29,191.3C66.17,191.53 67.08,191.67 68.02,191.73L117.52,194.61L125.3,237.78H208.31L216.09,194.61L265.6,191.73C266.07,191.71 266.53,191.65 266.98,191.58C269.04,191.26 270.93,190.48 272.6,189.38C269.74,207.04 262.49,223.68 251.64,237.78H279.13Z"
+        android:fillAlpha="0.2"
+        android:fillColor="#090909"
+        android:strokeAlpha="0.2"/>
+    <path
+        android:pathData="M54.38,237.78H73.67V81.6C53.74,87.63 37.91,93.29 20.46,93.29">
+        <aapt:attr name="android:fillColor">
+<gradient
+
+        android:startY="66338.38799999999"
+        android:startX="10784.4226"
+        android:endY="66338.38799999999"
+        android:endX="38826.8304"
+        android:type="linear">
+<item android:offset="0.0" android:color="#FF202224" />
+<item android:offset="0.0883" android:color="#FF202224" />
+<item android:offset="1.0" android:color="#02202224" />
+            </gradient></aapt:attr></path>
+    <path
+        android:pathData="M52.49,153.65C52.49,114.17 103.65,82.16 166.76,82.16C229.87,82.16 281.02,114.17 281.02,153.65H52.49Z"
+        android:fillAlpha="0.3"
+        android:fillColor="#090909"
+        android:strokeAlpha="0.3"/>
+    <path
+        android:pathData="M118.43,124.38m-24.43,0a24.43,24.43 0,1 1,48.86 0a24.43,24.43 0,1 1,-48.86 0"
+        android:fillAlpha="0.4"
+        android:fillColor="#3E4144"
+        android:strokeAlpha="0.4"/>
+    <path
+        android:pathData="M215.1,124.38m-24.43,0a24.43,24.43 0,1 1,48.86 0a24.43,24.43 0,1 1,-48.86 0"
+        android:fillAlpha="0.4"
+        android:fillColor="#3E4144"
+        android:strokeAlpha="0.4"/>
+    <path
+        android:pathData="M401.35,93.28H350.14V237.78H401.86L401.35,93.28Z">
+        <aapt:attr name="android:fillColor">
+<gradient
+
+        android:startY="26025.5943"
+        android:startX="211782.32799999998"
+        android:endY="26025.5943"
+        android:endX="184523.78"
+        android:type="linear">
+<item android:offset="0.0" android:color="#FF202224" />
+<item android:offset="0.0883" android:color="#FF202224" />
+<item android:offset="1.0" android:color="#02202224" />
+            </gradient></aapt:attr></path>
+    <path
+        android:pathData="M0.51,94.06L57.4,86.93L45.69,163.13L72.63,237.69H0L0.51,94.06Z"
+        android:fillColor="#202124"/>
+    <path
+        android:pathData="M125.88,272.62H207.64C220.12,272.62 232.03,268.83 242.08,261.67C276.47,237.21 296.93,197.45 296.82,155.32C296.73,120.45 282.84,87.67 257.73,63.01C232.6,38.34 199.57,25.06 164.64,25.62C130.34,26.17 98.19,39.94 74.09,64.4C49.97,88.88 36.69,121.3 36.69,155.68C36.69,197.75 57.22,237.42 91.6,261.8C101.58,268.88 113.43,272.62 125.88,272.62ZM165.02,48.53C165.6,48.52 166.17,48.52 166.75,48.52C194.83,48.52 221.38,59.43 241.68,79.37C262.39,99.7 273.84,126.69 273.92,155.39C274,190.09 257.14,222.85 228.81,243.01C222.66,247.39 215.33,249.71 207.64,249.71H125.88C118.21,249.71 110.93,247.43 104.85,243.12C76.51,223.02 59.6,190.33 59.6,155.68C59.6,127.35 70.55,100.64 90.42,80.47C110.27,60.33 136.76,48.98 165.02,48.53Z"
+        android:fillType="evenOdd"
+        android:fillColor="#3F4143"/>
+    <path
+        android:pathData="M132.14,249.71L132.89,254.14C134.36,262.92 141.95,269.35 150.86,269.35H168.08H182.66C191.56,269.35 199.15,262.92 200.63,254.14L201.38,249.71H132.14Z"
+        android:fillAlpha="0.6"
+        android:fillColor="#202224"
+        android:strokeAlpha="0.6"/>
+    <path
+        android:pathData="M139.69,252.55L123.68,153.65H166.74H209.82L193.8,252.55C192.83,258.6 187.61,263.03 181.49,263.03H166.75H152C145.88,263.03 140.67,258.59 139.69,252.55ZM180.56,210.54H152.95L156.47,241.85C156.72,244.1 158.63,245.8 160.89,245.8H172.61C174.88,245.8 176.78,244.11 177.04,241.85L180.56,210.54Z"
+        android:fillType="evenOdd"
+        android:fillColor="#3E4144"/>
+    <path
+        android:pathData="M123.68,153.65L136.57,233.27H155.51L152.95,210.54H180.57L178,233.27H196.94L209.84,153.65H166.76H123.68Z"
+        android:fillAlpha="0.3"
+        android:fillColor="#090909"
+        android:strokeAlpha="0.3"/>
+    <path
+        android:pathData="M270.28,142.14C261.01,140.32 244.78,137.45 224.15,135.27C223.71,131.76 220.89,128.85 217.15,128.54C201.2,127.22 184.29,126.5 166.77,126.5C149.25,126.5 132.34,127.22 116.39,128.54C112.65,128.85 109.82,131.76 109.38,135.27C88.76,137.46 72.52,140.32 63.25,142.14C58.24,143.13 54.64,147.52 54.64,152.63V160.85C54.64,168.35 60.49,174.56 67.98,175L117.49,177.88L123.31,207.02C124.73,214.13 130.97,219.25 138.22,219.25H166.77H195.31C202.57,219.25 208.8,214.13 210.22,207.02L216.04,177.88L265.55,175C273.05,174.56 278.9,168.37 278.9,160.85V152.63C278.89,147.52 275.29,143.13 270.28,142.14Z"
+        android:fillColor="#3E4144"/>
+    <path
+        android:pathData="M117.48,177.88L123.3,207.02C124.72,214.13 130.96,219.25 138.21,219.25H166.76H195.3C202.55,219.25 208.79,214.13 210.21,207.02L216.03,177.88L265.54,175C273.04,174.56 278.89,168.37 278.89,160.85V153.65C278.89,153.65 230.37,169.52 166.76,169.52C103.14,169.52 54.62,153.65 54.62,153.65V160.85C54.62,168.35 60.48,174.56 67.97,175L117.48,177.88Z"
+        android:fillAlpha="0.3"
+        android:fillColor="#090909"
+        android:strokeAlpha="0.3"/>
+    <path
+        android:pathData="M267.48,159.14H249.6C247.47,159.14 245.74,157.42 245.74,155.29V153.74C245.74,151.62 247.47,149.89 249.6,149.89H267.48C269.6,149.89 271.33,151.62 271.33,153.74V155.29C271.33,157.42 269.61,159.14 267.48,159.14Z"
+        android:fillColor="#616469"/>
+    <path
+        android:pathData="M84.47,159.14H66.59C64.46,159.14 62.73,157.42 62.73,155.29V153.74C62.73,151.62 64.46,149.89 66.59,149.89H84.47C86.59,149.89 88.32,151.62 88.32,153.74V155.29C88.32,157.42 86.6,159.14 84.47,159.14Z"
+        android:fillColor="#4B4E50"/>
+    <path
+        android:pathData="M109.46,137.75L123.3,207.02C124.72,214.13 130.96,219.25 138.21,219.25H166.76H195.3C202.55,219.25 208.79,214.13 210.21,207.02L224.06,137.75C224.96,133.23 221.73,128.93 217.13,128.54C201.19,127.22 184.28,126.5 166.76,126.5C149.24,126.5 132.32,127.22 116.38,128.54C111.78,128.91 108.56,133.23 109.46,137.75Z"
+        android:fillColor="#535657"/>
+    <path
+        android:pathData="M166.76,162.59C143.92,162.59 116.11,171.03 116.11,171.03L123.3,207.01C124.72,214.12 130.96,219.24 138.21,219.24H166.76H195.3C202.55,219.24 208.79,214.12 210.21,207.01L217.4,171.03C217.41,171.03 189.59,162.59 166.76,162.59Z"
+        android:fillColor="#4B4E50"/>
+    <path
+        android:pathData="M340.03,137.55H512.79V264.41C512.79,272.14 506.53,278.41 498.8,278.41H354.03C346.3,278.41 340.03,272.14 340.03,264.41V137.55Z"
+        android:fillColor="#363839"/>
+    <path
+        android:pathData="M336.42,0L512,0A14,14 0,0 1,526 14L526,134.56A14,14 0,0 1,512 148.56L336.42,148.56A14,14 0,0 1,322.42 134.56L322.42,14A14,14 0,0 1,336.42 0z"
+        android:fillColor="#232323"/>
+    <path
+        android:pathData="M336.42,6.5L512,6.5A7.5,7.5 0,0 1,519.5 14L519.5,134.56A7.5,7.5 0,0 1,512 142.06L336.42,142.06A7.5,7.5 0,0 1,328.92 134.56L328.92,14A7.5,7.5 0,0 1,336.42 6.5z"
+        android:strokeColor="#5F6268"
+        android:fillColor="#00000000"
+        android:strokeWidth="13"/>
+    <path
+        android:pathData="M448,57.5H437V52C437,48.95 434.55,46.5 431.5,46.5H420.5C417.45,46.5 415,48.95 415,52V57.5H404C400.95,57.5 398.53,59.95 398.53,63L398.5,93.25C398.5,96.3 400.95,98.75 404,98.75H448C451.05,98.75 453.5,96.3 453.5,93.25V63C453.5,59.95 451.05,57.5 448,57.5ZM426,82.25C422.98,82.25 420.5,79.78 420.5,76.75C420.5,73.73 422.98,71.25 426,71.25C429.02,71.25 431.5,73.73 431.5,76.75C431.5,79.78 429.02,82.25 426,82.25ZM431.5,57.5H420.5V52H431.5V57.5Z"
+        android:fillColor="#8AB4F8"/>
+    <path
+        android:pathData="M366.44,243.19L486.39,243.19A6.6,6.6 0,0 1,492.99 249.8L492.99,249.8A6.6,6.6 0,0 1,486.39 256.4L366.44,256.4A6.6,6.6 0,0 1,359.84 249.8L359.84,249.8A6.6,6.6 0,0 1,366.44 243.19z"
+        android:fillColor="#2F3132"/>
+</vector>
diff --git a/packages/CarManagedProvisioning/res/drawable/page_vertical_divider.xml b/packages/CarManagedProvisioning/res/drawable/page_vertical_divider.xml
new file mode 100644
index 0000000..33e2310
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/drawable/page_vertical_divider.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android" >
+    <size android:width="@dimen/landscape_vertical_divider_width"/>
+    <solid android:color="@color/suw_color_divider"/>
+</shape>
\ No newline at end of file
diff --git a/packages/CarManagedProvisioning/res/layout/car_layout.xml b/packages/CarManagedProvisioning/res/layout/car_layout.xml
new file mode 100644
index 0000000..3699f37
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/layout/car_layout.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<!-- TODO(b/189366708) enable split-nav support -->
+<com.android.car.setupwizardlib.CarSetupWizardCompatLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/car_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    app:showBackButton="true"
+    app:showPrimaryToolbarButton="true"
+    app:primaryToolbarButtonEnabled="true"
+    tools:fontFamily="@font/roboto_medium"
+    tools:ignore="Overdraw">
+    <ViewStub
+        android:id="@+id/layout_content_stub"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        tools:fontFamily="@font/google_sans"/>
+</com.android.car.setupwizardlib.CarSetupWizardCompatLayout>
\ No newline at end of file
diff --git a/packages/CarManagedProvisioning/res/layout/double_column_gmodel_layout.xml b/packages/CarManagedProvisioning/res/layout/double_column_gmodel_layout.xml
new file mode 100644
index 0000000..f87a0fa
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/layout/double_column_gmodel_layout.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/double_column_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="horizontal"
+    android:baselineAligned="false"
+    android:divider="@drawable/page_vertical_divider"
+    android:showDividers="middle"
+    android:dividerPadding="@dimen/landscape_page_margin_top"
+    android:paddingHorizontal="@dimen/suw_page_margin_horizontal"
+    tools:ignore="Overdraw,RtlSymmetry">
+
+    <!-- Start side: header/main content -->
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="@integer/suw_title_column_weight"
+        android:paddingTop="@dimen/landscape_page_margin_top"
+        android:paddingEnd="@dimen/suw_column_inner_padding_horizontal"
+        android:orientation="vertical">
+        <ImageView
+            android:id="@+id/title_logo"
+            android:layout_height="@dimen/header_icon_size"
+            android:layout_width="@dimen/header_icon_size"/>
+        <TextView
+            android:id="@+id/description_title"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:paddingTop="@dimen/suw_padding_4"
+            android:paddingBottom="@dimen/suw_padding_4"
+            android:textDirection="locale"
+            android:textColor="@color/suw_color_primary"
+            android:textSize="@dimen/header_font_size"/>
+        <TextView
+            android:id="@+id/description"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:textDirection="locale"
+            android:textColor="@color/suw_color_secondary"
+            android:textSize="@dimen/header_description_font_size"/>
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="@integer/suw_content_column_weight">
+        <ViewStub
+            android:id="@+id/sub_content_stub"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"/>
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/CarManagedProvisioning/res/layout/double_column_layout.xml b/packages/CarManagedProvisioning/res/layout/double_column_layout.xml
new file mode 100644
index 0000000..94e5fb8
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/layout/double_column_layout.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/double_column_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="horizontal"
+    android:baselineAligned="false"
+    android:divider="@drawable/page_vertical_divider"
+    android:showDividers="middle"
+    android:dividerPadding="@dimen/landscape_page_margin_top"
+    android:paddingHorizontal="@dimen/suw_page_margin_horizontal">
+
+    <!-- Start side: header/main content -->
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="@integer/suw_title_column_weight"
+        android:layout_marginTop="@dimen/landscape_page_margin_top"
+        android:paddingEnd="@dimen/suw_column_inner_padding_horizontal"
+        android:orientation="vertical">
+        <ImageView
+            android:id="@+id/title_logo"
+            android:layout_height="@dimen/header_icon_size"
+            android:layout_width="@dimen/header_icon_size"
+            android:tint="@color/primary_icon"/>
+        <TextView
+            android:id="@+id/description_title"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:layout_marginTop="@dimen/header_margin"
+            android:layout_marginBottom="@dimen/header_margin"
+            android:textDirection="locale"
+            android:textColor="@color/suw_color_primary"
+            android:textSize="@dimen/header_font_size"/>
+        <TextView
+            android:id="@+id/description"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:textDirection="locale"
+            android:textColor="@color/suw_color_secondary"
+            android:textSize="@dimen/header_description_font_size"/>
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="@integer/suw_content_column_weight">
+        <ViewStub
+            android:id="@+id/sub_content_stub"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"/>
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/CarManagedProvisioning/res/layout/empty_layout.xml b/packages/CarManagedProvisioning/res/layout/empty_layout.xml
new file mode 100644
index 0000000..102998f
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/layout/empty_layout.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/empty_layout"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+</LinearLayout>
diff --git a/packages/CarManagedProvisioning/res/layout/preprovision_layout.xml b/packages/CarManagedProvisioning/res/layout/preprovision_layout.xml
new file mode 100644
index 0000000..ef017ec
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/layout/preprovision_layout.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/preprovision_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center"
+    android:weightSum="1">
+    <ImageView
+        android:id="@+id/illustration"
+        android:layout_height="match_parent"
+        android:layout_width="0dp"
+        android:layout_weight="0.6" />
+</LinearLayout>
diff --git a/packages/CarManagedProvisioning/res/layout/provision_labeled_item.xml b/packages/CarManagedProvisioning/res/layout/provision_labeled_item.xml
new file mode 100644
index 0000000..f81a400
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/layout/provision_labeled_item.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginTop="@dimen/header_description_offset"
+    android:paddingLeft="@dimen/landscape_page_narrow_padding_horizontal"
+    android:paddingRight="@dimen/landscape_page_narrow_padding_horizontal"
+    android:gravity="top|left"
+    android:orientation="horizontal">
+    <LinearLayout
+        android:id="@+id/sud_items_icon_container"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="top|center"
+        android:layout_marginStart="@dimen/sud_items_summary_margin_horizontal"
+        android:layout_marginEnd="@dimen/sud_items_summary_margin_horizontal">
+        <ImageView
+            android:id="@+id/sud_items_icon"
+            android:layout_width="@dimen/sud_items_icon_size"
+            android:layout_height="@dimen/sud_items_icon_size"
+            android:tint="@color/labeled_item_icon"/>
+    </LinearLayout>
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+        <TextView
+            android:id="@+id/sud_items_title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textDirection="locale"
+            android:layout_marginStart="@dimen/sud_items_summary_margin_horizontal"
+            android:textColor="@color/primary_text"
+            android:textSize="@dimen/item_header_text_size"/>
+        <TextView
+            android:id="@+id/sud_items_summary"
+            android:layout_below="@+id/sud_items_title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="top|left"
+            android:layout_marginStart="@dimen/sud_items_summary_margin_horizontal"
+            android:layout_marginEnd="@dimen/sud_items_summary_margin_horizontal"
+            android:layout_marginTop="@dimen/sud_items_summary_margin_top"
+            android:textDirection="locale"
+            android:textColor="@color/secondary_text"
+            android:textSize="@dimen/item_body_text_size" />
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/CarManagedProvisioning/res/layout/provision_layout.xml b/packages/CarManagedProvisioning/res/layout/provision_layout.xml
new file mode 100644
index 0000000..0da98de
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/layout/provision_layout.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/provision_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <Space
+        android:id="@+id/space1"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/sud_items_margin_top"/>
+    <include
+        android:id="@+id/item1"
+        layout="@layout/provision_labeled_item"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"/>
+    <Space
+        android:id="@+id/space2"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/sud_items_margin_inbetween"/>
+    <include
+        android:id="@+id/item2"
+        layout="@layout/provision_labeled_item"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"/>
+    <LinearLayout
+        android:id="@+id/illustration_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_gravity="center">
+        <com.airbnb.lottie.LottieAnimationView
+            android:id="@+id/illustration"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:scaleType="fitCenter" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/packages/CarManagedProvisioning/res/layout/single_column_gmodel_layout.xml b/packages/CarManagedProvisioning/res/layout/single_column_gmodel_layout.xml
new file mode 100644
index 0000000..5f8a5f1
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/layout/single_column_gmodel_layout.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/single_column_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center_horizontal"
+    android:layout_marginTop="@dimen/landscape_page_margin_top"
+    android:orientation="vertical"
+    tools:ignore="Overdraw,RtlSymmetry">
+
+    <ImageView
+        android:id="@+id/title_logo"
+        android:layout_height="@dimen/header_icon_size"
+        android:layout_width="@dimen/header_icon_size"/>
+    <TextView
+        android:id="@+id/description_title"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:paddingTop="@dimen/suw_padding_4"
+        android:paddingBottom="@dimen/suw_padding_4"
+        android:textDirection="locale"
+        android:textColor="@color/suw_color_primary"
+        android:textSize="@dimen/header_font_size"/>
+    <TextView
+        android:id="@+id/description"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:textDirection="locale"
+        android:textColor="@color/suw_color_secondary"
+        android:textSize="@dimen/header_description_font_size"/>
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content">
+        <ViewStub
+            android:id="@+id/sub_content_stub"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"/>
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/CarManagedProvisioning/res/layout/single_column_layout.xml b/packages/CarManagedProvisioning/res/layout/single_column_layout.xml
new file mode 100644
index 0000000..27ab503
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/layout/single_column_layout.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/single_column_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_marginBottom="@dimen/header_description_offset"
+    android:gravity="center"
+    android:orientation="vertical">
+
+    <ImageView
+        android:id="@+id/title_logo"
+        android:layout_height="@dimen/header_icon_size"
+        android:layout_width="@dimen/header_icon_size"
+        android:tint="@color/primary_icon" />
+    <TextView
+        android:id="@+id/description_title"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_marginTop="@dimen/header_margin"
+        android:layout_marginBottom="@dimen/header_margin"
+        android:textDirection="locale"
+        android:textColor="@color/suw_color_primary"
+        android:textSize="@dimen/header_font_size"/>
+    <TextView
+        android:id="@+id/description"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:textDirection="locale"
+        android:textColor="@color/suw_color_secondary"
+        android:textSize="@dimen/header_description_font_size"/>
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingTop="@dimen/suw_padding_4"
+        android:layout_marginBottom="@dimen/landscape_page_margin_bottom">
+        <ViewStub
+            android:id="@+id/sub_content_stub"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"/>
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/CarManagedProvisioning/res/layout/single_column_left_layout.xml b/packages/CarManagedProvisioning/res/layout/single_column_left_layout.xml
new file mode 100644
index 0000000..a864430
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/layout/single_column_left_layout.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/single_column_left_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_marginTop="@dimen/landscape_page_margin_top"
+    android:layout_marginBottom="@dimen/landscape_page_margin_bottom"
+    android:paddingLeft="@dimen/landscape_page_padding_left"
+    android:paddingTop="@dimen/landscape_page_padding_top"
+    android:paddingRight="@dimen/landscape_page_padding_right"
+    android:gravity="left|top"
+    android:orientation="vertical">
+
+    <ImageView
+        android:id="@+id/title_logo"
+        android:layout_height="@dimen/header_icon_size"
+        android:layout_width="@dimen/header_icon_size"
+        android:tint="@color/primary_icon" />
+    <TextView
+        android:id="@+id/description_title"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_marginTop="@dimen/header_margin"
+        android:layout_marginBottom="@dimen/header_margin"
+        android:textDirection="locale"
+        android:textColor="@color/primary_text"
+        android:textSize="@dimen/header_font_size"/>
+    <TextView
+        android:id="@+id/description"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:textDirection="locale"
+        android:textColor="@color/secondary_text"
+        android:textSize="@dimen/header_description_font_size"/>
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="@dimen/landscape_page_content_left_offset"
+        android:layout_marginBottom="@dimen/landscape_page_margin_bottom">
+        <ViewStub
+            android:id="@+id/sub_content_stub"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/packages/CarManagedProvisioning/res/layout/terms_disclaimer_general.xml b/packages/CarManagedProvisioning/res/layout/terms_disclaimer_general.xml
new file mode 100644
index 0000000..e709665
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/layout/terms_disclaimer_general.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/terms_disclaimer_general"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_gravity="left"
+    android:textSize="@dimen/item_body_text_size"
+    android:textColor="@color/secondary_text"/>
diff --git a/packages/CarManagedProvisioning/res/layout/terms_layout.xml b/packages/CarManagedProvisioning/res/layout/terms_layout.xml
new file mode 100644
index 0000000..f78530c
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/layout/terms_layout.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/terms_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_gravity="top|left">
+    <com.android.car.ui.recyclerview.CarUiRecyclerView
+        android:id="@+id/terms_container"
+        android:textColor="@color/secondary_text"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+</LinearLayout>
diff --git a/packages/CarManagedProvisioning/res/values/colors.xml b/packages/CarManagedProvisioning/res/values/colors.xml
new file mode 100644
index 0000000..6b187b8
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/values/colors.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<resources>
+    <color name="vertical_divider_color">@color/suw_color_divider</color>
+    <color name="background_grey">@color/car_grey_900</color>
+    <color name="primary_icon">@color/suw_color_accent</color>
+    <color name="primary_text">@color/suw_color_primary</color>
+    <color name="labeled_item_icon">@color/suw_color_primary</color>
+    <color name="secondary_text">@color/suw_color_secondary</color>
+    <color name="status_bar_color">@color/colorPrimaryDark</color>
+    <color name="navigation_bar_color">@color/colorPrimaryDark</color>
+</resources>
\ No newline at end of file
diff --git a/packages/CarManagedProvisioning/res/values/config.xml b/packages/CarManagedProvisioning/res/values/config.xml
new file mode 100644
index 0000000..6bb909a
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/values/config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<resources>
+  <bool name="show_edu_animations">false</bool>
+  <bool name="show_progress_label_on_left_side">false</bool>
+</resources>
\ No newline at end of file
diff --git a/packages/CarManagedProvisioning/res/values/dimens.xml b/packages/CarManagedProvisioning/res/values/dimens.xml
new file mode 100644
index 0000000..5026636
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/values/dimens.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<resources>
+    <!-- Header font size -->
+    <dimen name="header_font_size">32dp</dimen>
+    <!-- Header icon size -->
+    <dimen name="header_icon_size">48dp</dimen>
+    <!-- Header description font size -->
+    <dimen name="header_description_font_size">24dp</dimen>
+    <!-- Header offset when there is no description -->
+    <dimen name="header_description_offset">-240dp</dimen>
+    <!-- Header title margin -->
+    <dimen name="header_margin">24dp</dimen>
+
+    <dimen name="landscape_vertical_divider_width">1dp</dimen>
+    <dimen name="landscape_page_margin_top">48dp</dimen>
+    <dimen name="landscape_page_margin_bottom">64dp</dimen>
+
+    <!--  Additional space for content that is left aligned  -->
+    <dimen name="landscape_page_padding_top">48dp</dimen>
+    <dimen name="landscape_page_padding_left">80dp</dimen>
+    <dimen name="landscape_page_padding_right">300dp</dimen>
+    <dimen name="landscape_page_content_left_offset">-110dp</dimen>
+
+    <!--  Additional space for content that is center aligned  -->
+    <dimen name="landscape_page_narrow_padding_horizontal">250dp</dimen>
+
+    <!-- Provisioning screens -->
+    <dimen name="sud_items_icon_size">48dp</dimen>
+    <dimen name="sud_items_summary_margin_horizontal">24dp</dimen>
+    <dimen name="sud_items_summary_margin_top">16dp</dimen>
+    <dimen name="sud_items_margin_top">48dp</dimen>
+    <dimen name="sud_items_margin_inbetween">32dp</dimen>
+    <dimen name="terms_disclaimer_header_vertical_margin">32dp</dimen>
+    <dimen name="terms_disclaimer_content_margin_top">32dp</dimen>
+    <dimen name="terms_disclaimer_content_margin_bottom">48dp</dimen>
+    <dimen name="item_header_text_size">24sp</dimen>
+    <dimen name="item_body_text_size">20dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/packages/CarManagedProvisioning/res/values/strings.xml b/packages/CarManagedProvisioning/res/values/strings.xml
new file mode 100644
index 0000000..5200fb2
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/values/strings.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <!--Pre-provisioning screen informing a user of benefits and consequences of creating a Device Owner -->
+  <!-- Screen title. This is letting the user know that their organization (e.g. company)/the fleet management company owns the device. [CHAR LIMIT=NONE]-->
+  <string name="brand_screen_header">This vehicle belongs to the organization</string>
+  <!-- Text with link to device's provider in case of more questions [CHAR LIMIT=NONE] -->
+  <string name="contact_device_provider">To learn more, contact the <xliff:g id="it_admin" example="organizations manager">%1$s</xliff:g>.</string>
+    <!-- Provider of the device (e.g. employer, fleet management company) [CHAR LIMIT=NONE] -->
+  <string name="organization_admin">organization manager</string>
+  <!-- Error message encouraging to contact admin [CHAR LIMIT=NONE] -->
+  <string name="if_questions_contact_admin">If you have questions, contact the organization manager</string>
+
+  <!-- User consent -->
+  <!-- Text in a pop-up that asks the user to confirm that they allow the device management app to take control of the device. [CHAR LIMIT=NONE]-->
+  <string name="admin_has_ability_to_monitor_device">The organization manager has the ability to monitor and manage settings, corporate access, apps, permissions, and data associated with this vehicle, including network activity, as well as this vehicle\'s location.<xliff:g id="line_break">\n\n</xliff:g>Contact the organization manager for more information, including the organization\'s privacy policies.</string>
+  <!-- String telling the user how to get more information about the managed profile [CHAR LIMIT=NONE] -->
+  <string name="contact_your_admin_for_more_info">Contact the organization manager for more information, including the organization\'s privacy policies.</string>
+
+  <!-- 'Terms and conditions' screen -->
+  <!-- Managed device info terms section heading. [CHAR LIMIT=NONE] -->
+  <string name="managed_device_info">This is a managed vehicle</string>
+
+  <!-- Message of the error dialog in case of an unspecified error. [CHAR LIMIT=NONE] -->
+  <string name="contact_your_admin_for_help">Contact the organization manager for help</string>
+
+  <!-- Fully managed device setup screens -->
+  <!-- Screen title. This is letting the user know that they're about to set up their new work device. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_accept_header">Set up the managed vehicle</string>
+  <!-- Screen title. This is letting the user know that they can use their work device to easily access their their organization (e.g. company) / the fleet management company's apps. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_step_1_header">Access your organization\'s apps</string>
+  <!-- Screen subtext. This is letting the user know that the device is being provisioned[CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_step_1_description">Setting up infotainment system...</string>
+  <!-- Screen title. This is letting the user know that their entire device isn't private and can be accessed by their organization's fleet manager. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_step_2_header">Infotainment system data isn\'t private</string>
+  <!-- Screen subtext title. This is letting the user know that their organization's fleet manager may be able to see their data and activity since the device isn't private. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_step_2_subheader_title">Your activity and data</string>
+  <!-- Screen subtext. This is letting the user know that their organization's fleet manager may be able to see their data and activity since the device isn't private. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_step_2_subheader">The organization manager may be able to see your activity and data on this vehicle.</string>
+  <!-- Screen subtext. This is letting the user know that their organization's fleet manager may be able to see their data and activity since the device isn't private. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_permissions_secondary_subheader">The organization manager can set permissions for apps on this vehicle, such as microphone and location permissions.</string>
+  <!-- Spoken text for screen readers. This is summarizing the key features of their work device, including their admin's ability to control permissions, while it's being set up. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_with_permission_control_provisioning_summary">Use this vehicle\'s infotainment system to easily access your work apps. This vehicle isn’t private, so the organization manager may be able to see your activity and data. The organization manager can also set permissions for apps on this vehicle, such as microphone and location permissions.</string>
+  <!-- Spoken text for screen readers. This is summarizing the key features of their work device while it's being set up. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_summary">Use this vehicle\'s infotainment system to easily access your work apps. This vehicle isn\'t private, so the organization manager may be able to see your data and activity.</string>
+
+  <!-- In-progress text that's part of a full-screen message. This is letting the user know that their device is being set up. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_progress_label">Setting up managed vehicle</string>
+  <!-- Screen title. This is letting the user know they should return the device to their organization's fleet manager if they do not want to finish set-up. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_return_device_title">Cancel setup and return vehicle</string>
+  <!-- Screen subtext. This tells the user they should either go back to the previous screen to complete set-up, or abort set-up by resetting the device. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_return_device_subheader">Reset and return this vehicle to the organization manager, or go back to the previous screen to continue setup.</string>
+  <!-- Button text. Leads the user to the screen letting them cancel the setup. [CHARLIMIT=40]-->
+  <string name="fully_managed_device_cancel_setup_button">Cancel setup</string>
+  <!-- Button text. The final affirmitive button the user needs to press to actually reset the device. [CHARLIMIT=40]-->
+  <string name="fully_managed_device_reset_and_return_button">Reset &amp; return vehicle</string>
+
+  <!-- Notification title. This text is letting the user know about a privacy reminder before they start using their new work device. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_privacy_title">Privacy notice</string>
+  <!-- Notification message. This text is letting the user know about a privacy reminder before they start using their new work device, and that their IT admin may be able to see their data and activity on this device. [CHAR LIMIT=NONE]-->
+  <string name="fully_managed_device_provisioning_privacy_body">The organization manager may be able to see your data and activity on this vehicle.</string>
+
+</resources>
\ No newline at end of file
diff --git a/packages/CarManagedProvisioning/res/values/themes.xml b/packages/CarManagedProvisioning/res/values/themes.xml
new file mode 100644
index 0000000..0e2f64f
--- /dev/null
+++ b/packages/CarManagedProvisioning/res/values/themes.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+<resources>
+  <style name="Theme.CarManagedProvisioning" parent="Theme.CarUi">
+  </style>
+</resources>
\ No newline at end of file
diff --git a/packages/CarManagedProvisioning/src/com/android/managedprovisioning/CarManagedProvisioningApplication.java b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/CarManagedProvisioningApplication.java
new file mode 100644
index 0000000..f056477
--- /dev/null
+++ b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/CarManagedProvisioningApplication.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2021 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 com.android.managedprovisioning;
+
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Window;
+import android.view.WindowInsets;
+import android.view.WindowInsetsController;
+
+import com.android.managedprovisioning.preprovisioning.CarPreProvisioningActivity;
+import com.android.managedprovisioning.preprovisioning.terms.CarTermsActivity;
+import com.android.managedprovisioning.provisioning.CarLandingActivity;
+import com.android.managedprovisioning.provisioning.CarProvisioningActivity;
+import com.android.managedprovisioning.provisioning.CarResetAndReturnDeviceActivity;
+
+/**
+ * <p> {@code ManagedProvisioningBaseApplication} for AAOS. Key differences are
+ * <ol>
+ * <li>AAOS specific activities for {@code ManagedProvisioningScreens}
+ * <li>TODO (b/14409262) Car SUW layout integration, driving safety, rotaory support
+ * </ol>
+ */
+public final class CarManagedProvisioningApplication extends ManagedProvisioningBaseApplication {
+
+    private static final String TAG = CarManagedProvisioningApplication.class.getSimpleName();
+
+    private final ActivityLifecycleCallbacks mCallbacks = new ActivityLifecycleCallbacks() {
+
+        @Override
+        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
+            WindowInsetsController insetsController = activity.getWindow().getDecorView()
+                    .getWindowInsetsController();
+            if (insetsController == null) {
+                Log.w(TAG, "No insets controller");
+                return;
+            }
+            Log.d(TAG, "Hiding the system UI bars on " + activity);
+            insetsController.hide(WindowInsets.Type.navigationBars());
+        }
+
+        @Override
+        public void onActivityStarted(Activity activity) {
+        }
+
+        @Override
+        public void onActivityResumed(Activity activity) {
+            // TODO(b/202784955): fix it on themes instead
+            Window window = activity.getWindow();
+            window.setStatusBarColor(activity.getColor(R.color.status_bar_color));
+            window.setNavigationBarColor(activity.getColor(R.color.navigation_bar_color));
+        }
+
+        @Override
+        public void onActivityPaused(Activity activity) {
+        }
+
+        @Override
+        public void onActivityStopped(Activity activity) {
+        }
+
+        @Override
+        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
+        }
+
+        @Override
+        public void onActivityDestroyed(Activity activity) {
+        }
+    };
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+
+        registerActivityLifecycleCallbacks(mCallbacks);
+
+        setOverrideActivity(ManagedProvisioningScreens.PRE_PROVISIONING,
+                CarPreProvisioningActivity.class);
+        setOverrideActivity(ManagedProvisioningScreens.TERMS,
+                CarTermsActivity.class);
+        setOverrideActivity(ManagedProvisioningScreens.LANDING,
+                CarLandingActivity.class);
+        setOverrideActivity(ManagedProvisioningScreens.PROVISIONING,
+                CarProvisioningActivity.class);
+        setOverrideActivity(ManagedProvisioningScreens.RESET_AND_RETURN_DEVICE,
+                CarResetAndReturnDeviceActivity.class);
+    }
+
+    @Override
+    public void onTerminate() {
+        unregisterActivityLifecycleCallbacks(mCallbacks);
+
+        super.onTerminate();
+    }
+}
diff --git a/packages/CarManagedProvisioning/src/com/android/managedprovisioning/common/CarSetupWizardLayoutHelper.java b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/common/CarSetupWizardLayoutHelper.java
new file mode 100644
index 0000000..1dfdd52
--- /dev/null
+++ b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/common/CarSetupWizardLayoutHelper.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2021 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 com.android.managedprovisioning.common;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.Nullable;
+import android.annotation.StringRes;
+import android.app.Activity;
+import android.view.View;
+import android.view.ViewStub;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.car.setupwizardlib.CarSetupWizardCompatLayout;
+import com.android.car.setupwizardlib.util.CarOrientationHelper;
+import com.android.managedprovisioning.R;
+
+/**
+ * Sets the layout for screens that's integrated with CarSetupWizard layout. It will have a
+ * hierarchical strucutre with {@code ViewStub}:
+ *
+ * <p> {@code MAIN_LAYOUT_RES_Id} will be the main layout for all provisioning screens. The main
+ * view will have a {@code MAIN_VIEW_RES_ID} which contains a {@code ViewStub} and its resource id
+ * is {@code MAIN_VIEW_STUB_RES_ID}.
+ * <p> Either a double column or a single column layout will be passed into
+ * {@code ViewStub}. This layout should have another {@code ViewStub} with resource id
+ * {@code MAIN_VIEW_STUB_RES_ID}.
+ * <p> Provisioning screen specific layout will be passed into the {@code ViewStub} from the
+ * previous level.
+ */
+public final class CarSetupWizardLayoutHelper {
+    private static final String TAG = CarSetupWizardLayoutHelper.class.getSimpleName();
+
+    // Main layout for all provisioning screens.
+    public static final int MAIN_LAYOUT_RES_ID = R.layout.car_layout;
+    // Main layout's main view.
+    private static final int MAIN_VIEW_RES_ID = R.id.car_layout;
+    // Main layout's view stub that will take either single or double column layout.
+    private static final int MAIN_VIEW_STUB_RES_ID = R.id.layout_content_stub;
+    // Main layout's logo view.
+    private static final int TITLE_LOGO_VIEW_RES_ID = R.id.title_logo;
+    // Sub-screen's view stub that will take specific layout for different provisioning screens.
+    private static final int SUB_VIEW_STUB_RES_ID = R.id.sub_content_stub;
+    // Default icon for the provisioning screen header.
+    private static final int ICON_RES_ID =
+            com.android.internal.R.drawable.ic_corp_badge_case;
+
+    private final Activity mActivity;
+    private CarSetupWizardCompatLayout mLayout;
+
+    public CarSetupWizardLayoutHelper(Activity activity) {
+        mActivity = requireNonNull(activity);
+    }
+
+    public CarSetupWizardCompatLayout getBaseLayout() {
+        return mLayout;
+    }
+
+    /**
+     * Sets the layout for the current Activity with a default main layout.
+     *
+     * @param subLayoutId {@code LayoutRes} for the {@code ViewStub} on the right column of
+     * double column layout or at the bottom of single column layout
+     * @param isDoubleColumnAllowed whether to use double column layout for the sub layout
+     */
+    public CarSetupWizardCompatLayout setBaseLayout(int subLayoutId,
+            boolean isDoubleColumnAllowed) {
+        return setBaseLayout(MAIN_LAYOUT_RES_ID, subLayoutId, isDoubleColumnAllowed);
+    }
+
+    /**
+     * Sets base layout for the current Activity.
+     *
+     * @param mainLayoutId main {@code LayoutRes} to be set for the current Activity
+     * @param subLayoutId {@code LayoutRes} to be passed to {@code ViewStub} in main layout
+     * @param isDoubleColumnAllowed whether there should be single or double column
+     */
+    public CarSetupWizardCompatLayout setBaseLayout(int mainLayoutId, int subLayoutId,
+            boolean isDoubleColumnAllowed) {
+        // TODO(b/203732347) enable split-nav support after split-nav cls are merged to sc-dev
+        // boolean isSplitNavLayoutUsed = mLayout.isSplitNavLayoutUsed();
+        return setBaseLayout(MAIN_LAYOUT_RES_ID,
+                getColumnLayoutResourceId(/* isSplitNavLayoutUsed= */ false,
+                        isDoubleColumnAllowed), subLayoutId);
+    }
+
+    /**
+     * Sets base layout for the current Activity.
+     *
+     * @param mainLayoutId main {@code LayoutRes} to be set for the current Activity
+     * @param columnLayoutId {@code LayoutRes} to be set withint the main layout
+     * @param subLayoutId {@code LayoutRes} to be passed to {@code ViewStub} in main layout
+     */
+    public CarSetupWizardCompatLayout setBaseLayout(int mainLayoutId, int columnLayoutId,
+            int subLayoutId) {
+        mActivity.setContentView(mainLayoutId);
+
+        mLayout = mActivity.findViewById(MAIN_VIEW_RES_ID);
+        mLayout.setBackgroundColor(mActivity.getColor(R.color.background_grey));
+
+        ViewStub contentLayoutRes = (ViewStub) mLayout.findViewById(MAIN_VIEW_STUB_RES_ID);
+
+        requireNonNull(contentLayoutRes);
+
+        contentLayoutRes.setLayoutResource(columnLayoutId);
+        contentLayoutRes.inflate();
+
+        ViewStub subContentStub = (ViewStub) mLayout.findViewById(SUB_VIEW_STUB_RES_ID);
+        subContentStub.setLayoutResource(subLayoutId);
+        subContentStub.inflate();
+
+        mLayout.setBackButtonListener(v -> mActivity.onBackPressed());
+        setupDefaultLogo();
+
+        return mLayout;
+    }
+
+    /**
+     * Gets the layout resource for the current Activity.
+     *
+     * @return either single column or double column resource id
+     */
+    public int getColumnLayoutResourceId(boolean isSplitNavLayoutUsed,
+            boolean isDoubleColumnAllowed) {
+
+        if (isDoubleColumnAllowed && !CarOrientationHelper.isNarrowOrientation(mActivity)) {
+            return isSplitNavLayoutUsed ? R.layout.double_column_gmodel_layout
+                    : R.layout.double_column_layout;
+        }
+        return isSplitNavLayoutUsed ? R.layout.single_column_gmodel_layout
+                : R.layout.single_column_layout;
+    }
+
+    /**
+     * Sets the header title and description in {@code CarSetupWizardCompatLayout} for current
+     * activity.
+     */
+    public void setHeaderText(int headerResId, int descriptionResId) {
+        TextView descriptionTitle = mActivity.findViewById(R.id.description_title);
+        descriptionTitle.setText(headerResId);
+
+        TextView description = mActivity.findViewById(R.id.description);
+        description.setText(descriptionResId);
+    }
+
+    /**
+     * Sets up primary tool bar button.
+     *
+     * @param resId {@code StringRes} for the primary toolbar button's text
+     * @param listener  {@code View.OnClickListener} for the primary toolbar button
+     */
+    public void setupPrimaryToolbarButton(@StringRes int resId,
+            @Nullable View.OnClickListener listener) {
+        mLayout.setPrimaryToolbarButtonText(mActivity.getString(resId));
+        mLayout.setPrimaryToolbarButtonListener(listener);
+    }
+
+    /**
+     * Sets the icon for the header.
+     */
+    public void setupLogo(int logoResId) {
+        ImageView logo = mLayout.findViewById(TITLE_LOGO_VIEW_RES_ID);
+        logo.setImageResource(logoResId);
+    }
+
+    /**
+     * Sets the default icon for the header.
+     */
+    public void setupDefaultLogo() {
+        setupLogo(ICON_RES_ID);
+    }
+}
diff --git a/packages/CarManagedProvisioning/src/com/android/managedprovisioning/preprovisioning/CarPreProvisioningActivity.java b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/preprovisioning/CarPreProvisioningActivity.java
new file mode 100644
index 0000000..db65107
--- /dev/null
+++ b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/preprovisioning/CarPreProvisioningActivity.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2021 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 com.android.managedprovisioning.preprovisioning;
+
+import android.annotation.Nullable;
+import android.os.Bundle;
+
+import androidx.annotation.VisibleForTesting;
+
+import com.android.managedprovisioning.R;
+import com.android.managedprovisioning.common.AccessibilityContextMenuMaker;
+import com.android.managedprovisioning.common.CarSetupWizardLayoutHelper;
+import com.android.managedprovisioning.common.SettingsFacade;
+import com.android.managedprovisioning.common.ThemeHelper;
+import com.android.managedprovisioning.common.ThemeHelper.DefaultNightModeChecker;
+import com.android.managedprovisioning.common.ThemeHelper.DefaultSetupWizardBridge;
+import com.android.managedprovisioning.common.Utils;
+import com.android.managedprovisioning.model.CustomizationParams;
+import com.android.server.utils.Slogf;
+
+/**
+ * TODO (b/183510678) A temporary implementation for AAOS to override
+ * {@link PreProvisioningActivity} in ManagedProvisioning using inheritance. The long term
+ * solution will be to use composition.
+ */
+public final class CarPreProvisioningActivity extends PreProvisioningActivity {
+
+    private static final String TAG = CarPreProvisioningActivity.class.getSimpleName();
+
+    private final AccessibilityContextMenuMaker mContextMenuMaker;
+    private PreProvisioningActivityBridge mBridge;
+
+    private static final String ERROR_DIALOG_RESET = "ErrorDialogReset";
+
+    public CarPreProvisioningActivity() {
+        this(activity ->
+                new PreProvisioningActivityController(activity, activity),
+                /* AccessibilityContextMenuMaker= */ null,
+                new Utils(),
+                new SettingsFacade(),
+                new ThemeHelper(
+                        new DefaultNightModeChecker(),
+                        new DefaultSetupWizardBridge()));
+    }
+
+    @VisibleForTesting
+    public CarPreProvisioningActivity(
+            ControllerProvider controllerProvider,
+            AccessibilityContextMenuMaker contextMenuMaker, Utils utils,
+            SettingsFacade settingsFacade, ThemeHelper themeHelper) {
+        super(controllerProvider, contextMenuMaker, utils, settingsFacade, themeHelper);
+        mContextMenuMaker =
+                contextMenuMaker != null ? contextMenuMaker : new AccessibilityContextMenuMaker(
+                        this);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+    }
+
+    @Override
+    protected PreProvisioningActivityBridge createBridge() {
+        Slogf.d(TAG, "createBridge from CarPreProvisioningActivityBridgeImpl.. ");
+        return new CarPreProvisioningActivityBridgeImpl(
+                /* activity= */ this,
+                mUtils,
+                CarPreProvisioningActivity.this::initializeLayoutParams,
+                createBridgeCallbacks());
+    }
+
+    /**
+     * Overrides {@code initializeLayoutParams} in SetupGlifLayoutActivity to set layout as
+     * {@code CarSetupWizardLayout}.
+     */
+    @Override
+    protected void initializeLayoutParams(int layoutResourceId, @Nullable Integer headerResourceId,
+            CustomizationParams params) {
+        CarSetupWizardLayoutHelper layoutHelper = new CarSetupWizardLayoutHelper(this);
+        layoutHelper.setBaseLayout(
+                /* mainLayoutId= */ layoutResourceId,
+                /* subLayoutId= */ R.layout.preprovision_layout,
+                /* isDoubleColumnAllowed= */ true);
+    }
+}
diff --git a/packages/CarManagedProvisioning/src/com/android/managedprovisioning/preprovisioning/CarPreProvisioningActivityBridgeImpl.java b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/preprovisioning/CarPreProvisioningActivityBridgeImpl.java
new file mode 100644
index 0000000..0d44346
--- /dev/null
+++ b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/preprovisioning/CarPreProvisioningActivityBridgeImpl.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2021 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 com.android.managedprovisioning.preprovisioning;
+
+import android.app.Activity;
+
+import com.android.managedprovisioning.common.Utils;
+import com.android.managedprovisioning.preprovisioning.consent.CarConsentUiHelper;
+import com.android.managedprovisioning.preprovisioning.consent.ConsentUiHelperCallback;
+
+/**
+ * A {@link PreProvisioningActivityBridge} implementation meant for the base {@code
+ * ManagedProvisioning}.
+ */
+public final class CarPreProvisioningActivityBridgeImpl implements PreProvisioningActivityBridge {
+
+    private final CarConsentUiHelper mConsentUiHelper;
+
+    CarPreProvisioningActivityBridgeImpl(
+            Activity activity,
+            Utils utils,
+            ConsentUiHelperCallback callback,
+            PreProvisioningActivityBridgeCallbacks bridgeCallbacks) {
+
+        mConsentUiHelper = new CarConsentUiHelper(activity, callback, utils, bridgeCallbacks);
+    }
+
+    @Override
+    public void initiateUi(PreProvisioningActivityController.UiParams uiParams) {
+        mConsentUiHelper.initiateUi(uiParams);
+    }
+
+    @Override
+    public void onStart() {
+        mConsentUiHelper.onStart();
+    }
+
+    @Override
+    public void onStop() {
+        mConsentUiHelper.onStop();
+    }
+}
diff --git a/packages/CarManagedProvisioning/src/com/android/managedprovisioning/preprovisioning/consent/CarConsentUiHelper.java b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/preprovisioning/consent/CarConsentUiHelper.java
new file mode 100644
index 0000000..df0be1d
--- /dev/null
+++ b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/preprovisioning/consent/CarConsentUiHelper.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2021 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 com.android.managedprovisioning.preprovisioning.consent;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.DrawableRes;
+import android.app.Activity;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.car.setupwizardlib.CarSetupWizardCompatLayout;
+import com.android.managedprovisioning.R;
+import com.android.managedprovisioning.common.CarSetupWizardLayoutHelper;
+import com.android.managedprovisioning.common.ProvisionLogger;
+import com.android.managedprovisioning.common.TouchTargetEnforcer;
+import com.android.managedprovisioning.common.Utils;
+import com.android.managedprovisioning.model.CustomizationParams;
+import com.android.managedprovisioning.preprovisioning.PreProvisioningActivityBridgeCallbacks;
+import com.android.managedprovisioning.preprovisioning.PreProvisioningActivityController.UiParams;
+import com.android.server.utils.Slogf;
+
+/**
+ * Implements functionality for the consent screen.
+ */
+public final class CarConsentUiHelper implements ConsentUiHelper {
+    private static final String TAG = CarConsentUiHelper.class.getSimpleName();
+    private final Activity mActivity;
+    private final TouchTargetEnforcer mTouchTargetEnforcer;
+    private final ConsentUiHelperCallback mCallback;
+    private final Utils mUtils;
+    private final PreProvisioningActivityBridgeCallbacks mBridgeCallbacks;
+
+    private CarSetupWizardCompatLayout mLayout;
+
+    public CarConsentUiHelper(Activity activity, ConsentUiHelperCallback callback, Utils utils,
+                PreProvisioningActivityBridgeCallbacks bridgeCallbacks) {
+        Slogf.d(TAG, "created new instance..");
+        mActivity = requireNonNull(activity);
+        mCallback = requireNonNull(callback);
+        mTouchTargetEnforcer =
+                new TouchTargetEnforcer(activity.getResources().getDisplayMetrics().density);
+        mUtils = requireNonNull(utils);
+        mBridgeCallbacks = requireNonNull(bridgeCallbacks);
+    }
+
+    @Override
+    public void onStart() {
+        // Do nothing.
+        Slogf.d(TAG, "onStart..");
+    }
+
+    @Override
+    public void onStop() {
+        // Do nothing.
+        Slogf.d(TAG, "onStop..");
+    }
+
+    @Override
+    public void initiateUi(UiParams uiParams) {
+        int titleResId = 0;
+        int headerResId = 0;
+        int subLayoutId = R.layout.preprovision_layout;
+
+        if (mUtils.isProfileOwnerAction(uiParams.provisioningAction)) {
+            titleResId = R.string.setup_profile;
+            headerResId = R.string.work_profile_provisioning_accept_header_post_suw;
+        } else if (mUtils.isDeviceOwnerAction(uiParams.provisioningAction)) {
+            titleResId = R.string.setup_device;
+            headerResId = R.string.fully_managed_device_provisioning_accept_header;
+        }
+        CustomizationParams customization = uiParams.customization;
+        mCallback.onInitiateUi(
+                CarSetupWizardLayoutHelper.MAIN_LAYOUT_RES_ID,
+                headerResId,
+                customization);
+        mActivity.setTitle(titleResId);
+
+        // Set the base layout
+        CarSetupWizardLayoutHelper layoutHelper = new CarSetupWizardLayoutHelper(mActivity);
+        CarSetupWizardCompatLayout layout = layoutHelper.setBaseLayout(
+                subLayoutId, /* isDoubleColumnAllowed= */ true);
+        layoutHelper.setHeaderText(headerResId, R.string.view_terms);
+        layoutHelper.setupPrimaryToolbarButton(R.string.accept_and_continue,
+                v -> onTermsAccepted());
+
+        // Set preprovisioning screen specific resources
+        setupImageView(R.drawable.ic_car_cockpit);
+        setupViewTermsButton();
+    }
+
+    private void setupImageView(@DrawableRes int imageResId) {
+        ImageView illustration = mActivity.findViewById(R.id.illustration);
+        illustration.setImageResource(imageResId);
+    }
+
+    /** Set the primary toolbar button text and have it scroll to the next section when clicked. */
+    private void setupAcceptAndContinueButton(Button button) {
+        button.setText(mActivity.getString(R.string.accept_and_continue));
+        button.setOnClickListener(v -> onTermsAccepted());
+    }
+
+    private void onTermsAccepted() {
+        ProvisionLogger.logi("Next button (next_button) is clicked.");
+        mBridgeCallbacks.onTermsAccepted();
+    }
+
+    private void setupViewTermsButton() {
+        TextView description = mActivity.findViewById(R.id.description);
+
+        description.setTextColor(mUtils.getAccentColor(mActivity));
+        description.setOnClickListener(v -> mBridgeCallbacks.onTermsButtonClicked());
+        mTouchTargetEnforcer.enforce(description, (View) description.getParent());
+    }
+}
diff --git a/packages/CarManagedProvisioning/src/com/android/managedprovisioning/preprovisioning/terms/CarTermsActivity.java b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/preprovisioning/terms/CarTermsActivity.java
new file mode 100644
index 0000000..a3a91c2
--- /dev/null
+++ b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/preprovisioning/terms/CarTermsActivity.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2021 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 com.android.managedprovisioning.preprovisioning.terms;
+
+import static com.android.internal.util.Preconditions.checkNotNull;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.Nullable;
+import android.os.Bundle;
+import android.widget.TextView;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+import com.android.car.setupwizardlib.CarSetupWizardCompatLayout;
+import com.android.car.ui.recyclerview.CarUiRecyclerView;
+import com.android.managedprovisioning.R;
+import com.android.managedprovisioning.common.AccessibilityContextMenuMaker;
+import com.android.managedprovisioning.common.CarSetupWizardLayoutHelper;
+import com.android.managedprovisioning.common.SettingsFacade;
+import com.android.managedprovisioning.common.StylerHelper;
+import com.android.managedprovisioning.model.CustomizationParams;
+import com.android.managedprovisioning.model.ProvisioningParams;
+import com.android.managedprovisioning.preprovisioning.terms.TermsViewModel.TermsViewModelFactory;
+import com.android.managedprovisioning.preprovisioning.terms.adapters.TermsListAdapter;
+
+import java.util.List;
+import java.util.function.BiFunction;
+
+/**
+ * TODO(b/183510678) A temporary implementation for AAOS to override
+ * {@link TermsActivity} in ManagedProvisioning using inheritance. The long term
+ * solution will be to use composition.
+ */
+public final class CarTermsActivity extends TermsActivity implements
+        TermsListAdapter.TermsBridge {
+
+    private static final String TAG = CarTermsActivity.class.getSimpleName();
+
+    private final BiFunction<AppCompatActivity, ProvisioningParams, TermsViewModel>
+            mViewModelFetcher;
+    private final StylerHelper mStylerHelper;
+    private TermsViewModel mViewModel;
+
+    public CarTermsActivity() {
+        this(new SettingsFacade(), new StylerHelper(), (activity, params) -> {
+            TermsViewModelFactory factory =
+                     new TermsViewModelFactory(activity.getApplication(), params);
+            return new ViewModelProvider(activity, factory).get(TermsViewModel.class);
+        });
+    }
+
+    @VisibleForTesting
+    CarTermsActivity(SettingsFacade settingsFacade, StylerHelper stylerHelper,
+            BiFunction<AppCompatActivity, ProvisioningParams, TermsViewModel> viewModelFetcher) {
+        super(/* contextMenuMaker= */ null, settingsFacade, stylerHelper, viewModelFetcher);
+
+        mStylerHelper = requireNonNull(stylerHelper);
+        mViewModelFetcher = requireNonNull(viewModelFetcher);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        CarSetupWizardLayoutHelper layoutHelper = new CarSetupWizardLayoutHelper(this);
+        CarSetupWizardCompatLayout layout =
+                layoutHelper.setBaseLayout(
+                        /* mainLayoutResId= */ CarSetupWizardLayoutHelper.MAIN_LAYOUT_RES_ID,
+                        /* columnLayoutId= */ R.layout.single_column_left_layout,
+                        /* subLayoutId= */ R.layout.terms_layout);
+        TextView titleView = layout.findViewById(R.id.description_title);
+        titleView.setText(R.string.terms);
+        layout.setPrimaryToolbarButtonVisible(false);
+
+        ProvisioningParams params = checkNotNull(
+                getIntent().getParcelableExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS));
+        mViewModel = mViewModelFetcher.apply(this, params);
+        List<TermsDocument> terms = mViewModel.getTerms();
+
+        CarUiRecyclerView recyclerView = layout.findViewById(R.id.terms_container);
+        recyclerView.setLayoutManager(new LinearLayoutManager(/* context= */ this));
+        recyclerView.setAdapter(new TermsListAdapter(
+                this,
+                mViewModel.getGeneralDisclaimer(),
+                terms,
+                getLayoutInflater(),
+                new AccessibilityContextMenuMaker(this),
+                this,
+                mUtils,
+                mStylerHelper));
+    }
+
+    /**
+     * Overrides {@code initializeLayoutParams} in SetupGlifLayoutActivity to set layout as
+     * {@code CarSetupWizardLayout}
+     */
+    @Override
+    protected void initializeLayoutParams(int layoutResourceId, @Nullable Integer headerResourceId,
+            CustomizationParams params) {
+        CarSetupWizardLayoutHelper layoutHelper = new CarSetupWizardLayoutHelper(this);
+        layoutHelper.setBaseLayout(
+                /* mainLayoutResId= */ CarSetupWizardLayoutHelper.MAIN_LAYOUT_RES_ID,
+                /* columnLayoutId= */ R.layout.single_column_left_layout,
+                /* subLayoutId= */ R.layout.terms_layout);
+    }
+}
diff --git a/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarLandingActivity.java b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarLandingActivity.java
new file mode 100644
index 0000000..2646007
--- /dev/null
+++ b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarLandingActivity.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2021 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 com.android.managedprovisioning.provisioning;
+
+import android.annotation.Nullable;
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.managedprovisioning.R;
+import com.android.managedprovisioning.common.AccessibilityContextMenuMaker;
+import com.android.managedprovisioning.common.CarSetupWizardLayoutHelper;
+import com.android.managedprovisioning.common.SettingsFacade;
+import com.android.managedprovisioning.common.ThemeHelper;
+import com.android.managedprovisioning.common.ThemeHelper.DefaultNightModeChecker;
+import com.android.managedprovisioning.common.ThemeHelper.DefaultSetupWizardBridge;
+import com.android.managedprovisioning.common.Utils;
+import com.android.managedprovisioning.model.CustomizationParams;
+import com.android.managedprovisioning.model.ProvisioningParams;
+
+/**
+ * The first activity shown during provisioning.
+ */
+public final class CarLandingActivity extends LandingActivity {
+    private static final int ADMIN_INTEGRATED_FLOW_PREPARE_REQUEST_CODE = 1;
+
+    private final AccessibilityContextMenuMaker mContextMenuMaker;
+    private LandingActivityBridge mBridge;
+    private ProvisioningParams mParams;
+    private CarSetupWizardLayoutHelper mLayoutHelper;
+
+    public CarLandingActivity() {
+        this(new Utils(), /* contextMenuMaker= */ null, new SettingsFacade(),
+                new ThemeHelper(new DefaultNightModeChecker(), new DefaultSetupWizardBridge()));
+    }
+
+    @VisibleForTesting
+    CarLandingActivity(Utils utils, AccessibilityContextMenuMaker contextMenuMaker,
+            SettingsFacade settingsFacade, ThemeHelper themeHelper) {
+        super(utils, contextMenuMaker, settingsFacade, themeHelper);
+        mContextMenuMaker = contextMenuMaker != null
+                ? contextMenuMaker
+                : new AccessibilityContextMenuMaker(this);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        mParams = getIntent().getParcelableExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS);
+        mLayoutHelper = new CarSetupWizardLayoutHelper(this);
+        super.onCreate(savedInstanceState);
+    }
+
+    @Override
+    protected LandingActivityBridge createBridge() {
+        return CarLandingActivityBridgeImpl.builder()
+                .setBridgeCallbacks(createBridgeCallbacks())
+                .setParams(mParams)
+                .setInitializeLayoutParamsConsumer(CarLandingActivity.this::initializeLayoutParams)
+                .setUtils(mUtils)
+                .setLayoutHelper(mLayoutHelper)
+                .setAccessibilityContextMenuMaker(mContextMenuMaker)
+                .build();
+    }
+
+    private LandingActivityBridgeCallbacks createBridgeCallbacks() {
+        return new LandingActivityBridgeCallbacks() {
+            @Override
+            public void onNextButtonClicked() {
+                CarLandingActivity.this.onNextButtonClicked();
+            }
+
+            @Override
+            public void onContactYourItAdminClicked(Intent webIntent) {
+                getTransitionHelper().startActivityWithTransition(
+                        CarLandingActivity.this, webIntent);
+            }
+        };
+    }
+
+    // For AAOS, admin integrated should be run by default. Therefore,
+    // ADMIN_INTEGRATED_PREPARE screen will be skipped as compared to on mobile.
+    private void onNextButtonClicked() {
+        setResult(Activity.RESULT_OK);
+        getTransitionHelper().finishActivity(this);
+    }
+
+    /**
+     * Overrides {@code initializeLayoutParams} in SetupGlifLayoutActivity to set layout as
+     * {@code CarSetupWizardLayout}
+     */
+    @Override
+    protected void initializeLayoutParams(int layoutResourceId, @Nullable Integer headerResourceId,
+            CustomizationParams params) {
+        CarSetupWizardLayoutHelper layoutHelper = mLayoutHelper;
+        layoutHelper.setBaseLayout(
+                /* mainLayoutId= */ layoutResourceId,
+                /* subLayoutId= */ R.layout.empty_layout,
+                /* isDoubleColumnAllowed= */ false);
+    }
+}
diff --git a/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarLandingActivityBridgeImpl.java b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarLandingActivityBridgeImpl.java
new file mode 100644
index 0000000..a45a47a
--- /dev/null
+++ b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarLandingActivityBridgeImpl.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2021 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 com.android.managedprovisioning.provisioning;
+
+import android.app.Activity;
+import android.content.Context;
+import android.widget.TextView;
+
+import com.android.car.setupwizardlib.CarSetupWizardCompatLayout;
+import com.android.managedprovisioning.R;
+import com.android.managedprovisioning.common.AccessibilityContextMenuMaker;
+import com.android.managedprovisioning.common.CarSetupWizardLayoutHelper;
+import com.android.managedprovisioning.common.InitializeLayoutConsumerHandler;
+import com.android.managedprovisioning.common.Utils;
+import com.android.managedprovisioning.model.CustomizationParams;
+import com.android.managedprovisioning.model.ProvisioningParams;
+
+import com.google.auto.value.AutoValue;
+
+/**
+ * AAOS implementation of LandingActivityBridge with Car SUW layout and only device owner support,
+ * i.e. BYOD use case is not suppoerted yet.
+ */
+@AutoValue
+abstract class CarLandingActivityBridgeImpl implements LandingActivityBridge {
+
+    abstract Utils getUtils();
+    abstract ProvisioningParams getParams();
+    abstract LandingActivityBridgeCallbacks getBridgeCallbacks();
+    abstract AccessibilityContextMenuMaker getAccessibilityContextMenuMaker();
+    abstract InitializeLayoutConsumerHandler getInitializeLayoutParamsConsumer();
+    abstract CarSetupWizardLayoutHelper getLayoutHelper();
+
+    @Override
+    public void initiateUi(Activity activity) {
+        int headerResId = R.string.brand_screen_header;
+        int mainLayoutId = CarSetupWizardLayoutHelper.MAIN_LAYOUT_RES_ID;
+        int subLayoutId = R.layout.empty_layout;
+
+        CustomizationParams customizationParams =
+                CustomizationParams.createInstance(getParams(), activity, getUtils());
+        getInitializeLayoutParamsConsumer()
+                .initializeLayoutParams(mainLayoutId, headerResId, customizationParams);
+
+        CarSetupWizardLayoutHelper layoutHelper = getLayoutHelper();
+        CarSetupWizardCompatLayout layout = layoutHelper.setBaseLayout(
+                subLayoutId, /* isDoubleColumnAllowed= */ false);
+
+        layoutHelper.setupPrimaryToolbarButton(R.string.next,
+                v -> getBridgeCallbacks().onNextButtonClicked());
+
+        TextView descriptionTitle = activity.findViewById(R.id.description_title);
+        descriptionTitle.setText(headerResId);
+        TextView description = activity.findViewById(R.id.description);
+        handleSupportUrl(activity, customizationParams, description, getUtils());
+    }
+
+    private void handleSupportUrl(
+            Context context,
+            CustomizationParams customizationParams,
+            TextView info,
+            Utils utils) {
+        String deviceProvider = context.getString(R.string.organization_admin);
+        String contactDeviceProvider =
+                context.getString(R.string.contact_device_provider, deviceProvider);
+        utils.handleSupportUrl(
+                context,
+                customizationParams,
+                getAccessibilityContextMenuMaker(),
+                info,
+                deviceProvider,
+                contactDeviceProvider, intent ->
+                        getBridgeCallbacks().onContactYourItAdminClicked(intent));
+    }
+
+    static Builder builder() {
+        return new AutoValue_CarLandingActivityBridgeImpl.Builder();
+    }
+
+    @AutoValue.Builder
+    abstract static class Builder {
+        abstract Builder setUtils(Utils utils);
+        abstract Builder setParams(ProvisioningParams params);
+        abstract Builder setInitializeLayoutParamsConsumer(
+                InitializeLayoutConsumerHandler initializeLayoutParamsConsumer);
+        abstract Builder setLayoutHelper(CarSetupWizardLayoutHelper layoutHelper);
+        abstract Builder setBridgeCallbacks(LandingActivityBridgeCallbacks callbacks);
+        abstract Builder setAccessibilityContextMenuMaker(
+                AccessibilityContextMenuMaker accessibilityContextMenuMaker);
+        abstract CarLandingActivityBridgeImpl build();
+    }
+}
diff --git a/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarProvisioningActivity.java b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarProvisioningActivity.java
new file mode 100644
index 0000000..f1405b3
--- /dev/null
+++ b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarProvisioningActivity.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2021 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 com.android.managedprovisioning.provisioning;
+
+import android.annotation.Nullable;
+import android.content.Intent;
+import android.os.Bundle;
+
+import com.android.car.setupwizardlib.util.CarWizardManagerHelper;
+import com.android.managedprovisioning.ManagedProvisioningScreens;
+import com.android.managedprovisioning.R;
+import com.android.managedprovisioning.common.CarSetupWizardLayoutHelper;
+import com.android.managedprovisioning.common.PolicyComplianceUtils;
+import com.android.managedprovisioning.common.SettingsFacade;
+import com.android.managedprovisioning.common.ThemeHelper;
+import com.android.managedprovisioning.common.ThemeHelper.DefaultNightModeChecker;
+import com.android.managedprovisioning.common.ThemeHelper.DefaultSetupWizardBridge;
+import com.android.managedprovisioning.common.Utils;
+import com.android.managedprovisioning.finalization.UserProvisioningStateHelper;
+import com.android.managedprovisioning.model.CustomizationParams;
+import com.android.managedprovisioning.model.ProvisioningParams;
+import com.android.server.utils.Slogf;
+
+/**
+ * TODO (b/183510678) A temporary implementation for AAOS to override
+ * {@link ProvisioningActivity} in ManagedProvisioning using inheritance. The long term
+ * solution will be to use composition.
+ */
+public final class CarProvisioningActivity extends ProvisioningActivity {
+
+    private static final String TAG = CarProvisioningActivity.class.getSimpleName();
+    private static final int RESET_REQUEST_CODE = 1;
+
+    private UserProvisioningStateHelper mUserProvisioningStateHelper;
+    private PolicyComplianceUtils mPolicyComplianceUtils;
+    private ProvisioningManager mProvisioningManager;
+    private ProvisioningActivityBridge mBridge;
+
+    public CarProvisioningActivity() {
+        super(/* provisioningManager= */ null, // defined in getProvisioningManager()
+                new Utils(),
+                /* userProvisioningStateHelper= */ null, // defined in onCreate()
+                new PolicyComplianceUtils(),
+                new SettingsFacade(),
+                new ThemeHelper(new DefaultNightModeChecker(), new DefaultSetupWizardBridge()));
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mBridge = createBridge();
+        mBridge.initiateUi(/* activity= */ this);
+
+        // assign this Activity as the view store owner to access saved state and receive updates
+        getProvisioningManager().setViewModelStoreOwner(this);
+
+        if (mUserProvisioningStateHelper == null) {
+            mUserProvisioningStateHelper = new UserProvisioningStateHelper(this);
+        }
+
+        if (mState == STATE_PROVISIONING_FINALIZED) {
+            updateProvisioningFinalizedScreen();
+        }
+    }
+
+    @Override
+    protected void onAbortButtonClicked() {
+        Intent intent = new Intent(this,
+                getActivityForScreen(ManagedProvisioningScreens.RESET_AND_RETURN_DEVICE));
+        CarWizardManagerHelper.copyWizardManagerExtras(getIntent(), intent);
+        intent.putExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS, mParams);
+        getTransitionHelper().startActivityForResultWithTransition(
+                this, intent, RESET_REQUEST_CODE);
+    }
+
+    @Override
+    protected ProvisioningActivityBridge createBridge() {
+        return CarProvisioningActivityBridgeImpl.builder()
+                .setParams(mParams)
+                .setUtils(mUtils)
+                .setProvisioningMode(getProvisioningMode())
+                .setProvisioningManager(getProvisioningManager())
+                .setTransitionAnimationCallback(this)
+                .setInitializeLayoutParamsConsumer(
+                        CarProvisioningActivity.this::initializeLayoutParams)
+                .setShouldSkipEducationScreens(shouldSkipEducationScreens())
+                .setProgressLabelResId(getProgressLabelResId())
+                .setBridgeCallbacks(createCallbacks())
+                .setStateManager(this)
+                .build();
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == RESET_REQUEST_CODE
+                && resultCode == RESULT_CANCELED) {
+            Slogf.d(TAG, "Finishing Activity since RESET_AND_RETURN_DEVICE screen returned "
+                    + "RESULT_CANCELED");
+            setResult(resultCode);
+            getTransitionHelper().finishActivity(CarProvisioningActivity.this);
+        } else {
+            super.onActivityResult(requestCode, resultCode, data);
+        }
+    }
+
+    /**
+     * Overrides {@code initializeLayoutParams} in SetupGlifLayoutActivity to set layout as
+     * {@code CarSetupWizardLayout}
+     */
+    @Override
+    protected void initializeLayoutParams(int layoutResourceId, @Nullable Integer headerResourceId,
+            CustomizationParams params) {
+        CarSetupWizardLayoutHelper layoutHelper = new CarSetupWizardLayoutHelper(this);
+        layoutHelper.setBaseLayout(/* mainLayoutResId= */ layoutResourceId,
+                /* subLayoutId= */ R.layout.provision_layout,
+                /* isDoubleColumnAllowed= */ false);
+    }
+}
diff --git a/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarProvisioningActivityBridgeImpl.java b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarProvisioningActivityBridgeImpl.java
new file mode 100644
index 0000000..32b62f9
--- /dev/null
+++ b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarProvisioningActivityBridgeImpl.java
@@ -0,0 +1,307 @@
+/*
+ * Copyright (C) 2021 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 com.android.managedprovisioning.provisioning;
+
+import android.app.Activity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.Space;
+import android.widget.TextView;
+
+import androidx.annotation.StringRes;
+
+import com.android.car.setupwizardlib.CarSetupWizardCompatLayout;
+import com.android.managedprovisioning.R;
+import com.android.managedprovisioning.common.CarSetupWizardLayoutHelper;
+import com.android.managedprovisioning.common.InitializeLayoutConsumerHandler;
+import com.android.managedprovisioning.common.StylerHelper;
+import com.android.managedprovisioning.common.Utils;
+import com.android.managedprovisioning.model.CustomizationParams;
+import com.android.managedprovisioning.model.ProvisioningParams;
+import com.android.managedprovisioning.provisioning.ProvisioningActivity.ProvisioningMode;
+import com.android.managedprovisioning.provisioning.ProvisioningModeWrapperProvider.ProvisioningModeWrapper;
+import com.android.managedprovisioning.provisioning.TransitionAnimationHelper.AnimationComponents;
+import com.android.managedprovisioning.provisioning.TransitionAnimationHelper.TransitionAnimationCallback;
+import com.android.managedprovisioning.provisioning.TransitionAnimationHelper.TransitionAnimationStateManager;
+import com.android.server.utils.Slogf;
+
+import com.airbnb.lottie.LottieAnimationView;
+import com.google.auto.value.AutoValue;
+
+import java.util.function.Supplier;
+
+/**
+ * A {@link ProvisioningActivityBridge} implementation meant for the base {@code
+ * ManagedProvisioning}. Note: there is no progress label in AAOS's layout.
+ */
+@AutoValue
+abstract class CarProvisioningActivityBridgeImpl implements ProvisioningActivityBridge {
+    private static final String TAG = CarProvisioningActivityBridgeImpl.class.getSimpleName();
+
+    private TransitionAnimationHelper mTransitionAnimationHelper;
+    private View mPrimaryButtonView;
+    private View mSecondaryButtonView;
+    private View mProgressBar;
+
+    abstract Utils getUtils();
+    abstract ProvisioningParams getParams();
+    abstract @ProvisioningMode int getProvisioningMode();
+    abstract ProvisioningManager getProvisioningManager();
+    abstract TransitionAnimationCallback getTransitionAnimationCallback();
+    abstract InitializeLayoutConsumerHandler getInitializeLayoutParamsConsumer();
+    abstract boolean getShouldSkipEducationScreens();
+    abstract @StringRes int getProgressLabelResId();
+    abstract ProvisioningActivityBridgeCallbacks getBridgeCallbacks();
+    abstract TransitionAnimationStateManager getStateManager();
+
+    @Override
+    public void initiateUi(Activity activity) {
+        boolean isPoProvisioning = getUtils().isProfileOwnerAction(getParams().provisioningAction);
+        int titleResId =
+                isPoProvisioning ? R.string.setup_profile_progress : R.string.setup_device_progress;
+        int mainLayoutId = CarSetupWizardLayoutHelper.MAIN_LAYOUT_RES_ID;
+        int subLayoutId = getShouldSkipEducationScreens()
+                ? R.layout.empty_layout
+                : R.layout.provision_layout;
+
+        CustomizationParams customizationParams =
+                CustomizationParams.createInstance(getParams(), activity, getUtils());
+        getInitializeLayoutParamsConsumer().initializeLayoutParams(
+                mainLayoutId, /* headerResId= */ null, customizationParams);
+        activity.setTitle(titleResId);
+
+        CarSetupWizardLayoutHelper layoutHelper = setupBasicLayout(activity, subLayoutId);
+
+        setupEducationViews(layoutHelper.getBaseLayout(), activity,
+                getShouldSkipEducationScreens(), getProgressLabelResId());
+    }
+
+    @Override
+    public void onStart(Activity activity) {
+        if (!getShouldSkipEducationScreens()) {
+            startTransitionAnimation(activity, getTransitionAnimationCallback());
+        }
+        boolean show = activity.getResources().getBoolean(R.bool.show_progress_label_on_left_side);
+        Slogf.d(TAG, "setupEducationViews(): onStart: show_progress_label_on_left_side: " + show);
+    }
+
+    @Override
+    public void onStop() {
+        if (!getShouldSkipEducationScreens()) {
+            endTransitionAnimation();
+        }
+    }
+
+    @Override
+    public void onProvisioningFinalized(Activity activity) {
+        if (!getShouldSkipEducationScreens()) {
+            mPrimaryButtonView.setVisibility(View.VISIBLE);
+            mSecondaryButtonView.setVisibility(View.VISIBLE);
+            mProgressBar.setVisibility(View.GONE);
+        }
+
+        if (getShouldSkipEducationScreens()) {
+            getBridgeCallbacks().onNextButtonClicked();
+        }
+    }
+
+    private CarSetupWizardLayoutHelper setupBasicLayout(Activity activity, int subLayoutId) {
+        CarSetupWizardLayoutHelper layoutHelper = new CarSetupWizardLayoutHelper(activity);
+        CarSetupWizardCompatLayout layout = layoutHelper.setBaseLayout(
+                subLayoutId, /* isDoubleColumnAllowed= */ false);
+        setupButtons(layout, activity);
+        setupProgressBar(layout);
+
+        return layoutHelper;
+    }
+
+    private void startTransitionAnimation(Activity activity, TransitionAnimationCallback callback) {
+        int subLayoutId = R.layout.provision_layout;
+        CarSetupWizardLayoutHelper layoutHelper = setupBasicLayout(activity, subLayoutId);
+        setupTransitionAnimationHelper(layoutHelper.getBaseLayout(), activity, callback);
+        mTransitionAnimationHelper.start();
+    }
+
+    private void endTransitionAnimation() {
+        mTransitionAnimationHelper.stop();
+        mTransitionAnimationHelper = null;
+    }
+
+    private void setupTransitionAnimationHelper(
+            CarSetupWizardCompatLayout layout,
+            Activity activity,
+            TransitionAnimationCallback callback) {
+        TextView header = activity.findViewById(R.id.description_title);
+        TextView description = activity.findViewById(R.id.description);
+
+        ImageView logo = activity.findViewById(R.id.title_logo);
+        logo.setImageResource(com.android.internal.R.drawable.ic_corp_badge_case);
+
+        ViewGroup item1 = activity.findViewById(R.id.item1);
+        ViewGroup item2 = activity.findViewById(R.id.item2);
+        LottieAnimationView drawable = activity.findViewById(R.id.illustration);
+        ViewGroup drawableContainer = activity.findViewById(R.id.illustration_container);
+        Space space1 = layout.findViewById(R.id.space1);
+        Space space2 = layout.findViewById(R.id.space2);
+        AnimationComponents animationComponents =
+                new AnimationComponents(
+                        header, description, item1, item2, drawable, drawableContainer,
+                        space1, space2);
+
+        ProvisioningModeWrapper provisioningModeWrapper =
+                getProvisioningModeWrapperForFullyManaged();
+
+        mTransitionAnimationHelper = new TransitionAnimationHelper(
+                animationComponents,
+                callback,
+                getStateManager(),
+                new StylerHelper(),
+                provisioningModeWrapper);
+
+        Slogf.d(TAG, "setupEducationViews(): shouldSkipEducationScreens: "
+                + R.bool.show_edu_animations);
+    }
+
+    private ProvisioningModeWrapper getProvisioningModeWrapperForFullyManaged() {
+        int provisioningSummaryId;
+        TransitionScreenWrapper.Builder secondScreenBuilder =
+                new TransitionScreenWrapper.Builder()
+                        .setHeader(R.string.fully_managed_device_provisioning_step_2_header);
+
+        if (!getParams().deviceOwnerPermissionGrantOptOut) {
+            secondScreenBuilder
+                    .setSubHeaderTitle(
+                            R.string.fully_managed_device_provisioning_permissions_header)
+                    .setSubHeader(R.string.fully_managed_device_provisioning_permissions_subheader)
+                    .setSubHeaderIcon(R.drawable.ic_history)
+                    .setSecondarySubHeaderTitle(
+                            R.string.fully_managed_device_provisioning_permissions_secondary_header)
+                    .setSecondarySubHeader(R.string
+                            .fully_managed_device_provisioning_permissions_secondary_subheader)
+                    .setSecondarySubHeaderIcon(R.drawable.ic_perm_device_information)
+                    .setShouldLoop(false);
+            provisioningSummaryId =
+                    R.string.fully_managed_device_with_permission_control_provisioning_summary;
+        } else {
+            provisioningSummaryId = R.string.fully_managed_device_provisioning_summary;
+            secondScreenBuilder
+                    .setDescription(R.string.fully_managed_device_provisioning_step_2_subheader)
+                    .setAnimation(/* drawable= */ 0);
+        }
+
+        TransitionScreenWrapper firstScreen = new TransitionScreenWrapper(
+                R.string.fully_managed_device_provisioning_step_1_header,
+                R.string.fully_managed_device_provisioning_step_1_description,
+                /* drawable= */ 0, /* shouldLoop= */ false);
+        return new ProvisioningModeWrapper(new TransitionScreenWrapper[] {
+                firstScreen, secondScreenBuilder.build()}, provisioningSummaryId);
+    }
+
+    @Override
+    public boolean shouldShowButtonsWhenPreProvisioningCompletes() {
+        return mTransitionAnimationHelper.areAllTransitionsShown();
+    }
+
+    static Builder builder() {
+        return new AutoValue_CarProvisioningActivityBridgeImpl.Builder();
+    }
+
+    private void setupEducationViews(
+            CarSetupWizardCompatLayout layout,
+            Activity activity,
+            boolean shouldSkipEducationScreens,
+            @StringRes int progressLabelResId) {
+
+        Slogf.d(TAG, "setupEducationViews(): shouldSkipEducationScreens: "
+                + shouldSkipEducationScreens + " progressLabelResId: " + progressLabelResId);
+    }
+
+    private void setupButtons(CarSetupWizardCompatLayout layout, Activity activity) {
+        layout.setSecondaryToolbarButtonEnabled(true);
+
+        // Button will be bisible only when the provision finished
+        layout.setPrimaryToolbarButtonVisible(false);
+        layout.setSecondaryToolbarButtonVisible(false);
+
+        layout.setPrimaryToolbarButtonText(activity.getString(R.string.next));
+        layout.setPrimaryToolbarButtonListener(v -> getBridgeCallbacks().onNextButtonClicked());
+
+        layout.setSecondaryToolbarButtonText(activity.getString(
+                R.string.fully_managed_device_cancel_setup_button));
+        layout.setSecondaryToolbarButtonListener(v -> getBridgeCallbacks().onAbortButtonClicked());
+
+        //TODO(b/181323689): Add tests to ProvisioningActivityTest that the button is not
+        // shown for non-DO provisioning flows.
+        mPrimaryButtonView = (View) layout.getPrimaryToolbarButton();
+        mSecondaryButtonView = (View) layout.getSecondaryToolbarButton();
+        setOnButtonViewMeasured(mPrimaryButtonView);
+        setOnButtonViewMeasured(mSecondaryButtonView);
+    }
+
+    private void setOnButtonViewMeasured(View view) {
+        getUtils().onViewMeasured(view, v ->
+                onButtonViewMeasured(v, getBridgeCallbacks()::isProvisioningFinalized));
+    }
+
+    /**
+     * Calls {@code callback} when {@code view} has been measured.
+     */
+    private void onButtonViewMeasured(View view,
+            Supplier<Boolean> checkIsProvisioningFinalised) {
+        if (checkIsProvisioningFinalised.get()) {
+            view.setVisibility(View.VISIBLE);
+            return;
+        }
+        view.setVisibility(View.GONE);
+    }
+
+    private void setupProgressBar(CarSetupWizardCompatLayout layout) {
+        mProgressBar = (View) layout.getProgressBar();
+        getUtils().onViewMeasured(mProgressBar, v ->
+                onProgressBarMeasured(v, getBridgeCallbacks()::isProvisioningFinalized));
+    }
+
+    /**
+     * Calls {@code callback} when {@code ProgessBar} has been measured.
+     */
+    private void onProgressBarMeasured(View view,
+            Supplier<Boolean> checkIsProvisioningFinalised) {
+        if (checkIsProvisioningFinalised.get()) {
+            view.setVisibility(View.GONE);
+            return;
+        }
+        view.setVisibility(View.VISIBLE);
+    }
+
+    @AutoValue.Builder
+    abstract static class Builder {
+        abstract Builder setUtils(Utils utils);
+        abstract Builder setParams(ProvisioningParams params);
+        abstract Builder setProvisioningMode(@ProvisioningMode int provisioningMode);
+        abstract Builder setProvisioningManager(ProvisioningManager provisioningManager);
+        abstract Builder setTransitionAnimationCallback(TransitionAnimationCallback callback);
+        abstract Builder setInitializeLayoutParamsConsumer(
+                InitializeLayoutConsumerHandler initializeLayoutParamsConsumer);
+        abstract Builder setShouldSkipEducationScreens(boolean shouldSkipEducationScreens);
+        abstract Builder setProgressLabelResId(@StringRes int progressLabelResId);
+        abstract Builder setBridgeCallbacks(
+                ProvisioningActivityBridgeCallbacks callbacks);
+        abstract Builder setStateManager(TransitionAnimationStateManager stateManager);
+        abstract CarProvisioningActivityBridgeImpl build();
+    }
+}
diff --git a/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarResetAndReturnDeviceActivity.java b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarResetAndReturnDeviceActivity.java
new file mode 100644
index 0000000..6c25472
--- /dev/null
+++ b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarResetAndReturnDeviceActivity.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2021 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 com.android.managedprovisioning.provisioning;
+
+import android.annotation.Nullable;
+import android.app.Activity;
+import android.os.Bundle;
+
+import com.android.managedprovisioning.R;
+import com.android.managedprovisioning.common.CarSetupWizardLayoutHelper;
+import com.android.managedprovisioning.model.CustomizationParams;
+import com.android.managedprovisioning.model.ProvisioningParams;
+
+/**
+ * An activity for telling the user they can abort set-up, reset the device and return
+ * it to their IT admin.
+ */
+public class CarResetAndReturnDeviceActivity extends ResetAndReturnDeviceActivity {
+    private ProvisioningParams mParams;
+    private ResetAndReturnDeviceActivityBridge mBridge;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        mParams = getIntent().getParcelableExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS);
+        super.onCreate(savedInstanceState);
+    }
+
+    @Override
+    protected ResetAndReturnDeviceActivityBridge createBridge() {
+        return CarResetAndReturnDeviceActivityBridgeImpl.builder()
+                .setBridgeCallback(createBridgeCallback())
+                .setParams(mParams)
+                .setInitializeLayoutParamsConsumer(
+                        CarResetAndReturnDeviceActivity.this::initializeLayoutParams)
+                .setUtils(mUtils)
+                .build();
+    }
+
+    @Override
+    public void onBackPressed() {
+        setResult(Activity.RESULT_OK);
+        getTransitionHelper().finishActivity(this);
+    }
+
+    private ResetAndReturnDeviceActivityBridgeCallback createBridgeCallback() {
+        return () -> {
+            getUtils().factoryReset(this, "User chose to abort setup.");
+            setResult(Activity.RESULT_CANCELED);
+            getTransitionHelper().finishActivity(this);
+        };
+    }
+
+    /**
+     * Overrides {@code initializeLayoutParams} in SetupGlifLayoutActivity to set layout as
+     * {@code CarSetupWizardLayout}
+     */
+    @Override
+    protected void initializeLayoutParams(int layoutResourceId, @Nullable Integer headerResourceId,
+            CustomizationParams params) {
+        CarSetupWizardLayoutHelper layoutHelper = new CarSetupWizardLayoutHelper(this);
+        layoutHelper.setBaseLayout(
+                /* mainLayoutResId= */ CarSetupWizardLayoutHelper.MAIN_LAYOUT_RES_ID,
+                /* columnLayoutId= */ R.layout.single_column_left_layout,
+                /* subLayoutId= */ R.layout.empty_layout);
+    }
+}
diff --git a/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarResetAndReturnDeviceActivityBridgeImpl.java b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarResetAndReturnDeviceActivityBridgeImpl.java
new file mode 100644
index 0000000..2d75308
--- /dev/null
+++ b/packages/CarManagedProvisioning/src/com/android/managedprovisioning/provisioning/CarResetAndReturnDeviceActivityBridgeImpl.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2021 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 com.android.managedprovisioning.provisioning;
+
+import android.app.Activity;
+
+import com.android.car.setupwizardlib.CarSetupWizardCompatLayout;
+import com.android.managedprovisioning.R;
+import com.android.managedprovisioning.common.CarSetupWizardLayoutHelper;
+import com.android.managedprovisioning.common.InitializeLayoutConsumerHandler;
+import com.android.managedprovisioning.common.Utils;
+import com.android.managedprovisioning.model.CustomizationParams;
+import com.android.managedprovisioning.model.ProvisioningParams;
+
+import com.google.auto.value.AutoValue;
+
+/**
+ * AAOS implementation of ResetAndReturnDeviceActivityBridge with Car SUW layout and only
+ * device owner support, i.e. BYOD use case is not suppoerted yet.
+ */
+@AutoValue
+abstract class CarResetAndReturnDeviceActivityBridgeImpl
+        implements ResetAndReturnDeviceActivityBridge {
+
+    abstract Utils getUtils();
+    abstract ProvisioningParams getParams();
+    abstract ResetAndReturnDeviceActivityBridgeCallback getBridgeCallback();
+    abstract InitializeLayoutConsumerHandler getInitializeLayoutParamsConsumer();
+
+    @Override
+    public void initiateUi(Activity activity) {
+        CustomizationParams customizationParams =
+                CustomizationParams.createInstance(getParams(), activity, getUtils());
+        int mainLayoutId = CarSetupWizardLayoutHelper.MAIN_LAYOUT_RES_ID;
+
+        // Set the base layout
+        CarSetupWizardLayoutHelper layoutHelper = new CarSetupWizardLayoutHelper(activity);
+        CarSetupWizardCompatLayout layout = layoutHelper.setBaseLayout(
+                /* mainLayoutResId= */ CarSetupWizardLayoutHelper.MAIN_LAYOUT_RES_ID,
+                /* columnLayoutId= */ R.layout.single_column_left_layout,
+                /* subLayoutId= */ R.layout.empty_layout);
+        layoutHelper.setHeaderText(
+                R.string.fully_managed_device_provisioning_return_device_title,
+                R.string.fully_managed_device_provisioning_return_device_subheader);
+        layoutHelper.setupLogo(com.android.internal.R.drawable.stat_sys_certificate_info);
+        layoutHelper.setupPrimaryToolbarButton(
+                R.string.fully_managed_device_reset_and_return_button,
+                v -> getBridgeCallback().onResetButtonClicked());
+    }
+
+    static Builder builder() {
+        return new AutoValue_CarResetAndReturnDeviceActivityBridgeImpl.Builder();
+    }
+
+    @AutoValue.Builder
+    abstract static class Builder {
+        abstract Builder setUtils(Utils utils);
+        abstract Builder setParams(ProvisioningParams params);
+        abstract Builder setInitializeLayoutParamsConsumer(
+                InitializeLayoutConsumerHandler initializeLayoutParamsConsumer);
+        abstract Builder setBridgeCallback(ResetAndReturnDeviceActivityBridgeCallback callback);
+        abstract CarResetAndReturnDeviceActivityBridgeImpl build();
+    }
+}