Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56b8ae1e authored by Chad Brubaker's avatar Chad Brubaker Committed by Android (Google) Code Review
Browse files

Merge "Log if permission usage requirements are not met"

parents eb3382ca 4b5ca631
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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.");
                    }
                }
            }
        }
    }
+6 −1
Original line number Diff line number Diff line
@@ -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);
}
+7 −0
Original line number Diff line number Diff line
@@ -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;
            }
        }
    }
}