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

Commit e15206df authored by Yan Zhu's avatar Yan Zhu Committed by Android (Google) Code Review
Browse files

Merge "Add new message to package.proto for granted permissions for users"

parents 5ac2d1cb 86be7fd5
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -129,6 +129,16 @@ message PackageProto {
        optional bool is_loading = 2;
    }

    // TODO (b/170263003) refactor to permissiongr
    // Runtime permission state that are granted for users.
    message UserPermissionsProto {
        option (android.msg_privacy).dest = DEST_AUTOMATIC;
        // User id.
        optional int32 id = 1;
        // Pre-granted Android permissions.
        repeated string granted_permissions = 2;
    }

    // Name of package. e.g. "com.android.providers.telephony".
    optional string name = 1;
    // UID for this package as assigned by Android OS.
@@ -152,4 +162,6 @@ message PackageProto {
    optional InstallSourceProto install_source = 10;
    // Whether the package is startable or is still loading
    optional StatesProto states = 11;
    // Granted runtime permissions for users.
    repeated UserPermissionsProto user_permissions = 12;
}
+28 −1
Original line number Diff line number Diff line
@@ -28,11 +28,13 @@ import android.util.proto.ProtoOutputStream;

import com.android.internal.annotations.VisibleForTesting;
import com.android.server.pm.parsing.pkg.AndroidPackage;
import com.android.server.pm.permission.LegacyPermissionDataProvider;
import com.android.server.pm.permission.LegacyPermissionState;
import com.android.server.pm.pkg.PackageStateUnserialized;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -300,7 +302,8 @@ public class PackageSetting extends PackageSettingBase {
        return mimeGroups != null ? mimeGroups.get(mimeGroup) : null;
    }

    public void dumpDebug(ProtoOutputStream proto, long fieldId, List<UserInfo> users) {
    public void dumpDebug(ProtoOutputStream proto, long fieldId, List<UserInfo> users,
            LegacyPermissionDataProvider dataProvider) {
        final long packageToken = proto.start(fieldId);
        proto.write(PackageProto.NAME, (realName != null ? realName : name));
        proto.write(PackageProto.UID, appId);
@@ -337,9 +340,33 @@ public class PackageSetting extends PackageSettingBase {
        proto.write(PackageProto.StatesProto.IS_STARTABLE, incrementalStates.isStartable());
        proto.write(PackageProto.StatesProto.IS_LOADING, incrementalStates.isLoading());
        writeUsersInfoToProto(proto, PackageProto.USERS);
        writePackageUserPermissionsProto(proto, PackageProto.USER_PERMISSIONS, users, dataProvider);
        proto.end(packageToken);
    }

    /**
     * TODO (b/170263003) refactor to dump to permissiongr proto
     * Dumps the permissions that are granted to users for this package.
     */
    void writePackageUserPermissionsProto(ProtoOutputStream proto, long fieldId,
            List<UserInfo> users, LegacyPermissionDataProvider dataProvider) {
        Collection<LegacyPermissionState.PermissionState> runtimePermissionStates;
        for (UserInfo user : users) {
            final long permissionsToken = proto.start(PackageProto.USER_PERMISSIONS);
            proto.write(PackageProto.UserPermissionsProto.ID, user.id);

            runtimePermissionStates = dataProvider.getLegacyPermissionState(appId)
                    .getRuntimePermissionStates(user.id);
            for (LegacyPermissionState.PermissionState permission : runtimePermissionStates) {
                if (permission.isGranted()) {
                    proto.write(PackageProto.UserPermissionsProto.GRANTED_PERMISSIONS,
                            permission.getName());
                }
            }
            proto.end(permissionsToken);
        }
    }

    /** Updates all fields in the current setting from another. */
    public void updateFrom(PackageSetting other) {
        super.updateFrom(other);
+1 −1
Original line number Diff line number Diff line
@@ -5018,7 +5018,7 @@ public final class Settings {
        final int count = mPackages.size();
        for (int i = 0; i < count; i++) {
            final PackageSetting ps = mPackages.valueAt(i);
            ps.dumpDebug(proto, PackageServiceDumpProto.PACKAGES, users);
            ps.dumpDebug(proto, PackageServiceDumpProto.PACKAGES, users, mPermissionDataProvider);
        }
    }