Downgrade device precondition errors to warnings

Change-Id: Id260c8c24126daeb8d7bfab7c7b6cfc960098452
diff --git a/tools/tradefed-host/preconditions/src/com/android/cts/preconditions/PreconditionsTest.java b/tools/tradefed-host/preconditions/src/com/android/cts/preconditions/PreconditionsTest.java
index 64a2b31..f1576a3 100644
--- a/tools/tradefed-host/preconditions/src/com/android/cts/preconditions/PreconditionsTest.java
+++ b/tools/tradefed-host/preconditions/src/com/android/cts/preconditions/PreconditionsTest.java
@@ -17,19 +17,30 @@
 
 import android.app.KeyguardManager;
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.os.Environment;
 import android.test.AndroidTestCase;
+import android.util.Log;
 
 /**
  * An AndroidTestCase class to verify that device-side preconditions are met for CTS
  */
 public class PreconditionsTest extends AndroidTestCase {
 
+    private static final String TAG = "PreconditionsTest";
+
     /**
      * Test if device has no screen lock
      * @throws Exception
      */
     public void testScreenUnlocked() throws Exception {
+        PackageManager pm = getContext().getPackageManager();
+        if (pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK)
+                || pm.hasSystemFeature(PackageManager.FEATURE_WATCH)
+                || pm.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+            Log.i(TAG, "Skipping screen lock precondition for this device type");
+            return; // do not test for unlocked screen on devices with no screen lock
+        }
         KeyguardManager km =
                 (KeyguardManager) getContext().getSystemService(Context.KEYGUARD_SERVICE);
         assertFalse("Device must have screen lock disabled", km.isDeviceSecure());
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/targetprep/DevicePreconditionPreparer.java b/tools/tradefed-host/src/com/android/cts/tradefed/targetprep/DevicePreconditionPreparer.java
index 039470b..1c0f193 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/targetprep/DevicePreconditionPreparer.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/targetprep/DevicePreconditionPreparer.java
@@ -18,6 +18,7 @@
 
 import com.android.cts.tradefed.build.CtsBuildHelper;
 import com.android.cts.tradefed.testtype.Abi;
+import com.android.ddmlib.Log;
 import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.build.IFolderBuildInfo;
@@ -25,7 +26,7 @@
 import com.android.tradefed.config.OptionClass;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.device.ITestDevice;
-import com.android.tradefed.log.LogUtil.CLog;
+import com.android.tradefed.log.LogUtil;
 import com.android.tradefed.result.InputStreamSource;
 import com.android.tradefed.result.ITestInvocationListener;
 import com.android.tradefed.result.LogDataType;
@@ -65,9 +66,16 @@
     private static final String PACKAGE_NAME = "com.android.cts.preconditions";
     private static final String RUNNER_NAME = "android.support.test.runner.AndroidJUnitRunner";
 
+    private static final String LOG_TAG = DevicePreconditionPreparer.class.getSimpleName();
+
     /* Map used to track test failures */
     private ConcurrentHashMap<TestIdentifier, String> testFailures = new ConcurrentHashMap<>();
 
+    /* Helper that logs a message with LogLevel.WARN */
+    private static void printWarning(String msg) {
+        LogUtil.printLog(Log.LogLevel.WARN, LOG_TAG, msg);
+    }
+
     /**
      * {@inheritDoc}
      */
@@ -80,7 +88,8 @@
 
         try {
             if (!instrument(device, buildInfo)) {
-                throw new TargetSetupError("Not all device-side preconditions met");
+                printWarning("Not all device-side preconditions met, " +
+                        "CTS tests may fail as a result.");
             }
         } catch (FileNotFoundException e) {
             throw new TargetSetupError(
@@ -106,7 +115,8 @@
             success = false; // at least one precondition has failed
             for (TestIdentifier test : testFailures.keySet()) {
                 String trace = testFailures.get(test);
-                CLog.e("Precondition test %s failed.\n%s", test.getTestName(), trace);
+                printWarning(String.format(
+                        "Precondition test %s failed.\n%s", test.getTestName(), trace));
             }
         }
         return success;
@@ -133,7 +143,8 @@
          */
         @Override
         public void testRunFailed(String errorMessage) {
-            CLog.e("Device-side preconditions test run failed: %s", errorMessage);
+            printWarning(String.format(
+                    "Device-side preconditions test run failed: %s", errorMessage));
         }
 
         /**