Merge "Disable UI by default so device is automatically provisioned." into sc-v2-dev
diff --git a/src/com/android/car/provision/DefaultActivity.java b/src/com/android/car/provision/DefaultActivity.java
index 96e0045..b7cd163 100644
--- a/src/com/android/car/provision/DefaultActivity.java
+++ b/src/com/android/car/provision/DefaultActivity.java
@@ -42,6 +42,7 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
+import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
@@ -73,6 +74,22 @@
  *   <li>Add option to setup managed-provisioning mode.
  *   <li>Sets car-specific properties.
  * </ul>
+ *
+ * <p>By default, it doesn't show the UI, unless the {@code persist.dev.car_provision.show_ui}
+ * property is set to {@code true}. For example, you can change it by running something like:
+ <pre><code>
+     adb root
+     adb shell setprop persist.dev.car_provision.show_ui true && \
+     adb shell pm enable --user cur com.android.car.provision/.DefaultActivity &&\
+     adb shell settings put secure --user cur user_setup_complete 0 && \
+     adb shell settings put secure --user 0 user_setup_complete 0 &&\
+     adb shell settings put global device_provisioned 0 &&\
+     adb shell rm -f /data/system/device_policies_version &&\
+     adb shell rm -f /data/system/device_policies.xml &&\
+     adb shell rm -f /data/system/device_owner_2.xml ;\
+     adb shell rm -f /data/system/users/`adb shell am get-current-user`/profile_owner.xml
+     adb shell stop && adb shell start
+  <code></pre>
  */
 public final class DefaultActivity extends Activity {
 
@@ -102,6 +119,8 @@
             + ".DeviceAdminReceiver";
     private static final String LOCAL_TEST_DPC_NAME = "TestDPC (local only)";
 
+    private static final String SHOW_UI_SYSTEM_PROPERTY = "persist.dev.car_provision.show_ui";
+
     static {
         DpcInfo testDpc = new DpcInfo(TEST_DPC_NAME,
                 TEST_DPC_PACKAGE,
@@ -151,6 +170,13 @@
             return;
         }
 
+        if (!showUi()) {
+            Log.w(TAG, "onCreate(): skipping UI because " + SHOW_UI_SYSTEM_PROPERTY
+                    + " was not set to true");
+            finishSetup();
+            return;
+        }
+
         DevicePolicyManager dpm = getSystemService(DevicePolicyManager.class);
         if (dpm.isDeviceManaged()) {
             Log.i(TAG, "onCreate(): skipping UI on managed device");
@@ -180,6 +206,16 @@
         startMonitor();
     }
 
+    private boolean showUi() {
+        boolean result = false;
+        try {
+            result = SystemProperties.getBoolean(SHOW_UI_SYSTEM_PROPERTY, false);
+        } catch (Exception e) {
+            Log.w(TAG, "error getting property " + SHOW_UI_SYSTEM_PROPERTY);
+        }
+        return result;
+    }
+
     private void startMonitor() {
         Log.d(TAG, "startMonitor()");
         registerReceiver(mDrivingStateExitReceiver,