PermissionInfo.java revision 087dce20e3a7137e94607c060fd825d1f8952572
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 /** 147e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Mask for {@link #protectionLevel}: the basic protection type. 148e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 149e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static final int PROTECTION_MASK_BASE = 0xf; 150e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 151e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 152e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Mask for {@link #protectionLevel}: additional flag bits. 153e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 154c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker public static final int PROTECTION_MASK_FLAGS = 0xfff0; 155e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 156e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 1572ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * The level of access this permission is protecting, as per 1582ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * {@link android.R.attr#protectionLevel}. Values may be 1592ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * {@link #PROTECTION_NORMAL}, {@link #PROTECTION_DANGEROUS}, or 1602ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * {@link #PROTECTION_SIGNATURE}. May also include the additional 1612ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * flags {@link #PROTECTION_FLAG_SYSTEM} or {@link #PROTECTION_FLAG_DEVELOPMENT} 1622ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * (which only make sense in combination with the base 1632ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * {@link #PROTECTION_SIGNATURE}. 1642ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn */ 1652ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn public int protectionLevel; 1662ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 1672ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn /** 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The group this permission is a part of, as per 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#permissionGroup}. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String group; 1722ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 1732ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn /** 1742ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * Flag for {@link #flags}, corresponding to <code>costsMoney</code> 1752ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * value of {@link android.R.attr#permissionFlags}. 1762ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn */ 1772ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn public static final int FLAG_COSTS_MONEY = 1<<0; 1782ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 1792ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn /** 1802a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganov * Flag for {@link #flags}, corresponding to <code>removed</code> 1813e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov * value of {@link android.R.attr#permissionFlags}. 1823e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov * @hide 1833e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov */ 1842a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganov @SystemApi 1852a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganov public static final int FLAG_REMOVED = 1<<1; 1863e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov 1873e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov /** 188cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn * Flag for {@link #flags}, indicating that this permission has been 189cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn * installed into the system's globally defined permissions. 1906d2c0e5ee2f717d4a5c00df08aca21c76eea8278Svetoslav Ganov */ 191cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn public static final int FLAG_INSTALLED = 1<<30; 1926d2c0e5ee2f717d4a5c00df08aca21c76eea8278Svetoslav Ganov 1936d2c0e5ee2f717d4a5c00df08aca21c76eea8278Svetoslav Ganov /** 1942ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * Additional flags about this permission as given by 1952ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * {@link android.R.attr#permissionFlags}. 1962ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn */ 1972ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn public int flags; 1982ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A string resource identifier (in the package's resources) of this 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * permission's description. From the "description" attribute or, 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if not set, 0. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int descriptionRes; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20727ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann * A string resource identifier (in the package's resources) used to request the permissions. 20827ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann * From the "request" attribute or, if not set, 0. 20927ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann * 21027ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann * @hide 21127ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann */ 21227ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann @SystemApi 21327ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann public int requestRes; 21427ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann 21527ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann /** 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The description string provided in the AndroidManifest file, if any. You 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * probably don't want to use this, since it will be null if the description 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is in a resource. You probably want 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PermissionInfo#loadDescription} instead. 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence nonLocalizedDescription; 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 223e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** @hide */ 224e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static int fixProtectionLevel(int level) { 225e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn if (level == PROTECTION_SIGNATURE_OR_SYSTEM) { 226a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn level = PROTECTION_SIGNATURE | PROTECTION_FLAG_PRIVILEGED; 227e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 228e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn return level; 229e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 230e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 231e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** @hide */ 232e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static String protectionToString(int level) { 233e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn String protLevel = "????"; 234087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov switch (level & PROTECTION_MASK_BASE) { 235e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_DANGEROUS: 236e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "dangerous"; 237e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 238e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_NORMAL: 239e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "normal"; 240e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 241e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_SIGNATURE: 242e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "signature"; 243e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 244e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_SIGNATURE_OR_SYSTEM: 245e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "signatureOrSystem"; 246e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 247e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 248087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_PRIVILEGED) != 0) { 249a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn protLevel += "|privileged"; 250e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 251087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) { 252e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel += "|development"; 253e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 254087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_APPOP) != 0) { 25533f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn protLevel += "|appop"; 25633f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn } 257087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_PRE23) != 0) { 258de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn protLevel += "|pre23"; 259de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn } 260087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_INSTALLER) != 0) { 261cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn protLevel += "|installer"; 262cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn } 263087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_VERIFIER) != 0) { 264cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn protLevel += "|verifier"; 265cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn } 266087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_PREINSTALLED) != 0) { 267cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn protLevel += "|preinstalled"; 268cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn } 269087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_SETUP) != 0) { 270b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner protLevel += "|setup"; 271b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner } 272087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_INSTANT) != 0) { 273c247fa136639dd07278b1954e5fba78ade60614cTodd Kennedy protLevel += "|instant"; 274c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker } 275087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0) { 276a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker protLevel += "|runtime"; 277a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker } 278087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_OEM) != 0) { 279087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov protLevel += "|oem"; 280087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov } 281e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn return protLevel; 282e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 283e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo() { 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo(PermissionInfo orig) { 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(orig); 2892ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn protectionLevel = orig.protectionLevel; 2902ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn flags = orig.flags; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project group = orig.group; 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project descriptionRes = orig.descriptionRes; 29327ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann requestRes = orig.requestRes; 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedDescription = orig.nonLocalizedDescription; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the textual description of this permission. This 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will call back on the given PackageManager to load the description from 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application. 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the label can be loaded; usually 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a CharSequence containing the permission's description. 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If there is no description, null is returned. 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence loadDescription(PackageManager pm) { 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (nonLocalizedDescription != null) { 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return nonLocalizedDescription; 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (descriptionRes != 0) { 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence label = pm.getText(packageName, descriptionRes, null); 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (label != null) { 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return label; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "PermissionInfo{" 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Integer.toHexString(System.identityHashCode(this)) 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " " + name + "}"; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int parcelableFlags) { 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.writeToParcel(dest, parcelableFlags); 3332ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn dest.writeInt(protectionLevel); 3342ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn dest.writeInt(flags); 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(group); 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(descriptionRes); 33727ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann dest.writeInt(requestRes); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.writeToParcel(nonLocalizedDescription, dest, parcelableFlags); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<PermissionInfo> CREATOR = 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<PermissionInfo>() { 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo createFromParcel(Parcel source) { 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new PermissionInfo(source); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo[] newArray(int size) { 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new PermissionInfo[size]; 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PermissionInfo(Parcel source) { 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(source); 3532ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn protectionLevel = source.readInt(); 3542ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn flags = source.readInt(); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project group = source.readString(); 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project descriptionRes = source.readInt(); 35727ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann requestRes = source.readInt(); 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 361