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

Commit 9de217a8 authored by Hai Zhang's avatar Hai Zhang
Browse files

Temporary fix for PermissionInfo.FLAG_INSTALLED returned in PackageInfo.

The old BasePermission implementation shared the same instance of
ParsedPermission with ParsedPackage, and mutated this input by
conditionally adding FLAG_INSTALLED. This is certainly not the
greatest design but we need to keep it working for now, before we
figure out a better solution.

Fixes: 171052955
Test: manual
Change-Id: Ia2c00a3b4467820e5cb1ce0c3d4ef81566926989
parent f4ecc16f
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -198,6 +198,11 @@ public final class BasePermission {
                == PermissionInfo.PROTECTION_DANGEROUS;
    }

    public boolean isInstalled() {
        return mPermissionInfo != null
                && (mPermissionInfo.flags & PermissionInfo.FLAG_INSTALLED) != 0;
    }

    public boolean isRemoved() {
        return mPermissionInfo != null
                && (mPermissionInfo.flags & PermissionInfo.FLAG_REMOVED) != 0;
+6 −2
Original line number Diff line number Diff line
@@ -2352,19 +2352,23 @@ public class PermissionManagerService extends IPermissionManager.Stub {

                final PermissionInfo permissionInfo = PackageInfoUtils.generatePermissionInfo(p,
                        PackageManager.GET_META_DATA);
                final BasePermission bp;
                if (p.isTree()) {
                    final BasePermission bp = BasePermission.createOrUpdate(
                    bp = BasePermission.createOrUpdate(
                            mPackageManagerInt,
                            mSettings.getPermissionTreeLocked(p.getName()), permissionInfo, pkg,
                            mSettings.getAllPermissionTreesLocked(), chatty);
                    mSettings.putPermissionTreeLocked(p.getName(), bp);
                } else {
                    final BasePermission bp = BasePermission.createOrUpdate(
                    bp = BasePermission.createOrUpdate(
                            mPackageManagerInt,
                            mSettings.getPermissionLocked(p.getName()),
                            permissionInfo, pkg, mSettings.getAllPermissionTreesLocked(), chatty);
                    mSettings.putPermissionLocked(p.getName(), bp);
                }
                if (bp.isInstalled()) {
                    p.setFlags(p.getFlags() | PermissionInfo.FLAG_INSTALLED);
                }
            }
        }
    }