DO NOT MERGE Added GenericDeviceInfo Collector

Other changes included
- Added dependencies to regenerate manifest.xml (see device_info_package.mk).
- Removed SampleDeviceInfo collector from CtsDeviceInfo apk
- Added CtsDeviceInfo to CtsTestCaseList.mk

Change-Id: I0bb393a1ec8df65572361799f02c686601402668
diff --git a/CtsTestCaseList.mk b/CtsTestCaseList.mk
index 0d6eac8..5042a74 100644
--- a/CtsTestCaseList.mk
+++ b/CtsTestCaseList.mk
@@ -78,6 +78,7 @@
     CtsDeviceOpenGl \
     CtsWifiConfigCreator \
     CtsDeviceAndProfileOwnerApp \
+    CtsDeviceInfo \
     CtsDeviceOwnerApp \
     CtsDeviceTaskswitchingAppA \
     CtsDeviceTaskswitchingAppB \
diff --git a/build/device_info_package.mk b/build/device_info_package.mk
index 897d8dc..600f6a1 100644
--- a/build/device_info_package.mk
+++ b/build/device_info_package.mk
@@ -18,13 +18,12 @@
 
 DEVICE_INFO_PACKAGE := com.android.compatibility.common.deviceinfo
 DEVICE_INFO_INSTRUMENT := com.android.compatibility.common.deviceinfo.DeviceInfoInstrument
-DEVICE_INFO_PERMISSIONS := android.permission.WRITE_EXTERNAL_STORAGE
+DEVICE_INFO_PERMISSIONS += android.permission.WRITE_EXTERNAL_STORAGE
+DEVICE_INFO_ACTIVITIES += $(DEVICE_INFO_PACKAGE).GenericDeviceInfo
 
 # Add the base device info
 LOCAL_STATIC_JAVA_LIBRARIES += compatibility-device-info
 
-# DEVICE_INFO_ACTIVITIES += $(DEVICE_INFO_PACKAGE).GenericDeviceInfo
-
 # Generator of APK manifests.
 MANIFEST_GENERATOR_JAR := $(HOST_OUT_JAVA_LIBRARIES)/compatibility-manifest-generator.jar
 MANIFEST_GENERATOR := java -jar $(MANIFEST_GENERATOR_JAR)
@@ -35,7 +34,9 @@
 $(manifest_xml): PRIVATE_INFO_ACTIVITIES := $(foreach activity,$(DEVICE_INFO_ACTIVITIES),-a $(activity))
 $(manifest_xml): PRIVATE_PACKAGE := $(DEVICE_INFO_PACKAGE)
 $(manifest_xml): PRIVATE_INSTRUMENT := $(DEVICE_INFO_INSTRUMENT)
-$(manifest_xml): $(MANIFEST_GENERATOR_JAR)
+
+# Regenerate manifest.xml if the generator jar, */cts-device-info/Android.mk, or this file is changed.
+$(manifest_xml): $(MANIFEST_GENERATOR_JAR) $(LOCAL_PATH)/Android.mk cts/build/device_info_package.mk
 	$(hide) echo Generating manifest for $(PRIVATE_NAME)
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(MANIFEST_GENERATOR) \
diff --git a/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/GenericDeviceInfo.java b/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/GenericDeviceInfo.java
new file mode 100644
index 0000000..f6e7c57
--- /dev/null
+++ b/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/GenericDeviceInfo.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2015 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.compatibility.common.deviceinfo;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.FeatureInfo;
+import android.content.pm.PackageManager;
+import android.content.res.Configuration;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Environment;
+import android.os.UserManager;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.Display;
+import android.view.WindowManager;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Scanner;
+import java.util.Set;
+
+import com.android.compatibility.common.deviceinfo.DeviceInfoActivity;
+
+/**
+ * Generic device info collector.
+ */
+public class GenericDeviceInfo extends DeviceInfoActivity {
+
+    public static final String BUILD_ID = "build_id";
+    public static final String BUILD_PRODUCT = "build_product";
+    public static final String BUILD_DEVICE = "build_device";
+    public static final String BUILD_BOARD = "build_board";
+    public static final String BUILD_MANUFACTURER = "build_manufacturer";
+    public static final String BUILD_BRAND = "build_brand";
+    public static final String BUILD_MODEL = "build_model";
+    public static final String BUILD_TYPE = "build_type";
+    public static final String BUILD_FINGERPRINT = "build_fingerprint";
+    public static final String BUILD_ABI = "build_abi";
+    public static final String BUILD_ABI2 = "build_abi2";
+    public static final String BUILD_ABIS = "build_abis";
+    public static final String BUILD_ABIS_32 = "build_abis_32";
+    public static final String BUILD_ABIS_64 = "build_abis_64";
+    public static final String BUILD_SERIAL = "build_serial";
+    public static final String BUILD_VERSION_RELEASE = "build_version_release";
+    public static final String BUILD_VERSION_SDK = "build_version_sdk";
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+    }
+
+    @Override
+    protected void collectDeviceInfo() {
+        addResult(BUILD_ID, Build.ID);
+        addResult(BUILD_PRODUCT, Build.PRODUCT);
+        addResult(BUILD_DEVICE, Build.DEVICE);
+        addResult(BUILD_BOARD, Build.BOARD);
+        addResult(BUILD_MANUFACTURER, Build.MANUFACTURER);
+        addResult(BUILD_BRAND, Build.BRAND);
+        addResult(BUILD_MODEL, Build.MODEL);
+        addResult(BUILD_TYPE, Build.TYPE);
+        addResult(BUILD_FINGERPRINT, Build.FINGERPRINT);
+        addResult(BUILD_ABI, Build.CPU_ABI);
+        addResult(BUILD_ABI2, Build.CPU_ABI2);
+        addResult(BUILD_ABIS, TextUtils.join(",", Build.SUPPORTED_ABIS));
+        addResult(BUILD_ABIS_32, TextUtils.join(",", Build.SUPPORTED_32_BIT_ABIS));
+        addResult(BUILD_ABIS_64, TextUtils.join(",", Build.SUPPORTED_64_BIT_ABIS));
+        addResult(BUILD_SERIAL, Build.SERIAL);
+        addResult(BUILD_VERSION_RELEASE, Build.VERSION.RELEASE);
+        addResult(BUILD_VERSION_SDK, Build.VERSION.SDK);
+    }
+}
\ No newline at end of file
diff --git a/common/host-side/manifest-generator/Android.mk b/common/host-side/manifest-generator/Android.mk
index 7aa7d24..29a9f43 100644
--- a/common/host-side/manifest-generator/Android.mk
+++ b/common/host-side/manifest-generator/Android.mk
@@ -20,6 +20,8 @@
 
 LOCAL_JAVA_LIBRARIES := compatibility-common-util-hostsidelib
 
+LOCAL_STATIC_JAVA_LIBRARIES := kxml2-2.3.0
+
 LOCAL_JAR_MANIFEST := MANIFEST.mf
 
 LOCAL_CLASSPATH := $(HOST_JDK_TOOLS_JAR)
diff --git a/tools/cts-device-info/Android.mk b/tools/cts-device-info/Android.mk
index a3073a3..5f2b223 100644
--- a/tools/cts-device-info/Android.mk
+++ b/tools/cts-device-info/Android.mk
@@ -18,7 +18,9 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-DEVICE_INFO_ACTIVITIES := com.android.cts.deviceinfo.SampleDeviceInfo
+DEVICE_INFO_PERMISSIONS :=
+
+DEVICE_INFO_ACTIVITIES :=
 
 LOCAL_PACKAGE_NAME := CtsDeviceInfo