Work on issue #21589105: Scope WRITE_SETTINGS and SYSTEM_ALERT_WINDOW...
...to an explicit toggle to enable in Settings Add a new permission flag, saying the permission can be automatically granted to pre-api-23 apps. Apply this to SYSTEM_ALERT_WINDOW. Change-Id: I24a0ceabe7e9f5e458a864d30eda2696ad14a699
This commit is contained in:
@@ -9469,6 +9469,7 @@ package android.content.pm {
|
||||
field public static final int PROTECTION_DANGEROUS = 1; // 0x1
|
||||
field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40
|
||||
field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20
|
||||
field public static final int PROTECTION_FLAG_PRE23 = 128; // 0x80
|
||||
field public static final int PROTECTION_FLAG_SYSTEM = 16; // 0x10
|
||||
field public static final int PROTECTION_MASK_BASE = 15; // 0xf
|
||||
field public static final int PROTECTION_MASK_FLAGS = 240; // 0xf0
|
||||
|
||||
@@ -9809,6 +9809,7 @@ package android.content.pm {
|
||||
field public static final int PROTECTION_DANGEROUS = 1; // 0x1
|
||||
field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40
|
||||
field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20
|
||||
field public static final int PROTECTION_FLAG_PRE23 = 128; // 0x80
|
||||
field public static final int PROTECTION_FLAG_SYSTEM = 16; // 0x10
|
||||
field public static final int PROTECTION_MASK_BASE = 15; // 0xf
|
||||
field public static final int PROTECTION_MASK_FLAGS = 240; // 0xf0
|
||||
|
||||
@@ -75,6 +75,13 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
|
||||
*/
|
||||
public static final int PROTECTION_FLAG_APPOP = 0x40;
|
||||
|
||||
/**
|
||||
* Additional flag for {@link #protectionLevel}, corresponding
|
||||
* to the <code>pre23</code> value of
|
||||
* {@link android.R.attr#protectionLevel}.
|
||||
*/
|
||||
public static final int PROTECTION_FLAG_PRE23 = 0x80;
|
||||
|
||||
/**
|
||||
* Mask for {@link #protectionLevel}: the basic protection type.
|
||||
*/
|
||||
@@ -171,6 +178,9 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
|
||||
if ((level&PermissionInfo.PROTECTION_FLAG_APPOP) != 0) {
|
||||
protLevel += "|appop";
|
||||
}
|
||||
if ((level&PermissionInfo.PROTECTION_FLAG_PRE23) != 0) {
|
||||
protLevel += "|pre23";
|
||||
}
|
||||
return protLevel;
|
||||
}
|
||||
|
||||
|
||||
@@ -553,7 +553,8 @@ public class AppSecurityPermissions {
|
||||
int existingReqFlags) {
|
||||
final int base = pInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
|
||||
final boolean isNormal = (base == PermissionInfo.PROTECTION_NORMAL);
|
||||
final boolean isDangerous = (base == PermissionInfo.PROTECTION_DANGEROUS);
|
||||
final boolean isDangerous = (base == PermissionInfo.PROTECTION_DANGEROUS)
|
||||
|| ((pInfo.protectionLevel&PermissionInfo.PROTECTION_FLAG_PRE23) != 0);
|
||||
final boolean isRequired =
|
||||
((newReqFlags&PackageInfo.REQUESTED_PERMISSION_REQUIRED) != 0);
|
||||
final boolean isDevelopment =
|
||||
|
||||
@@ -1414,7 +1414,7 @@
|
||||
<permission android:name="android.permission.SYSTEM_ALERT_WINDOW"
|
||||
android:label="@string/permlab_systemAlertWindow"
|
||||
android:description="@string/permdesc_systemAlertWindow"
|
||||
android:protectionLevel="signature|system|appop" />
|
||||
android:protectionLevel="signature|system|appop|pre23" />
|
||||
|
||||
<!-- ================================== -->
|
||||
<!-- Permissions affecting the system wallpaper -->
|
||||
|
||||
@@ -215,6 +215,11 @@
|
||||
<!-- Additional flag from base permission type: this permission is closely
|
||||
associated with an app op for controlling access. -->
|
||||
<flag name="appop" value="0x40" />
|
||||
<!-- Additional flag from base permission type: this permission can be automatically
|
||||
granted to apps that target API levels below
|
||||
{@link android.os.Build.VERSION_CODES#MNC} (before runtime permissions
|
||||
were introduced). -->
|
||||
<flag name="pre23" value="0x80" />
|
||||
</attr>
|
||||
|
||||
<!-- Flags indicating more context for a permission group. -->
|
||||
|
||||
@@ -8354,6 +8354,14 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!allowed && (bp.protectionLevel
|
||||
& PermissionInfo.PROTECTION_FLAG_PRE23) != 0
|
||||
&& pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.MNC) {
|
||||
// If this was a previously normal/dangerous permission that got moved
|
||||
// to a system permission as part of the runtime permission redesign, then
|
||||
// we still want to blindly grant it to old apps.
|
||||
allowed = true;
|
||||
}
|
||||
if (!allowed && (bp.protectionLevel
|
||||
& PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) {
|
||||
// For development permissions, a development permission
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
|
||||
<uses-permission android:name="android.permission.MANAGE_USERS" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-sdk android:targetSdkVersion="22" />
|
||||
<application android:label="ActivityTest">
|
||||
<activity android:name="ActivityTestMain">
|
||||
<intent-filter>
|
||||
|
||||
Reference in New Issue
Block a user