19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.content.pm;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about a particular security permission
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * group known to the system.  This corresponds to information collected from the
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * AndroidManifest.xml's <permission-group> tags.
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PermissionGroupInfo extends PackageItemInfo implements Parcelable {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A string resource identifier (in the package's resources) of this
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission's description.  From the "description" attribute or,
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if not set, 0.
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int descriptionRes;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The description string provided in the AndroidManifest file, if any.  You
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * probably don't want to use this, since it will be null if the description
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is in a resource.  You probably want
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PermissionInfo#loadDescription} instead.
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public CharSequence nonLocalizedDescription;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
44fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn    /**
45fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn     * Flag for {@link #flags}, corresponding to <code>personalInfo</code>
46fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn     * value of {@link android.R.attr#permissionGroupFlags}.
47fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn     */
48fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn    public static final int FLAG_PERSONAL_INFO = 1<<0;
49fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn
50fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn    /**
51fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn     * Additional flags about this group as given by
52fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn     * {@link android.R.attr#permissionGroupFlags}.
53fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn     */
54fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn    public int flags;
55fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn
56fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn    /**
57fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn     * Prioritization of this group, for visually sorting with other groups.
58fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn     */
59fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn    public int priority;
60fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public PermissionGroupInfo() {
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public PermissionGroupInfo(PermissionGroupInfo orig) {
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(orig);
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        descriptionRes = orig.descriptionRes;
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        nonLocalizedDescription = orig.nonLocalizedDescription;
68fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn        flags = orig.flags;
69fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn        priority = orig.priority;
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve the textual description of this permission.  This
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will call back on the given PackageManager to load the description from
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the application.
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pm A PackageManager from which the label can be loaded; usually
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the PackageManager from which you originally retrieved this item.
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a CharSequence containing the permission's description.
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If there is no description, null is returned.
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public CharSequence loadDescription(PackageManager pm) {
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (nonLocalizedDescription != null) {
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return nonLocalizedDescription;
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (descriptionRes != 0) {
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CharSequence label = pm.getText(packageName, descriptionRes, null);
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (label != null) {
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return label;
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return "PermissionGroupInfo{"
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + Integer.toHexString(System.identityHashCode(this))
99fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn            + " " + name + " flgs=0x" + Integer.toHexString(flags) + "}";
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int parcelableFlags) {
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.writeToParcel(dest, parcelableFlags);
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(descriptionRes);
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        TextUtils.writeToParcel(nonLocalizedDescription, dest, parcelableFlags);
110fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn        dest.writeInt(flags);
111fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn        dest.writeInt(priority);
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Creator<PermissionGroupInfo> CREATOR =
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            new Creator<PermissionGroupInfo>() {
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public PermissionGroupInfo createFromParcel(Parcel source) {
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new PermissionGroupInfo(source);
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public PermissionGroupInfo[] newArray(int size) {
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new PermissionGroupInfo[size];
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private PermissionGroupInfo(Parcel source) {
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(source);
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        descriptionRes = source.readInt();
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        nonLocalizedDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
128fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn        flags = source.readInt();
129fd5015be41080970c9a992a8ef17a1deefb57478Dianne Hackborn        priority = source.readInt();
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
132