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 19700feef8a60e06784d28d1db9502e650df854cadMakoto Onukiimport android.annotation.IntDef; 202a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganovimport android.annotation.SystemApi; 212f24f039c38e3f83fe9f7d8a68ae096e6df6ccaaJiyong Parkimport android.annotation.TestApi; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26700feef8a60e06784d28d1db9502e650df854cadMakoto Onukiimport java.lang.annotation.Retention; 27700feef8a60e06784d28d1db9502e650df854cadMakoto Onukiimport java.lang.annotation.RetentionPolicy; 28700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about a particular security permission 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * known to the system. This corresponds to information collected from the 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * AndroidManifest.xml's <permission> tags. 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PermissionInfo extends PackageItemInfo implements Parcelable { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A normal application value for {@link #protectionLevel}, corresponding 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the <code>normal</code> value of 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#protectionLevel}. 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROTECTION_NORMAL = 0; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dangerous value for {@link #protectionLevel}, corresponding 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the <code>dangerous</code> value of 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#protectionLevel}. 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROTECTION_DANGEROUS = 1; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * System-level value for {@link #protectionLevel}, corresponding 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the <code>signature</code> value of 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#protectionLevel}. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROTECTION_SIGNATURE = 2; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 57a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * @deprecated Use {@link #PROTECTION_SIGNATURE}|{@link #PROTECTION_FLAG_PRIVILEGED} 58a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * instead. 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 60a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn @Deprecated 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROTECTION_SIGNATURE_OR_SYSTEM = 3; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 63700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki /** @hide */ 64700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki @IntDef(flag = false, prefix = { "PROTECTION_" }, value = { 65700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_NORMAL, 66700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_DANGEROUS, 67700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_SIGNATURE, 68700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_SIGNATURE_OR_SYSTEM, 69700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki }) 70700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki @Retention(RetentionPolicy.SOURCE) 71700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki public @interface Protection {} 72700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 74e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 75a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * to the <code>privileged</code> value of 76e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * {@link android.R.attr#protectionLevel}. 77e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 78a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn public static final int PROTECTION_FLAG_PRIVILEGED = 0x10; 79a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn 80a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn /** 81a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * @deprecated Old name for {@link #PROTECTION_FLAG_PRIVILEGED}, which 82a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * is now very confusing because it only applies to privileged apps, not all 83a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * apps on the system image. 84a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn */ 85a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn @Deprecated 86e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static final int PROTECTION_FLAG_SYSTEM = 0x10; 87e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 88e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 89e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 90e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * to the <code>development</code> value of 91e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * {@link android.R.attr#protectionLevel}. 92e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 93e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static final int PROTECTION_FLAG_DEVELOPMENT = 0x20; 94e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 95e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 9633f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 97e9b78fdbbef558f5e84f88397daf990dcc2e29cbJeff Sharkey * to the <code>appop</code> value of 9833f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn * {@link android.R.attr#protectionLevel}. 9933f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn */ 10033f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn public static final int PROTECTION_FLAG_APPOP = 0x40; 10133f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn 10233f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn /** 103de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 104de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn * to the <code>pre23</code> value of 105de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn * {@link android.R.attr#protectionLevel}. 106de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn */ 107de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn public static final int PROTECTION_FLAG_PRE23 = 0x80; 108de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn 109de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn /** 1103e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * Additional flag for {@link #protectionLevel}, corresponding 1113e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * to the <code>installer</code> value of 1123e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * {@link android.R.attr#protectionLevel}. 1133e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav */ 1143e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav public static final int PROTECTION_FLAG_INSTALLER = 0x100; 1153e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav 1163e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav /** 1173e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * Additional flag for {@link #protectionLevel}, corresponding 1183e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * to the <code>verifier</code> value of 1193e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav * {@link android.R.attr#protectionLevel}. 1203e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav */ 1213e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav public static final int PROTECTION_FLAG_VERIFIER = 0x200; 1223e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav 1233e7d977ff7c743713f0ad6336a039d7760ba47d1Svetoslav /** 124a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * Additional flag for {@link #protectionLevel}, corresponding 125a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * to the <code>preinstalled</code> value of 126a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn * {@link android.R.attr#protectionLevel}. 127a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn */ 128a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn public static final int PROTECTION_FLAG_PREINSTALLED = 0x400; 129a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn 130a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn /** 131b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner * Additional flag for {@link #protectionLevel}, corresponding 132b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner * to the <code>setup</code> value of 133b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner * {@link android.R.attr#protectionLevel}. 134b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner */ 135b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner public static final int PROTECTION_FLAG_SETUP = 0x800; 136b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner 137c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker /** 138c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker * Additional flag for {@link #protectionLevel}, corresponding 139c247fa136639dd07278b1954e5fba78ade60614cTodd Kennedy * to the <code>instant</code> value of 140c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker * {@link android.R.attr#protectionLevel}. 141c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker */ 142c247fa136639dd07278b1954e5fba78ade60614cTodd Kennedy public static final int PROTECTION_FLAG_INSTANT = 0x1000; 143c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker 144b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner /** 145a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker * Additional flag for {@link #protectionLevel}, corresponding 146a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker * to the <code>runtime</code> value of 147a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker * {@link android.R.attr#protectionLevel}. 148a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker */ 149a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker public static final int PROTECTION_FLAG_RUNTIME_ONLY = 0x2000; 150a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker 151a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker /** 152087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov * Additional flag for {@link #protectionLevel}, corresponding 153087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov * to the <code>oem</code> value of 154087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov * {@link android.R.attr#protectionLevel}. 155087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov * 156087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov * @hide 157087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov */ 158087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov @SystemApi 159087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov public static final int PROTECTION_FLAG_OEM = 0x4000; 160087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov 161087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov /** 162002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park * Additional flag for {${link #protectionLevel}, corresponding 163002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park * to the <code>vendorPrivileged</code> value of 164002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park * {@link android.R.attr#protectionLevel}. 165002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park * 166002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park * @hide 167002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park */ 1682f24f039c38e3f83fe9f7d8a68ae096e6df6ccaaJiyong Park @TestApi 169002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park public static final int PROTECTION_FLAG_VENDOR_PRIVILEGED = 0x8000; 170002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park 171002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park /** 172700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * Additional flag for {@link #protectionLevel}, corresponding 173700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * to the <code>text_classifier</code> value of 174700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * {@link android.R.attr#protectionLevel}. 175700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * 176700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * @hide 177700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki */ 178700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki @SystemApi 179700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki @TestApi 180700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki public static final int PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER = 0x10000; 181700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki 182700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki /** @hide */ 183700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki @IntDef(flag = true, prefix = { "PROTECTION_FLAG_" }, value = { 184700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_PRIVILEGED, 185700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_SYSTEM, 186700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_DEVELOPMENT, 187700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_APPOP, 188700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_PRE23, 189700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_INSTALLER, 190700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_VERIFIER, 191700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_PREINSTALLED, 192700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_SETUP, 193700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_INSTANT, 194700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_RUNTIME_ONLY, 195700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_OEM, 196700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_VENDOR_PRIVILEGED, 197700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER, 198700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki }) 199700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki @Retention(RetentionPolicy.SOURCE) 200700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki public @interface ProtectionFlags {} 201700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki 202700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki /** 203e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Mask for {@link #protectionLevel}: the basic protection type. 204700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * 205700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * @deprecated Use #getProtection() instead. 206e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 207700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki @Deprecated 208e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static final int PROTECTION_MASK_BASE = 0xf; 209e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 210e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 211e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn * Mask for {@link #protectionLevel}: additional flag bits. 212700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * 213700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * @deprecated Use #getProtectionFlags() instead. 214e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn */ 215700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki @Deprecated 216c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker public static final int PROTECTION_MASK_FLAGS = 0xfff0; 217e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 218e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** 2192ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * The level of access this permission is protecting, as per 22051fbad5a7664812554491a89b604c10c00f84367Peter Visontay * {@link android.R.attr#protectionLevel}. Consists of 221700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * a base permission type and zero or more flags. Use the following functions 222700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * to extract them. 22351fbad5a7664812554491a89b604c10c00f84367Peter Visontay * 22451fbad5a7664812554491a89b604c10c00f84367Peter Visontay * <pre> 225700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * int basePermissionType = permissionInfo.getProtection(); 226700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * int permissionFlags = permissionInfo.getProtectionFlags(); 22751fbad5a7664812554491a89b604c10c00f84367Peter Visontay * </pre> 22851fbad5a7664812554491a89b604c10c00f84367Peter Visontay * 22951fbad5a7664812554491a89b604c10c00f84367Peter Visontay * <p></p>Base permission types are {@link #PROTECTION_NORMAL}, 23051fbad5a7664812554491a89b604c10c00f84367Peter Visontay * {@link #PROTECTION_DANGEROUS}, {@link #PROTECTION_SIGNATURE} 23151fbad5a7664812554491a89b604c10c00f84367Peter Visontay * and the deprecated {@link #PROTECTION_SIGNATURE_OR_SYSTEM}. 23251fbad5a7664812554491a89b604c10c00f84367Peter Visontay * Flags are listed under {@link android.R.attr#protectionLevel}. 233700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * 234700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * @deprecated Use #getProtection() and #getProtectionFlags() instead. 2352ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn */ 236700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki @Deprecated 2372ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn public int protectionLevel; 2382ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 2392ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn /** 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The group this permission is a part of, as per 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#permissionGroup}. 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String group; 2442ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 2452ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn /** 2462ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * Flag for {@link #flags}, corresponding to <code>costsMoney</code> 2472ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * value of {@link android.R.attr#permissionFlags}. 2482ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn */ 2492ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn public static final int FLAG_COSTS_MONEY = 1<<0; 2502ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 2512ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn /** 2522a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganov * Flag for {@link #flags}, corresponding to <code>removed</code> 2533e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov * value of {@link android.R.attr#permissionFlags}. 2543e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov * @hide 2553e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov */ 2562a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganov @SystemApi 2572a1376d9dfb362a18ba110d8e172f96021f1d879Svet Ganov public static final int FLAG_REMOVED = 1<<1; 2583e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov 2593e0be7440bf40f5d81581077bc4f5f47e57b88b7Svet Ganov /** 260cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn * Flag for {@link #flags}, indicating that this permission has been 261cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn * installed into the system's globally defined permissions. 2626d2c0e5ee2f717d4a5c00df08aca21c76eea8278Svetoslav Ganov */ 263cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn public static final int FLAG_INSTALLED = 1<<30; 2646d2c0e5ee2f717d4a5c00df08aca21c76eea8278Svetoslav Ganov 2656d2c0e5ee2f717d4a5c00df08aca21c76eea8278Svetoslav Ganov /** 2662ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * Additional flags about this permission as given by 2672ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn * {@link android.R.attr#permissionFlags}. 2682ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn */ 2692ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn public int flags; 2702ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A string resource identifier (in the package's resources) of this 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * permission's description. From the "description" attribute or, 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if not set, 0. 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int descriptionRes; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 27927ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann * A string resource identifier (in the package's resources) used to request the permissions. 28027ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann * From the "request" attribute or, if not set, 0. 28127ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann * 28227ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann * @hide 28327ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann */ 28427ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann @SystemApi 28527ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann public int requestRes; 28627ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann 28727ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann /** 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The description string provided in the AndroidManifest file, if any. You 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * probably don't want to use this, since it will be null if the description 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is in a resource. You probably want 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PermissionInfo#loadDescription} instead. 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence nonLocalizedDescription; 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 295e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** @hide */ 296e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static int fixProtectionLevel(int level) { 297e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn if (level == PROTECTION_SIGNATURE_OR_SYSTEM) { 298a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn level = PROTECTION_SIGNATURE | PROTECTION_FLAG_PRIVILEGED; 299e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 300002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park if ((level & PROTECTION_FLAG_VENDOR_PRIVILEGED) != 0 301002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park && (level & PROTECTION_FLAG_PRIVILEGED) == 0) { 302002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park // 'vendorPrivileged' must be 'privileged'. If not, 303002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park // drop the vendorPrivileged. 304002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park level = level & ~PROTECTION_FLAG_VENDOR_PRIVILEGED; 305002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park } 306e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn return level; 307e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 308e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 309e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn /** @hide */ 310e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public static String protectionToString(int level) { 311e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn String protLevel = "????"; 312087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov switch (level & PROTECTION_MASK_BASE) { 313e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_DANGEROUS: 314e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "dangerous"; 315e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 316e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_NORMAL: 317e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "normal"; 318e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 319e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_SIGNATURE: 320e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "signature"; 321e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 322e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn case PermissionInfo.PROTECTION_SIGNATURE_OR_SYSTEM: 323e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel = "signatureOrSystem"; 324e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn break; 325e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 326087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_PRIVILEGED) != 0) { 327a90c8def2c6762bc6e5396b78c43e65e4b05079dDianne Hackborn protLevel += "|privileged"; 328e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 329087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) { 330e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn protLevel += "|development"; 331e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 332087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_APPOP) != 0) { 33333f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn protLevel += "|appop"; 33433f5ddd1bea21296938f2cba196f95d223aa247cDianne Hackborn } 335087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_PRE23) != 0) { 336de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn protLevel += "|pre23"; 337de15edaa9bf486a4050bb067317d313fd807bb10Dianne Hackborn } 338087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_INSTALLER) != 0) { 339cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn protLevel += "|installer"; 340cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn } 341087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_VERIFIER) != 0) { 342cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn protLevel += "|verifier"; 343cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn } 344087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_PREINSTALLED) != 0) { 345cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn protLevel += "|preinstalled"; 346cfbfafe1b9ca2fd135a4fb6b528b3829830803bfDianne Hackborn } 347087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_SETUP) != 0) { 348b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner protLevel += "|setup"; 349b23346639b66783c1662fd8ffa5345ef5cef336cRussell Brenner } 350087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_INSTANT) != 0) { 351c247fa136639dd07278b1954e5fba78ade60614cTodd Kennedy protLevel += "|instant"; 352c19706a937abc5d025a59b354b3a0d89e7d62805Chad Brubaker } 353087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0) { 354a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker protLevel += "|runtime"; 355a5d70a17ebd1b3ffe026879c5d9d96f04d10d4f2Chad Brubaker } 356087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov if ((level & PermissionInfo.PROTECTION_FLAG_OEM) != 0) { 357087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov protLevel += "|oem"; 358087dce20e3a7137e94607c060fd825d1f8952572Svet Ganov } 359002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park if ((level & PermissionInfo.PROTECTION_FLAG_VENDOR_PRIVILEGED) != 0) { 360002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park protLevel += "|vendorPrivileged"; 361002fdbdb950ebbf40331a27de33b80db33e40d30Jiyong Park } 362700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki if ((level & PermissionInfo.PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER) != 0) { 363700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki protLevel += "|textClassifier"; 364700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki } 365e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn return protLevel; 366e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 367e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo() { 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo(PermissionInfo orig) { 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(orig); 3732ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn protectionLevel = orig.protectionLevel; 3742ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn flags = orig.flags; 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project group = orig.group; 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project descriptionRes = orig.descriptionRes; 37727ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann requestRes = orig.requestRes; 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedDescription = orig.nonLocalizedDescription; 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the textual description of this permission. This 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will call back on the given PackageManager to load the description from 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application. 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm A PackageManager from which the label can be loaded; usually 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PackageManager from which you originally retrieved this item. 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a CharSequence containing the permission's description. 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If there is no description, null is returned. 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence loadDescription(PackageManager pm) { 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (nonLocalizedDescription != null) { 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return nonLocalizedDescription; 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (descriptionRes != 0) { 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence label = pm.getText(packageName, descriptionRes, null); 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (label != null) { 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return label; 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 405700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki /** 406700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * Return the base permission type. 407700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki */ 408700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki @Protection 409700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki public int getProtection() { 410700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki return protectionLevel & PROTECTION_MASK_BASE; 411700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki } 412700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki 413700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki /** 414700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki * Return the additional flags in {@link #protectionLevel}. 415700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki */ 416700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki @ProtectionFlags 417700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki public int getProtectionFlags() { 418700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki return protectionLevel & ~PROTECTION_MASK_BASE; 419700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki } 420700feef8a60e06784d28d1db9502e650df854cadMakoto Onuki 42191a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy @Override 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "PermissionInfo{" 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Integer.toHexString(System.identityHashCode(this)) 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " " + name + "}"; 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 42891a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy @Override 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43391a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy @Override 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int parcelableFlags) { 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.writeToParcel(dest, parcelableFlags); 4362ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn dest.writeInt(protectionLevel); 4372ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn dest.writeInt(flags); 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(group); 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(descriptionRes); 44027ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann dest.writeInt(requestRes); 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.writeToParcel(nonLocalizedDescription, dest, parcelableFlags); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44491a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy /** @hide */ 44591a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy public int calculateFootprint() { 44691a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy int size = name.length(); 44791a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy if (nonLocalizedLabel != null) { 44891a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy size += nonLocalizedLabel.length(); 44991a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy } 45091a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy if (nonLocalizedDescription != null) { 45191a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy size += nonLocalizedDescription.length(); 45291a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy } 45391a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy return size; 45491a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy } 45591a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy 456c842393bc55509b094d3a71f164fcdbadf5c7997Todd Kennedy /** @hide */ 457c842393bc55509b094d3a71f164fcdbadf5c7997Todd Kennedy public boolean isAppOp() { 458c842393bc55509b094d3a71f164fcdbadf5c7997Todd Kennedy return (protectionLevel & PermissionInfo.PROTECTION_FLAG_APPOP) != 0; 459c842393bc55509b094d3a71f164fcdbadf5c7997Todd Kennedy } 460c842393bc55509b094d3a71f164fcdbadf5c7997Todd Kennedy 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<PermissionInfo> CREATOR = 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<PermissionInfo>() { 46391a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy @Override 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo createFromParcel(Parcel source) { 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new PermissionInfo(source); 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 46791a39d126d1f6efa47948ca1039ca347c1bd19e6Todd Kennedy @Override 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PermissionInfo[] newArray(int size) { 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new PermissionInfo[size]; 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PermissionInfo(Parcel source) { 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(source); 4752ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn protectionLevel = source.readInt(); 4762ca2c8787130506d350d997c18bbc274faf88e37Dianne Hackborn flags = source.readInt(); 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project group = source.readString(); 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project descriptionRes = source.readInt(); 47927ffeb33fb60d4ee6a4c2dfd9391c8a6127dfc7cPhilip P. Moltmann requestRes = source.readInt(); 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nonLocalizedDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 483