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

Commit 8ea1f832 authored by Victor Gabriel Savu's avatar Victor Gabriel Savu
Browse files

Move @PolicyDefinition inside the type specific one

Since @PolicyDefinition is a base for all type specific policy
definition, unconditionally include it into them. Updated all processing
to take this into account.

Bug: 442557445
Test: atest frameworks/base/tools/processors/devicepolicy/test/src/android/processor/devicepolicy/test/PolicyProcessorTest.kt
Flag: android.app.admin.flags.policy_streamlining
Change-Id: Ie026a371dc07778a2646ae15a3661d8dd806f8a4
parent db15a931
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -92,8 +92,9 @@ public final class PolicyIdentifier<T> {
     */
    @FlaggedApi(FLAG_POLICY_STREAMLINING)
    @NonNull
    @PolicyDefinition
    @BooleanPolicyDefinition
    @BooleanPolicyDefinition(
            base = @PolicyDefinition
    )
    public static final PolicyIdentifier<Boolean> SCREEN_CAPTURE_DISABLED = new PolicyIdentifier<>(
            SCREEN_CAPTURE_DISABLED_KEY);
}
+4 −0
Original line number Diff line number Diff line
@@ -27,4 +27,8 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.FIELD})
public @interface BooleanPolicyDefinition {
    /**
     * Base data for all policies.
     */
    PolicyDefinition base();
}
+5 −0
Original line number Diff line number Diff line
@@ -20,6 +20,11 @@ package android.processor.devicepolicy;
 * Metadata for a enum policy. Represented by an Integer.
 */
public @interface EnumPolicyDefinition {
    /**
     * Base data for all policies.
     */
    PolicyDefinition base();

    /**
     * Indicates which IntDef represents this enum.
     */
+2 −6
Original line number Diff line number Diff line
@@ -16,24 +16,20 @@

package android.processor.devicepolicy;

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

/**
 * Define a policy.
 * <p>
 * Can only be applied to fields inside {@link android.app.admin.PolicyIdentifier}.
 * Can only be applied to fields inside {@link android.app.admin.PolicyIdentifier} by nesting it in
 * a type specific annotation such as {@link EnumPolicyDefinition}.
 * The field must be static final and have a type of {@link android.app.admin.PolicyIdentifier}.
 * In addition to this annotation, a type specific one must be present such as
 * {@link BooleanPolicyDefinition}.
 * </p>
 *
 *  The name of the policy is taken from the field name.
 *  The type is the parameter passed to {@link android.app.admin.PolicyIdentifier}.
 */
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.FIELD})
public @interface PolicyDefinition {
}
+9 −4
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ import javax.lang.model.type.TypeMirror
 * Since this annotation holds no data and we don't export any type-specific information, this only
 * contains type-specific checks.
 */
class BooleanProcessor(processingEnv: ProcessingEnvironment) : Processor(processingEnv) {
class BooleanProcessor(processingEnv: ProcessingEnvironment) : Processor<BooleanPolicyDefinition>(processingEnv) {
    private companion object {
        const val SIMPLE_TYPE_BOOLEAN = "java.lang.Boolean"
    }
@@ -41,8 +41,9 @@ class BooleanProcessor(processingEnv: ProcessingEnvironment) : Processor(process
     *
     * @return null if the element does not have a @BooleanPolicyDefinition or on error, {@link BooleanPolicyMetadata} otherwise.
     */
    fun process(element: Element): BooleanPolicyMetadata? {
        element.getAnnotation(BooleanPolicyDefinition::class.java) ?: return null
    override fun processMetadata(element: Element): Pair<PolicyMetadata, PolicyDefinition>? {
        val booleanDefinition = element.getAnnotation(BooleanPolicyDefinition::class.java)
            ?: throw IllegalStateException("Processor should only be called on elements with @BooleanPolicyMetadata")

        if (!processingEnv.typeUtils.isSameType(policyType(element), booleanType)) {
            printError(
@@ -51,7 +52,11 @@ class BooleanProcessor(processingEnv: ProcessingEnvironment) : Processor(process
            )
        }

        return BooleanPolicyMetadata()
        return Pair(BooleanPolicyMetadata(), booleanDefinition.base)
    }

    override fun annotationClass(): Class<BooleanPolicyDefinition> {
        return BooleanPolicyDefinition::class.java
    }
}

Loading