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