1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.lang.reflect.Member; 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission; 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Enforcer extends SecurityManager { 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final Enforcer THE_ONE = new Enforcer(); 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** whether to deny the next request */ 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private boolean deny; 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Not publicly constructable. Use {@link #THE_ONE}. 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Enforcer() { 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project deny = false; 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Deny the next request. 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void denyNext() { 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project deny = true; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception if the instance had been asked to deny a request. 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void denyIfAppropriate() { 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (deny) { 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project deny = false; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new SecurityException("Denied!"); 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void checkPackageAccess(String pkg) { 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("checkPackageAccess: " + pkg); 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project denyIfAppropriate(); 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.checkPackageAccess(pkg); 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void checkMemberAccess(Class c, int which) { 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String member; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project switch (which) { 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Member.DECLARED: member = "DECLARED"; break; 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Member.PUBLIC: member = "PUBLIC"; break; 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project default: member = "<" + which + ">?"; break; 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("checkMemberAccess: " + c.getName() + ", " + 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project member); 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project denyIfAppropriate(); 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.checkMemberAccess(c, which); 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void checkPermission(Permission perm) { 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("checkPermission: " + perm); 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project denyIfAppropriate(); 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.checkPermission(perm); 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void checkPermission(Permission perm, Object context) { 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("checkPermission: " + perm + ", " + context); 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project denyIfAppropriate(); 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.checkPermission(perm, context); 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 67