115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root/* 215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Copyright (C) 2009 The Android Open Source Project 315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * you may not use this file except in compliance with the License. 615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * You may obtain a copy of the License at 715a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 815a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * http://www.apache.org/licenses/LICENSE-2.0 915a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 1015a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Unless required by applicable law or agreed to in writing, software 1115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * See the License for the specific language governing permissions and 1415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * limitations under the License. 1515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root */ 1615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root 1749237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackbornpackage android.content.pm; 1849237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 1949237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackbornimport android.os.Parcel; 2049237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackbornimport android.os.Parcelable; 2149237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackbornimport android.os.Parcelable.Creator; 2249237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 2349237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn/** 2449237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * A single feature that can be requested by an application. This corresponds 2549237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * to information collected from the 2649237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * AndroidManifest.xml's <uses-feature> tag. 2749237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn */ 2849237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackbornpublic class FeatureInfo implements Parcelable { 2949237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn /** 3049237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * The name of this feature, for example "android.hardware.camera". If 3149237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * this is null, then this is an OpenGL ES version feature as described 3249237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * in {@link #reqGlEsVersion}. 3349237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn */ 3449237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public String name; 3549237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 3649237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn /** 3749237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * Default value for {@link #reqGlEsVersion}; 3849237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn */ 3949237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public static final int GL_ES_VERSION_UNDEFINED = 0; 4049237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 4149237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn /** 4249237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * The GLES version used by an application. The upper order 16 bits represent the 4349237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * major version and the lower order 16 bits the minor version. Only valid 4449237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * if {@link #name} is null. 4549237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn */ 4649237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public int reqGlEsVersion; 4749237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 4849237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn /** 4949237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * Set on {@link #flags} if this feature has been required by the application. 5049237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn */ 5149237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public static final int FLAG_REQUIRED = 0x0001; 5249237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 5349237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn /** 5449237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * Additional flags. May be zero or more of {@link #FLAG_REQUIRED}. 5549237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn */ 5649237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public int flags; 5749237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 5849237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public FeatureInfo() { 5949237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn } 6049237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 6149237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public FeatureInfo(FeatureInfo orig) { 6249237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn name = orig.name; 6349237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn reqGlEsVersion = orig.reqGlEsVersion; 6449237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn flags = orig.flags; 6549237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn } 6649237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 6749237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public String toString() { 6849237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn if (name != null) { 6949237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn return "FeatureInfo{" 7049237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn + Integer.toHexString(System.identityHashCode(this)) 7149237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn + " " + name + " fl=0x" + Integer.toHexString(flags) + "}"; 7249237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn } else { 7349237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn return "FeatureInfo{" 7449237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn + Integer.toHexString(System.identityHashCode(this)) 7549237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn + " glEsVers=" + getGlEsVersion() 7649237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn + " fl=0x" + Integer.toHexString(flags) + "}"; 7749237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn } 7849237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn } 7949237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 8049237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public int describeContents() { 8149237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn return 0; 8249237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn } 8349237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 8449237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public void writeToParcel(Parcel dest, int parcelableFlags) { 8549237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn dest.writeString(name); 8649237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn dest.writeInt(reqGlEsVersion); 8749237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn dest.writeInt(flags); 8849237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn } 8949237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 9049237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public static final Creator<FeatureInfo> CREATOR = 9149237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn new Creator<FeatureInfo>() { 9249237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public FeatureInfo createFromParcel(Parcel source) { 9349237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn return new FeatureInfo(source); 9449237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn } 9549237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public FeatureInfo[] newArray(int size) { 9649237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn return new FeatureInfo[size]; 9749237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn } 9849237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn }; 9949237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 10049237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn private FeatureInfo(Parcel source) { 10149237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn name = source.readString(); 10249237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn reqGlEsVersion = source.readInt(); 10349237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn flags = source.readInt(); 10449237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn } 10549237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn 10649237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn /** 10749237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * This method extracts the major and minor version of reqGLEsVersion attribute 10849237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * and returns it as a string. Say reqGlEsVersion value of 0x00010002 is returned 10949237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * as 1.2 11049237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn * @return String representation of the reqGlEsVersion attribute 11149237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn */ 11249237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn public String getGlEsVersion() { 11349237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn int major = ((reqGlEsVersion & 0xffff0000) >> 16); 11449237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn int minor = reqGlEsVersion & 0x0000ffff; 11549237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn return String.valueOf(major)+"."+String.valueOf(minor); 11649237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn } 11749237345d83e62fdb9eb8d50b13ad086636a04faDianne Hackborn} 118