diff options
Diffstat (limited to 'apps/DeviceConfig/src/com/example/android/deviceconfig')
-rw-r--r-- | apps/DeviceConfig/src/com/example/android/deviceconfig/ConfigGenerator.java | 673 | ||||
-rw-r--r-- | apps/DeviceConfig/src/com/example/android/deviceconfig/MyActivity.java | 186 |
2 files changed, 0 insertions, 859 deletions
diff --git a/apps/DeviceConfig/src/com/example/android/deviceconfig/ConfigGenerator.java b/apps/DeviceConfig/src/com/example/android/deviceconfig/ConfigGenerator.java deleted file mode 100644 index 3dbdfdb78..000000000 --- a/apps/DeviceConfig/src/com/example/android/deviceconfig/ConfigGenerator.java +++ /dev/null @@ -1,673 +0,0 @@ -/* - * Copyright (C) 2012 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.example.android.deviceconfig; - -import android.annotation.SuppressLint; -import android.annotation.TargetApi; -import android.content.Context; -import android.content.pm.FeatureInfo; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.hardware.Camera; -import android.hardware.Camera.CameraInfo; -import android.os.Build; -import android.os.Environment; -import android.os.StatFs; -import android.util.DisplayMetrics; -import android.util.Log; -import android.view.ViewConfiguration; -import android.widget.Toast; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Text; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Locale; - -import javax.xml.XMLConstants; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.TransformerFactoryConfigurationError; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -public class ConfigGenerator { - private Context mCtx; - private String mExtensions; - - public static final String NS_DEVICES_XSD = "http://schemas.android.com/sdk/devices/1"; - - /** - * The "devices" element is the root element of this schema. - * - * It must contain one or more "device" elements that each define the - * hardware, software, and states for a given device. - */ - public static final String NODE_DEVICES = "devices"; - - /** - * A "device" element contains a "hardware" element, a "software" element - * for each API version it supports, and a "state" element for each possible - * state the device could be in. - */ - public static final String NODE_DEVICE = "device"; - - /** - * The "hardware" element contains all of the hardware information for a - * given device. - */ - public static final String NODE_HARDWARE = "hardware"; - - /** - * The "software" element contains all of the software information for an - * API version of the given device. - */ - public static final String NODE_SOFTWARE = "software"; - - /** - * The "state" element contains all of the parameters for a given state of - * the device. It's also capable of redefining hardware configurations if - * they change based on state. - */ - - public static final String NODE_STATE = "state"; - - public static final String NODE_KEYBOARD = "keyboard"; - public static final String NODE_TOUCH = "touch"; - public static final String NODE_GL_EXTENSIONS = "gl-extensions"; - public static final String NODE_GL_VERSION = "gl-version"; - public static final String NODE_NETWORKING = "networking"; - public static final String NODE_REMOVABLE_STORAGE = "removable-storage"; - public static final String NODE_FLASH = "flash"; - public static final String NODE_LIVE_WALLPAPER_SUPPORT = "live-wallpaper-support"; - public static final String NODE_BUTTONS = "buttons"; - public static final String NODE_CAMERA = "camera"; - public static final String NODE_LOCATION = "location"; - public static final String NODE_GPU = "gpu"; - public static final String NODE_DOCK = "dock"; - public static final String NODE_YDPI = "ydpi"; - public static final String NODE_POWER_TYPE = "power-type"; - public static final String NODE_Y_DIMENSION = "y-dimension"; - public static final String NODE_SCREEN_RATIO = "screen-ratio"; - public static final String NODE_NAV_STATE = "nav-state"; - public static final String NODE_MIC = "mic"; - public static final String NODE_RAM = "ram"; - public static final String NODE_XDPI = "xdpi"; - public static final String NODE_DIMENSIONS = "dimensions"; - public static final String NODE_ABI = "abi"; - public static final String NODE_MECHANISM = "mechanism"; - public static final String NODE_MULTITOUCH = "multitouch"; - public static final String NODE_NAV = "nav"; - public static final String NODE_PIXEL_DENSITY = "pixel-density"; - public static final String NODE_SCREEN_ORIENTATION = "screen-orientation"; - public static final String NODE_AUTOFOCUS = "autofocus"; - public static final String NODE_SCREEN_SIZE = "screen-size"; - public static final String NODE_DESCRIPTION = "description"; - public static final String NODE_BLUETOOTH_PROFILES = "bluetooth-profiles"; - public static final String NODE_SCREEN = "screen"; - public static final String NODE_SENSORS = "sensors"; - public static final String NODE_DIAGONAL_LENGTH = "diagonal-length"; - public static final String NODE_SCREEN_TYPE = "screen-type"; - public static final String NODE_KEYBOARD_STATE = "keyboard-state"; - public static final String NODE_X_DIMENSION = "x-dimension"; - public static final String NODE_CPU = "cpu"; - public static final String NODE_INTERNAL_STORAGE = "internal-storage"; - public static final String NODE_NAME = "name"; - public static final String NODE_MANUFACTURER = "manufacturer"; - public static final String NODE_API_LEVEL = "api-level"; - public static final String ATTR_DEFAULT = "default"; - public static final String ATTR_UNIT = "unit"; - public static final String UNIT_BYTES = "B"; - public static final String UNIT_KIBIBYTES = "KiB"; - public static final String UNIT_MEBIBYTES = "MiB"; - public static final String UNIT_GIBIBYTES = "GiB"; - public static final String UNIT_TEBIBYTES = "TiB"; - public static final String LOCAL_NS = "d"; - public static final String PREFIX = LOCAL_NS + ":"; - - private static final String TAG = "ConfigGenerator"; - - public ConfigGenerator(Context context, String extensions) { - mCtx = context; - mExtensions = extensions; - } - - @SuppressLint("WorldReadableFiles") - public String generateConfig() { - Resources resources = mCtx.getResources(); - PackageManager packageMgr = mCtx.getPackageManager(); - DisplayMetrics metrics = resources.getDisplayMetrics(); - Configuration config = resources.getConfiguration(); - - try { - Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); - - Element devices = doc.createElement(PREFIX + NODE_DEVICES); - devices.setAttribute(XMLConstants.XMLNS_ATTRIBUTE + ":xsi", - XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI); - devices.setAttribute(XMLConstants.XMLNS_ATTRIBUTE + ":" + LOCAL_NS, NS_DEVICES_XSD); - doc.appendChild(devices); - - Element device = doc.createElement(PREFIX + NODE_DEVICE); - devices.appendChild(device); - - Element name = doc.createElement(PREFIX + NODE_NAME); - device.appendChild(name); - name.appendChild(doc.createTextNode(android.os.Build.MODEL)); - Element manufacturer = doc.createElement(PREFIX + NODE_MANUFACTURER); - device.appendChild(manufacturer); - manufacturer.appendChild(doc.createTextNode(android.os.Build.MANUFACTURER)); - - Element hardware = doc.createElement(PREFIX + NODE_HARDWARE); - device.appendChild(hardware); - - Element screen = doc.createElement(PREFIX + NODE_SCREEN); - hardware.appendChild(screen); - - Element screenSize = doc.createElement(PREFIX + NODE_SCREEN_SIZE); - screen.appendChild(screenSize); - Text screenSizeText; - switch (config.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) { - case Configuration.SCREENLAYOUT_SIZE_SMALL: - screenSizeText = doc.createTextNode("small"); - break; - case Configuration.SCREENLAYOUT_SIZE_NORMAL: - screenSizeText = doc.createTextNode("normal"); - break; - case Configuration.SCREENLAYOUT_SIZE_LARGE: - screenSizeText = doc.createTextNode("large"); - break; - case Configuration.SCREENLAYOUT_SIZE_XLARGE: - screenSizeText = doc.createTextNode("xlarge"); - break; - default: - screenSizeText = doc.createTextNode(" "); - break; - } - screenSize.appendChild(screenSizeText); - - Element diagonalLength = doc.createElement(PREFIX + NODE_DIAGONAL_LENGTH); - screen.appendChild(diagonalLength); - double xin = metrics.widthPixels / metrics.xdpi; - double yin = metrics.heightPixels / metrics.ydpi; - double diag = Math.sqrt(Math.pow(xin, 2) + Math.pow(yin, 2)); - diagonalLength.appendChild(doc.createTextNode( - String.format(Locale.US, "%1$.2f", diag))); - - Element pixelDensity = doc.createElement(PREFIX + NODE_PIXEL_DENSITY); - screen.appendChild(pixelDensity); - Text pixelDensityText; - switch (metrics.densityDpi) { - case DisplayMetrics.DENSITY_LOW: - pixelDensityText = doc.createTextNode("ldpi"); - break; - case DisplayMetrics.DENSITY_MEDIUM: - pixelDensityText = doc.createTextNode("mdpi"); - break; - case DisplayMetrics.DENSITY_TV: - pixelDensityText = doc.createTextNode("tvdpi"); - break; - case DisplayMetrics.DENSITY_HIGH: - pixelDensityText = doc.createTextNode("hdpi"); - break; - case DisplayMetrics.DENSITY_XHIGH: - pixelDensityText = doc.createTextNode("xhdpi"); - break; - default: - pixelDensityText = doc.createTextNode(" "); - } - pixelDensity.appendChild(pixelDensityText); - - Element screenRatio = doc.createElement(PREFIX + NODE_SCREEN_RATIO); - screen.appendChild(screenRatio); - Text screenRatioText; - switch (config.screenLayout & Configuration.SCREENLAYOUT_LONG_MASK) { - case Configuration.SCREENLAYOUT_LONG_YES: - screenRatioText = doc.createTextNode("long"); - break; - case Configuration.SCREENLAYOUT_LONG_NO: - screenRatioText = doc.createTextNode("notlong"); - break; - default: - screenRatioText = doc.createTextNode(" "); - break; - } - screenRatio.appendChild(screenRatioText); - - Element dimensions = doc.createElement(PREFIX + NODE_DIMENSIONS); - screen.appendChild(dimensions); - - Element xDimension = doc.createElement(PREFIX + NODE_X_DIMENSION); - dimensions.appendChild(xDimension); - xDimension.appendChild(doc.createTextNode(Integer.toString(metrics.widthPixels))); - - Element yDimension = doc.createElement(PREFIX + NODE_Y_DIMENSION); - dimensions.appendChild(yDimension); - yDimension.appendChild(doc.createTextNode(Integer.toString(metrics.heightPixels))); - - Element xdpi = doc.createElement(PREFIX + NODE_XDPI); - screen.appendChild(xdpi); - xdpi.appendChild(doc.createTextNode(Double.toString(metrics.xdpi))); - - Element ydpi = doc.createElement(PREFIX + NODE_YDPI); - screen.appendChild(ydpi); - ydpi.appendChild(doc.createTextNode(Double.toString(metrics.ydpi))); - - Element touch = doc.createElement(PREFIX + NODE_TOUCH); - screen.appendChild(touch); - - Element multitouch = doc.createElement(PREFIX + NODE_MULTITOUCH); - touch.appendChild(multitouch); - Text multitouchText; - if (packageMgr - .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND)) { - multitouchText = doc.createTextNode("jazz-hands"); - } else if (packageMgr - .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT)) { - multitouchText = doc.createTextNode("distinct"); - } else if (packageMgr.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH)) { - multitouchText = doc.createTextNode("basic"); - } else { - multitouchText = doc.createTextNode("none"); - } - multitouch.appendChild(multitouchText); - - Element mechanism = doc.createElement(PREFIX + NODE_MECHANISM); - touch.appendChild(mechanism); - Text mechanismText; - switch (config.touchscreen) { - case Configuration.TOUCHSCREEN_STYLUS: - mechanismText = doc.createTextNode("stylus"); - case Configuration.TOUCHSCREEN_FINGER: - mechanismText = doc.createTextNode("finger"); - case Configuration.TOUCHSCREEN_NOTOUCH: - mechanismText = doc.createTextNode("notouch"); - default: - mechanismText = doc.createTextNode(" "); - } - mechanism.appendChild(mechanismText); - - // Create an empty place holder node for screen-type since we can't - // actually determine it - - Element screenType = doc.createElement(PREFIX + NODE_SCREEN_TYPE); - touch.appendChild(screenType); - screenType.appendChild(doc.createTextNode(" ")); - - Element networking = doc.createElement(PREFIX + NODE_NETWORKING); - hardware.appendChild(networking); - Text networkingText = doc.createTextNode(""); - networking.appendChild(networkingText); - if (packageMgr.hasSystemFeature(PackageManager.FEATURE_WIFI)) { - networkingText.appendData("\nWifi"); - } - if (packageMgr.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) { - networkingText.appendData("\nBluetooth"); - } - if (packageMgr.hasSystemFeature(PackageManager.FEATURE_NFC)) { - networkingText.appendData("\nNFC"); - } - - Element sensors = doc.createElement(PREFIX + NODE_SENSORS); - hardware.appendChild(sensors); - Text sensorsText = doc.createTextNode(""); - sensors.appendChild(sensorsText); - if (packageMgr.hasSystemFeature(PackageManager.FEATURE_SENSOR_ACCELEROMETER)) { - sensorsText.appendData("\nAccelerometer"); - } - if (packageMgr.hasSystemFeature(PackageManager.FEATURE_SENSOR_BAROMETER)) { - sensorsText.appendData("\nBarometer"); - } - if (packageMgr.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) { - sensorsText.appendData("\nCompass"); - } - if (packageMgr.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)) { - sensorsText.appendData("\nGPS"); - } - if (packageMgr.hasSystemFeature(PackageManager.FEATURE_SENSOR_GYROSCOPE)) { - sensorsText.appendData("\nGyroscope"); - } - if (packageMgr.hasSystemFeature(PackageManager.FEATURE_SENSOR_LIGHT)) { - sensorsText.appendData("\nLightSensor"); - } - if (packageMgr.hasSystemFeature(PackageManager.FEATURE_SENSOR_PROXIMITY)) { - sensorsText.appendData("\nProximitySensor"); - } - - Element mic = doc.createElement(PREFIX + NODE_MIC); - hardware.appendChild(mic); - Text micText; - if (packageMgr.hasSystemFeature(PackageManager.FEATURE_MICROPHONE)) { - micText = doc.createTextNode("true"); - } else { - micText = doc.createTextNode("false"); - } - mic.appendChild(micText); - - if (android.os.Build.VERSION.SDK_INT >= 9){ - List<Element> cameras = getCameraElements(doc); - for (Element cam : cameras){ - hardware.appendChild(cam); - } - } else { - Camera c = Camera.open(); - Element camera = doc.createElement(PREFIX + NODE_CAMERA); - hardware.appendChild(camera); - Element location = doc.createElement(PREFIX + NODE_LOCATION); - camera.appendChild(location); - // All camera's before API 9 were on the back - location.appendChild(doc.createTextNode("back")); - Camera.Parameters cParams = c.getParameters(); - Element autofocus = doc.createElement(PREFIX + NODE_AUTOFOCUS); - camera.appendChild(autofocus); - List<String> foci = cParams.getSupportedFocusModes(); - if (foci == null) { - autofocus.appendChild(doc.createTextNode(" ")); - } else if (foci.contains(Camera.Parameters.FOCUS_MODE_AUTO)) { - autofocus.appendChild(doc.createTextNode("true")); - } else { - autofocus.appendChild(doc.createTextNode("false")); - } - - Element flash = doc.createElement(PREFIX + NODE_FLASH); - camera.appendChild(flash); - List<String> flashes = cParams.getSupportedFlashModes(); - if (flashes == null || !flashes.contains(Camera.Parameters.FLASH_MODE_ON)) { - flash.appendChild(doc.createTextNode("false")); - } else { - flash.appendChild(doc.createTextNode("true")); - } - c.release(); - } - - - Element keyboard = doc.createElement(PREFIX + NODE_KEYBOARD); - hardware.appendChild(keyboard); - Text keyboardText; - switch (config.keyboard) { - case Configuration.KEYBOARD_NOKEYS: - keyboardText = doc.createTextNode("nokeys"); - break; - case Configuration.KEYBOARD_12KEY: - keyboardText = doc.createTextNode("12key"); - break; - case Configuration.KEYBOARD_QWERTY: - keyboardText = doc.createTextNode("qwerty"); - break; - default: - keyboardText = doc.createTextNode(" "); - } - keyboard.appendChild(keyboardText); - - Element nav = doc.createElement(PREFIX + NODE_NAV); - hardware.appendChild(nav); - Text navText; - switch (config.navigation) { - case Configuration.NAVIGATION_DPAD: - navText = doc.createTextNode("dpad"); - case Configuration.NAVIGATION_TRACKBALL: - navText = doc.createTextNode("trackball"); - case Configuration.NAVIGATION_WHEEL: - navText = doc.createTextNode("wheel"); - case Configuration.NAVIGATION_NONAV: - navText = doc.createTextNode("nonav"); - default: - navText = doc.createTextNode(" "); - } - nav.appendChild(navText); - - Element ram = doc.createElement(PREFIX + NODE_RAM); - hardware.appendChild(ram); - // totalMemory given in bytes, divide by 1048576 to get RAM in MiB - String line; - long ramAmount = 0; - String unit = UNIT_BYTES; - try { - BufferedReader meminfo = new BufferedReader(new FileReader("/proc/meminfo")); - while ((line = meminfo.readLine()) != null) { - String[] vals = line.split("[\\s]+"); - if (vals[0].equals("MemTotal:")) { - try { - /* - * We're going to want it as a string eventually, - * but parsing it lets us validate it's actually a - * number and something strange isn't going on - */ - ramAmount = Long.parseLong(vals[1]); - unit = vals[2]; - break; - } catch (NumberFormatException e) { - // Ignore - } - } - } - meminfo.close(); - } catch (FileNotFoundException e) { - // Ignore - } - if (ramAmount > 0) { - if (unit.equals("B")) { - unit = UNIT_BYTES; - } else if (unit.equals("kB")) { - unit = UNIT_KIBIBYTES; - } else if (unit.equals("MB")) { - unit = UNIT_MEBIBYTES; - } else if (unit.equals("GB")) { - unit = UNIT_GIBIBYTES; - } else { - unit = " "; - } - } - ram.setAttribute(ATTR_UNIT, unit); - ram.appendChild(doc.createTextNode(Long.toString(ramAmount))); - - Element buttons = doc.createElement(PREFIX + NODE_BUTTONS); - hardware.appendChild(buttons); - Text buttonsText; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - buttonsText = doc.createTextNode(getButtonsType()); - } else { - buttonsText = doc.createTextNode("hard"); - } - buttons.appendChild(buttonsText); - - Element internalStorage = doc.createElement(PREFIX + NODE_INTERNAL_STORAGE); - hardware.appendChild(internalStorage); - StatFs rootStat = new StatFs(Environment.getRootDirectory().getAbsolutePath()); - long bytesAvailable = rootStat.getBlockSize() * rootStat.getBlockCount(); - long internalStorageSize = bytesAvailable / (1024 * 1024); - internalStorage.appendChild(doc.createTextNode(Long.toString(internalStorageSize))); - internalStorage.setAttribute(ATTR_UNIT, UNIT_MEBIBYTES); - - Element externalStorage = doc.createElement(PREFIX + NODE_REMOVABLE_STORAGE); - hardware.appendChild(externalStorage); - externalStorage.appendChild(doc.createTextNode(" ")); - - - // Don't know CPU, GPU types - Element cpu = doc.createElement(PREFIX + NODE_CPU); - hardware.appendChild(cpu); - cpu.appendChild(doc.createTextNode(" ")); - Element gpu = doc.createElement(PREFIX + NODE_GPU); - hardware.appendChild(gpu); - gpu.appendChild(doc.createTextNode(" ")); - - Element abi = doc.createElement(PREFIX + NODE_ABI); - hardware.appendChild(abi); - Text abiText = doc.createTextNode(""); - abi.appendChild(abiText); - abiText.appendData("\n" + android.os.Build.CPU_ABI); - abiText.appendData("\n" + android.os.Build.CPU_ABI2); - - // Don't know about either the dock or plugged-in element - Element dock = doc.createElement(PREFIX + NODE_DOCK); - hardware.appendChild(dock); - dock.appendChild(doc.createTextNode(" ")); - - Element pluggedIn = doc.createElement(PREFIX + NODE_POWER_TYPE); - hardware.appendChild(pluggedIn); - pluggedIn.appendChild(doc.createTextNode(" ")); - - Element software = doc.createElement(PREFIX + NODE_SOFTWARE); - device.appendChild(software); - - Element apiLevel = doc.createElement(PREFIX + NODE_API_LEVEL); - software.appendChild(apiLevel); - apiLevel.appendChild(doc.createTextNode(Integer - .toString(android.os.Build.VERSION.SDK_INT))); - - Element liveWallpaperSupport = doc.createElement(PREFIX + NODE_LIVE_WALLPAPER_SUPPORT); - software.appendChild(liveWallpaperSupport); - if (packageMgr.hasSystemFeature(PackageManager.FEATURE_LIVE_WALLPAPER)) { - liveWallpaperSupport.appendChild(doc.createTextNode("true")); - } else { - liveWallpaperSupport.appendChild(doc.createTextNode("flase")); - } - - Element bluetoothProfiles = doc.createElement(PREFIX + NODE_BLUETOOTH_PROFILES); - software.appendChild(bluetoothProfiles); - bluetoothProfiles.appendChild(doc.createTextNode(" ")); - - Element glVersion = doc.createElement(PREFIX + NODE_GL_VERSION); - software.appendChild(glVersion); - String glVersionString = " "; - - FeatureInfo[] features = packageMgr.getSystemAvailableFeatures(); - for (FeatureInfo feature : features) { - if (feature.reqGlEsVersion > 0) { - glVersionString = feature.getGlEsVersion(); - break; - } - } - - glVersion.appendChild(doc.createTextNode(glVersionString)); - - Element glExtensions = doc.createElement(PREFIX + NODE_GL_EXTENSIONS); - software.appendChild(glExtensions); - if (mExtensions != null && !mExtensions.trim().equals("")) { - glExtensions.appendChild(doc.createTextNode(mExtensions)); - } else { - glExtensions.appendChild(doc.createTextNode(" ")); - } - - Transformer tf = TransformerFactory.newInstance().newTransformer(); - tf.setOutputProperty(OutputKeys.INDENT, "yes"); - tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); - DOMSource source = new DOMSource(doc); - String filename = String.format("devices_%1$tm_%1$td_%1$ty.xml", Calendar.getInstance() - .getTime()); - File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); - File outFile = new File(dir, filename); - FileOutputStream out = new FileOutputStream(new File(dir, filename)); - StreamResult result = new StreamResult(out); - tf.transform(source, result); - out.flush(); - out.close(); - return outFile.getAbsolutePath(); - } catch (ParserConfigurationException e) { - error("Parser config exception", e); - } catch (TransformerConfigurationException e) { - error("Transformer config exception", e); - } catch (TransformerFactoryConfigurationError e) { - error("TransformerFactory config exception", e); - } catch (TransformerException e) { - error("Error transforming", e); - } catch (IOException e) { - error("I/O Error", e); - } - return null; - } - - @TargetApi(9) - private List<Element> getCameraElements(Document doc) { - List<Element> cList = new ArrayList<Element>(); - for (int i = 0; i < Camera.getNumberOfCameras(); i++) { - Element camera = doc.createElement(PREFIX + NODE_CAMERA); - cList.add(camera); - Element location = doc.createElement(PREFIX + NODE_LOCATION); - camera.appendChild(location); - Text locationText; - Camera.CameraInfo cInfo = new Camera.CameraInfo(); - Camera.getCameraInfo(i, cInfo); - if (cInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { - locationText = doc.createTextNode("front"); - } else if (cInfo.facing == CameraInfo.CAMERA_FACING_BACK) { - locationText = doc.createTextNode("back"); - } else { - locationText = doc.createTextNode(" "); - } - location.appendChild(locationText); - - Camera c = Camera.open(i); - Camera.Parameters cParams = c.getParameters(); - - Element autofocus = doc.createElement(PREFIX + NODE_AUTOFOCUS); - camera.appendChild(autofocus); - List<String> foci = cParams.getSupportedFocusModes(); - if (foci == null) { - autofocus.appendChild(doc.createTextNode(" ")); - } else if (foci.contains(Camera.Parameters.FOCUS_MODE_AUTO)) { - autofocus.appendChild(doc.createTextNode("true")); - } else { - autofocus.appendChild(doc.createTextNode("false")); - } - - Element flash = doc.createElement(PREFIX + NODE_FLASH); - camera.appendChild(flash); - List<String> flashes = cParams.getSupportedFlashModes(); - if (flashes == null || !flashes.contains(Camera.Parameters.FLASH_MODE_ON)) { - flash.appendChild(doc.createTextNode("false")); - } else { - flash.appendChild(doc.createTextNode("true")); - } - c.release(); - } - return cList; - } - - @TargetApi(14) - private String getButtonsType() { - ViewConfiguration vConfig = ViewConfiguration.get(mCtx); - - if (vConfig.hasPermanentMenuKey()) { - return "hard"; - } else { - return "soft"; - } - } - - private void error(String err, Throwable e) { - Toast.makeText(mCtx, "Error Generating Configuration", Toast.LENGTH_SHORT).show(); - Log.e(TAG, err); - Log.e(TAG, e.getLocalizedMessage()); - } -} diff --git a/apps/DeviceConfig/src/com/example/android/deviceconfig/MyActivity.java b/apps/DeviceConfig/src/com/example/android/deviceconfig/MyActivity.java deleted file mode 100644 index 38a78cd1e..000000000 --- a/apps/DeviceConfig/src/com/example/android/deviceconfig/MyActivity.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (C) 2012 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.example.android.deviceconfig; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.content.res.Configuration; -import android.net.Uri; -import android.opengl.GLSurfaceView; -import android.os.Bundle; -import android.util.DisplayMetrics; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.TextView; - -import java.io.File; - -import javax.microedition.khronos.egl.EGLConfig; -import javax.microedition.khronos.opengles.GL10; - -public class MyActivity extends Activity implements OnClickListener { - - public static final String TAG = "DeviceConfig"; - private static GLView mGl; - - /** Called when the activity is first created. */ - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.main); - // Instantiate a GL surface view so we can get extensions information - mGl = new GLView(this); - LinearLayout vg = (LinearLayout) findViewById(R.id.buttonHolder); - // If we set the layout to be 0, it just won't render - ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(1, 1); - mGl.setLayoutParams(params); - vg.addView(mGl); - - Button btn = (Button) findViewById(R.id.generateConfigButton); - btn.setOnClickListener(this); - Configuration config = getResources().getConfiguration(); - - TextView tv = (TextView) findViewById(R.id.keyboard_state_api); - if (tv != null) { - String separator = config.orientation == Configuration.ORIENTATION_PORTRAIT ? "\n" : ""; - String foo = "keyboardHidden=" + separator; - if (config.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) { - foo += "EXPOSED"; - } else if (config.keyboardHidden == Configuration.KEYBOARDHIDDEN_YES) { - foo += "HIDDEN"; - } else if (config.keyboardHidden == Configuration.KEYBOARDHIDDEN_UNDEFINED) { - foo += "UNDEFINED"; - } else { - foo += "?"; - } - foo += "\nhardKeyboardHidden=" + separator; - if (config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) { - foo = foo + "EXPOSED"; - } else if (config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) { - foo = foo + "HIDDEN"; - } else if (config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_UNDEFINED) { - foo = foo + "UNDEFINED"; - } else { - foo = "?"; - } - - tv.setText(foo); - } - - tv = (TextView) findViewById(R.id.nav_state_api); - if (tv != null) { - if (config.navigationHidden == Configuration.NAVIGATIONHIDDEN_NO) { - tv.setText("EXPOSED"); - } else if (config.navigationHidden == Configuration.NAVIGATIONHIDDEN_YES) { - tv.setText("HIDDEN"); - } else if (config.navigationHidden == Configuration.NAVIGATIONHIDDEN_UNDEFINED) { - tv.setText("UNDEFINED"); - } else { - tv.setText("??"); - } - } - - DisplayMetrics metrics = getResources().getDisplayMetrics(); - - - tv = (TextView) findViewById(R.id.size_api); - if (tv != null) { - int a = metrics.heightPixels; - int b = metrics.widthPixels; - tv.setText(b + "x" + a); - } - - tv = (TextView) findViewById(R.id.xdpi); - if (tv != null) { - tv.setText(String.format("%f", metrics.xdpi)); - } - tv = (TextView) findViewById(R.id.ydpi); - if (tv != null) { - tv.setText(String.format("%f", metrics.ydpi)); - } - - tv = (TextView) findViewById(R.id.scaled_density); - if (tv != null) { - tv.setText(String.format("%f", metrics.scaledDensity)); - } - - tv = (TextView) findViewById(R.id.font_scale); - if (tv != null) { - tv.setText(String.format("%f", config.fontScale)); - } - - } - - public void onClick(View v) { - ConfigGenerator configGen = new ConfigGenerator(this, mGl.getExtensions()); - final String filename = configGen.generateConfig(); - if (filename != null) { - Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); - emailIntent.setType("text/xml"); - File devicesXml = new File(filename); - emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Device XML: " + devicesXml.getName()); - emailIntent.putExtra(Intent.EXTRA_TEXT, "Note: This is intended to generate a base " - + "XML description. After running this, you should double check the generated " - + "information and add all of the missing fields."); - emailIntent.putExtra(Intent.EXTRA_STREAM, - Uri.parse("file://" + devicesXml.getAbsolutePath())); - startActivity(emailIntent); - } - } - - private static class GLView extends GLSurfaceView { - private GlRenderer mRenderer; - - public GLView(Context context) { - super(context); - setEGLContextClientVersion(2); - mRenderer = new GlRenderer(); - setRenderer(mRenderer); - requestRender(); - } - - public String getExtensions() { - return mRenderer.extensions; - } - - } - - private static class GlRenderer implements GLSurfaceView.Renderer { - public String extensions = ""; - - public void onDrawFrame(GL10 gl) { - } - - public void onSurfaceChanged(GL10 gl, int width, int height) { - gl.glViewport(0, 0, 0, 0); - } - - public void onSurfaceCreated(GL10 gl, EGLConfig config) { - if (extensions.equals("")) { - String extensions10 = gl.glGetString(GL10.GL_EXTENSIONS); - if(extensions10 != null) { - extensions += extensions10; - } - } - } - } -} |