PermissionInfo.java revision 002fdbdb950ebbf40331a27de33b80db33e40d30
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 192a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganovimport android.annotation.SystemApi; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about a particular security permission 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * known to the system. This corresponds to information collected from the 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * AndroidManifest.xml's <permission> tags. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PermissionInfo extends PackageItemInfo implements Parcelable { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A normal application value for {@link #protectionLevel}, corresponding 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the <code>normal</code> value of 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#protectionLevel}. 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROTECTION_NORMAL = 0; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dangerous value for {@link #protectionLevel}, corresponding 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the <code>dangerous</code> value of 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#protectionLevel}. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROTECTION_DANGEROUS = 1; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * System-level value for {@link #protectionLevel}, corresponding 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the <code>signature</code> value of 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#protectionLevel}. 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROTECTION_SIGNATURE = 2; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 52a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * @deprecated Use {@link #PROTECTION_SIGNATURE}|{@link #PROTECTION_FLAG_PRIVILEGED} 53a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * instead. 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 55a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn @Deprecated 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROTECTION_SIGNATURE_OR_SYSTEM = 3; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 59e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 60a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * to the <code>privileged</code> value of 61e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * {@link android.R.attr#protectionLevel}. 62e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 63a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn public static final int PROTECTION_FLAG_PRIVILEGED = 0x10; 64a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn 65a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn /** 66a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * @deprecated Old name for {@link #PROTECTION_FLAG_PRIVILEGED}, which 67a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * is now very confusing because it only applies to privileged apps, not all 68a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * apps on the system image. 69a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn */ 70a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn @Deprecated 71e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static final int PROTECTION_FLAG_SYSTEM = 0x10; 72e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 73e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 74e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 75e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * to the <code>development</code> value of 76e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * {@link android.R.attr#protectionLevel}. 77e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 78e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static final int PROTECTION_FLAG_DEVELOPMENT = 0x20; 79e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 80e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 8133f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 82e9b78fdbbef558f5e84f88397daf990dcc2e29cbJeff Sharkey * to the <code>appop</code> value of 8333f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn * {@link android.R.attr#protectionLevel}. 8433f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn */ 8533f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn public static final int PROTECTION_FLAG_APPOP = 0x40; 8633f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn 8733f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn /** 88de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 89de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn * to the <code>pre23</code> value of 90de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn * {@link android.R.attr#protectionLevel}. 91de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn */ 92de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn public static final int PROTECTION_FLAG_PRE23 = 0x80; 93de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn 94de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn /** 953e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * Additional flag for {@link #protectionLevel}, corresponding 963e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * to the <code>installer</code> value of 973e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * {@link android.R.attr#protectionLevel}. 983e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav */ 993e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav public static final int PROTECTION_FLAG_INSTALLER = 0x100; 1003e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav 1013e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav /** 1023e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * Additional flag for {@link #protectionLevel}, corresponding 1033e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * to the <code>verifier</code> value of 1043e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * {@link android.R.attr#protectionLevel}. 1053e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav */ 1063e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav public static final int PROTECTION_FLAG_VERIFIER = 0x200; 1073e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav 1083e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav /** 109a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 110a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * to the <code>preinstalled</code> value of 111a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * {@link android.R.attr#protectionLevel}. 112a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn */ 113a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn public static final int PROTECTION_FLAG_PREINSTALLED = 0x400; 114a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn 115a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn /** 116b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner * Additional flag for {@link #protectionLevel}, corresponding 117b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner * to the <code>setup</code> value of 118b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner * {@link android.R.attr#protectionLevel}. 119b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner */ 120b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner public static final int PROTECTION_FLAG_SETUP = 0x800; 121b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner 122c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker /** 123c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker * Additional flag for {@link #protectionLevel}, corresponding 124c247fa136639dd07278b1954e5fba78ade60614cTodd Kennedy * to the <code>instant</code> value of 125c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker * {@link android.R.attr#protectionLevel}. 126c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker */ 127c247fa136639dd07278b1954e5fba78ade60614cTodd Kennedy public static final int PROTECTION_FLAG_INSTANT = 0x1000; 128c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker 129b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner /** 130a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker * Additional flag for {@link #protectionLevel}, corresponding 131a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker * to the <code>runtime</code> value of 132a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker * {@link android.R.attr#protectionLevel}. 133a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker */ 134a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker public static final int PROTECTION_FLAG_RUNTIME_ONLY = 0x2000; 135a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker 136a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker /** 137087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov * Additional flag for {@link #protectionLevel}, corresponding 138087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov * to the <code>oem</code> value of 139087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov * {@link android.R.attr#protectionLevel}. 140087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov * 141087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov * @hide 142087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov */ 143087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov @SystemApi 144087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov public static final int PROTECTION_FLAG_OEM = 0x4000; 145087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov 146087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov /** 147002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park * Additional flag for {${link #protectionLevel}, corresponding 148002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park * to the <code>vendorPrivileged</code> value of 149002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park * {@link android.R.attr#protectionLevel}. 150002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park * 151002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park * @hide 152002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park */ 153002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park public static final int PROTECTION_FLAG_VENDOR_PRIVILEGED = 0x8000; 154002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park 155002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park /** 156e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Mask for {@link #protectionLevel}: the basic protection type. 157e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 158e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static final int PROTECTION_MASK_BASE = 0xf; 159e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 160e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 161e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Mask for {@link #protectionLevel}: additional flag bits. 162e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 163c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker public static final int PROTECTION_MASK_FLAGS = 0xfff0; 164e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 165e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 1662ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * The level of access this permission is protecting, as per 16751fbad5a7664812554491a89b604c10c00f84367Peter Visontay * {@link android.R.attr#protectionLevel}. Consists of 16851fbad5a7664812554491a89b604c10c00f84367Peter Visontay * a base permission type and zero or more flags: 16951fbad5a7664812554491a89b604c10c00f84367Peter Visontay * 17051fbad5a7664812554491a89b604c10c00f84367Peter Visontay * <pre> 17151fbad5a7664812554491a89b604c10c00f84367Peter Visontay * int basePermissionType = protectionLevel & {@link #PROTECTION_MASK_BASE}; 17251fbad5a7664812554491a89b604c10c00f84367Peter Visontay * int permissionFlags = protectionLevel & {@link #PROTECTION_MASK_FLAGS}; 17351fbad5a7664812554491a89b604c10c00f84367Peter Visontay * </pre> 17451fbad5a7664812554491a89b604c10c00f84367Peter Visontay * 17551fbad5a7664812554491a89b604c10c00f84367Peter Visontay * <p></p>Base permission types are {@link #PROTECTION_NORMAL}, 17651fbad5a7664812554491a89b604c10c00f84367Peter Visontay * {@link #PROTECTION_DANGEROUS}, {@link #PROTECTION_SIGNATURE} 17751fbad5a7664812554491a89b604c10c00f84367Peter Visontay * and the deprecated {@link #PROTECTION_SIGNATURE_OR_SYSTEM}. 17851fbad5a7664812554491a89b604c10c00f84367Peter Visontay * Flags are listed under {@link android.R.attr#protectionLevel}. 1792ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn */ 1802ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn public int protectionLevel; 1812ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 1822ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn /** 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The group this permission is a part of, as per 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#permissionGroup}. 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String group; 1872ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 1882ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn /** 1892ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * Flag for {@link #flags}, corresponding to <code>costsMoney</code> 1902ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * value of {@link android.R.attr#permissionFlags}. 1912ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn */ 1922ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn public static final int FLAG_COSTS_MONEY = 1<<0; 1932ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 1942ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn /** 1952a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganov * Flag for {@link #flags}, corresponding to <code>removed</code> 1963e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov * value of {@link android.R.attr#permissionFlags}. 1973e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov * @hide 1983e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov */ 1992a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganov @SystemApi 2002a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganov public static final int FLAG_REMOVED = 1<<1; 2013e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov 2023e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov /** 203cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn * Flag for {@link #flags}, indicating that this permission has been 204cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn * installed into the system's globally defined permissions. 2056d2c0e5ee2f717d4a5c00df08aca21c76eea8278Svetoslav Ganov */ 206cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn public static final int FLAG_INSTALLED = 1<<30; 2076d2c0e5ee2f717d4a5c00df08aca21c76eea8278Svetoslav Ganov 2086d2c0e5ee2f717d4a5c00df08aca21c76eea8278Svetoslav Ganov /** 2092ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * Additional flags about this permission as given by 2102ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * {@link android.R.attr#permissionFlags}. 2112ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn */ 2122ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn public int flags; 2132ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A string resource identifier (in the package's resources) of this 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * permission's description. From the "description" attribute or, 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if not set, 0. 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int descriptionRes; 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22227ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann * A string resource identifier (in the package's resources) used to request the permissions. 22327ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann * From the "request" attribute or, if not set, 0. 22427ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann * 22527ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann * @hide 22627ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann */ 22727ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann @SystemApi 22827ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann public int requestRes; 22927ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann 23027ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann /** 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The description string provided in the AndroidManifest file, if any. You 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * probably don't want to use this, since it will be null if the description 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is in a resource. You probably want 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PermissionInfo#loadDescription} instead. 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence nonLocalizedDescription; 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 238e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** @hide */ 239e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static int fixProtectionLevel(int level) { 240e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn if (level == PROTECTION_SIGNATURE_OR_SYSTEM) { 241a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn level = PROTECTION_SIGNATURE | PROTECTION_FLAG_PRIVILEGED; 242e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 243002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park if ((level & PROTECTION_FLAG_VENDOR_PRIVILEGED) != 0 244002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park && (level & PROTECTION_FLAG_PRIVILEGED) == 0) { 245002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park // 'vendorPrivileged' must be 'privileged'. If not, 246002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park // drop the vendorPrivileged. 247002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park level = level & ~PROTECTION_FLAG_VENDOR_PRIVILEGED; 248002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park } 249e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn return level; 250e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 251e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 252e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** @hide */ 253e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static String protectionToString(int level) { 254e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn String protLevel = "????"; 255087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov switch (level & PROTECTION_MASK_BASE) { 256e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_DANGEROUS: 257e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "dangerous"; 258e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 259e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_NORMAL: 260e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "normal"; 261e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 262e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_SIGNATURE: 263e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "signature"; 264e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 265e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_SIGNATURE_OR_SYSTEM: 266e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "signatureOrSystem"; 267e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 268e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 269087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_PRIVILEGED) != 0) { 270a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn protLevel += "|privileged"; 271e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 272087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) { 273e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel += "|development"; 274e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 275087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_APPOP) != 0) { 27633f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn protLevel += "|appop"; 27733f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn } 278087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_PRE23) != 0) { 279de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn protLevel += "|pre23"; 280de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn } 281087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_INSTALLER) != 0) { 282cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn protLevel += "|installer"; 283cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn } 284087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_VERIFIER) != 0) { 285cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn protLevel += "|verifier"; 286cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn } 287087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_PREINSTALLED) != 0) { 288cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn protLevel += "|preinstalled"; 289cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn } 290087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_SETUP) != 0) { 291b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner protLevel += "|setup"; 292b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner } 293087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_INSTANT) != 0) { 294c247fa136639dd07278b1954e5fba78ade60614cTodd Kennedy protLevel += "|instant"; 295c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker } 296087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0) { 297a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker protLevel += "|runtime"; 298a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker } 299087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_OEM) != 0) { 300087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov protLevel += "|oem"; 301087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov } 302002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park if ((level & PermissionInfo.PROTECTION_FLAG_VENDOR_PRIVILEGED) != 0) { 303002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park protLevel += "|vendorPrivileged"; 304002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park } 305e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn return protLevel; 306e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 307e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo() { 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo(PermissionInfo orig) { 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(orig); 3132ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn protectionLevel = orig.protectionLevel; 3142ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn flags = orig.flags; 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project group = orig.group; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project descriptionRes = orig.descriptionRes; 31727ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann requestRes = orig.requestRes; 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedDescription = orig.nonLocalizedDescription; 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the textual description of this permission. This 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will call back on the given PackageManager to load the description from 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application. 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the label can be loaded; usually 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a CharSequence containing the permission's description. 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If there is no description, null is returned. 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence loadDescription(PackageManager pm) { 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (nonLocalizedDescription != null) { 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return nonLocalizedDescription; 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (descriptionRes != 0) { 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence label = pm.getText(packageName, descriptionRes, null); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (label != null) { 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return label; 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 34591a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy @Override 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "PermissionInfo{" 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Integer.toHexString(System.identityHashCode(this)) 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " " + name + "}"; 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35291a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy @Override 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35791a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy @Override 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int parcelableFlags) { 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.writeToParcel(dest, parcelableFlags); 3602ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn dest.writeInt(protectionLevel); 3612ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn dest.writeInt(flags); 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(group); 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(descriptionRes); 36427ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann dest.writeInt(requestRes); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.writeToParcel(nonLocalizedDescription, dest, parcelableFlags); 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 36891a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy /** @hide */ 36991a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy public int calculateFootprint() { 37091a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy int size = name.length(); 37191a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy if (nonLocalizedLabel != null) { 37291a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy size += nonLocalizedLabel.length(); 37391a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy } 37491a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy if (nonLocalizedDescription != null) { 37591a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy size += nonLocalizedDescription.length(); 37691a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy } 37791a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy return size; 37891a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy } 37991a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy 380c842393bc55509b094d3a71f164fcdbadf5c7997Todd Kennedy /** @hide */ 381c842393bc55509b094d3a71f164fcdbadf5c7997Todd Kennedy public boolean isAppOp() { 382c842393bc55509b094d3a71f164fcdbadf5c7997Todd Kennedy return (protectionLevel & PermissionInfo.PROTECTION_FLAG_APPOP) != 0; 383c842393bc55509b094d3a71f164fcdbadf5c7997Todd Kennedy } 384c842393bc55509b094d3a71f164fcdbadf5c7997Todd Kennedy 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<PermissionInfo> CREATOR = 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<PermissionInfo>() { 38791a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy @Override 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo createFromParcel(Parcel source) { 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new PermissionInfo(source); 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39191a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy @Override 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo[] newArray(int size) { 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new PermissionInfo[size]; 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PermissionInfo(Parcel source) { 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(source); 3992ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn protectionLevel = source.readInt(); 4002ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn flags = source.readInt(); 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project group = source.readString(); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project descriptionRes = source.readInt(); 40327ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann requestRes = source.readInt(); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 407