Home | History | Annotate | Download | only in getinfo
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.tests.getinfo;
     18 
     19 import android.app.Activity;
     20 import android.app.ActivityManager;
     21 import android.content.Context;
     22 import android.content.pm.ConfigurationInfo;
     23 import android.content.res.Configuration;
     24 import android.os.Bundle;
     25 import android.view.Window;
     26 import android.view.WindowManager;
     27 
     28 import java.util.HashSet;
     29 import java.util.Locale;
     30 import java.util.concurrent.CountDownLatch;
     31 
     32 /**
     33  * Collect device information on target device.
     34  */
     35 public class DeviceInfoActivity extends Activity {
     36 
     37     // work done should be reported in GLES..View
     38     private CountDownLatch mDone = new CountDownLatch(1);
     39     private HashSet<String> mOpenGlExtensions = new HashSet<String>();
     40     private HashSet<String> mFormats = new HashSet<String>();
     41     private String mGraphicsVendor;
     42     private String mGraphicsRenderer;
     43 
     44     /**
     45      * Other classes can call this function to wait for this activity
     46      * to finish. */
     47     public void waitForAcitityToFinish() {
     48         try {
     49             mDone.await();
     50         } catch (InterruptedException e) {
     51             // just move on
     52         }
     53     }
     54 
     55     private void runIterations(int glVersion) {
     56         for (int i = 1; i <= glVersion; i++) {
     57             final CountDownLatch done = new CountDownLatch(1);
     58             final int version = i;
     59             DeviceInfoActivity.this.runOnUiThread(new Runnable() {
     60                 public void run() {
     61                     setContentView(new GLESSurfaceView(DeviceInfoActivity.this, version, done));
     62                 }
     63             });
     64             try {
     65                 done.await();
     66             } catch (InterruptedException e) {
     67                 // just move on
     68             }
     69         }
     70 
     71         StringBuilder textureBuilder = new StringBuilder();
     72         for (String format: mFormats) {
     73             textureBuilder.append(format).append(";");
     74         }
     75         StringBuilder extensionBuilder = new StringBuilder();
     76         for (String extension : mOpenGlExtensions) {
     77             extensionBuilder.append(extension).append(";");
     78         }
     79         DeviceInfoInstrument.addResult(
     80                 DeviceInfoConstants.OPEN_GL_EXTENSIONS,
     81                 extensionBuilder.toString());
     82         DeviceInfoInstrument.addResult(
     83                 DeviceInfoConstants.OPEN_GL_COMPRESSED_TEXTURE_FORMATS,
     84                 textureBuilder.toString());
     85         DeviceInfoInstrument.addResult(
     86                 DeviceInfoConstants.GRAPHICS_VENDOR,
     87                 mGraphicsVendor);
     88         DeviceInfoInstrument.addResult(
     89                 DeviceInfoConstants.GRAPHICS_RENDERER,
     90                 mGraphicsRenderer);
     91         mDone.countDown();
     92     }
     93 
     94     public void addOpenGlExtension(String openGlExtension) {
     95         mOpenGlExtensions.add(openGlExtension);
     96     }
     97 
     98     public void addCompressedTextureFormat(String format) {
     99         mFormats.add(format);
    100     }
    101 
    102     public void setGraphicsInfo(String vendor, String renderer) {
    103         mGraphicsVendor = vendor;
    104         mGraphicsRenderer = renderer;
    105     }
    106 
    107     @Override
    108     public void onCreate(Bundle savedInstanceState) {
    109         super.onCreate(savedInstanceState);
    110         Window w = getWindow();
    111         w.setFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED,
    112                 WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    113 
    114         ActivityManager am =
    115                 (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    116         ConfigurationInfo info = am.getDeviceConfigurationInfo();
    117         final int glVersion = (info.reqGlEsVersion & 0xffff0000) >> 16;
    118         new Thread() {
    119             public void run() {
    120                 runIterations(glVersion);
    121             }
    122         }.start();
    123 
    124         Configuration con = getResources().getConfiguration();
    125         String touchScreen = null;
    126         if (con.touchscreen == Configuration.TOUCHSCREEN_UNDEFINED) {
    127             touchScreen = "undefined";
    128         } else if (con.touchscreen == Configuration.TOUCHSCREEN_NOTOUCH) {
    129             touchScreen = "notouch";
    130         } else if (con.touchscreen == Configuration.TOUCHSCREEN_STYLUS) {
    131             touchScreen = "stylus";
    132         } else if (con.touchscreen == Configuration.TOUCHSCREEN_FINGER) {
    133             touchScreen = "finger";
    134         }
    135         if (touchScreen != null) {
    136             DeviceInfoInstrument.addResult(DeviceInfoConstants.TOUCH_SCREEN,
    137                     touchScreen);
    138         }
    139 
    140         String navigation = null;
    141         if (con.navigation == Configuration.NAVIGATION_UNDEFINED) {
    142             navigation = "undefined";
    143         } else if (con.navigation == Configuration.NAVIGATION_NONAV) {
    144             navigation = "nonav";
    145         } else if (con.navigation == Configuration.NAVIGATION_DPAD) {
    146             navigation = "drap";
    147         } else if (con.navigation == Configuration.NAVIGATION_TRACKBALL) {
    148             navigation = "trackball";
    149         } else if (con.navigation == Configuration.NAVIGATION_WHEEL) {
    150             navigation = "wheel";
    151         }
    152 
    153         if (navigation != null) {
    154             DeviceInfoInstrument.addResult(DeviceInfoConstants.NAVIGATION,
    155                     navigation);
    156         }
    157 
    158         String keypad = null;
    159         if (con.keyboard == Configuration.KEYBOARD_UNDEFINED) {
    160             keypad = "undefined";
    161         } else if (con.keyboard == Configuration.KEYBOARD_NOKEYS) {
    162             keypad = "nokeys";
    163         } else if (con.keyboard == Configuration.KEYBOARD_QWERTY) {
    164             keypad = "qwerty";
    165         } else if (con.keyboard == Configuration.KEYBOARD_12KEY) {
    166             keypad = "12key";
    167         }
    168         if (keypad != null) {
    169             DeviceInfoInstrument.addResult(DeviceInfoConstants.KEYPAD, keypad);
    170         }
    171 
    172         String[] locales = getAssets().getLocales();
    173         StringBuilder localeList = new StringBuilder();
    174         for (String s : locales) {
    175             if (s.length() == 0) { // default locale
    176                 localeList.append(new Locale("en", "US").toString());
    177             } else {
    178                 localeList.append(s);
    179             }
    180             localeList.append(";");
    181         }
    182         DeviceInfoInstrument.addResult(DeviceInfoConstants.LOCALES,
    183                 localeList.toString());
    184     }
    185 }
    186