From 84ec604578bca4755c559149c5e304a9a159f3c9 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Thu, 5 Apr 2012 19:33:30 -0700 Subject: [PATCH] Implement call log permission compatibility. If a pre-JellyBean application requests read/write contacts, it will implicitly be given read/write call log. Change-Id: I029db4b09fda737bb8fba4e1611355ebdbbfd34f --- Command.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Command.cpp b/Command.cpp index 198fce4..689aa8e 100644 --- a/Command.cpp +++ b/Command.cpp @@ -639,6 +639,12 @@ int doDump(Bundle* bundle) // If an app requests write storage, they will also get read storage. bool hasReadExternalStoragePermission = false; + // Implement transition to read and write call log. + bool hasReadContactsPermission = false; + bool hasWriteContactsPermission = false; + bool hasReadCallLogPermission = false; + bool hasWriteCallLogPermission = false; + // This next group of variables is used to implement a group of // backward-compatibility heuristics necessitated by the addition of // some new uses-feature constants in 2.1 and 2.2. In most cases, the @@ -1006,6 +1012,14 @@ int doDump(Bundle* bundle) hasReadExternalStoragePermission = true; } else if (name == "android.permission.READ_PHONE_STATE") { hasReadPhoneStatePermission = true; + } else if (name == "android.permission.READ_CONTACTS") { + hasReadContactsPermission = true; + } else if (name == "android.permission.WRITE_CONTACTS") { + hasWriteContactsPermission = true; + } else if (name == "android.permission.READ_CALL_LOG") { + hasReadCallLogPermission = true; + } else if (name == "android.permission.WRITE_CALL_LOG") { + hasWriteCallLogPermission = true; } printf("uses-permission:'%s'\n", name.string()); } else { @@ -1181,6 +1195,16 @@ int doDump(Bundle* bundle) printf("uses-permission:'android.permission.READ_EXTERNAL_STORAGE'\n"); } + // Pre-JellyBean call log permission compatibility. + if (targetSdk < 16) { + if (!hasReadCallLogPermission && hasReadContactsPermission) { + printf("uses-permission:'android.permission.READ_CALL_LOG'\n"); + } + if (!hasWriteCallLogPermission && hasWriteContactsPermission) { + printf("uses-permission:'android.permission.WRITE_CALL_LOG'\n"); + } + } + /* The following blocks handle printing "inferred" uses-features, based * on whether related features or permissions are used by the app. * Note that the various spec*Feature variables denote whether the -- 2.45.2