diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestActivity.java
index 570c19e..e51f942 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestActivity.java
@@ -219,12 +219,27 @@
          * To keep the image in this test up to date, use the instructions in
          * {@link ByodIconSamplerActivity}.
          */
-        mWorkAppVisibleTest = new DialogTestListItemWithIcon(this,
-                R.string.provisioning_byod_workapps_visible,
-                "BYOD_WorkAppVisibleTest",
-                R.string.provisioning_byod_workapps_visible_instruction,
-                new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),
-                R.drawable.badged_icon);
+
+        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+            mWorkAppVisibleTest = new DialogTestListItemWithIcon(this,
+                    R.string.provisioning_byod_workapps_visible,
+                    "BYOD_WorkAppVisibleTest",
+                    R.string.provisioning_byod_workapps_visible_instruction,
+                    new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),
+                    R.drawable.badged_icon);
+
+            mConfirmWorkCredentials = new DialogTestListItem(this,
+                    R.string.provisioning_byod_confirm_work_credentials,
+                    "BYOD_ConfirmWorkCredentials",
+                    R.string.provisioning_byod_confirm_work_credentials_description,
+                    new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME));
+
+            mWiFiDataUsageSettingsVisibleTest = new DialogTestListItem(this,
+                    R.string.provisioning_byod_wifi_data_usage_settings,
+                    "BYOD_WiFiDataUsageSettingsVisibleTest",
+                    R.string.provisioning_byod_wifi_data_usage_settings_instruction,
+                    new Intent(Settings.ACTION_SETTINGS));
+        }
 
         mWorkNotificationBadgedTest = new DialogTestListItemWithIcon(this,
                 R.string.provisioning_byod_work_notification,
@@ -294,12 +309,6 @@
                 R.string.provisioning_byod_location_settings_instruction,
                 new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
 
-        mWiFiDataUsageSettingsVisibleTest = new DialogTestListItem(this,
-                R.string.provisioning_byod_wifi_data_usage_settings,
-                "BYOD_WiFiDataUsageSettingsVisibleTest",
-                R.string.provisioning_byod_wifi_data_usage_settings_instruction,
-                new Intent(Settings.ACTION_SETTINGS));
-
         mCellularDataUsageSettingsVisibleTest = new DialogTestListItem(this,
                 R.string.provisioning_byod_cellular_data_usage_settings,
                 "BYOD_CellularDataUsageSettingsVisibleTest",
@@ -387,12 +396,6 @@
                 R.string.provisioning_byod_select_work_challenge_description,
                 new Intent(ByodHelperActivity.ACTION_TEST_SELECT_WORK_CHALLENGE));
 
-        mConfirmWorkCredentials = new DialogTestListItem(this,
-                R.string.provisioning_byod_confirm_work_credentials,
-                "BYOD_ConfirmWorkCredentials",
-                R.string.provisioning_byod_confirm_work_credentials_description,
-                new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME));
-
         mRecentsTest = TestListItem.newTest(this,
                 R.string.provisioning_byod_recents,
                 RecentsRedactionActivity.class.getName(),
@@ -427,7 +430,10 @@
         adapter.add(mDiskEncryptionTest);
 
         // Badge related tests
-        adapter.add(mWorkAppVisibleTest);
+        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+            adapter.add(mWorkAppVisibleTest);
+        }
+
         adapter.add(mWorkNotificationBadgedTest);
         adapter.add(mWorkStatusBarIconTest);
         adapter.add(mWorkStatusBarToastTest);
@@ -454,14 +460,18 @@
         adapter.add(mVpnTest);
         adapter.add(mTurnOffWorkFeaturesTest);
         adapter.add(mSelectWorkChallenge);
-        adapter.add(mConfirmWorkCredentials);
+        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+            adapter.add(mConfirmWorkCredentials);
+        }
         adapter.add(mRecentsTest);
         adapter.add(mOrganizationInfoTest);
         adapter.add(mParentProfilePassword);
         adapter.add(mPolicyTransparencyTest);
 
-        if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI)) {
-            adapter.add(mWiFiDataUsageSettingsVisibleTest);
+        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+            if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI)) {
+                adapter.add(mWiFiDataUsageSettingsVisibleTest);
+            }
         }
 
         mCm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/TurnOffWorkActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/TurnOffWorkActivity.java
index 719f1db..f855b56 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/TurnOffWorkActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/TurnOffWorkActivity.java
@@ -23,6 +23,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.pm.PackageManager;
 import android.hardware.fingerprint.FingerprintManager;
 import android.os.Bundle;
 import android.provider.Settings;
@@ -124,10 +125,12 @@
                 R.string.provisioning_byod_turn_off_work_icon_instruction,
                 new Intent(Settings.ACTION_SETTINGS)));
 
-        adapter.add(new DialogTestListItem(this, R.string.provisioning_byod_turn_off_work_launcher,
-                "BYOD_TurnOffWorkStartApps",
-                R.string.provisioning_byod_turn_off_work_launcher_instruction,
-                homeIntent));
+        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+            adapter.add(new DialogTestListItem(this, R.string.provisioning_byod_turn_off_work_launcher,
+                    "BYOD_TurnOffWorkStartApps",
+                    R.string.provisioning_byod_turn_off_work_launcher_instruction,
+                    homeIntent));
+        }
 
         mTurnOnWorkTest = new DialogTestListItem(this,
                 R.string.provisioning_byod_turn_off_work_turned_on,
@@ -146,9 +149,11 @@
                 R.string.provisioning_byod_turn_on_work_icon_instruction,
                 new Intent(Settings.ACTION_SETTINGS)));
 
-        adapter.add(new DialogTestListItem(this, R.string.provisioning_byod_turn_on_work_launcher,
-                "BYOD_TurnOnWorkStartApps",
-                R.string.provisioning_byod_turn_on_work_launcher_instruction,
-                homeIntent));
+        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+            adapter.add(new DialogTestListItem(this, R.string.provisioning_byod_turn_on_work_launcher,
+                    "BYOD_TurnOnWorkStartApps",
+                    R.string.provisioning_byod_turn_on_work_launcher_instruction,
+                    homeIntent));
+        }
     }
 }
