Loading services/core/java/com/android/server/pm/PackageManagerService.java +21 −0 Original line number Diff line number Diff line Loading @@ -197,6 +197,7 @@ import android.content.pm.SharedLibraryInfo; import android.content.pm.Signature; import android.content.pm.SuspendDialogInfo; import android.content.pm.UserInfo; import android.content.pm.UsesPermissionInfo; import android.content.pm.VerifierDeviceIdentity; import android.content.pm.VerifierInfo; import android.content.pm.VersionedPackage; Loading Loading @@ -11242,6 +11243,26 @@ public class PackageManagerService extends IPackageManager.Stub } } } // Check permission usage info requirements. if (pkg.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.Q) { for (UsesPermissionInfo upi : pkg.usesPermissionInfos) { if (!mPermissionManager.isPermissionUsageInfoRequired(upi.getPermission())) { continue; } if (upi.getDataSentOffDevice() == UsesPermissionInfo.USAGE_UNDEFINED || upi.getDataSharedWithThirdParty() == UsesPermissionInfo.USAGE_UNDEFINED || upi.getDataUsedForMonetization() == UsesPermissionInfo.USAGE_UNDEFINED || upi.getDataRetention() == UsesPermissionInfo.RETENTION_UNDEFINED) { // STOPSHIP: Make this throw Slog.wtf(TAG, "Package " + pkg.packageName + " does not provide usage " + "information for permission " + upi.getPermission() + ". This will be a fatal error in Q."); } } } } } services/core/java/com/android/server/pm/permission/PermissionManagerInternal.java +6 −1 Original line number Diff line number Diff line Loading @@ -181,4 +181,9 @@ public abstract class PermissionManagerInternal { /** HACK HACK methods to allow for partial migration of data to the PermissionManager class */ public abstract @Nullable BasePermission getPermissionTEMP(@NonNull String permName); /** * Returns {@code true} if {@code permName} has {@code usageInfoRequired} set. */ public abstract boolean isPermissionUsageInfoRequired(@NonNull String permName); } services/core/java/com/android/server/pm/permission/PermissionManagerService.java +7 −0 Original line number Diff line number Diff line Loading @@ -2644,5 +2644,12 @@ public class PermissionManagerService { return mSettings.getPermissionLocked(permName); } } @Override public boolean isPermissionUsageInfoRequired(String permName) { synchronized (PermissionManagerService.this.mLock) { BasePermission bp = mSettings.getPermissionLocked(permName); return bp != null && bp.usageInfoRequired; } } } } Loading
services/core/java/com/android/server/pm/PackageManagerService.java +21 −0 Original line number Diff line number Diff line Loading @@ -197,6 +197,7 @@ import android.content.pm.SharedLibraryInfo; import android.content.pm.Signature; import android.content.pm.SuspendDialogInfo; import android.content.pm.UserInfo; import android.content.pm.UsesPermissionInfo; import android.content.pm.VerifierDeviceIdentity; import android.content.pm.VerifierInfo; import android.content.pm.VersionedPackage; Loading Loading @@ -11242,6 +11243,26 @@ public class PackageManagerService extends IPackageManager.Stub } } } // Check permission usage info requirements. if (pkg.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.Q) { for (UsesPermissionInfo upi : pkg.usesPermissionInfos) { if (!mPermissionManager.isPermissionUsageInfoRequired(upi.getPermission())) { continue; } if (upi.getDataSentOffDevice() == UsesPermissionInfo.USAGE_UNDEFINED || upi.getDataSharedWithThirdParty() == UsesPermissionInfo.USAGE_UNDEFINED || upi.getDataUsedForMonetization() == UsesPermissionInfo.USAGE_UNDEFINED || upi.getDataRetention() == UsesPermissionInfo.RETENTION_UNDEFINED) { // STOPSHIP: Make this throw Slog.wtf(TAG, "Package " + pkg.packageName + " does not provide usage " + "information for permission " + upi.getPermission() + ". This will be a fatal error in Q."); } } } } }
services/core/java/com/android/server/pm/permission/PermissionManagerInternal.java +6 −1 Original line number Diff line number Diff line Loading @@ -181,4 +181,9 @@ public abstract class PermissionManagerInternal { /** HACK HACK methods to allow for partial migration of data to the PermissionManager class */ public abstract @Nullable BasePermission getPermissionTEMP(@NonNull String permName); /** * Returns {@code true} if {@code permName} has {@code usageInfoRequired} set. */ public abstract boolean isPermissionUsageInfoRequired(@NonNull String permName); }
services/core/java/com/android/server/pm/permission/PermissionManagerService.java +7 −0 Original line number Diff line number Diff line Loading @@ -2644,5 +2644,12 @@ public class PermissionManagerService { return mSettings.getPermissionLocked(permName); } } @Override public boolean isPermissionUsageInfoRequired(String permName) { synchronized (PermissionManagerService.this.mLock) { BasePermission bp = mSettings.getPermissionLocked(permName); return bp != null && bp.usageInfoRequired; } } } }