Fix testClearKeyPlaybackCenc hanging on N and N-MR1 device.

This test is intended for N-MR2 and above. Add a check
to skip this test for device running earlier versions.

Test: CTS test on NYC, NYC-MR1, NYC-MR2 and O-MR1
  ANDROID_BUILD_TOP= ./android-cts/tools/cts-tradefed run cts -m
CtsMediaTestCases
  --test
android.media.cts.NativeClearKeySystemTest#testClearKeyPlaybackCenc

Test: Verify compareVersion() with these parameters
  compareVersion("7.1.2", "8.0");
  compareVersion("7.1.2", "7.0");
  compareVersion("7.1.2", "7.1.1");
  compareVersion("7.1.2", "7.1.0");
  compareVersion("7.1.2", "7.1.2.3");
  compareVersion("7.1.2", "8.1.");
  compareVersion("7.1.2", "8.1.0");
  compareVersion("7.1.2", "7.1.2");
  compareVersion("7.1.2", "7.1.2.");
  compareVersion("7.1.2", "OMR1");

bug: 63859551
bug: 63907994
Change-Id: I8581a77bde64c26fb9302df427efa4bea3da4e37
diff --git a/tests/tests/media/src/android/media/cts/NativeClearKeySystemTest.java b/tests/tests/media/src/android/media/cts/NativeClearKeySystemTest.java
index 9ead8fb..649496e 100644
--- a/tests/tests/media/src/android/media/cts/NativeClearKeySystemTest.java
+++ b/tests/tests/media/src/android/media/cts/NativeClearKeySystemTest.java
@@ -191,14 +191,52 @@
         params.surface.release();
     }
 
-    private ArrayList<Integer> intVersion(String version) {
-        String versions[] = version.split("\\.");
+    /*
+     * Compare version strings
+     *
+     * @param actual Actual platform's Android version
+     * @param expected Minimum Android version
+     *
+     * @return 0 if the versions are identical
+     * @return +v if actual is greater than expected
+     * @return -ve if actual is less than expected
+     */
+    private static Integer compareVersion(String actual, String expected) {
+        String[] part1 = actual.split("\\.");
+        String[] part2 = expected.split("\\.");
 
-        ArrayList<Integer> versionNumbers = Lists.newArrayList();
-        for (String subVersion : versions) {
-            versionNumbers.add(Integer.parseInt(subVersion));
+        int idx = 0;
+        for (; idx < part1.length && idx < part2.length; idx++) {
+            String p1 = part1[idx];
+            String p2 = part2[idx];
+
+            int cmp;
+            if (p1.matches("\\d+") && p2.matches("\\d+")) {
+                cmp = new Integer(p1).compareTo(new Integer(p2));
+            } else {
+                cmp = part1[idx].compareTo(part2[idx]);
+            }
+            if (cmp != 0) return cmp;
         }
-        return versionNumbers;
+
+        if (part1.length == part2.length) {
+            return 0;
+        } else {
+            boolean left = part1.length > idx;
+            String[] parts = left ? part1 : part2;
+
+            for (; idx < parts.length; idx++) {
+                String p = parts[idx];
+                int cmp;
+                if (p.matches("\\d+")) {
+                    cmp = new Integer(p).compareTo(0);
+                } else {
+                    cmp = 1;
+                }
+                if (cmp != 0) return left ? cmp : -cmp;
+            }
+            return 0;
+        }
     }
 
     private static native boolean isCryptoSchemeSupportedNative(final byte[] uuid);
@@ -212,10 +250,14 @@
     private static native boolean testPsshNative(final byte[] uuid, final String videoUrl);
 
     public void testClearKeyPlaybackCenc() throws Exception {
-        testClearKeyPlayback(
-                ISO_BMFF_VIDEO_MIME_TYPE,
-                CENC_AUDIO_URL,
-                CENC_CLEARKEY_VIDEO_URL,
-                VIDEO_WIDTH_CENC, VIDEO_HEIGHT_CENC);
+        if (compareVersion(Build.VERSION.RELEASE, "7.1.2") >= 0) {
+            testClearKeyPlayback(
+                    ISO_BMFF_VIDEO_MIME_TYPE,
+                    CENC_AUDIO_URL,
+                    CENC_CLEARKEY_VIDEO_URL,
+                    VIDEO_WIDTH_CENC, VIDEO_HEIGHT_CENC);
+        } else {
+            Log.i(TAG, "Skip test, which is intended for Android 7.1.2 and above.");
+        }
     }
 }