Loading src/com/android/packageinstaller/permission/model/AppPermissionGroup.java +7 −2 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> private final boolean mAppSupportsRuntimePermissions; private final boolean mIsEphemeralApp; private boolean mContainsEphemeralPermission; private boolean mContainsPreRuntimePermission; public static AppPermissionGroup create(Context context, PackageInfo packageInfo, String permissionName) { Loading Loading @@ -216,7 +217,8 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> } public boolean isGrantingAllowed() { return !mIsEphemeralApp || mContainsEphemeralPermission; return (!mIsEphemeralApp || mContainsEphemeralPermission) && (mAppSupportsRuntimePermissions || mContainsPreRuntimePermission); } public boolean isReviewRequired() { Loading Loading @@ -337,7 +339,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> continue; } if (!permission.isGrantingAllowed(mIsEphemeralApp)) { if (!permission.isGrantingAllowed(mIsEphemeralApp, mAppSupportsRuntimePermissions)) { // Skip unallowed permissions. continue; } Loading Loading @@ -655,5 +657,8 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> if (permission.isEphemeral()) { mContainsEphemeralPermission = true; } if (!permission.isRuntimeOnly()) { mContainsPreRuntimePermission = true; } } } src/com/android/packageinstaller/permission/model/Permission.java +9 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ public final class Permission { private boolean mAppOpAllowed; private int mFlags; private boolean mIsEphemeral; private boolean mIsRuntimeOnly; public Permission(String name, boolean granted, String appOp, boolean appOpAllowed, int flags, int protectionLevel) { Loading @@ -36,6 +37,7 @@ public final class Permission { mAppOpAllowed = appOpAllowed; mFlags = flags; mIsEphemeral = (protectionLevel & PermissionInfo.PROTECTION_FLAG_EPHEMERAL) != 0; mIsRuntimeOnly = (protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0; } public String getName() { Loading Loading @@ -138,7 +140,12 @@ public final class Permission { return mIsEphemeral; } public boolean isGrantingAllowed(boolean isEphemeralApp) { return !isEphemeralApp || isEphemeral(); public boolean isRuntimeOnly() { return mIsRuntimeOnly; } public boolean isGrantingAllowed(boolean isEphemeralApp, boolean supportsRuntimePermissions) { return (!isEphemeralApp || isEphemeral()) && (supportsRuntimePermissions || !isRuntimeOnly()); } } src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +5 −0 Original line number Diff line number Diff line Loading @@ -385,6 +385,11 @@ public class GrantPermissionsActivity extends OverlayTouchActivity && callingPackageInfo.applicationInfo.isInstantApp()) { return PERMISSION_DENIED; } if ((pInfo.protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0 && callingPackageInfo.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M) { return PERMISSION_DENIED; } } catch (NameNotFoundException e) { return PERMISSION_DENIED; } Loading src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java +6 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceCategory; Loading Loading @@ -154,6 +155,11 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader { == 0) { continue; } if (appInfo.targetSdkVersion < Build.VERSION_CODES.M && (perm.protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0) { continue; } if ((perm.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) == PermissionInfo.PROTECTION_DANGEROUS) { Loading src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java +7 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.Settings; import android.support.v14.preference.SwitchPreference; Loading Loading @@ -159,6 +160,12 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader { && (perm.protectionLevel & PermissionInfo.PROTECTION_FLAG_EPHEMERAL) == 0) { continue; } if (appInfo.targetSdkVersion < Build.VERSION_CODES.M && (perm.protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0) { continue; } PermissionGroupInfo group = getGroup(perm.group, pm); if ((perm.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) Loading Loading
src/com/android/packageinstaller/permission/model/AppPermissionGroup.java +7 −2 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> private final boolean mAppSupportsRuntimePermissions; private final boolean mIsEphemeralApp; private boolean mContainsEphemeralPermission; private boolean mContainsPreRuntimePermission; public static AppPermissionGroup create(Context context, PackageInfo packageInfo, String permissionName) { Loading Loading @@ -216,7 +217,8 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> } public boolean isGrantingAllowed() { return !mIsEphemeralApp || mContainsEphemeralPermission; return (!mIsEphemeralApp || mContainsEphemeralPermission) && (mAppSupportsRuntimePermissions || mContainsPreRuntimePermission); } public boolean isReviewRequired() { Loading Loading @@ -337,7 +339,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> continue; } if (!permission.isGrantingAllowed(mIsEphemeralApp)) { if (!permission.isGrantingAllowed(mIsEphemeralApp, mAppSupportsRuntimePermissions)) { // Skip unallowed permissions. continue; } Loading Loading @@ -655,5 +657,8 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> if (permission.isEphemeral()) { mContainsEphemeralPermission = true; } if (!permission.isRuntimeOnly()) { mContainsPreRuntimePermission = true; } } }
src/com/android/packageinstaller/permission/model/Permission.java +9 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ public final class Permission { private boolean mAppOpAllowed; private int mFlags; private boolean mIsEphemeral; private boolean mIsRuntimeOnly; public Permission(String name, boolean granted, String appOp, boolean appOpAllowed, int flags, int protectionLevel) { Loading @@ -36,6 +37,7 @@ public final class Permission { mAppOpAllowed = appOpAllowed; mFlags = flags; mIsEphemeral = (protectionLevel & PermissionInfo.PROTECTION_FLAG_EPHEMERAL) != 0; mIsRuntimeOnly = (protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0; } public String getName() { Loading Loading @@ -138,7 +140,12 @@ public final class Permission { return mIsEphemeral; } public boolean isGrantingAllowed(boolean isEphemeralApp) { return !isEphemeralApp || isEphemeral(); public boolean isRuntimeOnly() { return mIsRuntimeOnly; } public boolean isGrantingAllowed(boolean isEphemeralApp, boolean supportsRuntimePermissions) { return (!isEphemeralApp || isEphemeral()) && (supportsRuntimePermissions || !isRuntimeOnly()); } }
src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +5 −0 Original line number Diff line number Diff line Loading @@ -385,6 +385,11 @@ public class GrantPermissionsActivity extends OverlayTouchActivity && callingPackageInfo.applicationInfo.isInstantApp()) { return PERMISSION_DENIED; } if ((pInfo.protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0 && callingPackageInfo.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M) { return PERMISSION_DENIED; } } catch (NameNotFoundException e) { return PERMISSION_DENIED; } Loading
src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java +6 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceCategory; Loading Loading @@ -154,6 +155,11 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader { == 0) { continue; } if (appInfo.targetSdkVersion < Build.VERSION_CODES.M && (perm.protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0) { continue; } if ((perm.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) == PermissionInfo.PROTECTION_DANGEROUS) { Loading
src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java +7 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.Settings; import android.support.v14.preference.SwitchPreference; Loading Loading @@ -159,6 +160,12 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader { && (perm.protectionLevel & PermissionInfo.PROTECTION_FLAG_EPHEMERAL) == 0) { continue; } if (appInfo.targetSdkVersion < Build.VERSION_CODES.M && (perm.protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0) { continue; } PermissionGroupInfo group = getGroup(perm.group, pm); if ((perm.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) Loading