PermissionInfo.java revision a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2
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; 20c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubakerimport android.annotation.TestApi; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about a particular security permission 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * known to the system. This corresponds to information collected from the 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * AndroidManifest.xml's <permission> tags. 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PermissionInfo extends PackageItemInfo implements Parcelable { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A normal application value for {@link #protectionLevel}, corresponding 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the <code>normal</code> value of 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#protectionLevel}. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROTECTION_NORMAL = 0; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dangerous value for {@link #protectionLevel}, corresponding 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the <code>dangerous</code> value of 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#protectionLevel}. 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROTECTION_DANGEROUS = 1; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * System-level value for {@link #protectionLevel}, corresponding 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the <code>signature</code> value of 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#protectionLevel}. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROTECTION_SIGNATURE = 2; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 53a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * @deprecated Use {@link #PROTECTION_SIGNATURE}|{@link #PROTECTION_FLAG_PRIVILEGED} 54a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * instead. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 56a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn @Deprecated 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROTECTION_SIGNATURE_OR_SYSTEM = 3; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 60e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 61a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * to the <code>privileged</code> value of 62e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * {@link android.R.attr#protectionLevel}. 63e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 64a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn public static final int PROTECTION_FLAG_PRIVILEGED = 0x10; 65a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn 66a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn /** 67a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * @deprecated Old name for {@link #PROTECTION_FLAG_PRIVILEGED}, which 68a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * is now very confusing because it only applies to privileged apps, not all 69a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * apps on the system image. 70a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn */ 71a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn @Deprecated 72e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static final int PROTECTION_FLAG_SYSTEM = 0x10; 73e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 74e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 75e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 76e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * to the <code>development</code> value of 77e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * {@link android.R.attr#protectionLevel}. 78e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 79e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static final int PROTECTION_FLAG_DEVELOPMENT = 0x20; 80e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 81e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 8233f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 83e9b78fdbbef558f5e84f88397daf990dcc2e29cbJeff Sharkey * to the <code>appop</code> value of 8433f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn * {@link android.R.attr#protectionLevel}. 8533f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn */ 8633f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn public static final int PROTECTION_FLAG_APPOP = 0x40; 8733f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn 8833f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn /** 89de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 90de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn * to the <code>pre23</code> value of 91de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn * {@link android.R.attr#protectionLevel}. 92de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn */ 93de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn public static final int PROTECTION_FLAG_PRE23 = 0x80; 94de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn 95de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn /** 963e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * Additional flag for {@link #protectionLevel}, corresponding 973e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * to the <code>installer</code> value of 983e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * {@link android.R.attr#protectionLevel}. 993e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav */ 1003e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav public static final int PROTECTION_FLAG_INSTALLER = 0x100; 1013e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav 1023e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav /** 1033e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * Additional flag for {@link #protectionLevel}, corresponding 1043e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * to the <code>verifier</code> value of 1053e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * {@link android.R.attr#protectionLevel}. 1063e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav */ 1073e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav public static final int PROTECTION_FLAG_VERIFIER = 0x200; 1083e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav 1093e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav /** 110a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 111a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * to the <code>preinstalled</code> value of 112a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * {@link android.R.attr#protectionLevel}. 113a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn */ 114a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn public static final int PROTECTION_FLAG_PREINSTALLED = 0x400; 115a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn 116a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn /** 117b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner * Additional flag for {@link #protectionLevel}, corresponding 118b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner * to the <code>setup</code> value of 119b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner * {@link android.R.attr#protectionLevel}. 120b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner */ 121b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner public static final int PROTECTION_FLAG_SETUP = 0x800; 122b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner 123c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker /** 124c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker * Additional flag for {@link #protectionLevel}, corresponding 125c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker * to the <code>ephemeral</code> value of 126c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker * {@link android.R.attr#protectionLevel}. 127c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker * @hide 128c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker */ 129c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker @SystemApi 130c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker @TestApi 131c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker public static final int PROTECTION_FLAG_EPHEMERAL = 0x1000; 132c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker 133b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner /** 134a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker * Additional flag for {@link #protectionLevel}, corresponding 135a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker * to the <code>runtime</code> value of 136a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker * {@link android.R.attr#protectionLevel}. 137a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker */ 138a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker public static final int PROTECTION_FLAG_RUNTIME_ONLY = 0x2000; 139a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker 140a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker /** 141e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Mask for {@link #protectionLevel}: the basic protection type. 142e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 143e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static final int PROTECTION_MASK_BASE = 0xf; 144e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 145e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 146e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Mask for {@link #protectionLevel}: additional flag bits. 147e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 148c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker public static final int PROTECTION_MASK_FLAGS = 0xfff0; 149e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 150e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 1512ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * The level of access this permission is protecting, as per 1522ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * {@link android.R.attr#protectionLevel}. Values may be 1532ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * {@link #PROTECTION_NORMAL}, {@link #PROTECTION_DANGEROUS}, or 1542ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * {@link #PROTECTION_SIGNATURE}. May also include the additional 1552ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * flags {@link #PROTECTION_FLAG_SYSTEM} or {@link #PROTECTION_FLAG_DEVELOPMENT} 1562ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * (which only make sense in combination with the base 1572ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * {@link #PROTECTION_SIGNATURE}. 1582ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn */ 1592ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn public int protectionLevel; 1602ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 1612ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn /** 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The group this permission is a part of, as per 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#permissionGroup}. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String group; 1662ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 1672ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn /** 1682ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * Flag for {@link #flags}, corresponding to <code>costsMoney</code> 1692ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * value of {@link android.R.attr#permissionFlags}. 1702ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn */ 1712ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn public static final int FLAG_COSTS_MONEY = 1<<0; 1722ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 1732ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn /** 1742a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganov * Flag for {@link #flags}, corresponding to <code>removed</code> 1753e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov * value of {@link android.R.attr#permissionFlags}. 1763e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov * @hide 1773e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov */ 1782a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganov @SystemApi 1792a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganov public static final int FLAG_REMOVED = 1<<1; 1803e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov 1813e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov /** 182cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn * Flag for {@link #flags}, indicating that this permission has been 183cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn * installed into the system's globally defined permissions. 1846d2c0e5ee2f717d4a5c00df08aca21c76eea8278Svetoslav Ganov */ 185cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn public static final int FLAG_INSTALLED = 1<<30; 1866d2c0e5ee2f717d4a5c00df08aca21c76eea8278Svetoslav Ganov 1876d2c0e5ee2f717d4a5c00df08aca21c76eea8278Svetoslav Ganov /** 1882ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * Additional flags about this permission as given by 1892ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * {@link android.R.attr#permissionFlags}. 1902ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn */ 1912ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn public int flags; 1922ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A string resource identifier (in the package's resources) of this 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * permission's description. From the "description" attribute or, 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if not set, 0. 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int descriptionRes; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The description string provided in the AndroidManifest file, if any. You 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * probably don't want to use this, since it will be null if the description 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is in a resource. You probably want 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PermissionInfo#loadDescription} instead. 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence nonLocalizedDescription; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 208e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** @hide */ 209e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static int fixProtectionLevel(int level) { 210e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn if (level == PROTECTION_SIGNATURE_OR_SYSTEM) { 211a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn level = PROTECTION_SIGNATURE | PROTECTION_FLAG_PRIVILEGED; 212e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 213e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn return level; 214e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 215e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 216e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** @hide */ 217e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static String protectionToString(int level) { 218e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn String protLevel = "????"; 219e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn switch (level&PROTECTION_MASK_BASE) { 220e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_DANGEROUS: 221e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "dangerous"; 222e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 223e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_NORMAL: 224e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "normal"; 225e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 226e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_SIGNATURE: 227e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "signature"; 228e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 229e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_SIGNATURE_OR_SYSTEM: 230e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "signatureOrSystem"; 231e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 232e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 233a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn if ((level&PermissionInfo.PROTECTION_FLAG_PRIVILEGED) != 0) { 234a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn protLevel += "|privileged"; 235e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 236e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn if ((level&PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) { 237e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel += "|development"; 238e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 23933f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn if ((level&PermissionInfo.PROTECTION_FLAG_APPOP) != 0) { 24033f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn protLevel += "|appop"; 24133f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn } 242de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn if ((level&PermissionInfo.PROTECTION_FLAG_PRE23) != 0) { 243de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn protLevel += "|pre23"; 244de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn } 245cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn if ((level&PermissionInfo.PROTECTION_FLAG_INSTALLER) != 0) { 246cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn protLevel += "|installer"; 247cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn } 248cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn if ((level&PermissionInfo.PROTECTION_FLAG_VERIFIER) != 0) { 249cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn protLevel += "|verifier"; 250cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn } 251cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn if ((level&PermissionInfo.PROTECTION_FLAG_PREINSTALLED) != 0) { 252cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn protLevel += "|preinstalled"; 253cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn } 254b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner if ((level&PermissionInfo.PROTECTION_FLAG_SETUP) != 0) { 255b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner protLevel += "|setup"; 256b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner } 257c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker if ((level&PermissionInfo.PROTECTION_FLAG_EPHEMERAL) != 0) { 258c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker protLevel += "|ephemeral"; 259c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker } 260a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker if ((level&PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0) { 261a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker protLevel += "|runtime"; 262a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker } 263e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn return protLevel; 264e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 265e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo() { 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo(PermissionInfo orig) { 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(orig); 2712ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn protectionLevel = orig.protectionLevel; 2722ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn flags = orig.flags; 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project group = orig.group; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project descriptionRes = orig.descriptionRes; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedDescription = orig.nonLocalizedDescription; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the textual description of this permission. This 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will call back on the given PackageManager to load the description from 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application. 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the label can be loaded; usually 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a CharSequence containing the permission's description. 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If there is no description, null is returned. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence loadDescription(PackageManager pm) { 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (nonLocalizedDescription != null) { 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return nonLocalizedDescription; 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (descriptionRes != 0) { 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence label = pm.getText(packageName, descriptionRes, null); 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (label != null) { 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return label; 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "PermissionInfo{" 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Integer.toHexString(System.identityHashCode(this)) 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " " + name + "}"; 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int parcelableFlags) { 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.writeToParcel(dest, parcelableFlags); 3142ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn dest.writeInt(protectionLevel); 3152ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn dest.writeInt(flags); 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(group); 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(descriptionRes); 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.writeToParcel(nonLocalizedDescription, dest, parcelableFlags); 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<PermissionInfo> CREATOR = 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<PermissionInfo>() { 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo createFromParcel(Parcel source) { 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new PermissionInfo(source); 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo[] newArray(int size) { 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new PermissionInfo[size]; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PermissionInfo(Parcel source) { 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(source); 3332ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn protectionLevel = source.readInt(); 3342ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn flags = source.readInt(); 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project group = source.readString(); 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project descriptionRes = source.readInt(); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 340