Home | History | Annotate | Download | only in pm
      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.content.pm;
     18 
     19 import android.os.Parcel;
     20 import android.os.Parcelable;
     21 
     22 /**
     23  * Information you can retrieve about hardware configuration preferences
     24  * declared by an application. This corresponds to information collected from the
     25  * AndroidManifest.xml's <uses-configuration> and <uses-feature> tags.
     26  */
     27 public class ConfigurationInfo implements Parcelable {
     28     /**
     29      * The kind of touch screen attached to the device.
     30      * One of: {@link android.content.res.Configuration#TOUCHSCREEN_NOTOUCH},
     31      * {@link android.content.res.Configuration#TOUCHSCREEN_STYLUS},
     32      * {@link android.content.res.Configuration#TOUCHSCREEN_FINGER}.
     33      */
     34     public int reqTouchScreen;
     35 
     36     /**
     37      * Application's input method preference.
     38      * One of: {@link android.content.res.Configuration#KEYBOARD_UNDEFINED},
     39      * {@link android.content.res.Configuration#KEYBOARD_NOKEYS},
     40      * {@link android.content.res.Configuration#KEYBOARD_QWERTY},
     41      * {@link android.content.res.Configuration#KEYBOARD_12KEY}
     42      */
     43     public int reqKeyboardType;
     44 
     45     /**
     46      * A flag indicating whether any keyboard is available.
     47      * one of: {@link android.content.res.Configuration#NAVIGATION_UNDEFINED},
     48      * {@link android.content.res.Configuration#NAVIGATION_DPAD},
     49      * {@link android.content.res.Configuration#NAVIGATION_TRACKBALL},
     50      * {@link android.content.res.Configuration#NAVIGATION_WHEEL}
     51      */
     52     public int reqNavigation;
     53 
     54     /**
     55      * Value for {@link #reqInputFeatures}: if set, indicates that the application
     56      * requires a hard keyboard
     57      */
     58     public static final int INPUT_FEATURE_HARD_KEYBOARD = 0x00000001;
     59 
     60     /**
     61      * Value for {@link #reqInputFeatures}: if set, indicates that the application
     62      * requires a five way navigation device
     63      */
     64     public static final int INPUT_FEATURE_FIVE_WAY_NAV = 0x00000002;
     65 
     66     /**
     67      * Flags associated with the input features.  Any combination of
     68      * {@link #INPUT_FEATURE_HARD_KEYBOARD},
     69      * {@link #INPUT_FEATURE_FIVE_WAY_NAV}
     70      */
     71     public int reqInputFeatures = 0;
     72 
     73     /**
     74      * Default value for {@link #reqGlEsVersion};
     75      */
     76     public static final int GL_ES_VERSION_UNDEFINED = 0;
     77     /**
     78      * The GLES version used by an application. The upper order 16 bits represent the
     79      * major version and the lower order 16 bits the minor version.
     80      */
     81     public int reqGlEsVersion;
     82 
     83     public ConfigurationInfo() {
     84     }
     85 
     86     public ConfigurationInfo(ConfigurationInfo orig) {
     87         reqTouchScreen = orig.reqTouchScreen;
     88         reqKeyboardType = orig.reqKeyboardType;
     89         reqNavigation = orig.reqNavigation;
     90         reqInputFeatures = orig.reqInputFeatures;
     91         reqGlEsVersion = orig.reqGlEsVersion;
     92     }
     93 
     94     public String toString() {
     95         return "ConfigurationInfo{"
     96             + Integer.toHexString(System.identityHashCode(this))
     97             + " touchscreen = " + reqTouchScreen
     98             + " inputMethod = " + reqKeyboardType
     99             + " navigation = " + reqNavigation
    100             + " reqInputFeatures = " + reqInputFeatures
    101             + " reqGlEsVersion = " + reqGlEsVersion + "}";
    102     }
    103 
    104     public int describeContents() {
    105         return 0;
    106     }
    107 
    108     public void writeToParcel(Parcel dest, int parcelableFlags) {
    109         dest.writeInt(reqTouchScreen);
    110         dest.writeInt(reqKeyboardType);
    111         dest.writeInt(reqNavigation);
    112         dest.writeInt(reqInputFeatures);
    113         dest.writeInt(reqGlEsVersion);
    114     }
    115 
    116     public static final Creator<ConfigurationInfo> CREATOR =
    117         new Creator<ConfigurationInfo>() {
    118         public ConfigurationInfo createFromParcel(Parcel source) {
    119             return new ConfigurationInfo(source);
    120         }
    121         public ConfigurationInfo[] newArray(int size) {
    122             return new ConfigurationInfo[size];
    123         }
    124     };
    125 
    126     private ConfigurationInfo(Parcel source) {
    127         reqTouchScreen = source.readInt();
    128         reqKeyboardType = source.readInt();
    129         reqNavigation = source.readInt();
    130         reqInputFeatures = source.readInt();
    131         reqGlEsVersion = source.readInt();
    132     }
    133 
    134     /**
    135      * This method extracts the major and minor version of reqGLEsVersion attribute
    136      * and returns it as a string. Say reqGlEsVersion value of 0x00010002 is returned
    137      * as 1.2
    138      * @return String representation of the reqGlEsVersion attribute
    139      */
    140     public String getGlEsVersion() {
    141         int major = ((reqGlEsVersion & 0xffff0000) >> 16);
    142         int minor = reqGlEsVersion & 0x0000ffff;
    143         return String.valueOf(major)+"."+String.valueOf(minor);
    144     }
    145 }
    146