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

Commit 96b96b30 authored by Winson's avatar Winson
Browse files

Split ParsedUsesPermissionImpl

Bug: 178218967

Change-Id: Idc4c4285332454357b6c4fccfd8009f3c1d71683
parent b401b82d
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -52,6 +52,7 @@ import android.content.pm.parsing.component.ParsedProviderImpl;
import android.content.pm.parsing.component.ParsedService;
import android.content.pm.parsing.component.ParsedService;
import android.content.pm.parsing.component.ParsedServiceImpl;
import android.content.pm.parsing.component.ParsedServiceImpl;
import android.content.pm.parsing.component.ParsedUsesPermission;
import android.content.pm.parsing.component.ParsedUsesPermission;
import android.content.pm.parsing.component.ParsedUsesPermissionImpl;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.os.Build;
import android.os.Build;
import android.os.Bundle;
import android.os.Bundle;
@@ -725,7 +726,7 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden,


    @Override
    @Override
    public ParsingPackageImpl addImplicitPermission(String permission) {
    public ParsingPackageImpl addImplicitPermission(String permission) {
        addUsesPermission(new ParsedUsesPermission(permission, 0 /*usesPermissionFlags*/));
        addUsesPermission(new ParsedUsesPermissionImpl(permission, 0 /*usesPermissionFlags*/));
        this.implicitPermissions = CollectionUtils.add(this.implicitPermissions,
        this.implicitPermissions = CollectionUtils.add(this.implicitPermissions,
                TextUtils.safeIntern(permission));
                TextUtils.safeIntern(permission));
        return this;
        return this;
@@ -1284,7 +1285,8 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden,
        this.originalPackages = in.createStringArrayList();
        this.originalPackages = in.createStringArrayList();
        this.adoptPermissions = sForInternedStringList.unparcel(in);
        this.adoptPermissions = sForInternedStringList.unparcel(in);
        this.requestedPermissions = sForInternedStringList.unparcel(in);
        this.requestedPermissions = sForInternedStringList.unparcel(in);
        this.usesPermissions = in.createTypedArrayList(ParsedUsesPermission.CREATOR);
        this.usesPermissions = ParsingUtils.createTypedInterfaceList(in,
                ParsedUsesPermissionImpl.CREATOR);
        this.implicitPermissions = sForInternedStringList.unparcel(in);
        this.implicitPermissions = sForInternedStringList.unparcel(in);
        this.upgradeKeySets = sForStringSet.unparcel(in);
        this.upgradeKeySets = sForStringSet.unparcel(in);
        this.keySetMapping = ParsingPackageUtils.readKeySetMapping(in);
        this.keySetMapping = ParsingPackageUtils.readKeySetMapping(in);
+3 −2
Original line number Original line Diff line number Diff line
@@ -72,6 +72,7 @@ import android.content.pm.parsing.component.ParsedProviderUtils;
import android.content.pm.parsing.component.ParsedService;
import android.content.pm.parsing.component.ParsedService;
import android.content.pm.parsing.component.ParsedServiceUtils;
import android.content.pm.parsing.component.ParsedServiceUtils;
import android.content.pm.parsing.component.ParsedUsesPermission;
import android.content.pm.parsing.component.ParsedUsesPermission;
import android.content.pm.parsing.component.ParsedUsesPermissionImpl;
import android.content.pm.parsing.result.ParseInput;
import android.content.pm.parsing.result.ParseInput;
import android.content.pm.parsing.result.ParseInput.DeferredError;
import android.content.pm.parsing.result.ParseInput.DeferredError;
import android.content.pm.parsing.result.ParseResult;
import android.content.pm.parsing.result.ParseResult;
@@ -1339,7 +1340,7 @@ public class ParsingPackageUtils {
            }
            }


            if (!found) {
            if (!found) {
                pkg.addUsesPermission(new ParsedUsesPermission(name, usesPermissionFlags));
                pkg.addUsesPermission(new ParsedUsesPermissionImpl(name, usesPermissionFlags));
            }
            }
            return success;
            return success;
        } finally {
        } finally {
@@ -2878,7 +2879,7 @@ public class ParsingPackageUtils {
    private static void convertCompatPermissions(ParsingPackage pkg) {
    private static void convertCompatPermissions(ParsingPackage pkg) {
        for (int i = 0, size = CompatibilityPermissionInfo.COMPAT_PERMS.length; i < size; i++) {
        for (int i = 0, size = CompatibilityPermissionInfo.COMPAT_PERMS.length; i < size; i++) {
            final CompatibilityPermissionInfo info = CompatibilityPermissionInfo.COMPAT_PERMS[i];
            final CompatibilityPermissionInfo info = CompatibilityPermissionInfo.COMPAT_PERMS[i];
            if (pkg.getTargetSdkVersion() >= info.sdkVersion) {
            if (pkg.getTargetSdkVersion() >= info.getSdkVersion()) {
                break;
                break;
            }
            }
            if (!pkg.getRequestedPermissions().contains(info.getName())) {
            if (!pkg.getRequestedPermissions().contains(info.getName())) {
+7 −144
Original line number Original line Diff line number Diff line
@@ -16,17 +16,11 @@


package android.content.pm.parsing.component;
package android.content.pm.parsing.component;


import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString;

import android.annotation.IntDef;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInfo;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;


import com.android.internal.util.DataClass;
import com.android.internal.util.Parcelling;

import java.lang.annotation.Retention;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.RetentionPolicy;


@@ -36,24 +30,14 @@ import java.lang.annotation.RetentionPolicy;
 *
 *
 * @hide
 * @hide
 */
 */
@DataClass(genGetters = true, genSetters = true, genBuilder = false, genParcelable = true,
public interface ParsedUsesPermission extends Parcelable {
        genAidl = false)
public class ParsedUsesPermission implements Parcelable {

    @DataClass.ParcelWith(Parcelling.BuiltIn.ForInternedString.class)
    @NonNull
    private String name;

    @UsesPermissionFlags
    private int usesPermissionFlags;


    /**
    /**
     * Strong assertion by a developer that they will never use this permission to derive the
     * Strong assertion by a developer that they will never use this permission to derive the
     * physical location of the device, regardless of ACCESS_FINE_LOCATION and/or
     * physical location of the device, regardless of ACCESS_FINE_LOCATION and/or
     * ACCESS_COARSE_LOCATION being granted.
     * ACCESS_COARSE_LOCATION being granted.
     */
     */
    public static final int FLAG_NEVER_FOR_LOCATION =
    int FLAG_NEVER_FOR_LOCATION = PackageInfo.REQUESTED_PERMISSION_NEVER_FOR_LOCATION;
            PackageInfo.REQUESTED_PERMISSION_NEVER_FOR_LOCATION;


    /**
    /**
     * @hide
     * @hide
@@ -62,132 +46,11 @@ public class ParsedUsesPermission implements Parcelable {
    @IntDef(flag = true, prefix = { "FLAG_" }, value = {
    @IntDef(flag = true, prefix = { "FLAG_" }, value = {
            FLAG_NEVER_FOR_LOCATION
            FLAG_NEVER_FOR_LOCATION
    })
    })
    public @interface UsesPermissionFlags {}
    @interface UsesPermissionFlags {}



    // Code below generated by codegen v1.0.23.
    //
    // DO NOT MODIFY!
    // CHECKSTYLE:OFF Generated code
    //
    // To regenerate run:
    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/content/pm/parsing/component/ParsedUsesPermission.java
    //
    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
    //   Settings > Editor > Code Style > Formatter Control
    //@formatter:off


    @DataClass.Generated.Member
    public ParsedUsesPermission(
            @NonNull String name,
            @UsesPermissionFlags int usesPermissionFlags) {
        this.name = name;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, name);
        this.usesPermissionFlags = usesPermissionFlags;
        com.android.internal.util.AnnotationValidations.validate(
                UsesPermissionFlags.class, null, usesPermissionFlags);

        // onConstructed(); // You can define this method to get a callback
    }

    @DataClass.Generated.Member
    public @NonNull String getName() {
        return name;
    }

    @DataClass.Generated.Member
    public @UsesPermissionFlags int getUsesPermissionFlags() {
        return usesPermissionFlags;
    }

    @DataClass.Generated.Member
    public @NonNull ParsedUsesPermission setName(@NonNull String value) {
        name = value;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, name);
        return this;
    }

    @DataClass.Generated.Member
    public @NonNull ParsedUsesPermission setUsesPermissionFlags(@UsesPermissionFlags int value) {
        usesPermissionFlags = value;
        com.android.internal.util.AnnotationValidations.validate(
                UsesPermissionFlags.class, null, usesPermissionFlags);
        return this;
    }


    @DataClass.Generated.Member
    @NonNull
    static Parcelling<String> sParcellingForName =
    String getName();
            Parcelling.Cache.get(
                    Parcelling.BuiltIn.ForInternedString.class);
    static {
        if (sParcellingForName == null) {
            sParcellingForName = Parcelling.Cache.put(
                    new Parcelling.BuiltIn.ForInternedString());
        }
    }

    @Override
    @DataClass.Generated.Member
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        // You can override field parcelling by defining methods like:
        // void parcelFieldName(Parcel dest, int flags) { ... }

        sParcellingForName.parcel(name, dest, flags);
        dest.writeInt(usesPermissionFlags);
    }

    @Override
    @DataClass.Generated.Member
    public int describeContents() { return 0; }

    /** @hide */
    @SuppressWarnings({"unchecked", "RedundantCast"})
    @DataClass.Generated.Member
    protected ParsedUsesPermission(@NonNull Parcel in) {
        // You can override field unparcelling by defining methods like:
        // static FieldType unparcelFieldName(Parcel in) { ... }

        String _name = sParcellingForName.unparcel(in);
        int _usesPermissionFlags = in.readInt();

        this.name = _name;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, name);
        this.usesPermissionFlags = _usesPermissionFlags;
        com.android.internal.util.AnnotationValidations.validate(
                UsesPermissionFlags.class, null, usesPermissionFlags);

        // onConstructed(); // You can define this method to get a callback
    }

    @DataClass.Generated.Member
    public static final @NonNull Parcelable.Creator<ParsedUsesPermission> CREATOR
            = new Parcelable.Creator<ParsedUsesPermission>() {
        @Override
        public ParsedUsesPermission[] newArray(int size) {
            return new ParsedUsesPermission[size];
        }

        @Override
        public ParsedUsesPermission createFromParcel(@NonNull Parcel in) {
            return new ParsedUsesPermission(in);
        }
    };

    @DataClass.Generated(
            time = 1626207990753L,
            codegenVersion = "1.0.23",
            sourceFile = "frameworks/base/core/java/android/content/pm/parsing/component/ParsedUsesPermission.java",
            inputSignatures = "private @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) @android.annotation.NonNull java.lang.String name\nprivate @android.content.pm.parsing.component.ParsedUsesPermission.UsesPermissionFlags int usesPermissionFlags\npublic static final  int FLAG_NEVER_FOR_LOCATION\nclass ParsedUsesPermission extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genGetters=true, genSetters=true, genBuilder=false, genParcelable=true, genAidl=false)")
    @Deprecated
    private void __metadata() {}


    //@formatter:on
    // End of generated code


    @UsesPermissionFlags
    int getUsesPermissionFlags();
}
}
+171 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.content.pm.parsing.component;

import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.DataClass;
import com.android.internal.util.Parcelling;

/**
 * A {@link android.R.styleable#AndroidManifestUsesPermission
 * &lt;uses-permission&gt;} tag parsed from the manifest.
 *
 * @hide
 */
@DataClass(genGetters = true, genSetters = true, genBuilder = false, genParcelable = true,
        genAidl = false)
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
public class ParsedUsesPermissionImpl implements ParsedUsesPermission {

    @DataClass.ParcelWith(Parcelling.BuiltIn.ForInternedString.class)
    @NonNull
    private String name;

    @ParsedUsesPermission.UsesPermissionFlags
    private int usesPermissionFlags;



    // Code below generated by codegen v1.0.23.
    //
    // DO NOT MODIFY!
    // CHECKSTYLE:OFF Generated code
    //
    // To regenerate run:
    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/content/pm/parsing/component/ParsedUsesPermissionImpl.java
    //
    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
    //   Settings > Editor > Code Style > Formatter Control
    //@formatter:off


    @DataClass.Generated.Member
    public ParsedUsesPermissionImpl(
            @NonNull String name,
            @ParsedUsesPermission.UsesPermissionFlags int usesPermissionFlags) {
        this.name = name;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, name);
        this.usesPermissionFlags = usesPermissionFlags;
        com.android.internal.util.AnnotationValidations.validate(
                ParsedUsesPermission.UsesPermissionFlags.class, null, usesPermissionFlags);

        // onConstructed(); // You can define this method to get a callback
    }

    @DataClass.Generated.Member
    public @NonNull String getName() {
        return name;
    }

    @DataClass.Generated.Member
    public @ParsedUsesPermission.UsesPermissionFlags int getUsesPermissionFlags() {
        return usesPermissionFlags;
    }

    @DataClass.Generated.Member
    public @NonNull ParsedUsesPermissionImpl setName(@NonNull String value) {
        name = value;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, name);
        return this;
    }

    @DataClass.Generated.Member
    public @NonNull ParsedUsesPermissionImpl setUsesPermissionFlags(@ParsedUsesPermission.UsesPermissionFlags int value) {
        usesPermissionFlags = value;
        com.android.internal.util.AnnotationValidations.validate(
                ParsedUsesPermission.UsesPermissionFlags.class, null, usesPermissionFlags);
        return this;
    }

    @DataClass.Generated.Member
    static Parcelling<String> sParcellingForName =
            Parcelling.Cache.get(
                    Parcelling.BuiltIn.ForInternedString.class);
    static {
        if (sParcellingForName == null) {
            sParcellingForName = Parcelling.Cache.put(
                    new Parcelling.BuiltIn.ForInternedString());
        }
    }

    @Override
    @DataClass.Generated.Member
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        // You can override field parcelling by defining methods like:
        // void parcelFieldName(Parcel dest, int flags) { ... }

        sParcellingForName.parcel(name, dest, flags);
        dest.writeInt(usesPermissionFlags);
    }

    @Override
    @DataClass.Generated.Member
    public int describeContents() { return 0; }

    /** @hide */
    @SuppressWarnings({"unchecked", "RedundantCast"})
    @DataClass.Generated.Member
    protected ParsedUsesPermissionImpl(@NonNull Parcel in) {
        // You can override field unparcelling by defining methods like:
        // static FieldType unparcelFieldName(Parcel in) { ... }

        String _name = sParcellingForName.unparcel(in);
        int _usesPermissionFlags = in.readInt();

        this.name = _name;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, name);
        this.usesPermissionFlags = _usesPermissionFlags;
        com.android.internal.util.AnnotationValidations.validate(
                ParsedUsesPermission.UsesPermissionFlags.class, null, usesPermissionFlags);

        // onConstructed(); // You can define this method to get a callback
    }

    @DataClass.Generated.Member
    public static final @NonNull Parcelable.Creator<ParsedUsesPermissionImpl> CREATOR
            = new Parcelable.Creator<ParsedUsesPermissionImpl>() {
        @Override
        public ParsedUsesPermissionImpl[] newArray(int size) {
            return new ParsedUsesPermissionImpl[size];
        }

        @Override
        public ParsedUsesPermissionImpl createFromParcel(@NonNull Parcel in) {
            return new ParsedUsesPermissionImpl(in);
        }
    };

    @DataClass.Generated(
            time = 1627674645598L,
            codegenVersion = "1.0.23",
            sourceFile = "frameworks/base/core/java/android/content/pm/parsing/component/ParsedUsesPermissionImpl.java",
            inputSignatures = "private @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) @android.annotation.NonNull java.lang.String name\nprivate @android.content.pm.parsing.component.ParsedUsesPermission.UsesPermissionFlags int usesPermissionFlags\nclass ParsedUsesPermissionImpl extends java.lang.Object implements [android.content.pm.parsing.component.ParsedUsesPermission]\n@com.android.internal.util.DataClass(genGetters=true, genSetters=true, genBuilder=false, genParcelable=true, genAidl=false)")
    @Deprecated
    private void __metadata() {}


    //@formatter:on
    // End of generated code

}
+59 −9
Original line number Original line Diff line number Diff line
@@ -17,8 +17,11 @@
package android.content.pm.permission;
package android.content.pm.permission;


import android.Manifest;
import android.Manifest;
import android.annotation.NonNull;
import android.content.pm.parsing.component.ParsedUsesPermission;
import android.content.pm.parsing.component.ParsedUsesPermission;


import com.android.internal.util.DataClass;

/**
/**
 * Implements compatibility support for permissions, and old applications
 * Implements compatibility support for permissions, and old applications
 * will be automatically granted it.
 * will be automatically granted it.
@@ -32,9 +35,12 @@ import android.content.pm.parsing.component.ParsedUsesPermission;
 *
 *
 * @hide
 * @hide
 */
 */
public class CompatibilityPermissionInfo extends ParsedUsesPermission {
@DataClass(genGetters = true, genBuilder = false)
public class CompatibilityPermissionInfo {


    public final int sdkVersion;
    @NonNull
    private final String mName;
    private final int mSdkVersion;


    /**
    /**
     * List of new permissions that have been added since 1.0.
     * List of new permissions that have been added since 1.0.
@@ -47,16 +53,60 @@ public class CompatibilityPermissionInfo extends ParsedUsesPermission {
    public static final CompatibilityPermissionInfo[] COMPAT_PERMS =
    public static final CompatibilityPermissionInfo[] COMPAT_PERMS =
            new CompatibilityPermissionInfo[]{
            new CompatibilityPermissionInfo[]{
                    new CompatibilityPermissionInfo(Manifest.permission.POST_NOTIFICATIONS,
                    new CompatibilityPermissionInfo(Manifest.permission.POST_NOTIFICATIONS,
                            android.os.Build.VERSION_CODES.TIRAMISU, 0 /*usesPermissionFlags*/),
                            android.os.Build.VERSION_CODES.TIRAMISU),
                    new CompatibilityPermissionInfo(Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    new CompatibilityPermissionInfo(Manifest.permission.WRITE_EXTERNAL_STORAGE,
                            android.os.Build.VERSION_CODES.DONUT, 0 /*usesPermissionFlags*/),
                            android.os.Build.VERSION_CODES.DONUT),
                    new CompatibilityPermissionInfo(Manifest.permission.READ_PHONE_STATE,
                    new CompatibilityPermissionInfo(Manifest.permission.READ_PHONE_STATE,
                            android.os.Build.VERSION_CODES.DONUT, 0 /*usesPermissionFlags*/)
                            android.os.Build.VERSION_CODES.DONUT)
            };
            };


    private CompatibilityPermissionInfo(String name, int sdkVersion,

            @UsesPermissionFlags int usesPermissionFlags) {

        super(name, usesPermissionFlags);
    // Code below generated by codegen v1.0.23.
        this.sdkVersion = sdkVersion;
    //
    // DO NOT MODIFY!
    // CHECKSTYLE:OFF Generated code
    //
    // To regenerate run:
    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/content/pm/permission/CompatibilityPermissionInfo.java
    //
    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
    //   Settings > Editor > Code Style > Formatter Control
    //@formatter:off


    @DataClass.Generated.Member
    public CompatibilityPermissionInfo(
            @NonNull String name,
            int sdkVersion) {
        this.mName = name;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mName);
        this.mSdkVersion = sdkVersion;

        // onConstructed(); // You can define this method to get a callback
    }

    @DataClass.Generated.Member
    public @NonNull String getName() {
        return mName;
    }

    @DataClass.Generated.Member
    public int getSdkVersion() {
        return mSdkVersion;
    }
    }

    @DataClass.Generated(
            time = 1627674427184L,
            codegenVersion = "1.0.23",
            sourceFile = "frameworks/base/core/java/android/content/pm/permission/CompatibilityPermissionInfo.java",
            inputSignatures = "private final @android.annotation.NonNull java.lang.String mName\nprivate final  int mSdkVersion\npublic static final  android.content.pm.permission.CompatibilityPermissionInfo[] COMPAT_PERMS\nclass CompatibilityPermissionInfo extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genGetters=true, genBuilder=false)")
    @Deprecated
    private void __metadata() {}


    //@formatter:on
    // End of generated code

}
}
Loading